From ad2e17295c68aafa5d083e8c9e76ee93dc7069d5 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 18 May 2012 11:52:16 +0200 Subject: [PATCH] provide new import element 'records' that allows creation of record manager objects --- external/element.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/external/element.py b/external/element.py index 1490dd2..672aaa2 100644 --- a/external/element.py +++ b/external/element.py @@ -30,10 +30,11 @@ from zope.traversing.api import getName, traverse from cybertools.composer.interfaces import IInstance from cybertools.composer.schema.interfaces import ISchemaFactory +from cybertools.tracking.btree import TrackingStorage from cybertools.typology.interfaces import IType from loops.common import adapted -from loops.interfaces import IConceptSchema from loops.external.interfaces import IElement +from loops.interfaces import IConceptSchema from loops.i18n.common import I18NValue from loops.layout.base import LayoutNode from loops.predicate import adaptedRelation @@ -132,6 +133,33 @@ class TypeElement(ConceptElement): 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): elementType = 'child' @@ -261,6 +289,7 @@ class LayoutNodeElement(NodeElement): elementTypes = dict( type=TypeElement, concept=ConceptElement, + records=RecordManagerElement, child=ChildElement, resource=ResourceElement, resourceRelation=ResourceRelationElement, @@ -270,5 +299,5 @@ elementTypes = dict( I18NValue=I18NValue, ) -toplevelElements = ('type', 'concept', 'resource', +toplevelElements = ('type', 'concept', 'resource', 'records', 'child', 'resourceRelation', 'node', 'deassign')