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