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):
|
||||
self.containers[container.itemFactory.prefix] = container
|
||||
|
||||
def getContainer(self, prefix):
|
||||
def getContainer(self, itemClass):
|
||||
prefix = itemClass.prefix
|
||||
container = self.containers.get(prefix)
|
||||
if container is None:
|
||||
return self.create(registry[prefix])
|
||||
|
@ -41,9 +42,8 @@ class Storage(object):
|
|||
|
||||
def getItem(self, uid):
|
||||
prefix, id = uid.split('-')
|
||||
id = int(id)
|
||||
container = self.getContainer(prefix)
|
||||
return container.get(id)
|
||||
cls = registry[prefix].itemFactory
|
||||
return self.getContainer(cls).get(int(id))
|
||||
|
||||
def getExistingTable(self, tableName):
|
||||
metadata = self.metadata
|
||||
|
|
|
@ -30,11 +30,11 @@ class Concepts(Container):
|
|||
def queryRels(self, **crit):
|
||||
pred = crit.get(predicate)
|
||||
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:
|
||||
if isinstance(v, Track):
|
||||
crit[k] = v.uid
|
||||
rels = self.storage.getContainer('rel')
|
||||
rels = self.storage.getContainer(Triple)
|
||||
return rels.query(**crit)
|
||||
|
||||
|
||||
|
@ -55,7 +55,7 @@ class Predicates(Concepts):
|
|||
defaultPredicate = 'standard'
|
||||
|
||||
def storePredicate(storage, name):
|
||||
preds = storage.getContainer('pred')
|
||||
preds = storage.getContainer(Predicate)
|
||||
preds.save(Predicate(name))
|
||||
|
||||
|
||||
|
@ -92,12 +92,16 @@ class Type(Concept):
|
|||
headFields = ['name', 'tprefix']
|
||||
prefix = 'type'
|
||||
|
||||
@property
|
||||
def typeClass(self):
|
||||
return registry[self.tprefix].itemFactory
|
||||
|
||||
def values(self):
|
||||
cont = self.container.storage.getContainer(self.tprefix)
|
||||
cont = self.container.storage.getContainer(self.typeClass)
|
||||
return cont.query()
|
||||
|
||||
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
|
||||
|
||||
def __getitem__(self, key):
|
||||
|
@ -107,7 +111,7 @@ class Type(Concept):
|
|||
return value
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
cont = self.container.storage.getContainer(self.tprefix)
|
||||
cont = self.container.storage.getContainer(self.typeClass)
|
||||
value.name = key
|
||||
cont.save(value)
|
||||
|
||||
|
@ -121,7 +125,7 @@ class Types(Concepts):
|
|||
|
||||
|
||||
def storeType(storage, cls, name):
|
||||
types = storage.getContainer('type')
|
||||
types = storage.getContainer(Type)
|
||||
types.save(Type(name, cls.prefix))
|
||||
|
||||
def setupCoreTypes(storage):
|
||||
|
|
|
@ -79,7 +79,7 @@ def test_type(self, config):
|
|||
storage.dropTable('types')
|
||||
concept.setupCoreTypes(storage)
|
||||
|
||||
types = storage.getContainer(concept.Type.prefix)
|
||||
types = storage.getContainer(concept.Type)
|
||||
tps = list(types.query())
|
||||
self.assertEqual(len(tps), 6)
|
||||
self.assertEqual(tps[0].name, 'track')
|
||||
|
@ -95,7 +95,7 @@ def test_type(self, config):
|
|||
def test_topic(self, config):
|
||||
storage = config.storageFactory(config.dbschema)
|
||||
storage.dropTable('topics')
|
||||
topics = storage.getContainer(topic.Topic.prefix)
|
||||
topics = storage.getContainer(topic.Topic)
|
||||
concept.storePredicate(storage, concept.defaultPredicate)
|
||||
root = folder.Root(storage)
|
||||
root['top']['topics'] = folder.Folder()
|
||||
|
|
Loading…
Add table
Reference in a new issue