Changeset 1564 in products
- Timestamp:
- Jan 15, 2010 10:33:16 PM (14 years ago)
- Location:
- quintagroup.transmogrifier/trunk/quintagroup/transmogrifier
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/configure.zcml
r1563 r1564 135 135 name="quintagroup.transmogrifier.portletsimporter" 136 136 /> 137 138 <adapter factory=".portlets.PortletAssignmentExportImportHandler" /> 137 139 138 140 <transmogrifier:registerConfig -
quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/portlets.py
r1563 r1564 2 2 3 3 from zope.interface import classProvides, implements, providedBy 4 from zope.component import getUtilitiesFor, queryMultiAdapter 4 from zope.component import getUtilitiesFor, queryMultiAdapter, getUtility, \ 5 getMultiAdapter, adapts 6 from zope.component.interfaces import IFactory 7 from zope.app.container.interfaces import INameChooser 5 8 6 9 from plone.portlets.interfaces import ILocalPortletAssignable, IPortletManager,\ 7 IPortletAssignmentMapping 10 IPortletAssignmentMapping, IPortletAssignment 8 11 from plone.portlets.constants import CONTEXT_CATEGORY 9 12 from plone.app.portlets.interfaces import IPortletTypeInterface 10 13 from plone.app.portlets.exportimport.interfaces import IPortletAssignmentExportImportHandler 14 from plone.app.portlets.exportimport.portlets import PropertyPortletAssignmentExportImportHandler 15 from plone.app.portlets.interfaces import IPortletTypeInterface 11 16 12 17 from collective.transmogrifier.interfaces import ISection, ISectionBlueprint … … 120 125 yield item; continue 121 126 122 #if ILocalPortletAssignable.providedBy(obj):123 #data = None124 #data = item[fileskey]['portlets']['data']125 #doc = minidom.parseString(data)126 #root = doc.documentElement127 #children = [k for k in root.childNodes]128 #for child in children:129 #if child.nodeName != 'assignment':130 #continue131 #self.importPortlet(child)127 if ILocalPortletAssignable.providedBy(obj): 128 data = None 129 data = item[fileskey]['portlets']['data'] 130 doc = minidom.parseString(data) 131 root = doc.documentElement 132 for elem in root.childNodes: 133 if elem.nodeName == 'assignment': 134 self.importAssignment(obj, elem) 135 #elif elem.nodeName == 'blacklist': 136 #self.importBlacklist(obj, elem) 132 137 133 138 yield item 139 140 def importAssignment(self, obj, node): 141 """ Import an assignment from a node 142 """ 143 # 1. Determine the assignment mapping and the name 144 manager_name = node.getAttribute('manager') 145 category = node.getAttribute('category') 146 147 manager = getUtility(IPortletManager, manager_name) 148 mapping = getMultiAdapter((obj, manager), IPortletAssignmentMapping) 149 150 # 2. Either find or create the assignment 151 assignment = None 152 name = node.getAttribute('name') 153 if name: 154 assignment = mapping.get(name, None) 155 156 type_ = node.getAttribute('type') 157 158 if assignment is None: 159 portlet_factory = getUtility(IFactory, name=type_) 160 assignment = portlet_factory() 161 162 if not name: 163 chooser = INameChooser(mapping) 164 name = chooser.chooseName(None, assignment) 165 166 mapping[name] = assignment 167 168 # aq-wrap it so that complex fields will work 169 assignment = assignment.__of__(obj) 170 171 # 3. Use an adapter to update the portlet settings 172 portlet_interface = getUtility(IPortletTypeInterface, name=type_) 173 assignment_handler = IPortletAssignmentExportImportHandler(assignment) 174 assignment_handler.import_assignment(portlet_interface, node) 175 176 class PortletAssignmentExportImportHandler(PropertyPortletAssignmentExportImportHandler): 177 """ This adapter is needed because original fails to handle text from 178 pretty printed XML file. 179 """ 180 adapts(IPortletAssignment) 181 182 def extract_text(self, node): 183 text = super(PortletAssignmentExportImportHandler, self).extract_text(node) 184 # strip text to remove newlines and space character from the beginning 185 # and the end 186 return text.strip() -
quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/portlets.txt
r1563 r1564 44 44 ... [portletsimporter] 45 45 ... blueprint = quintagroup.transmogrifier.portletsimporter 46 ... files-key = files 46 47 ... """ 47 48 >>> registerConfig(u'quintagroup.transmogrifier.tests.portlets', portlets) … … 71 72 </portlets> 72 73 <BLANKLINE> 73 >>> pprint.pprint(plone.updated) 74 () 74 {'_path': 'other-assignable', 75 'files': {'portlets': {'data': ... 76 'name': '.portlets.xml'}}} 77 >>> 'habra-rss' in mapping 78 True 79 >>> mapping['habra-rss'].count 80 20 81 >>> mapping['habra-rss'].url 82 u'http://habrahabr.ru/rss/' 83 >>> mapping['habra-rss'].portlet_title 84 u'Habrahabr RSS feed' 85 >>> mapping['habra-rss'].timeout 86 120 -
quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/tests.py
r1563 r1564 1055 1055 return [''] + self._last_path.split('/') 1056 1056 1057 updated = ()1058 def _updateProperty(self, id, value):1059 self.updated += ((self._last_path, id, value))1060 1061 1057 portal = MockPortal() 1062 1058 test.globs['plone'] = portal … … 1074 1070 dict(_path='spam/eggs/notassignable'), 1075 1071 dict(_path='assignable'), 1072 dict(_path='other-assignable', 1073 files=dict(portlets=dict( 1074 name='.portlets.xml', 1075 data="""<?xml version="1.0" encoding="utf-8"?> 1076 <portlets> 1077 <assignment category="context" key="/other-assignable" manager="plone.leftcolumn" name="habra-rss" type="portlets.rss"> 1078 <property name="count"> 1079 20 1080 </property> 1081 <property name="url"> 1082 http://habrahabr.ru/rss/ 1083 </property> 1084 <property name="portlet_title"> 1085 Habrahabr RSS feed 1086 </property> 1087 <property name="timeout"> 1088 120 1089 </property> 1090 </assignment> 1091 </portlets> 1092 """) 1093 ) 1094 ) 1076 1095 ) 1077 1096 … … 1100 1119 provideAdapter(localPortletAssignmentMappingAdapter) 1101 1120 mapping = getMultiAdapter((portal, manager), IPortletAssignmentMapping) 1121 test.globs['mapping'] = mapping 1102 1122 1103 1123 # register portlet (this is what plone:portlet zcml directive does) … … 1133 1153 field.set(assignment, v) 1134 1154 1135 # register adapter for portlet assignment export/import1136 from plone.app.portlets.exportimport.portlets import PropertyPortletAssignmentExportImportHandler1137 provideAdapter(PropertyPortletAssignmentExportImportHandler)1138 1139 1155 def test_suite(): 1140 1156 import sys
Note: See TracChangeset
for help on using the changeset viewer.