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

Reply via email to