provide a virtual / dummy folder root object for top-down folder creation and access
This commit is contained in:
		
							parent
							
								
									77f5abc7bf
								
							
						
					
					
						commit
						2382abf129
					
				
					 3 changed files with 33 additions and 15 deletions
				
			
		|  | @ -22,15 +22,26 @@ class Folder(Track): | ||||||
|     def __getitem__(self, key): |     def __getitem__(self, key): | ||||||
|         value = self.container.queryLast(parent=self.uid, name=key) |         value = self.container.queryLast(parent=self.uid, name=key) | ||||||
|         if value is None: |         if value is None: | ||||||
|             raise KeyError |             raise KeyError(key) | ||||||
|         return value |         return value | ||||||
| 
 | 
 | ||||||
|     def __setitem__(self, key, value): |     def __setitem__(self, key, value): | ||||||
|         value.head['parent'] = self.uid |         value.set('parent', self.uid) | ||||||
|         value.head['name']= key |         value.set('name', key) | ||||||
|         self.container.save(value) |         self.container.save(value) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class Root(Folder): | ||||||
|  |     """A dummy (virtual) root folder for creating real folders | ||||||
|  |        using the Folder API.""" | ||||||
|  | 
 | ||||||
|  |     def __init__(self, storage): | ||||||
|  |         cont = storage.create(Folders) | ||||||
|  |         super(Root, self).__init__(container=cont) | ||||||
|  | 
 | ||||||
|  |     uid = '' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @registerContainerClass | @registerContainerClass | ||||||
| class Folders(Container): | class Folders(Container): | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -36,6 +36,15 @@ class Track(object): | ||||||
|         self.trackId = trackId |         self.trackId = trackId | ||||||
|         self.container = container |         self.container = container | ||||||
| 
 | 
 | ||||||
|  |     def set(self, attr, value): | ||||||
|  |         if attr in self.headFields: | ||||||
|  |             if value is None: | ||||||
|  |                 value = '' | ||||||
|  |             self.head[attr] = value | ||||||
|  |             setattr(self, attr, value) | ||||||
|  |         else: | ||||||
|  |             raise AttributeError(attr) | ||||||
|  | 
 | ||||||
|     def update(self, data, overwrite=False): |     def update(self, data, overwrite=False): | ||||||
|         if data is None: |         if data is None: | ||||||
|             return |             return | ||||||
|  |  | ||||||
|  | @ -72,18 +72,16 @@ class Test(unittest.TestCase): | ||||||
| 
 | 
 | ||||||
|     def testFolder(self): |     def testFolder(self): | ||||||
|         storage.dropTable('folders') |         storage.dropTable('folders') | ||||||
|         cont = storage.create(folder.Folders) |         root = folder.Root(storage) | ||||||
|         self.assertEqual(list(cont.query(parent='')), []) |         self.assertEqual(list(root.keys()), []) | ||||||
|         cont.save(folder.Folder('', 'root')) |         root['top'] = folder.Folder() | ||||||
|         folders = list(cont.query(parent='')) |         self.assertEqual(list(root.keys()), ['top']) | ||||||
|         self.assertEqual(len(folders), 1) |         top = root['top'] | ||||||
|         root = folders[0] |         top['child1'] = folder.Folder(data=dict(title='First Child')) | ||||||
|         root['child1'] = folder.Folder(data=dict(title='First Child')) |         self.assertEqual(list(top.keys()), ['child1']) | ||||||
|         folders = list(cont.query(parent=root.uid)) |         ch1 = top['child1'] | ||||||
|         self.assertEqual(len(folders), 1) |         self.assertEqual(ch1.parent, top.uid) | ||||||
|         ch1 = root['child1'] |         assert list(top.keys()) == ['child1'] | ||||||
|         self.assertEqual(ch1.parent, root.uid) |  | ||||||
|         assert list(root.keys()) == ['child1'] |  | ||||||
| 
 | 
 | ||||||
| def suite(): | def suite(): | ||||||
|     return unittest.TestSuite(( |     return unittest.TestSuite(( | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue