diff --git a/scopes/organize/__init__.py b/scopes/organize/__init__.py new file mode 100644 index 0000000..829e828 --- /dev/null +++ b/scopes/organize/__init__.py @@ -0,0 +1 @@ +"""package scopes.organize""" diff --git a/scopes/storage/common.py b/scopes/storage/common.py index 89f6673..6d04ec1 100644 --- a/scopes/storage/common.py +++ b/scopes/storage/common.py @@ -71,8 +71,10 @@ class Storage(object): registry = {} def registerContainerClass(cls): - # TODO: error on duplicate key - registry[cls.itemFactory.prefix] = cls + prefix = cls.itemFactory.prefix + if prefix in registry: + raise ValueError("prefix '%s' already registered!" % prefix) + registry[prefix] = cls cls.headCols = cols = tuple(f.lower() for f in cls.itemFactory.headFields) if cls.indexes is None: cls.indexes = [cols[i:] for i in range(len(cols))] diff --git a/scopes/storage/concept.py b/scopes/storage/concept.py new file mode 100644 index 0000000..967f3a4 --- /dev/null +++ b/scopes/storage/concept.py @@ -0,0 +1,12 @@ +# scopes.storage.concept + +"""Abstract base classes for concept map application classes.""" + +from scopes.storage.common import registerContainerClass +from scopes.storage.tracking import Container, Track + + +class Concept(Track): + + headFields = ['parent', 'name'] + diff --git a/scopes/storage/folder.py b/scopes/storage/folder.py index 6a0eb88..c5e80d5 100644 --- a/scopes/storage/folder.py +++ b/scopes/storage/folder.py @@ -10,23 +10,23 @@ class Folder(Track): prefix = 'fldr' def keys(self): - for f in self.container.query(parent=self.uid): + for f in self.container.query(parent=self.name): yield f.name def get(self, key, default=None): - value = self.container.queryLast(parent=self.uid, name=key) + value = self.container.queryLast(parent=self.name, name=key) if value is None: return default return value def __getitem__(self, key): - value = self.container.queryLast(parent=self.uid, name=key) + value = self.container.queryLast(parent=self.name, name=key) if value is None: raise KeyError(key) return value def __setitem__(self, key, value): - value.set('parent', self.uid) + value.set('parent', self.name) value.set('name', key) self.container.save(value) diff --git a/scopes/storage/relation.py b/scopes/storage/relation.py new file mode 100644 index 0000000..100528e --- /dev/null +++ b/scopes/storage/relation.py @@ -0,0 +1,3 @@ +# scopes.storage.relation + +"""An SQL-based relationship engine using RDF-like triples.""" diff --git a/tests/test_storage.py b/tests/test_storage.py index ed49eec..ab234ad 100644 --- a/tests/test_storage.py +++ b/tests/test_storage.py @@ -80,7 +80,7 @@ class Test(unittest.TestCase): top['child1'] = folder.Folder(data=dict(title='First Child')) self.assertEqual(list(top.keys()), ['child1']) ch1 = top['child1'] - self.assertEqual(ch1.parent, top.uid) + self.assertEqual(ch1.parent, top.name) assert list(top.keys()) == ['child1'] def suite():