basic folder implementation with tests
This commit is contained in:
		
							parent
							
								
									1280f8b15a
								
							
						
					
					
						commit
						77f5abc7bf
					
				
					 5 changed files with 39 additions and 8 deletions
				
			
		|  | @ -6,6 +6,13 @@ from scopes.server.app import demo_app, zope_app | ||||||
| 
 | 
 | ||||||
| load_dotenv() | load_dotenv() | ||||||
| 
 | 
 | ||||||
| server_port = getenv('SERVER_PORT', '8999') | server_port = getenv('SERVER_PORT', '8099') | ||||||
| 
 | 
 | ||||||
| app = zope_app | app = zope_app | ||||||
|  | 
 | ||||||
|  | # storage settings | ||||||
|  | dbengine = 'postgresql+psycopg' | ||||||
|  | dbname = getenv('DBNAME', 'demo') | ||||||
|  | dbuser = getenv('DBUSER', 'demo') | ||||||
|  | dbpassword = getenv('DBPASSWORD', 'secret') | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ dependencies = [ | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [project.optional-dependencies] | [project.optional-dependencies] | ||||||
| demo = ["python-dotenv", "zope.publisher"] | app = ["python-dotenv", "zope.publisher", "zope.traversing"] | ||||||
| test = ["pytest"] | test = ["pytest"] | ||||||
| 
 | 
 | ||||||
| [tool.setuptools] | [tool.setuptools] | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| from zope.publisher.base import DefaultPublication | from zope.publisher.base import DefaultPublication | ||||||
| from zope.publisher.browser import BrowserRequest | from zope.publisher.browser import BrowserRequest | ||||||
| from zope.publisher.publish import publish | from zope.publisher.publish import publish | ||||||
|  | from zope.traversing.publicationtraverse import PublicationTraverser | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def demo_app(environ, start_response): | def demo_app(environ, start_response): | ||||||
|  |  | ||||||
|  | @ -6,23 +6,35 @@ from scopes.storage.tracking import Container, Track | ||||||
| 
 | 
 | ||||||
| class Folder(Track): | class Folder(Track): | ||||||
| 
 | 
 | ||||||
|     headFields = ['parent', 'name'] |     headFields = ['parent', 'name', 'ref'] | ||||||
|     prefix = 'fldr' |     prefix = 'fldr' | ||||||
| 
 | 
 | ||||||
|     def keys(self): |     def keys(self): | ||||||
|         return [] |         for f in self.container.query(parent=self.uid): | ||||||
|  |             yield f.name | ||||||
| 
 | 
 | ||||||
|     def get(self, key, default=None): |     def get(self, key, default=None): | ||||||
|  |         value = self.container.queryLast(parent=self.uid, name=key) | ||||||
|  |         if value is None: | ||||||
|             return default |             return default | ||||||
|  |         return value | ||||||
| 
 | 
 | ||||||
|     def __getitem__(self, key): |     def __getitem__(self, key): | ||||||
|  |         value = self.container.queryLast(parent=self.uid, name=key) | ||||||
|  |         if value is None: | ||||||
|             raise KeyError |             raise KeyError | ||||||
|  |         return value | ||||||
|  | 
 | ||||||
|  |     def __setitem__(self, key, value): | ||||||
|  |         value.head['parent'] = self.uid | ||||||
|  |         value.head['name']= key | ||||||
|  |         self.container.save(value) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @registerContainerClass | @registerContainerClass | ||||||
| class Folders(Container): | class Folders(Container): | ||||||
| 
 | 
 | ||||||
|     itemFactory = Folder |     itemFactory = Folder | ||||||
|     indexes = [('parent', 'name')] |     indexes = [('parent', 'name'), ('ref',)] | ||||||
|     tableName = 'folders' |     tableName = 'folders' | ||||||
|     insertOnChange = False |     insertOnChange = False | ||||||
|  |  | ||||||
|  | @ -72,7 +72,18 @@ class Test(unittest.TestCase): | ||||||
| 
 | 
 | ||||||
|     def testFolder(self): |     def testFolder(self): | ||||||
|         storage.dropTable('folders') |         storage.dropTable('folders') | ||||||
|         folders = storage.create(folder.Folders) |         cont = storage.create(folder.Folders) | ||||||
|  |         self.assertEqual(list(cont.query(parent='')), []) | ||||||
|  |         cont.save(folder.Folder('', 'root')) | ||||||
|  |         folders = list(cont.query(parent='')) | ||||||
|  |         self.assertEqual(len(folders), 1) | ||||||
|  |         root = folders[0] | ||||||
|  |         root['child1'] = folder.Folder(data=dict(title='First Child')) | ||||||
|  |         folders = list(cont.query(parent=root.uid)) | ||||||
|  |         self.assertEqual(len(folders), 1) | ||||||
|  |         ch1 = root['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