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()
|
||||
|
||||
server_port = getenv('SERVER_PORT', '8999')
|
||||
server_port = getenv('SERVER_PORT', '8099')
|
||||
|
||||
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]
|
||||
demo = ["python-dotenv", "zope.publisher"]
|
||||
app = ["python-dotenv", "zope.publisher", "zope.traversing"]
|
||||
test = ["pytest"]
|
||||
|
||||
[tool.setuptools]
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
from zope.publisher.base import DefaultPublication
|
||||
from zope.publisher.browser import BrowserRequest
|
||||
from zope.publisher.publish import publish
|
||||
from zope.traversing.publicationtraverse import PublicationTraverser
|
||||
|
||||
|
||||
def demo_app(environ, start_response):
|
||||
|
|
|
@ -6,23 +6,35 @@ from scopes.storage.tracking import Container, Track
|
|||
|
||||
class Folder(Track):
|
||||
|
||||
headFields = ['parent', 'name']
|
||||
headFields = ['parent', 'name', 'ref']
|
||||
prefix = 'fldr'
|
||||
|
||||
def keys(self):
|
||||
return []
|
||||
for f in self.container.query(parent=self.uid):
|
||||
yield f.name
|
||||
|
||||
def get(self, key, default=None):
|
||||
return default
|
||||
value = self.container.queryLast(parent=self.uid, name=key)
|
||||
if value is None:
|
||||
return default
|
||||
return value
|
||||
|
||||
def __getitem__(self, key):
|
||||
raise KeyError
|
||||
value = self.container.queryLast(parent=self.uid, name=key)
|
||||
if value is None:
|
||||
raise KeyError
|
||||
return value
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
value.head['parent'] = self.uid
|
||||
value.head['name']= key
|
||||
self.container.save(value)
|
||||
|
||||
|
||||
@registerContainerClass
|
||||
class Folders(Container):
|
||||
|
||||
itemFactory = Folder
|
||||
indexes = [('parent', 'name')]
|
||||
indexes = [('parent', 'name'), ('ref',)]
|
||||
tableName = 'folders'
|
||||
insertOnChange = False
|
||||
|
|
|
@ -72,7 +72,18 @@ class Test(unittest.TestCase):
|
|||
|
||||
def testFolder(self):
|
||||
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():
|
||||
return unittest.TestSuite((
|
||||
|
|
Loading…
Add table
Reference in a new issue