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):
|
||||
value = self.container.queryLast(parent=self.uid, name=key)
|
||||
if value is None:
|
||||
raise KeyError
|
||||
raise KeyError(key)
|
||||
return value
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
value.head['parent'] = self.uid
|
||||
value.head['name']= key
|
||||
value.set('parent', self.uid)
|
||||
value.set('name', key)
|
||||
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
|
||||
class Folders(Container):
|
||||
|
||||
|
|
|
@ -36,6 +36,15 @@ class Track(object):
|
|||
self.trackId = trackId
|
||||
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):
|
||||
if data is None:
|
||||
return
|
||||
|
|
|
@ -72,18 +72,16 @@ class Test(unittest.TestCase):
|
|||
|
||||
def testFolder(self):
|
||||
storage.dropTable('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']
|
||||
root = folder.Root(storage)
|
||||
self.assertEqual(list(root.keys()), [])
|
||||
root['top'] = folder.Folder()
|
||||
self.assertEqual(list(root.keys()), ['top'])
|
||||
top = root['top']
|
||||
top['child1'] = folder.Folder(data=dict(title='First Child'))
|
||||
self.assertEqual(list(top.keys()), ['child1'])
|
||||
ch1 = top['child1']
|
||||
self.assertEqual(ch1.parent, top.uid)
|
||||
assert list(top.keys()) == ['child1']
|
||||
|
||||
def suite():
|
||||
return unittest.TestSuite((
|
||||
|
|
Loading…
Add table
Reference in a new issue