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