Changeset 1564 in products for quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/portlets.py
- Timestamp:
- Jan 15, 2010 10:33:16 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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()
Note: See TracChangeset
for help on using the changeset viewer.