basic folder implementation with tests

This commit is contained in:
Helmut Merz 2024-02-27 17:40:59 +01:00
parent 1280f8b15a
commit 77f5abc7bf
5 changed files with 39 additions and 8 deletions

View file

@ -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')

View file

@ -19,7 +19,7 @@ dependencies = [
]
[project.optional-dependencies]
demo = ["python-dotenv", "zope.publisher"]
app = ["python-dotenv", "zope.publisher", "zope.traversing"]
test = ["pytest"]
[tool.setuptools]

View file

@ -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):

View file

@ -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

View file

@ -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((