Author: jmorliaguet Date: Thu Apr 13 23:23:57 2006 New Revision: 2835 Modified: cpsskins/branches/jmo-perspectives/setup/interfaces.py cpsskins/branches/jmo-perspectives/standard/io/effect.py cpsskins/branches/jmo-perspectives/standard/io/effect.zcml cpsskins/branches/jmo-perspectives/standard/io/relation.py cpsskins/branches/jmo-perspectives/standard/io/relation.zcml cpsskins/branches/jmo-perspectives/standard/io/storage.py cpsskins/branches/jmo-perspectives/standard/io/storage.zcml cpsskins/branches/jmo-perspectives/standard/io/style.py cpsskins/branches/jmo-perspectives/standard/io/style.zcml cpsskins/branches/jmo-perspectives/standard/io/widget.py cpsskins/branches/jmo-perspectives/standard/io/widget.zcml cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py Log:
- saving work: refactoring of XML importers: - storages have their own importer view - format importers are named views for storage importers - added a prototype of a relation importer (still need an element URI -> element factory mapper. Can be done by registering standard zope3 factories for each type of element) Modified: cpsskins/branches/jmo-perspectives/setup/interfaces.py ============================================================================== --- cpsskins/branches/jmo-perspectives/setup/interfaces.py (original) +++ cpsskins/branches/jmo-perspectives/setup/interfaces.py Thu Apr 13 23:23:57 2006 @@ -103,6 +103,6 @@ class IDataImporter(Interface): """A data importer is used to import data from XML """ - def load(xml): - """Load data from XML.""" + def load(dom): + """Load data from a DOM fragment.""" Modified: cpsskins/branches/jmo-perspectives/standard/io/effect.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/effect.py (original) +++ cpsskins/branches/jmo-perspectives/standard/io/effect.py Thu Apr 13 23:23:57 2006 @@ -17,8 +17,6 @@ """ __docformat__ = "reStructuredText" -from xml.dom.minidom import parseString - from zope.app import pagetemplate from zope.component import adapts from zope.interface import implements @@ -55,15 +53,14 @@ class Importer(object): """Import effects """ - adapts(IEffect) implements(IDataImporter) - def __init__(self, context): + def __init__(self, context, request): self.context = context + self.request = request - def load(self, xml=u''): + def load(self, dom): context = self.context - dom = parseString(xml) # TODO print dom Modified: cpsskins/branches/jmo-perspectives/standard/io/effect.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/effect.zcml (original) +++ cpsskins/branches/jmo-perspectives/standard/io/effect.zcml Thu Apr 13 23:23:57 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".effect.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.standard.formats.storage.IFormatStorage" + class=".effect.Importer" + permission="zope.ManageContent" + name="effect" /> </configure> Modified: cpsskins/branches/jmo-perspectives/standard/io/relation.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/relation.py (original) +++ cpsskins/branches/jmo-perspectives/standard/io/relation.py Thu Apr 13 23:23:57 2006 @@ -27,6 +27,11 @@ from cpsskins.relations.interfaces import IRelation from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.relations.predicates import Predicate +from cpsskins.relations.relations import ( + MonadicRelation, DyadicRelation, TriadicRelation) +from cpsskins.utils import getThemeManager + class Exporter(object): """Export a relation. """ @@ -64,16 +69,33 @@ self.context = context self.request = request - def load(self, xml=u''): + def load(self, dom): context = self.context - dom = parseString(xml) - for relation in dom.getElementsByTagName('relation'): - predicate = relation.getAttribute('predicate') - position = 0 - relates = relation.getElementsByTagName('relate') - for relate in relates: - uri = relate.getAttribute('uri') - obj = resolve(uri) # TODO - arity = len(relates) + relations = getThemeManager().getRelationStorage() + + for relation_def in dom.getElementsByTagName('relation'): + predicate_str = relation_def.getAttribute('predicate') + predicate = Predicate(predicate_str) + + relates_def = relation_def.getElementsByTagName('relate') + relates = [] + + for relate_def in relates_def: + uri = relate_def.getAttribute('uri') + #obj = resolve(uri) # TODO + obj = uri + relates.append(obj) + + arity = len(relates_def) + + if arity == 1: + rel = MonadicRelation(predicate=predicate, first=relates[0]) + elif arity == 2: + rel = DyadicRelation(predicate=predicate, first=relates[0], + second=relates[1]) + elif arity == 3: + rel = TriadicRelation(predicate=predicate, first=relates[0], + second=relates[1], third=relates[2]) + relations.add(rel) Modified: cpsskins/branches/jmo-perspectives/standard/io/relation.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/relation.zcml (original) +++ cpsskins/branches/jmo-perspectives/standard/io/relation.zcml Thu Apr 13 23:23:57 2006 @@ -15,6 +15,7 @@ for="cpsskins.relations.interfaces.IRelationStorage" class=".relation.Importer" permission="zope.ManageContent" + name="relation" /> </configure> Modified: cpsskins/branches/jmo-perspectives/standard/io/storage.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/storage.py (original) +++ cpsskins/branches/jmo-perspectives/standard/io/storage.py Thu Apr 13 23:23:57 2006 @@ -17,10 +17,8 @@ """ __docformat__ = "reStructuredText" -from xml.dom.minidom import parseString - from zope.app import zapi -from zope.component import adapts, getMultiAdapter +from zope.component import adapts, getMultiAdapter, queryMultiAdapter from zope.interface import implements from cpsskins.storage.interfaces import IStorage @@ -56,16 +54,25 @@ } class Importer(object): - """Import an element. + """Import storage elements """ - adapts(IStorage) implements(IDataImporter) - def __init__(self, context): + def __init__(self, context, request): self.context = context + self.request = request - def load(self, xml=u''): + def load(self, dom): context = self.context - dom = parseString(xml) - print dom + request = self.request + + for storage_def in dom.getElementsByTagName('storage'): + for element_def in storage_def.getElementsByTagName('*'): + element_type = element_def.tagName + + importer = queryMultiAdapter((context, request), IDataImporter, + name=element_type) + + if importer is not None: + importer.load(element_def) Modified: cpsskins/branches/jmo-perspectives/standard/io/storage.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/storage.zcml (original) +++ cpsskins/branches/jmo-perspectives/standard/io/storage.zcml Thu Apr 13 23:23:57 2006 @@ -11,8 +11,11 @@ /> <!-- XML import --> - <adapter - factory=".storage.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.storage.interfaces.IStorage" + class=".storage.Importer" + permission="zope.ManageContent" /> </configure> Modified: cpsskins/branches/jmo-perspectives/standard/io/style.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/style.py (original) +++ cpsskins/branches/jmo-perspectives/standard/io/style.py Thu Apr 13 23:23:57 2006 @@ -17,8 +17,6 @@ """ __docformat__ = "reStructuredText" -from xml.dom.minidom import parseString - from zope.app import pagetemplate from zope.component import adapts from zope.interface import implements @@ -51,15 +49,15 @@ class Importer(object): """This adapter makes it possible to import style resources. """ - adapts(IStyle) implements(IDataImporter) - def __init__(self, context): + def __init__(self, context, request): self.context = context + self.request = request - def load(self, xml=u''): + def load(self, dom): context = self.context - dom = parseString(xml) + for style in dom.getElementsByTagName('style'): for sel in style.getElementsByTagName('selector'): sel_name = sel.getAttribute('name') Modified: cpsskins/branches/jmo-perspectives/standard/io/style.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/style.zcml (original) +++ cpsskins/branches/jmo-perspectives/standard/io/style.zcml Thu Apr 13 23:23:57 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".style.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.standard.formats.storage.IFormatStorage" + class=".style.Importer" + permission="zope.ManageContent" + name="style" /> </configure> Modified: cpsskins/branches/jmo-perspectives/standard/io/widget.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/widget.py (original) +++ cpsskins/branches/jmo-perspectives/standard/io/widget.py Thu Apr 13 23:23:57 2006 @@ -17,8 +17,6 @@ """ __docformat__ = "reStructuredText" -from xml.dom.minidom import parseString - from zope.app import pagetemplate from zope.component import adapts from zope.interface import implements @@ -55,15 +53,14 @@ class Importer(object): """Import widgets """ - adapts(IWidget) implements(IDataImporter) - def __init__(self, context): + def __init__(self, context, request): self.context = context + self.request = request - def load(self, xml=u''): + def load(self, dom): context = self.context - dom = parseString(xml) # TODO print dom Modified: cpsskins/branches/jmo-perspectives/standard/io/widget.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/io/widget.zcml (original) +++ cpsskins/branches/jmo-perspectives/standard/io/widget.zcml Thu Apr 13 23:23:57 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".widget.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.standard.formats.storage.IFormatStorage" + class=".widget.Importer" + permission="zope.ManageContent" + name="widget" /> </configure> Modified: cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py ============================================================================== --- cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py (original) +++ cpsskins/branches/jmo-perspectives/ui/screens/sitemanager/views.py Thu Apr 13 23:23:57 2006 @@ -17,6 +17,8 @@ """ __docformat__ = "reStructuredText" +from xml.dom.minidom import parseString + from zope.app.interface import queryType from zope.app.file import File from zope.app.publisher.browser import BrowserView @@ -154,13 +156,15 @@ relations_data = archive[u'relations.xml'] mgr = getThemeManager() + + formats = mgr[u'formats'] + formats.purge() + self.importStorage(u'formats', formats_data) + relations = mgr[u'relations'] relations.purge() - self.importStorage(u'relations', relations_data) - return relations_data - ################################################################### # Snapshots ################################################################### @@ -217,9 +221,9 @@ mgr = getThemeManager() storage = mgr[name] + dom = parseString(xml) importer = getMultiAdapter((storage, request), IDataImporter) - importer.load(xml) - print xml + importer.load(dom) ################################################################### # Themes -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins