Author: jmorliaguet Date: Wed Dec 7 13:44:23 2005 New Revision: 1976 Added: cpsskins/branches/jmo-perspectives/perspectives/perspective.xml (contents, props changed) Modified: cpsskins/branches/jmo-perspectives/configuration/settings/metaconfigure.py cpsskins/branches/jmo-perspectives/configuration/settings/metadirectives.py cpsskins/branches/jmo-perspectives/configure.zcml cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml cpsskins/branches/jmo-perspectives/engines/default/formats/style.py cpsskins/branches/jmo-perspectives/perspectives/configure.zcml cpsskins/branches/jmo-perspectives/perspectives/perspective.py cpsskins/branches/jmo-perspectives/profiles/default/configure.zcml cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml cpsskins/branches/jmo-perspectives/profiles/default/perspectives.zcml cpsskins/branches/jmo-perspectives/setup/interfaces.py Log:
- added an XML importer and exporter for settings (currently for styles and perspectives) - it is not activated yet since the registration occurs too early (in meta.zcml instead of zope.app.appsetup) Modified: cpsskins/branches/jmo-perspectives/configuration/settings/metaconfigure.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/settings/metaconfigure.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/settings/metaconfigure.py Wed Dec 7 13:44:23 2005 @@ -18,25 +18,30 @@ __docformat__ = "reStructuredText" from zope.component import queryUtility +from zope.component.interfaces import IFactory from zope.configuration.exceptions import ConfigurationError -from zope.xmlpickle import xmlpickle from cpsskins.engines.default.formats.style import Resources +from cpsskins.setup.interfaces import ISetting, IResourceImporter -def setting(_context, name=u'', type=None, resource=None): +def setting(_context, name=u'', factory=None, resource=None): - if queryUtility(type, name) is not None: + if queryUtility(ISetting, name) is not None: raise ConfigurationError( "The '%s' setting has already been registered." % name) + if not factory: + raise ConfigurationError("Must specify a resource factory.") + if not resource: raise ConfigurationError("Must specify a resource file.") f = open(resource) - pickle = f.read() + xml = f.read() f.close() - resource_object = xmlpickle.loads(pickle) + resource_object = factory() + IResourceImporter(resource_object).load(xml) # register the style as a global setting resources = Resources(resource_object) Modified: cpsskins/branches/jmo-perspectives/configuration/settings/metadirectives.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/settings/metadirectives.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/settings/metadirectives.py Wed Dec 7 13:44:23 2005 @@ -33,14 +33,14 @@ min_dots=1, ) - type = GlobalObject( - title=_("Type"), - description=_("The type of setting."), + factory = GlobalObject( + title=_("Factory"), + description=_("The resource factory."), required=False, ) resource = Path( - title=_("File"), + title=_("Resource"), description=_("The resource file."), required=False, ) Modified: cpsskins/branches/jmo-perspectives/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/configure.zcml Wed Dec 7 13:44:23 2005 @@ -72,6 +72,8 @@ <!-- Package includes --> + <include package=".perspectives" /> + <include package=".controllers" /> <include package=".elements" /> @@ -88,8 +90,6 @@ <include package=".engines" /> - <include package=".perspectives" /> - <include package=".configuration" /> <include package=".profiles" /> Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml Wed Dec 7 13:44:23 2005 @@ -31,7 +31,6 @@ /> <!-- XML export --> - <browser:page name="exporter" for=".interfaces.IStyle" @@ -40,6 +39,11 @@ template="style.xml" /> + <!-- XML import --> + <adapter + factory=".style.Importer" + /> + <!-- Widget --> <cpsskins:format Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/style.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/style.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/style.py Wed Dec 7 13:44:23 2005 @@ -17,17 +17,20 @@ """ __docformat__ = "reStructuredText" +from xml.dom.minidom import parseString + from zope.app.container.btree import BTreeContainer from zope.app.publisher.browser import BrowserView +from zope.component import adapts from zope.interface import implements, alsoProvides from zope.i18nmessageid import MessageFactory from cpsskins.elements.format import Format from cpsskins.engines.default.formats.interfaces import IStyle from cpsskins.relations import Predicate -from cpsskins.setup.resources import ResourceManager -from cpsskins.setup.interfaces import IResourceExporter +from cpsskins.setup.manager import ResourceManager from cpsskins.setup.interfaces import IResourceType +from cpsskins.setup.interfaces import IResourceExporter, IResourceImporter _ = MessageFactory("cpsskins") @@ -157,7 +160,7 @@ resource_type = IStyle class Exporter(BrowserView): - """This adapter makes it possible to export resources + """This adapter makes it possible to export style resources """ implements(IResourceExporter) @@ -171,3 +174,25 @@ for name, value in v.items()] info.append({'selector': k, 'properties': properties}) return info + +class Importer(object): + """This adapter makes it possible to import style resources. + """ + adapts(IStyle) + implements(IResourceImporter) + + def __init__(self, context): + self.context = context + + def load(self, xml=u''): + context = self.context + dom = parseString(xml) + for style in dom.getElementsByTagName('style'): + for sel in style.getElementsByTagName('selector'): + sel_name = sel.getAttribute('name') + context[sel_name] = {} + for prop in selector.getElementsByTagName('property'): + name = propgetAttribute('name') + value = prop.getAttribute('value') + context[selector_name][name] = value + Modified: cpsskins/branches/jmo-perspectives/perspectives/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/perspectives/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/perspectives/configure.zcml Wed Dec 7 13:44:23 2005 @@ -1,17 +1,10 @@ <configure xmlns="http://namespaces.zope.org/zope" + xmlns:browser="http://namespaces.zope.org/browser" xmlns:i18n="http://namespaces.zope.org/i18n" i18n_domain="cpsskins" > - <!-- this adapter makes elements relatable --> - - <adapter - for=".interfaces.IPerspective" - factory=".Relatable" - provides="cpsskins.relations.interfaces.IRelatable" - /> - <content class=".Perspective"> <require @@ -26,4 +19,27 @@ </content> + <!-- this adapter makes elements relatable --> + <adapter + for=".interfaces.IPerspective" + factory=".Relatable" + provides="cpsskins.relations.interfaces.IRelatable" + /> + + <!-- XML export --> + <browser:page + name="exporter" + for=".interfaces.IPerspective" + class=".perspective.Exporter" + permission="zope.ManageContent" + template="perspective.xml" + /> + + <!-- XML import --> + <adapter + for=".interfaces.IPerspective" + factory=".perspective.Importer" + provides="cpsskins.setup.interfaces.IResourceImporter" + /> + </configure> Modified: cpsskins/branches/jmo-perspectives/perspectives/perspective.py ============================================================================== --- cpsskins/branches/jmo-perspectives/perspectives/perspective.py (original) +++ cpsskins/branches/jmo-perspectives/perspectives/perspective.py Wed Dec 7 13:44:23 2005 @@ -17,10 +17,14 @@ """ __docformat__ = "reStructuredText" +from zope.app.publisher.browser import BrowserView +from zope.component import adapts from zope.interface import implements, alsoProvides from cpsskins.perspectives.interfaces import IPerspective +from cpsskins.relations.interfaces import IRelatable from cpsskins.setup.interfaces import IResourceType +from cpsskins.setup.interfaces import IResourceExporter, IResourceImporter alsoProvides(IPerspective, IResourceType) @@ -52,9 +56,38 @@ class Relatable(object): """This adapter makes perspectives relatable. """ + adapts(IPerspective) + implements(IRelatable) + def __init__(self, context): self.context = context def __str__(self): return str(self.context) +class Exporter(BrowserView): + """This view makes it possible to export style resource data + """ + implements(IResourceExporter) + + def export(self): + return self.template() + +class Importer(object): + """This adapter makes it possible to import style resource data + """ + adapts(IPerspective) + implements(IResourceImporter) + + def __init__(self, context): + self.context = context + + def load(self, xml=u''): + context = self.context + dom = parseString(xml) + perspectives = dom.getElementsByTagName('perspective') + if perspectives: + perspective = perspectives[0] + context.name = perspective.getAttribute('name') + context.title = perspective.getAttribute('value') + Added: cpsskins/branches/jmo-perspectives/perspectives/perspective.xml ============================================================================== --- (empty file) +++ cpsskins/branches/jmo-perspectives/perspectives/perspective.xml Wed Dec 7 13:44:23 2005 @@ -0,0 +1,4 @@ +<?xml version="1.0"?> +<perspective xmlns:tal="http://xml.zope.org/namespaces/tal" + tal:attributes="name context/name; value context/value" +/> Modified: cpsskins/branches/jmo-perspectives/profiles/default/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/profiles/default/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/profiles/default/configure.zcml Wed Dec 7 13:44:23 2005 @@ -3,6 +3,5 @@ <!-- Perspectives --> - <include file="perspectives.zcml" /> </configure> Modified: cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml ============================================================================== --- cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml (original) +++ cpsskins/branches/jmo-perspectives/profiles/default/perspectives.xml Wed Dec 7 13:44:23 2005 @@ -1,16 +1,2 @@ <?xml version="1.0" encoding="utf-8" ?> -<pickle> - <object> - <klass> - <global name="Perspective" module="cpsskins.perspectives"/> - </klass> - <attributes> - <attribute name="name"> - <string>resource.perspective.global</string> - </attribute> - <attribute name="title"> - <unicode>Global perspective</unicode> - </attribute> - </attributes> - </object> -</pickle> +<perspective name="perspective.global" title="Global perspective" /> Modified: cpsskins/branches/jmo-perspectives/profiles/default/perspectives.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/profiles/default/perspectives.zcml (original) +++ cpsskins/branches/jmo-perspectives/profiles/default/perspectives.zcml Wed Dec 7 13:44:23 2005 @@ -3,7 +3,7 @@ <setting name="perspective.global" - type="cpsskins.perspectives.interfaces.IPerspective" + factory="cpsskins.perspectives.perspective.Perspective" resource="perspectives.xml" /> Modified: cpsskins/branches/jmo-perspectives/setup/interfaces.py ============================================================================== --- cpsskins/branches/jmo-perspectives/setup/interfaces.py (original) +++ cpsskins/branches/jmo-perspectives/setup/interfaces.py Wed Dec 7 13:44:23 2005 @@ -72,7 +72,14 @@ """Customize a resource.""" class IResourceExporter(Interface): - """A resource exporter is used to export resources. + """A resource exporter is used to export resource data. """ def export(): """Export to XML.""" + +class IResourceImporter(Interface): + """A resource exporter is used to import resource data. + """ + def load(xml): + """Load data from XML.""" + -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins