use item class as parameter for Storage.getContainer() - never use prefix explictly in Code
This commit is contained in:
parent
606284791d
commit
f6308ff9bf
3 changed files with 17 additions and 13 deletions
|
@ -33,7 +33,8 @@ class Storage(object):
|
||||||
def add(self, container):
|
def add(self, container):
|
||||||
self.containers[container.itemFactory.prefix] = container
|
self.containers[container.itemFactory.prefix] = container
|
||||||
|
|
||||||
def getContainer(self, prefix):
|
def getContainer(self, itemClass):
|
||||||
|
prefix = itemClass.prefix
|
||||||
container = self.containers.get(prefix)
|
container = self.containers.get(prefix)
|
||||||
if container is None:
|
if container is None:
|
||||||
return self.create(registry[prefix])
|
return self.create(registry[prefix])
|
||||||
|
@ -41,9 +42,8 @@ class Storage(object):
|
||||||
|
|
||||||
def getItem(self, uid):
|
def getItem(self, uid):
|
||||||
prefix, id = uid.split('-')
|
prefix, id = uid.split('-')
|
||||||
id = int(id)
|
cls = registry[prefix].itemFactory
|
||||||
container = self.getContainer(prefix)
|
return self.getContainer(cls).get(int(id))
|
||||||
return container.get(id)
|
|
||||||
|
|
||||||
def getExistingTable(self, tableName):
|
def getExistingTable(self, tableName):
|
||||||
metadata = self.metadata
|
metadata = self.metadata
|
||||||
|
|
|
@ -30,11 +30,11 @@ class Concepts(Container):
|
||||||
def queryRels(self, **crit):
|
def queryRels(self, **crit):
|
||||||
pred = crit.get(predicate)
|
pred = crit.get(predicate)
|
||||||
if pred is not None and isinstance(pred, ('string', 'bytes')):
|
if pred is not None and isinstance(pred, ('string', 'bytes')):
|
||||||
crit['predicate'] = self.storage.getContainer('pred').queryLast(name=pred)
|
crit['predicate'] = self.storage.getContainer(Predicate).queryLast(name=pred)
|
||||||
for k, v in crit.items:
|
for k, v in crit.items:
|
||||||
if isinstance(v, Track):
|
if isinstance(v, Track):
|
||||||
crit[k] = v.uid
|
crit[k] = v.uid
|
||||||
rels = self.storage.getContainer('rel')
|
rels = self.storage.getContainer(Triple)
|
||||||
return rels.query(**crit)
|
return rels.query(**crit)
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class Predicates(Concepts):
|
||||||
defaultPredicate = 'standard'
|
defaultPredicate = 'standard'
|
||||||
|
|
||||||
def storePredicate(storage, name):
|
def storePredicate(storage, name):
|
||||||
preds = storage.getContainer('pred')
|
preds = storage.getContainer(Predicate)
|
||||||
preds.save(Predicate(name))
|
preds.save(Predicate(name))
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,12 +92,16 @@ class Type(Concept):
|
||||||
headFields = ['name', 'tprefix']
|
headFields = ['name', 'tprefix']
|
||||||
prefix = 'type'
|
prefix = 'type'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def typeClass(self):
|
||||||
|
return registry[self.tprefix].itemFactory
|
||||||
|
|
||||||
def values(self):
|
def values(self):
|
||||||
cont = self.container.storage.getContainer(self.tprefix)
|
cont = self.container.storage.getContainer(self.typeClass)
|
||||||
return cont.query()
|
return cont.query()
|
||||||
|
|
||||||
def get(self, key, default=None):
|
def get(self, key, default=None):
|
||||||
cont = self.container.storage.getContainer(self.tprefix)
|
cont = self.container.storage.getContainer(self.typeClass)
|
||||||
return cont.queryLast(name=key) or default
|
return cont.queryLast(name=key) or default
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
|
@ -107,7 +111,7 @@ class Type(Concept):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
cont = self.container.storage.getContainer(self.tprefix)
|
cont = self.container.storage.getContainer(self.typeClass)
|
||||||
value.name = key
|
value.name = key
|
||||||
cont.save(value)
|
cont.save(value)
|
||||||
|
|
||||||
|
@ -121,7 +125,7 @@ class Types(Concepts):
|
||||||
|
|
||||||
|
|
||||||
def storeType(storage, cls, name):
|
def storeType(storage, cls, name):
|
||||||
types = storage.getContainer('type')
|
types = storage.getContainer(Type)
|
||||||
types.save(Type(name, cls.prefix))
|
types.save(Type(name, cls.prefix))
|
||||||
|
|
||||||
def setupCoreTypes(storage):
|
def setupCoreTypes(storage):
|
||||||
|
|
|
@ -79,7 +79,7 @@ def test_type(self, config):
|
||||||
storage.dropTable('types')
|
storage.dropTable('types')
|
||||||
concept.setupCoreTypes(storage)
|
concept.setupCoreTypes(storage)
|
||||||
|
|
||||||
types = storage.getContainer(concept.Type.prefix)
|
types = storage.getContainer(concept.Type)
|
||||||
tps = list(types.query())
|
tps = list(types.query())
|
||||||
self.assertEqual(len(tps), 6)
|
self.assertEqual(len(tps), 6)
|
||||||
self.assertEqual(tps[0].name, 'track')
|
self.assertEqual(tps[0].name, 'track')
|
||||||
|
@ -95,7 +95,7 @@ def test_type(self, config):
|
||||||
def test_topic(self, config):
|
def test_topic(self, config):
|
||||||
storage = config.storageFactory(config.dbschema)
|
storage = config.storageFactory(config.dbschema)
|
||||||
storage.dropTable('topics')
|
storage.dropTable('topics')
|
||||||
topics = storage.getContainer(topic.Topic.prefix)
|
topics = storage.getContainer(topic.Topic)
|
||||||
concept.storePredicate(storage, concept.defaultPredicate)
|
concept.storePredicate(storage, concept.defaultPredicate)
|
||||||
root = folder.Root(storage)
|
root = folder.Root(storage)
|
||||||
root['top']['topics'] = folder.Folder()
|
root['top']['topics'] = folder.Folder()
|
||||||
|
|
Loading…
Add table
Reference in a new issue