| 
					
				 | 
			
			
				@@ -23,16 +23,24 @@ class Store(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ACTIVE = 'Active' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     BAND_LIMIT = 1 * 1024 * 1024 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def __init__(self, path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def __init__(self, path, create=False): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.read_fd = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.write_fd = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if not os.path.exists(path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if create: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.create(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.open(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def get_option(self, key): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self.cursor.execute('SELECT value FROM system WHERE key=?', (key,)) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .fetchone()[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def set_option(self, key, value): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self.cursor.execute('UPDATE system SET value=? WHERE key=?', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   (value, key)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def open(self, path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not os.path.isdir(path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            raise Exception('%s Does not look like a store') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise Exception('%s Does not look like a store' % path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         db_path = os.path.join(path, 'dedupestore.db') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not os.path.exists(db_path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             raise Exception('%s Does not look like a store2') 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -44,15 +52,6 @@ class Store(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.cursor = self.cnx.cursor() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._begin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def get_option(self, key): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return self.cursor.execute('SELECT value FROM system WHERE key=?', (key,)) \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            .fetchone()[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def set_option(self, key, value): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return self.cursor.execute('UPDATE system SET value=? WHERE key=?', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                   (value, key)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def _begin(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if self.read_fd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.read_fd.close() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,7 +75,10 @@ class Store(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             band += 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def create(self, path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        os.mkdir(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if os.path.exists(path) and (not os.path.isdir(path) or os.listdir(path)): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise Exception('Path "%s" already exists' % path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not os.path.exists(path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            os.mkdir(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         os.mkdir(os.path.join(path, 'bands')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         cnx = sqlite3.connect(os.path.join(path, 'dedupestore.db')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         cnx.execute('CREATE TABLE objects(ns BINARY NOT NULL, id BINARY NOT NULL, ' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -212,7 +214,7 @@ class StoreTestCase(unittest.TestCase): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def setUp(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self.tmppath = tempfile.mkdtemp() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self.store = Store(os.path.join(self.tmppath, 'store')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.store = Store(os.path.join(self.tmppath, 'store'), create=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def tearDown(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         shutil.rmtree(self.tmppath) 
			 |