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