provide __repr__() and asDict() for tracks, and other improvements

This commit is contained in:
Helmut Merz 2024-03-13 19:05:46 +01:00
parent 7b98616008
commit 0b765ad16b
5 changed files with 18 additions and 10 deletions

View file

@ -11,11 +11,8 @@ class ITraversable(Interface):
class IContainer(ITraversable): class IContainer(ITraversable):
def items(): def values():
"""Return a sequence of key, value pairs of child objects.""" """Return a sequence of child objects."""
def keys():
"""Return a sequence of keys of child objects."""
def __getitem__(key): def __getitem__(key):
"""Return the item addressed by `key`; rais KeyError if not found.""" """Return the item addressed by `key`; rais KeyError if not found."""

View file

@ -39,6 +39,6 @@ class DefaultView:
ob = self.context ob = self.context
result = dict(head=ob.head, data=ob.data) result = dict(head=ob.head, data=ob.data)
if IContainer.providedBy(ob): if IContainer.providedBy(ob):
result['items'] = list(ob.keys()) result['items'] = [v.asDict() for v in ob.values()]
return json.dumps(result) return json.dumps(result)

View file

@ -14,11 +14,14 @@ class Folder(Track):
headFields = ['parent', 'name', 'ref'] headFields = ['parent', 'name', 'ref']
prefix = 'fldr' prefix = 'fldr'
def values(self):
return self.container.query(parent=self.rid)
def items(self): def items(self):
return ((f.name, f) for f in self.container.query(parent=self.rid)) return ((v.name, v) for v in self.values())
def keys(self): def keys(self):
return (k for k, v in self.items()) return (v.name for v in self.values())
def get(self, key, default=None): def get(self, key, default=None):
value = self.container.queryLast(parent=self.rid, name=key) value = self.container.queryLast(parent=self.rid, name=key)
@ -38,7 +41,8 @@ class Folder(Track):
self.container.save(value) self.container.save(value)
def __str__(self): def __str__(self):
return 'folder: %s; keys: %s' % (self.name, list(self.keys())) return '%s: %s; keys: %s' % (self.__class__.__name__,
self.name, list(self.keys()))
class Root(Folder): class Root(Folder):

View file

@ -62,6 +62,13 @@ class Track(object):
return '' return ''
return str(self.trackId) return str(self.trackId)
def __repr__(self):
return '%s: %s' % (self.__class__.__name__, self.asDict())
def asDict(self):
return dict(uid=self.uid, head=self.head, data=self.data,
timeStamp = str(self.timeStamp)[:19])
@registerContainerClass @registerContainerClass
class Container(object): class Container(object):

View file

@ -22,5 +22,5 @@ def test_app(self, config):
storage = config.storageFactory(config.dbschema) storage = config.storageFactory(config.dbschema)
response = publishRequest(config, storage, '/top') response = publishRequest(config, storage, '/top')
result = json.loads(response.consumeBody()) result = json.loads(response.consumeBody())
self.assertEqual(result['items'], ['child1']) self.assertEqual(result['items'][0]['head']['name'], 'child1')