Author: jmorliaguet Date: Sat Apr 29 16:23:20 2006 New Revision: 2984 Added: cpsskins/branches/paris-sprint-2006/setup/io.py (contents, props changed) Modified: cpsskins/branches/paris-sprint-2006/ftests/test_registration.py cpsskins/branches/paris-sprint-2006/setup/README.txt cpsskins/branches/paris-sprint-2006/setup/configure.zcml cpsskins/branches/paris-sprint-2006/setup/interfaces.py cpsskins/branches/paris-sprint-2006/setup/manager.py cpsskins/branches/paris-sprint-2006/setup/registration.py cpsskins/branches/paris-sprint-2006/setup/utils.py cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py cpsskins/branches/paris-sprint-2006/standard/io/area.zcml cpsskins/branches/paris-sprint-2006/standard/io/box.zcml cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml cpsskins/branches/paris-sprint-2006/standard/io/color.py cpsskins/branches/paris-sprint-2006/standard/io/color.zcml cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml cpsskins/branches/paris-sprint-2006/standard/io/element.py cpsskins/branches/paris-sprint-2006/standard/io/element.zcml cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml cpsskins/branches/paris-sprint-2006/standard/io/page.py cpsskins/branches/paris-sprint-2006/standard/io/page.zcml cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml cpsskins/branches/paris-sprint-2006/standard/io/relation.py cpsskins/branches/paris-sprint-2006/standard/io/setting.py cpsskins/branches/paris-sprint-2006/standard/io/settings.py cpsskins/branches/paris-sprint-2006/standard/io/storage.py cpsskins/branches/paris-sprint-2006/standard/io/style.py cpsskins/branches/paris-sprint-2006/standard/io/theme.py cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Log:
- added support for URI mappings (not functional yet) - renamed resources.find() as resources.resolve() to resolve URIs Modified: cpsskins/branches/paris-sprint-2006/ftests/test_registration.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ftests/test_registration.py (original) +++ cpsskins/branches/paris-sprint-2006/ftests/test_registration.py Sat Apr 29 16:23:20 2006 @@ -13,7 +13,7 @@ ############################################################################## """Registration tests -$Id:$ +$Id$ """ __docformat__ = "reStructuredText" Modified: cpsskins/branches/paris-sprint-2006/setup/README.txt ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/README.txt (original) +++ cpsskins/branches/paris-sprint-2006/setup/README.txt Sat Apr 29 16:23:20 2006 @@ -659,11 +659,11 @@ <BLANKLINE> -Refering to resources -===================== +Resolving URIs +============== Resources can be accessed by using the name of the setting under which the -resource has been registered. +resource has been registered (cpsskins://[EMAIL PROTECTED]). >>> from cpsskins.standard.fields.color import Color @@ -677,7 +677,7 @@ >>> ITypeable(color).getTypeName() u'field-color' - >>> res = resources.find(u'cpsskins://[EMAIL PROTECTED]', context=root) + >>> res = resources.resolve(u'cpsskins://[EMAIL PROTECTED]', context=root) >>> res is color True @@ -686,7 +686,7 @@ #ff0000 -This makes it possible to refer to resources using a string notation. +This makes it possible to refer to resources in text. >>> style = Style() >>> root[u'style'] = style Modified: cpsskins/branches/paris-sprint-2006/setup/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/setup/configure.zcml Sat Apr 29 16:23:20 2006 @@ -63,7 +63,7 @@ <!-- field IO --> <adapter - factory="cpsskins.setup.utils.ListField" + factory="cpsskins.setup.io.ListField" /> </configure> Modified: cpsskins/branches/paris-sprint-2006/setup/interfaces.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/interfaces.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/interfaces.py Sat Apr 29 16:23:20 2006 @@ -30,7 +30,7 @@ class ISetting(Interface): """Setting""" - name = Attribute("The setting's name.") + name = Attribute(u"The setting's name.") title = TextLine( title=u"Title", @@ -43,12 +43,12 @@ class IGlobalSetting(ISetting): """ """ - filename = Attribute("The resource filename.") + filename = Attribute(u"The resource filename.") class ILocalSetting(ISetting): """ """ - custom = Attribute("Is this a custom setting?.") + custom = Attribute(u"Is this a custom setting?.") class IResource(Interface): @@ -92,17 +92,24 @@ """Returns true if the resource has been customized""" class IDataExporter(Interface): - """A data exporter is used to export data to XML + """A data exporter exports data to XML """ + mapping = Attribute(u"URI mapping") + def __call__(): """Export to XML.""" + def save(): + """Save data as a DOM fragment.""" + def getInfo(): - """Return some export information (dictionary, ...)""" + """Return some export information (dictionary, ...).""" class IDataImporter(Interface): - """A data importer is used to import data from XML + """A data importer imports data from XML """ + mapping = Attribute(u"URI mapping") + def load(dom): """Load data from a DOM fragment.""" Added: cpsskins/branches/paris-sprint-2006/setup/io.py ============================================================================== --- (empty file) +++ cpsskins/branches/paris-sprint-2006/setup/io.py Sat Apr 29 16:23:20 2006 @@ -0,0 +1,161 @@ +############################################################################## +# +# Copyright (c) 2005-2006 Nuxeo and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +""" + +$Id$ +""" +__docformat__ = "reStructuredText" + +import zope.schema + +from zope.component import createObject, adapts +from zope.interface import implements, Interface + +from cpsskins.elements.interfaces import IIdentifiable, IType +from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.setup.utils import editObject + +class DataExporter(object): + """Base class for data exporters + """ + def __init__(self, context, request): + self.context = context + self.request = request + + self.mapping = {} + + def __call__(self): + """Export to XML. + """ + raise NotImplementedError + + def save(self): + """Save data as a DOM fragment. + """ + raise NotImplementedError + + def getInfo(self): + """Return some export information (dictionary, ...). + """ + raise NotImplementedError + +class DataImporter(object): + """Base class for data importers""" + + def __init__(self, context, request): + self.context = context + self.request = request + + self.mapping = {} + + def load(self, dom): + """Load data from a DOM fragment. Returns an object. + """ + raise NotImplementedError + +class ObjectExporter(DataExporter): + """Export objects + """ + implements(IDataExporter) + + def __call__(self): + context = self.context + + properties = [] + schema = IType(context).getContentType() + + content = [] + for name, field in zope.schema.getFieldsInOrder(schema): + obj = getattr(context, name) + + field_io = IFieldIO(field, None) + if field_io is not None: + value = field_io.dump(obj) + else: + value = obj + + content.append( + u'<%(name)s value="%(value)s"/>' % { + 'name': name, + 'value': value, + }) + + return u"""<?xml version="1.0"?> +<%(name)s uri="%(uri)s"> + %(content)s +</%(name)s> + """ % { + 'name': IType(context).resourcename, + 'uri': IIdentifiable(context).getURI(), + 'content': u'\n '.join(content), + } + +class ObjectImporter(DataImporter): + """Import objects + """ + implements(IDataImporter) + + def load(self, dom): + context = self.context + + object_name = dom.tagName + object = createObject(object_name) + schema = IType(object).getContentType() + + props = {} + for name, field in zope.schema.getFieldsInOrder(schema): + text = dom.getAttribute(name) + + field_io = IFieldIO(field, None) + if field_io is not None: + value = field_io.load(text) + else: + value = text + + props[name] = value + + editObject(object, props) + + context.add(object) + return object + +####################################################################### +# Field importer / exporter +####################################################################### + +class IFieldIO(Interface): + """A field importer / exporter""" + + def dump(obj): + """convert the object into a string""" + + def load(text): + """convert the string into an object""" + +class ListField: + """A list field""" + + adapts(zope.schema.interfaces.IList) + implements(IFieldIO) + + def __init__(self, field): + self.field = field + + def dump(self, obj): + return u','.join(obj) + + def load(self, text): + return text.split(',') + + Modified: cpsskins/branches/paris-sprint-2006/setup/manager.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/manager.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/manager.py Sat Apr 29 16:23:20 2006 @@ -40,9 +40,8 @@ self.gsm = getGlobalSiteManager() - ################################################################### - # Registration - ################################################################### + + ### Registration of resources ##################################### def register(self, name=u'', title=u'', resource=None, filename=None, custom=False, context=None): @@ -80,9 +79,8 @@ settings.unregisterUtility(provided=ISetting, name=name) - ################################################################### - # Finding resources - ################################################################### + + ### Finding resources ############################################ def lookup(self, name=u'', type=None, context=None, default=None): if not name: @@ -109,9 +107,7 @@ return default def list(self, type=None, context=None): - items = {} - entries = list(self.gsm.getUtilitiesFor(ISetting)) if context is not None: settings = getThemeManager(context).getSettings() @@ -127,18 +123,29 @@ items[name] = resource return items.values() - def find(self, name, context=None): - parts = name.split('cpsskins://') - if len(parts) != 2: - return None - name = parts[1] - type_name, resource_id = name.split('@') - type = getContentType(type_name) - return self.lookup(name=resource_id, type=type, context=context) - - ################################################################### - # Customization - ################################################################### + def resolve(self, uri, context=None): + if not uri.startswith('cpsskins://'): + raise ValueError("Unkown URI scheme in '%s'" % uri) + + resource = None + location = uri[11:] + + if '@' in location: + type_name, resource_id = uri.split('@') + type = getContentType(type_name) + resource = self.lookup(name=resource_id, type=type, context=context) + + elif ':' in location: + type_name, resource_id = uri.split(':') + type = getContentType(type_name) + # TODO + + else: + raise ValueError("'%s' has no name or identifier." % uri) + + return resource + + ### Customization ################################################ def isGlobal(self, name=u''): setting = self.gsm.queryUtility(ISetting, name) Modified: cpsskins/branches/paris-sprint-2006/setup/registration.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/registration.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/registration.py Sat Apr 29 16:23:20 2006 @@ -91,7 +91,7 @@ logger.debug("reloaded setting %s in %s", name, filename) # load the data - IDataImporter(resource).load(resource_def.toxml()) + #IDataImporter(resource).load(resource_def.toxml()) return resource Modified: cpsskins/branches/paris-sprint-2006/setup/utils.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/utils.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/utils.py Sat Apr 29 16:23:20 2006 @@ -24,19 +24,9 @@ from tarfile import TarFile from tarfile import TarInfo -import zope.schema +from zope.component import queryUtility, getUtilitiesFor -from zope.component import createObject, adapts -from zope.component import getUtility, queryUtility, getUtilitiesFor -from zope.component.interface import getInterface -from zope.interface import implements, Interface - -from cpsskins.elements.interfaces import IIdentifiable, IType -from cpsskins.setup.interfaces import IDataExporter, IDataImporter -from cpsskins.setup.interfaces import IResourceManager, INameType -from cpsskins.utils import getThemeManager - -from cpsskins.elements import interfaces +from cpsskins.setup.interfaces import INameType logger = logging.getLogger("cpsskins") @@ -106,99 +96,3 @@ continue setattr(obj, k, v) - -class ObjectExporter(object): - """Export objects - """ - implements(IDataExporter) - - def __call__(self): - context = self.context - - properties = [] - schema = IType(context).getContentType() - - content = [] - for name, field in zope.schema.getFieldsInOrder(schema): - obj = getattr(context, name) - - field_io = IFieldIO(field, None) - if field_io is not None: - value = field_io.dump(obj) - else: - value = obj - - content.append( - u'<%(name)s value="%(value)s"/>' % { - 'name': name, - 'value': value, - }) - - return u"""<?xml version="1.0"?> -<%(name)s uri="%(uri)s"> - %(content)s -</%(name)s> - """ % { - 'name': IType(context).resourcename, - 'uri': IIdentifiable(context).getURI(), - 'content': u'\n '.join(content), - } - -class ObjectImporter(object): - """Import objects - """ - implements(IDataImporter) - - def load(self, dom): - context = self.context - - object_name = dom.tagName - object = createObject(object_name) - schema = IType(object).getContentType() - - props = {} - for name, field in zope.schema.getFieldsInOrder(schema): - text = dom.getAttribute(name) - - field_io = IFieldIO(field, None) - if field_io is not None: - value = field_io.load(text) - else: - value = text - - props[name] = value - - editObject(object, props) - - context.add(object) - return object - -####################################################################### -# Field importer / exporter -####################################################################### - -class IFieldIO(Interface): - """A field importer / exporter""" - - def dump(obj): - """convert the object into a string""" - - def load(text): - """convert the string into an object""" - -class ListField: - """A list field""" - - adapts(zope.schema.interfaces.IList) - implements(IFieldIO) - - def __init__(self, field): - self.field = field - - def dump(self, obj): - return u','.join(obj) - - def load(self, text): - return text.split(',') - - Modified: cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py Sat Apr 29 16:23:20 2006 @@ -162,7 +162,7 @@ props = [] for p, r in v.items(): if r.startswith('cpsskins://'): - r = resources.find(r, context) + r = resources.resolve(r, context) props.append('%s:%s' % (p, r)) rendered.append('%s.%s %s {%s}' % (s[0], style_id, sel, ';'.join(props))) Modified: cpsskins/branches/paris-sprint-2006/standard/io/area.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/area.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/area.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.standard.displays.area.IArea" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.standard.displays.storage.IDisplayStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="area" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/box.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/box.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/box.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.standard.displays.box.IBox" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.standard.displays.storage.IDisplayStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="box" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/boxgroup.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.standard.displays.boxgroup.IBoxGroup" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.standard.displays.storage.IDisplayStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="boxgroup" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/color.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/color.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/color.py Sat Apr 29 16:23:20 2006 @@ -23,10 +23,10 @@ from zope.component import adapts from zope.interface import implements -from cpsskins.standard.fields.color import IColor from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.setup.io import DataExporter, DataImporter -class Exporter(object): +class Exporter(DataExporter): """Export a color. """ implements(IDataExporter) @@ -36,15 +36,11 @@ def __call__(self): return self.template() -class Importer(object): +class Importer(DataImporter): """Import a color. """ - adapts(IColor) implements(IDataImporter) - def __init__(self, context): - self.context = context - def load(self, xml=u''): context = self.context dom = parseString(xml) Modified: cpsskins/branches/paris-sprint-2006/standard/io/color.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/color.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/color.zcml Sat Apr 29 16:23:20 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".color.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.setup.settings.ISettings" + class=".color.Importer" + permission="zope.ManageContent" + name="color" /> </configure> Modified: cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/effect.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.standard.formats.effect.IEffect" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.standard.formats.storage.IFormatStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="effect" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/element.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/element.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/element.py Sat Apr 29 16:23:20 2006 @@ -24,6 +24,7 @@ from cpsskins.elements.interfaces import IElement, IIdentifiable from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.setup.io import DataExporter, DataImporter XML = u"""<element uri="%(uri)s" @@ -31,7 +32,7 @@ parent="%(parent)s"/> """ -class Exporter(object): +class Exporter(DataExporter): """Export an element. """ implements(IDataExporter) @@ -57,15 +58,11 @@ 'parent': parent and IIdentifiable(parent).getURI() or u'', }) -class Importer(object): +class Importer(DataImporter): """Import an element. """ - adapts(IElement) implements(IDataImporter) - def __init__(self, context): - self.context = context - def load(self, xml=u''): context = self.context dom = parseString(xml) Modified: cpsskins/branches/paris-sprint-2006/standard/io/element.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/element.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/element.zcml Sat Apr 29 16:23:20 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".element.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="*" + class=".element.Exporter" + permission="zope.ManageContent" + name="element" /> </configure> Modified: cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/layout.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.standard.formats.layout.ILayout" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.standard.formats.storage.IFormatStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="layout" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/page.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/page.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/page.py Sat Apr 29 16:23:20 2006 @@ -25,9 +25,9 @@ from cpsskins.elements.interfaces import IIdentifiable from cpsskins.setup.interfaces import IDataExporter, IDataImporter -from cpsskins.elements.interfaces import IThemePage +from cpsskins.setup.io import DataExporter, DataImporter -class Exporter(object): +class Exporter(DataExporter): """Export pages """ implements(IDataExporter) @@ -52,10 +52,9 @@ } -class Importer(object): +class Importer(DataImporter): """Import pages """ - adapts(IThemePage) implements(IDataImporter) def __init__(self, context): Modified: cpsskins/branches/paris-sprint-2006/standard/io/page.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/page.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/page.zcml Sat Apr 29 16:23:20 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".page.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.elements.interfaces.ITheme" + class=".page.Exporter" + permission="zope.ManageContent" + name="page" /> </configure> Modified: cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/perspective.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.perspectives.interfaces.IPerspective" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.setup.settings.ISettings" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="perspective" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/portlet.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.elements.interfaces.IPortlet" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.portlets.storage.IPortletStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="portlet" /> Modified: cpsskins/branches/paris-sprint-2006/standard/io/relation.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/relation.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/relation.py Sat Apr 29 16:23:20 2006 @@ -20,29 +20,26 @@ from xml.dom.minidom import parseString from zope.app import pagetemplate -from zope.component import adapts +from zope.component import adapts, getUtility from zope.interface import implements from cpsskins.elements.interfaces import IIdentifiable 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.relations.relations import MonadicRelation, DyadicRelation +from cpsskins.relations.relations import TriadicRelation +from cpsskins.setup.io import DataExporter, DataImporter +from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.setup.interfaces import IResourceManager from cpsskins.utils import getThemeManager -class Exporter(object): +class Exporter(DataExporter): """Export a relation. """ implements(IDataExporter) template = pagetemplate.ViewPageTemplateFile('relation.xml') - def __init__(self, context, request): - self.context = context - self.request = request - def __call__(self): return self.template() @@ -60,17 +57,14 @@ 'relates': relate_info, } -class Importer(object): +class Importer(DataImporter): """Import a relation. """ implements(IDataImporter) - def __init__(self, context, request): - self.context = context - self.request = request - def load(self, dom): context = self.context + mapping = self.mapping relations = getThemeManager(context).getRelationStorage() @@ -80,10 +74,12 @@ relates_def = dom.getElementsByTagName('relate') relates = [] + resources = getUtility(IResourceManager) + for relate_def in relates_def: uri = relate_def.getAttribute('uri') - #obj = resolve(uri) # TODO - obj = uri + uri = mapping[uri] + obj = resources.resolve(uri, self.context) relates.append(obj) arity = len(relates_def) Modified: cpsskins/branches/paris-sprint-2006/standard/io/setting.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/setting.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/setting.py Sat Apr 29 16:23:20 2006 @@ -26,9 +26,10 @@ from cpsskins.setup.interfaces import IDataExporter, IDataImporter from cpsskins.setup.interfaces import IResource, ISetting, IResourceType +from cpsskins.setup.io import DataImporter, DataExporter -class Exporter(object): - """Export settings +class Exporter(DataExporter): + """Export a setting """ implements(IDataExporter) @@ -56,15 +57,11 @@ } -class Importer(object): - """Import settings +class Importer(DataImporter): + """Import a setting """ implements(IDataImporter) - def __init__(self, context, request): - self.context = context - self.request = request - def load(self, dom): context = self.context Modified: cpsskins/branches/paris-sprint-2006/standard/io/settings.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/settings.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/settings.py Sat Apr 29 16:23:20 2006 @@ -26,9 +26,10 @@ from cpsskins.setup.interfaces import IDataExporter, IDataImporter from cpsskins.setup.interfaces import IResource, ISetting, IResourceType +from cpsskins.setup.io import DataImporter, DataExporter from cpsskins.setup.settings import ISettings -class Exporter(object): +class Exporter(DataExporter): """Export settings """ implements(IDataExporter) @@ -48,15 +49,11 @@ </settings> """ % {'content': xml} -class Importer(object): +class Importer(DataImporter): """Import settings """ implements(IDataImporter) - def __init__(self, context): - self.context = context - self.request = request - def load(self, dom): context = self.context Modified: cpsskins/branches/paris-sprint-2006/standard/io/storage.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/storage.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/storage.py Sat Apr 29 16:23:20 2006 @@ -22,23 +22,20 @@ from zope.interface import implements from cpsskins.elements.interfaces import IIdentifiable -from cpsskins.storage.interfaces import IStorage +from cpsskins.setup.io import DataImporter, DataExporter from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.storage.interfaces import IStorage XML = u"""<storage name="%(name)s"> %(content)s </storage> """ -class Exporter(object): +class Exporter(DataExporter): """Export a storage. """ implements(IDataExporter) - def __init__(self, context, request): - self.context = context - self.request = request - def __call__(self): return u'<?xml version="1.0"?>\n' + self.toXML(self.context) @@ -54,20 +51,15 @@ 'content': xml, } -class Importer(object): +class Importer(DataImporter): """Import storage elements """ implements(IDataImporter) - def __init__(self, context, request): - self.context = context - self.request = request - def load(self, dom): context = self.context request = self.request - mapping = {} for storage_def in dom.getElementsByTagName('storage'): for element_def in storage_def.getElementsByTagName('*'): element_type = element_def.tagName @@ -80,6 +72,6 @@ element = importer.load(element_def) new_uri = IIdentifiable(element).getURI() - mapping[old_uri] = new_uri + # store information about URI mapping + self.mapping[old_uri] = new_uri - return mapping Modified: cpsskins/branches/paris-sprint-2006/standard/io/style.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/style.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/style.py Sat Apr 29 16:23:20 2006 @@ -21,12 +21,13 @@ from zope.component import adapts from zope.interface import implements -from cpsskins.standard.formats.style import IStyle, Style from cpsskins.elements.interfaces import IIdentifiable +from cpsskins.standard.formats.style import IStyle, Style from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.setup.io import DataImporter, DataExporter -class Exporter(object): - """This adapter makes it possible to export style resources +class Exporter(DataExporter): + """Export style resources """ implements(IDataExporter) @@ -46,15 +47,11 @@ 'selectors': selectors, } -class Importer(object): - """This adapter makes it possible to import style resources. +class Importer(DataImporter): + """Import style resources. """ implements(IDataImporter) - def __init__(self, context, request): - self.context = context - self.request = request - def load(self, dom): storage = self.context Modified: cpsskins/branches/paris-sprint-2006/standard/io/theme.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/theme.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/theme.py Sat Apr 29 16:23:20 2006 @@ -24,10 +24,11 @@ from zope.interface import implements from cpsskins.elements.interfaces import IIdentifiable -from cpsskins.setup.interfaces import IDataExporter, IDataImporter from cpsskins.elements.interfaces import ITheme +from cpsskins.setup.interfaces import IDataExporter, IDataImporter +from cpsskins.setup.io import DataImporter, DataExporter -class Exporter(object): +class Exporter(DataExporter): """Export themes """ implements(IDataExporter) @@ -52,15 +53,11 @@ } -class Importer(object): +class Importer(DataImporter): """Import themes """ - adapts(ITheme) implements(IDataImporter) - def __init__(self, context): - self.context = context - def load(self, xml=u''): context = self.context dom = parseString(xml) Modified: cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/theme.zcml Sat Apr 29 16:23:20 2006 @@ -11,8 +11,12 @@ /> <!-- XML import --> - <adapter - factory=".theme.Importer" + <browser:view + provides="cpsskins.setup.interfaces.IDataImporter" + for="cpsskins.thememanager.IThemeManagementFolder" + class=".theme.Exporter" + permission="zope.ManageContent" + name="theme" /> </configure> Modified: cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml (original) +++ cpsskins/branches/paris-sprint-2006/standard/io/widget.zcml Sat Apr 29 16:23:20 2006 @@ -6,7 +6,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataExporter" for="cpsskins.standard.formats.widget.IWidget" - class="cpsskins.setup.utils.ObjectExporter" + class="cpsskins.setup.io.ObjectExporter" permission="zope.ManageContent" /> @@ -14,7 +14,7 @@ <browser:view provides="cpsskins.setup.interfaces.IDataImporter" for="cpsskins.standard.formats.storage.IFormatStorage" - class="cpsskins.setup.utils.ObjectImporter" + class="cpsskins.setup.io.ObjectImporter" permission="zope.ManageContent" name="widget" /> Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Sat Apr 29 16:23:20 2006 @@ -172,15 +172,14 @@ data = archive[u'%s.xml' % storage_id] uri_mapping.update(self.importStorage(storage_id, data)) - for k, v in uri_mapping.items(): - print '%s -> %s' % (k, v) - # relations - relations = mgr[u'relations'] + relations = mgr.getRelationStorage() relations.purge() - relations_data = archive[u'relations.xml'] - self.importStorage(u'relations', relations_data) + dom = parseString(archive[u'relations.xml']) + importer = getMultiAdapter((relations, self.request), IDataImporter) + importer.mapping = uri_mapping + importer.load(dom) ################################################################### # Snapshots @@ -251,7 +250,9 @@ dom = parseString(xml) importer = getMultiAdapter((storage, request), IDataImporter) - return importer.load(dom) + importer.load(dom) + return importer.mapping + ################################################################### # Themes -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins