diff --git a/scopes/interfaces.py b/scopes/interfaces.py index 0fca68d..50f23f7 100644 --- a/scopes/interfaces.py +++ b/scopes/interfaces.py @@ -11,11 +11,8 @@ class ITraversable(Interface): class IContainer(ITraversable): - def items(): - """Return a sequence of key, value pairs of child objects.""" - - def keys(): - """Return a sequence of keys of child objects.""" + def values(): + """Return a sequence of child objects.""" def __getitem__(key): """Return the item addressed by `key`; rais KeyError if not found.""" diff --git a/scopes/server/browser.py b/scopes/server/browser.py index 8f81074..19b517d 100644 --- a/scopes/server/browser.py +++ b/scopes/server/browser.py @@ -39,6 +39,6 @@ class DefaultView: ob = self.context result = dict(head=ob.head, data=ob.data) if IContainer.providedBy(ob): - result['items'] = list(ob.keys()) + result['items'] = [v.asDict() for v in ob.values()] return json.dumps(result) diff --git a/scopes/storage/folder.py b/scopes/storage/folder.py index 049d21d..c0a8c25 100644 --- a/scopes/storage/folder.py +++ b/scopes/storage/folder.py @@ -14,11 +14,14 @@ class Folder(Track): headFields = ['parent', 'name', 'ref'] prefix = 'fldr' + def values(self): + return self.container.query(parent=self.rid) + 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): - return (k for k, v in self.items()) + return (v.name for v in self.values()) def get(self, key, default=None): value = self.container.queryLast(parent=self.rid, name=key) @@ -38,7 +41,8 @@ class Folder(Track): self.container.save(value) 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): diff --git a/scopes/storage/tracking.py b/scopes/storage/tracking.py index aa907c6..35c4213 100644 --- a/scopes/storage/tracking.py +++ b/scopes/storage/tracking.py @@ -62,6 +62,13 @@ class Track(object): return '' 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 class Container(object): diff --git a/tests/tlib_server.py b/tests/tlib_server.py index 6506518..949d482 100644 --- a/tests/tlib_server.py +++ b/tests/tlib_server.py @@ -22,5 +22,5 @@ def test_app(self, config): storage = config.storageFactory(config.dbschema) response = publishRequest(config, storage, '/top') result = json.loads(response.consumeBody()) - self.assertEqual(result['items'], ['child1']) + self.assertEqual(result['items'][0]['head']['name'], 'child1')