fix type methods
This commit is contained in:
parent
3e1127e798
commit
1e165a711c
4 changed files with 32 additions and 11 deletions
|
@ -33,12 +33,16 @@ class Storage(object):
|
|||
def add(self, container):
|
||||
self.containers[container.itemFactory.prefix] = container
|
||||
|
||||
def getContainer(self, prefix):
|
||||
container = self.containers.get(prefix)
|
||||
if container is None:
|
||||
return self.create(registry[prefix])
|
||||
return container
|
||||
|
||||
def getItem(self, uid):
|
||||
prefix, id = uid.split('-')
|
||||
id = int(id)
|
||||
container = self.containers.get(prefix)
|
||||
if container is None:
|
||||
container = self.create(registry[prefix])
|
||||
container = self.getContainer(prefix)
|
||||
return container.get(id)
|
||||
|
||||
def getExistingTable(self, tableName):
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
from zope.interface import implementer
|
||||
from scopes.interfaces import IConcept
|
||||
from scopes.storage.common import registerContainerClass
|
||||
from scopes.storage.common import registerContainerClass, registry
|
||||
from scopes.storage.tracking import Container, Track
|
||||
|
||||
|
||||
|
@ -51,16 +51,21 @@ class Rels(Container):
|
|||
|
||||
class Type(Concept):
|
||||
|
||||
headFields = ['name', 'prefix']
|
||||
headFields = ['name', 'tprefix']
|
||||
prefix = 'type'
|
||||
|
||||
def get(key, default=None):
|
||||
return self.container.queryLast(name=key) or default
|
||||
def get(self, key, default=None):
|
||||
cont = self.container.storage.getContainer(self.tprefix)
|
||||
return cont.queryLast(name=key) or default
|
||||
|
||||
def values(self):
|
||||
cont = self.container.storage.getContainer(self.tprefix)
|
||||
return cont.query()
|
||||
|
||||
|
||||
@registerContainerClass
|
||||
class Types(Concepts):
|
||||
|
||||
itemFactory = Type
|
||||
indexes = [('name',), ('prefix',)]
|
||||
indexes = [('name',), ('tprefix',)]
|
||||
tableName = 'types'
|
||||
|
|
|
@ -98,8 +98,11 @@ class Container(object):
|
|||
return tr
|
||||
|
||||
def query(self, **crit):
|
||||
stmt = self.table.select().where(
|
||||
if crit:
|
||||
stmt = self.table.select().where(
|
||||
and_(*self.setupWhere(crit))).order_by(self.table.c.trackid)
|
||||
else:
|
||||
stmt = self.table.select().order_by(self.table.c.trackid)
|
||||
for r in self.session.execute(stmt):
|
||||
yield self.makeTrack(r)
|
||||
|
||||
|
@ -109,6 +112,7 @@ class Container(object):
|
|||
return self.makeTrack(self.session.execute(stmt).first())
|
||||
|
||||
def save(self, track):
|
||||
track.container = self
|
||||
crit = dict((hf, track.head[hf]) for hf in track.headFields)
|
||||
found = self.queryLast(**crit)
|
||||
if found is None:
|
||||
|
|
|
@ -78,7 +78,15 @@ def test_type(self, config):
|
|||
storage = config.storageFactory(config.dbschema)
|
||||
storage.dropTable('types')
|
||||
types = storage.create(concept.Types)
|
||||
tid01 = types.save(concept.Type('type', 'type'))
|
||||
self.assertEqual(tid01, 1)
|
||||
ttype = concept.Type('type', concept.Type.prefix)
|
||||
ttid = types.save(ttype)
|
||||
self.assertEqual(ttid, 1)
|
||||
tps = list(ttype.values())
|
||||
self.assertEqual(len(tps), 1)
|
||||
|
||||
tfolder = concept.Type('folder', folder.Folder.prefix)
|
||||
tfid = types.save(tfolder)
|
||||
fldrs = list(tfolder.values())
|
||||
self.assertEqual(len(fldrs), 2)
|
||||
|
||||
storage.commit()
|
||||
|
|
Loading…
Add table
Reference in a new issue