provide new import element 'records' that allows creation of record manager objects
This commit is contained in:
parent
ef504afc0b
commit
ad2e17295c
1 changed files with 31 additions and 2 deletions
33
external/element.py
vendored
33
external/element.py
vendored
|
@ -30,10 +30,11 @@ from zope.traversing.api import getName, traverse
|
||||||
|
|
||||||
from cybertools.composer.interfaces import IInstance
|
from cybertools.composer.interfaces import IInstance
|
||||||
from cybertools.composer.schema.interfaces import ISchemaFactory
|
from cybertools.composer.schema.interfaces import ISchemaFactory
|
||||||
|
from cybertools.tracking.btree import TrackingStorage
|
||||||
from cybertools.typology.interfaces import IType
|
from cybertools.typology.interfaces import IType
|
||||||
from loops.common import adapted
|
from loops.common import adapted
|
||||||
from loops.interfaces import IConceptSchema
|
|
||||||
from loops.external.interfaces import IElement
|
from loops.external.interfaces import IElement
|
||||||
|
from loops.interfaces import IConceptSchema
|
||||||
from loops.i18n.common import I18NValue
|
from loops.i18n.common import I18NValue
|
||||||
from loops.layout.base import LayoutNode
|
from loops.layout.base import LayoutNode
|
||||||
from loops.predicate import adaptedRelation
|
from loops.predicate import adaptedRelation
|
||||||
|
@ -132,6 +133,33 @@ class TypeElement(ConceptElement):
|
||||||
adapted(self.object).typeInterface = kw['typeInterface']
|
adapted(self.object).typeInterface = kw['typeInterface']
|
||||||
|
|
||||||
|
|
||||||
|
class RecordManagerElement(Element):
|
||||||
|
|
||||||
|
elementType = 'records'
|
||||||
|
posArgs = ('name', 'trackFactory')
|
||||||
|
|
||||||
|
def __init__(self, name, trackFactory, **kw):
|
||||||
|
self['name'] = name
|
||||||
|
tf = self['trackFactory'] = trackFactory
|
||||||
|
if not isinstance(tf, basestring):
|
||||||
|
self['trackFactory'] = '.'.join((tf.__module__, tf.__name__))
|
||||||
|
for k, v in kw.items():
|
||||||
|
self[k] = v
|
||||||
|
|
||||||
|
def execute(self, loader):
|
||||||
|
name = self['name']
|
||||||
|
tf = resolve(self['trackFactory'])
|
||||||
|
records = loader.context.getRecordManager()
|
||||||
|
obj = records.get(name)
|
||||||
|
if obj is None:
|
||||||
|
obj = records[name] = TrackingStorage(trackFactory=tf)
|
||||||
|
else:
|
||||||
|
obj.trackFactory = tf
|
||||||
|
obj.indexAttributes = tf.index_attributes
|
||||||
|
obj.setupIndexes()
|
||||||
|
self.object = obj
|
||||||
|
|
||||||
|
|
||||||
class ChildElement(Element):
|
class ChildElement(Element):
|
||||||
|
|
||||||
elementType = 'child'
|
elementType = 'child'
|
||||||
|
@ -261,6 +289,7 @@ class LayoutNodeElement(NodeElement):
|
||||||
elementTypes = dict(
|
elementTypes = dict(
|
||||||
type=TypeElement,
|
type=TypeElement,
|
||||||
concept=ConceptElement,
|
concept=ConceptElement,
|
||||||
|
records=RecordManagerElement,
|
||||||
child=ChildElement,
|
child=ChildElement,
|
||||||
resource=ResourceElement,
|
resource=ResourceElement,
|
||||||
resourceRelation=ResourceRelationElement,
|
resourceRelation=ResourceRelationElement,
|
||||||
|
@ -270,5 +299,5 @@ elementTypes = dict(
|
||||||
I18NValue=I18NValue,
|
I18NValue=I18NValue,
|
||||||
)
|
)
|
||||||
|
|
||||||
toplevelElements = ('type', 'concept', 'resource',
|
toplevelElements = ('type', 'concept', 'resource', 'records',
|
||||||
'child', 'resourceRelation', 'node', 'deassign')
|
'child', 'resourceRelation', 'node', 'deassign')
|
||||||
|
|
Loading…
Add table
Reference in a new issue