Changeset 1566 in products


Ignore:
Timestamp:
Jan 15, 2010 11:35:14 PM (14 years ago)
Author:
koval
Message:

added handling of not satisfied constaints in the portlet assignment importer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.transmogrifier/trunk/quintagroup/transmogrifier/portlets.py

    r1564 r1566  
     1import logging 
    12from xml.dom import minidom 
    23 
     
    67from zope.component.interfaces import IFactory 
    78from zope.app.container.interfaces import INameChooser 
     9from zope.schema._bootstrapinterfaces import ConstraintNotSatisfied 
     10from zope.schema.interfaces import ICollection 
     11 
    812 
    913from plone.portlets.interfaces import ILocalPortletAssignable, IPortletManager,\ 
     
    5155 
    5256                root = self.doc.createElement('portlets') 
     57 
    5358                for elem in self.exportAssignments(obj): 
    5459                    root.appendChild(elem) 
     
    174179        assignment_handler.import_assignment(portlet_interface, node) 
    175180 
     181logger = logging.getLogger('quintagroup.transmogrifier.portletsimporter') 
     182 
    176183class PortletAssignmentExportImportHandler(PropertyPortletAssignmentExportImportHandler): 
    177184    """ This adapter is needed because original fails to handle text from  
     
    185192        # and the end 
    186193        return text.strip() 
     194 
     195    def import_node(self, interface, child): 
     196        """Import a single <property /> node 
     197        """ 
     198        property_name = child.getAttribute('name') 
     199 
     200        field = interface.get(property_name, None) 
     201        if field is None: 
     202            return 
     203 
     204        field = field.bind(self.assignment) 
     205        value = None 
     206 
     207        # If we have a collection, we need to look at the value_type. 
     208        # We look for <element>value</element> child nodes and get the 
     209        # value from there 
     210        if ICollection.providedBy(field): 
     211            value_type = field.value_type 
     212            value = [] 
     213            for element in child.childNodes: 
     214                if element.nodeName != 'element': 
     215                    continue 
     216                element_value = self.extract_text(element) 
     217                value.append(self.from_unicode(value_type, element_value)) 
     218            value = self.field_typecast(field, value) 
     219 
     220        # Otherwise, just get the value of the <property /> node 
     221        else: 
     222            value = self.extract_text(child) 
     223            value = self.from_unicode(field, value) 
     224 
     225        try: 
     226            field.validate(value) 
     227        except ConstraintNotSatisfied, e: 
     228            logger.warning('"%s" value doesn\'t satisfy constaints for "%s:%s" field' % \ 
     229                (value, self.assignment.__name__, field.__name__)) 
     230 
     231        field.set(self.assignment, value) 
Note: See TracChangeset for help on using the changeset viewer.