fix type methods

This commit is contained in:
Helmut Merz 2024-03-14 11:30:59 +01:00
parent 3e1127e798
commit 1e165a711c
4 changed files with 32 additions and 11 deletions

View file

@ -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):

View file

@ -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'

View file

@ -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:

View file

@ -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()