Author: jmorliaguet
Date: Tue Dec  6 20:19:28 2005
New Revision: 1970

Added:
   cpsskins/branches/jmo-perspectives/engines/default/formats/style.xml   
(contents, props changed)
Modified:
   cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml
   cpsskins/branches/jmo-perspectives/engines/default/formats/style.py
   cpsskins/branches/jmo-perspectives/engines/sitedesigner/browser.py
   cpsskins/branches/jmo-perspectives/setup/interfaces.py
Log:

- added an xml exporter for styles



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   
Tue Dec  6 20:19:28 2005
@@ -1,5 +1,6 @@
 <configure
     xmlns="http://namespaces.zope.org/zope";
+    xmlns:browser="http://namespaces.zope.org/browser";
     xmlns:cpsskins="http://namespaces.zope.org/cpsskins";>
 
   <!-- Format storage -->
@@ -49,6 +50,16 @@
       factory=".style.Resources"
   />
 
+  <!-- XML export -->
+
+  <browser:page
+      name="exporter"
+      for=".interfaces.IStyle"
+      class=".style.Exporter"
+      permission="zope.ManageContent"
+      template="style.xml"
+  />
+
   <!-- 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 Tue Dec 
 6 20:19:28 2005
@@ -17,7 +17,9 @@
 """
 __docformat__ = "reStructuredText"
 
+from zope.app import pagetemplate
 from zope.app.container.btree import BTreeContainer
+from zope.app.publisher.browser import BrowserView
 from zope.interface import implements
 from zope.i18nmessageid import MessageFactory
 
@@ -26,6 +28,7 @@
 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
 
 _ = MessageFactory("cpsskins")
 
@@ -152,3 +155,18 @@
     setting_type = configuration.IStyle
     setting_factory = configuration.Style
 
+class Exporter(BrowserView):
+    """This adapter makes it possible to export resources
+    """
+    implements(IResourceExporter)
+
+    def export(self):
+        return self.template()
+
+    def getInfo(self):
+        info = []
+        for k, v in self.context.items():
+            properties = [{'name': name, 'value': value}
+                         for name, value in v.items()]
+            info.append({'selector': k, 'properties': properties})
+        return info

Added: cpsskins/branches/jmo-perspectives/engines/default/formats/style.xml
==============================================================================
--- (empty file)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/style.xml        
Tue Dec  6 20:19:28 2005
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<style xmlns:tal="http://xml.zope.org/namespaces/tal";>
+  <selector tal:repeat="info view/getInfo"
+            tal:attributes="name info/selector">
+    <property tal:repeat="prop info/properties"
+              tal:attributes="name prop/name; value prop/value" />
+  </selector>
+</style>

Modified: cpsskins/branches/jmo-perspectives/engines/sitedesigner/browser.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/sitedesigner/browser.py  
(original)
+++ cpsskins/branches/jmo-perspectives/engines/sitedesigner/browser.py  Tue Dec 
 6 20:19:28 2005
@@ -24,12 +24,11 @@
 
 from zope.app.interface import queryType
 from zope.app.publisher.browser import BrowserView
-from zope.component import getUtilitiesFor, getUtility
-from zope import xmlpickle 
+from zope.component import getUtilitiesFor, getUtility, getMultiAdapter
 
 from cpsskins.setup.interfaces import (
-    ISetting, ISettingType, IResourceType, IResource, IResourceManager)
-
+    ISetting, ISettingType, IResourceType, IResource, IResourceManager,
+    IResourceExporter)
 
 setting_xml = """
 <configure
@@ -78,6 +77,8 @@
     def exportSetting(self, name=u''):
         """Export the setting as a zip file.
         """
+        context = self.context
+        request = self.request
         if not name:
             raise KeyError("Must specify a setting's name.")
 
@@ -90,34 +91,36 @@
         setting_filename = '%s.zcml' % filename
         resource_filename = '%s.xml' % filename
 
-        response = self.request.response
+        response = request.response
         response.setHeader('content-type', 'application/x-gzip')
         response.setHeader('Content-disposition',
                            'attachment; filename=%s' % archive_filename)
 
         # TODO to move to cpsskins.setup
-        pickle = xmlpickle.dumps(resource)
-        archive = StringIO()
-        file = TarFile.open(archive_filename, 'w:gz', archive)
+        archive_stream = StringIO()
+        file = TarFile.open(archive_filename, 'w:gz', archive_stream)
 
         # export the resource
+        exporter = getMultiAdapter((resource, request), name='exporter')
+        text = exporter()
+
         info = TarInfo(resource_filename)
-        info.size = len(pickle)
+        info.size = len(text)
         info.mtime = time.time()
-        file.addfile(info, StringIO(pickle))
+        file.addfile(info, StringIO(text))
 
         # write the zcml
-        info = TarInfo(setting_filename)
         setting_zcml = setting_xml % {
             'resource_type': resource_type.__identifier__,
             'setting_name': name,
             'resource_name': getattr(resource, 'name', None) or \
-                             getattr(resource, 'identifier', ''),
+                             resource.identifier,
             'resource_filename': resource_filename,
             }
+        info = TarInfo(setting_filename)
         info.size = len(setting_zcml)
         info.mtime = time.time()
         file.addfile(info, StringIO(setting_zcml))
 
         file.close()
-        return archive.getvalue()
+        return archive_stream.getvalue()

Modified: cpsskins/branches/jmo-perspectives/setup/interfaces.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/setup/interfaces.py      (original)
+++ cpsskins/branches/jmo-perspectives/setup/interfaces.py      Tue Dec  6 
20:19:28 2005
@@ -73,3 +73,9 @@
 
     def customize(name, context):
         """Customize a resource."""
+
+class IResourceExporter(Interface):
+    """A resource exporter is used to export resources.
+    """
+    def export():
+        """Export to XML."""
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to