Author: jmorliaguet Date: Mon May 1 14:11:35 2006 New Revision: 3004 Modified: cpsskins/branches/paris-sprint-2006/ftests/test_appsetup.py cpsskins/branches/paris-sprint-2006/setup/configure.zcml cpsskins/branches/paris-sprint-2006/setup/interfaces.py cpsskins/branches/paris-sprint-2006/setup/io.py cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Log:
- the content type name is set as an XML attribute in case it is different from the resource type (as it's the case with portlets) Modified: cpsskins/branches/paris-sprint-2006/ftests/test_appsetup.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ftests/test_appsetup.py (original) +++ cpsskins/branches/paris-sprint-2006/ftests/test_appsetup.py Mon May 1 14:11:35 2006 @@ -26,6 +26,7 @@ from zope.app.testing.functional import FunctionalDocFileSuite from zope.interface import alsoProvides, Interface from zope.component.interfaces import IFactory +from zope.app.content.interfaces import IContentType from cpsskins import elements from cpsskins.elements.interfaces import IElement @@ -46,7 +47,7 @@ # register the setting gsm.registerUtility(DummyFactory, IFactory, u'dummy') - alsoProvides(IDummyResource, IResourceType) + alsoProvides(IDummyResource, IContentType) def test_suite(): return unittest.TestSuite(( 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 Mon May 1 14:11:35 2006 @@ -85,6 +85,10 @@ /> <adapter + factory="cpsskins.setup.io.TextField" + /> + + <adapter factory="cpsskins.setup.io.TextLineField" /> 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 Mon May 1 14:11:35 2006 @@ -143,17 +143,12 @@ attributes = Attribute(u"The list of fields written as DOM attributes.") - properties = Attribute(u"Extra properties.") - def setDocument(document): """Set the document element""" def getDocument(): """Get the document element""" - def addProperty(name, value): - """Add a property""" - def writeAsAttributes(attributes): """Set the list of fields written as attributes.""" Modified: cpsskins/branches/paris-sprint-2006/setup/io.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/io.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/io.py Mon May 1 14:11:35 2006 @@ -21,12 +21,13 @@ import zope.schema -from zope.component import adapts, getMultiAdapter +from zope.component import adapts, getMultiAdapter, getUtilitiesFor from zope.interface import implements, Interface from zope.app.container.interfaces import IItemContainer from cpsskins.relations.interfaces import IRelatable from cpsskins.setup.interfaces import IDOMAdapter, IIdentifiable, IType +from cpsskins.setup.interfaces import IDOMAdapter, IIdentifiable logger = logging.getLogger("cpsskins") @@ -36,7 +37,6 @@ document = None mapping = {} attributes = () - properties = {} def __init__(self, context, node): self.context = context @@ -51,11 +51,6 @@ "use setDocument(document) to set the document element.") return self.document - def addProperty(self, name, value): - if not isinstance(value, basestring): - raise TypeError("Properties must be strings: %s" % value) - self.properties[name] = value - def writeAsAttributes(self, attributes): self.attributes = attributes @@ -77,20 +72,30 @@ """ implements(IDOMAdapter) + _reserved_attrs = u'id', u'type' + + def writeAsAttributes(self, attributes): + for attr in self._reserved_attrs: + if attr in attributes: + raise ValueError("'%s' is a reserved attribute." % attr) + self.attributes = attributes + def save(self): context = self.context node = self.node document = self.getDocument() + type = IType(context) + element_el = document.createElement(IType(context).resourcename) element_el.setAttribute(u'id', unicode(IRelatable(context))) - for k, v in self.properties.items(): - element_el.setAttribute(k, unicode(v)) + if type.contentname != type.resourcename: + element_el.setAttribute(u'type', unicode(type.contentname)) # properties - schema = IType(context).getContentType() + schema = type.getContentType() for attr, field in zope.schema.getFieldsInOrder(schema): obj = getattr(context, attr) @@ -191,6 +196,12 @@ adapts(zope.schema.interfaces.IInt) implements(IFieldIO) +class TextField(BaseFieldIO): + """A text line field. + """ + adapts(zope.schema.interfaces.IText) + implements(IFieldIO) + class TextLineField(BaseFieldIO): """A text line field. """ 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 Mon May 1 14:11:35 2006 @@ -250,13 +250,9 @@ root = document.documentElement for id in storage: - item = storage[id] - type = IType(item) - exporter = getMultiAdapter((item, root), IDOMAdapter) + exporter = getMultiAdapter((storage[id], root), IDOMAdapter) exporter.setDocument(document) - #if type.contentname != type.resourcename: - # exporter.addProperty(u'type', type.contentname) - exporter.writeAsAttributes((u'title', u'description', u'type')) + exporter.writeAsAttributes((u'title', u'description')) exporter.save() xml = document.toprettyxml(indent=u' ', encoding=u'utf-8') -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins