コード例 #1
0
ファイル: Fields.py プロジェクト: vwc/fv
    def _setCustomImages(self, instance, value, **kwargs):
        """ 
        """
        customImageCount = int(instance.REQUEST.get('customImageCount', 0))
        default = int(instance.REQUEST.get('defaultImage', 0))
        for i in range(customImageCount):
            func = instance.REQUEST.get('%s_%s_delete'%(self.getName(), i))
            id = instance.REQUEST.get('%s_%s_id'%(self.getName(), i))
            imageObj = instance.get(id)
            if func=='delete':
                #delete the image object
                obj_parent = imageObj.aq_inner.aq_parent
                obj_parent.manage_delObjects([imageObj.getId()])
                instance.plone_utils.addPortalMessage(_(u'Deleted custom image.'))
            elif func=='nochange':
                pass
            else:
#                #overwrite with new image if exists
                newImageObj = instance.REQUEST.get('%s_%s_image'% (self.getName(), i))
                if not newImageObj:
                    continue
                mt_tool = getToolByName(instance,'mimetypes_registry')
                mimetype = str(mt_tool.classify(newImageObj.read(1024)))
                newImageObj.seek(0)
                data = newImageObj.read()
                imageObj.setImage(newImageObj)
                newFileName = newImageObj.filename
                imageObj.setTitle(newFileName)
            if default == i :
                id = instance.REQUEST.get('%s_%s_id'%(self.getName(), i))
                ObjectField.set(self, instance, id, **kwargs)
コード例 #2
0
ファイル: Fields.py プロジェクト: vwc/fv
 def set(self, instance, value, **kwargs):
     #set the existing images
     self._setCustomImages(instance, value, **kwargs)
     default = int(instance.REQUEST.get('defaultImage', 0))
     customImageCount = int(instance.REQUEST.get('customImageCount', 0))
     if default >= customImageCount:
         newDefault = default - customImageCount
     for index,fileObj in enumerate(value):
         try:
             fileObj.seek(0)
         except:
             continue
         data = fileObj.read()
         if not data:
             continue
         id=instance.generateUniqueId('Image')
         new_id = instance.invokeFactory('Image', id=id)
         obj = getattr(instance, new_id)
         if not obj:
             raise "File could not be created"
         filename = fileObj.filename
         obj.unmarkCreationFlag()
         obj.setImage(fileObj)
         obj.setTitle(filename)
         obj.reindexObject()
         if index == newDefault:
             ObjectField.set(self, instance, new_id, **kwargs)
コード例 #3
0
 def set(self, instance, value, **kwargs):
     if type(value) != type({}) and hasattr(value, 'keys'):
         new_value = {}
         new_value.update(value)
         value = new_value
         
     ObjectField.set(self, instance, value, **kwargs)
コード例 #4
0
 def set(self, instance, value, **kwargs):
     __traceback_info__ = value, type(value)
     if isinstance(value, basestring):
         value = value.split('\n')
     value = [decode(v.strip(), instance, **kwargs)
              for v in value if v and v.strip()]
     if config.ZOPE_LINES_IS_TUPLE_TYPE:
         value = tuple(value)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #5
0
 def set(self, instance, value, **kwargs):
     """
     Check if value is an actual date/time value. If not, attempt
     to convert it to one; otherwise, set to None. Assign all
     properties passed as kwargs to object.
     """
     if not value:
         value = None
     ObjectField.set(self, instance, value, **kwargs)
コード例 #6
0
ファイル: widgets.py プロジェクト: uwosh/UWOshOIE
    def set(self, instance, value, **kwargs):
        """If value is not defined or equal to 0, set field to false;
        otherwise, set to true."""
        if value in ['0', 'False', None, False, 0, 'No']:
            value = False
        else:
            value = True

        ObjectField.set(self, instance, value, **kwargs)
コード例 #7
0
def set(self, instance, value, **kwargs):    
    """Mutator.
    ``value`` is a list of UIDs or one UID string to which I will add a
    reference to. None and [] are equal.
    Keyword arguments may be passed directly to addReference(), thereby
    creating properties on the reference objects.
    """    
    tool = getToolByName(instance, "reference_catalog")
    backtargetUIDs = [ref.sourceUID for ref in
                     tool.getBackReferences(instance, self.relationship)]
    targetUIDs = [ref.targetUID for ref in
                 tool.getReferences(instance, self.relationship)]

    if not self.multiValued and value and type(value) not in (type(()),type([])):
        value = (value,)

    if not value:
        value = ()
    
    uids=[]
    for v in value:
        if type(v) in (type(''),type(u'')):
            uids.append(v)
        else:
            uids.append(v.UID())

    toobj = lambda uid: tool.lookupObject(uid)
    add = [toobj(v) for v in uids if v and v not in targetUIDs + backtargetUIDs]
    sub = [toobj(t) for t in targetUIDs if t not in uids]
    backsub = [toobj(t) for t in backtargetUIDs if t not in uids]
    
    toreindex = []
    
    addRef_kw = kwargs.copy()
    addRef_kw.setdefault('referenceClass', self.referenceClass)
    if addRef_kw.has_key('schema'): del addRef_kw['schema']

        
    for obj in add:
        __traceback_info__ = (instance, obj.UID(), value, targetUIDs)        
        if addRef_kw.get('isBackReference', None):
            src,tgt = obj, instance.UID()
        else:
            tgt,src = obj, instance.UID()
        tool.addReference(src, tgt, self.relationship, **addRef_kw)

    for obj in sub:
        tool.deleteReference(instance.UID(), obj, self.relationship)
    for obj in backsub:
        tool.deleteReference(obj, instance.UID(), self.relationship)

    if self.callStorageOnSet:        
        ObjectField.set(self, instance, self.getRaw(instance), **kwargs)

    for obj in sub + backsub + add:
        obj.reindexObject() 
コード例 #8
0
ファイル: record.py プロジェクト: a25kk/stv2
 def set(self, instance, value, **kwargs):
     if type(value) in StringTypes:
         try:
             value = eval(value)
             # more checks to add?
         except: # what to chatch here?
             pass
     value = self._to_dict(value)
     value = self._decode_strings(value, instance, **kwargs)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #9
0
ファイル: extender.py プロジェクト: RedTurtle/uwosh.pfg.d2c
    def set_likert(self, instance, value, **kwargs):
        if type(value) in (str, unicode):
            value = [v.strip() for v in value.split(',')]
        elif type(value) in (tuple, list, set):
            newval = {}
            for i in range(0, len(value)):
                newval[str(i + 1)] = value[i]
            value = newval

        ObjectField.set(self, instance, value, **kwargs)
コード例 #10
0
 def set(self, instance, value, **kwargs):
     if type(value) in StringTypes:
         try:
             value = eval(value)
             # more checks to add?
         except:  # what to catch here?
             pass
     value = self._to_dict(value)
     value = self._decode_strings(value, instance, **kwargs)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #11
0
 def set(self, instance, value, **kwargs):
     __traceback_info__ = value, type(value)
     if isinstance(value, basestring):
         value = value.split('\n')
     value = [
         decode(v.strip(), instance, **kwargs) for v in value
         if v and v.strip()
     ]
     if config.ZOPE_LINES_IS_TUPLE_TYPE:
         value = tuple(value)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #12
0
    def set(self, instance, value, **kwargs):
        """Mutator.

        ``value`` is a list of UIDs or one UID string to which I will add a
        reference to. None and [] are equal.

        Keyword arguments may be passed directly to addReference(), thereby
        creating properties on the reference objects.
        """
        tool = getToolByName(instance, REFERENCE_CATALOG)
        targetUIDs = [ref.sourceUID for ref in
                      tool.getBackReferences(instance, self.relationship)]

        if not self.multiValued and value \
           and type(value) not in (type(()), type([])):
            value = (value,)

        if not value:
            value = ()

        # convertobjects to uids if necessary
        uids = []
        for v in value:
            if type(v) in (type(''), type(u'')):
                uids.append(v)
            else:
                uids.append(v.UID())

        add = [v for v in uids if v and v not in targetUIDs]
        sub = [t for t in targetUIDs if t not in uids]

        # tweak keyword arguments for addReference
        addRef_kw = kwargs.copy()
        addRef_kw.setdefault('referenceClass', self.referenceClass)
        if addRef_kw.has_key('schema'): 
            del addRef_kw['schema']

        for uid in add:
            __traceback_info__ = (instance, uid, value, targetUIDs)
            if uid:
                # throws IndexError if uid is invalid
                tool.addReference(tool.lookupObject(uid), instance.UID(), 
                                  self.relationship, **addRef_kw)

        for uid in sub:
            tool.deleteReference(tool.lookupObject(uid), instance.UID(), 
                                 self.relationship)

        if self.callStorageOnSet:
            #if this option is set the reference fields's values get written
            #to the storage even if the reference field never use the storage
            #e.g. if i want to store the reference UIDs into an SQL field
            ObjectField.set(self, instance, self.getRaw(instance), **kwargs)
コード例 #13
0
    def set(self, instance, value, **kwargs):
        """
        Check if value is an actual date/time value. If not, attempt
        to convert it to one; otherwise, set to None. Assign all
        properties passed as kwargs to object.
        """
        if not value:
            value = None

        if type(value) in StringTypes:
            value = DateTimeFrom(value)

        if value and type(value) != DateTimeType:
            raise ValueError("Argument to MxDateTimeField must be either "
                             "a string or a MxDateTime object, but "
                             "got: %s" % repr(value))

        ObjectField.set(self, instance, value, **kwargs)
コード例 #14
0
    def set(self, instance, value, **kwargs):
        # Value is a list of tuple (<Answer:string>, <Checked:boolean>)
        if type(value) not in (ListType, TupleType):
            raise ValueError, "Value must be a list"

        for item in value:
            if not item or \
               type(item) not in (ListType, TupleType) or \
               len(item) != 2 or \
               type(item[0]) not in (StringType, UnicodeType) or \
               type(item[1]) not in (BooleanType,):
                raise ValueError, "list must contain tuple (<Answer:string>, <Checked:boolean>)"
        
        # Decode answer which is a string
        decoded_value = tuple([(decode(x[0].strip(), instance, **kwargs), x[1]) 
                            for x in value])
        
        ObjectField.set(self, instance, decoded_value, **kwargs)
コード例 #15
0
 def set(self, instance, value, **kwargs):
     """Adds the value to the existing text stored in the field,
     along with a small divider showing username and date of this entry.
     """
     if not value:
         return
     value = value.strip()
     date = DateTime().rfc822()
     user = getSecurityManager().getUser()
     username = user.getUserName()
     divider = "=== {} ({})".format(date, username)
     existing_remarks = instance.getRawRemarks()
     remarks = '\n'.join([divider, value, existing_remarks])
     ObjectField.set(self, instance, remarks)
     # reindex the object after save to update all catalog metadata
     instance.reindexObject()
     # notify object edited event
     event.notify(ObjectEditedEvent(instance))
コード例 #16
0
ファイル: field.py プロジェクト: macagua/eduIntelligent-cynin
    def set(self, instance, value, **kwargs):
        # Value is a list of tuple (<Answer:string>, <Checked:boolean>)
        if type(value) not in (ListType, TupleType):
            raise ValueError, "Value must be a list"

        for item in value:
            if not item or \
               type(item) not in (ListType, TupleType) or \
               len(item) != 2 or \
               type(item[0]) not in (StringType, UnicodeType) or \
               type(item[1]) not in (BooleanType,):
                raise ValueError, "list must contain tuple (<Answer:string>, <Checked:boolean>)"

        # Decode answer which is a string
        decoded_value = tuple([(decode(x[0].strip(), instance, **kwargs), x[1])
                               for x in value])

        ObjectField.set(self, instance, decoded_value, **kwargs)
コード例 #17
0
    def set(self, instance, value, **kwargs):
        """Adds the value to the existing text stored in the field,
        along with a small divider showing username and date of this entry.
        """

        if not value:
            return

        if isinstance(value, RemarksHistory):
            # Override the whole history here
            history = value

        elif isinstance(value, (list, tuple)):
            # This is a list, convert to RemarksHistory
            remarks = map(lambda item: RemarksHistoryRecord(item), value)
            history = RemarksHistory(remarks)

        elif isinstance(value, RemarksHistoryRecord):
            # This is a record, append to the history
            history = self.get_history(instance)
            history.insert(0, value)

        elif isinstance(value, six.string_types):
            # Create a new history record
            record = self.to_history_record(value)

            # Append the new record to the history
            history = self.get_history(instance)
            history.insert(0, record)

        else:
            raise ValueError("Type not supported: {}".format(type(value)))

        # Store the data
        ObjectField.set(self, instance, history)

        # N.B. ensure updated catalog metadata for the snapshot
        instance.reindexObject()

        # notify object edited event
        event.notify(ObjectEditedEvent(instance))

        # notify new remarks for e.g. later email notification etc.
        event.notify(RemarksAddedEvent(instance, history))
コード例 #18
0
 def set(self, instance, value, **kwargs):
     """Adds the value to the existing text stored in the field,
     along with a small divider showing username and date of this entry.
     """
     if not value:
         return
     value = value.strip()
     date = DateTime().rfc822()
     user = getSecurityManager().getUser()
     username = user.getUserName()
     divider = "=== {} ({})".format(date, username)
     existing_remarks = instance.getRawRemarks()
     remarks = '\n'.join([divider, value, existing_remarks])
     return ObjectField.set(self, instance, remarks)
コード例 #19
0
    def set(self, instance, value, **kwargs):
        """
        If passed-in value is a string, split at line breaks and
        remove leading and trailing white space before storing in object
        with rest of properties.

        When 'storeCompletePath' is set the field will store all parent path
        segements.
        """
        __traceback_info__ = value, type(value)
        if type(value) in STRING_TYPES:
            value =  value.split('\n')
        value = [decode(v.strip(), instance, **kwargs)
                 for v in value if v and v.strip()]

        # Expand tree
        if self.storeCompletePath:
            pathDict = dict([(item, True) for item in value])
            for val in value:
                pathSections = val.split('/')
                currentPath = ''
                for path in pathSections:
                    currentPath = "/".join([currentPath, path])
                    pathDict[currentPath] = True
            value = [item[1:] for item in pathDict.keys() if item[1:]] # Strip of leading .

        if self.storeOnlyLeaves:
            result = set()
            for v in value:
                if '/' in v:
                    v = v.split('/')[-1]
                result.add(v)
            value = list(result)

        if config.ZOPE_LINES_IS_TUPLE_TYPE:
            value = tuple(value)
        ObjectField.set(self, instance, value, **kwargs)
コード例 #20
0
    def set(self, instance, value, **kwargs):
        res = ObjectField.set(self, instance, value, **kwargs)
        if value is None:
            return res

        if isinstance(value, basestring):
            users = [value]
        elif type(value) in (types.ListType, types.TupleType):
            users = list(value)
        else:
            raise ValueError, 'only strings and lists/tuples allowed, but you provided the value %s' % value

        if self.localrole:
            localrole = self.localrole
            if isinstance(localrole, basestring):
                localrole = [localrole]
            setLocalRoles(instance, users, localrole, cumulative=self.cumulative)
        return res
コード例 #21
0
ファイル: formattablenames.py プロジェクト: a25kk/stv2
 def set(self, instance, value, **kwargs):
     value = self._decode_strings(value, instance, **kwargs)
     value = FormattableNames(value)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #22
0
 def set(self, instance, value, **kwargs):
     return ObjectField.set(self,instance,value,**kwargs)
コード例 #23
0
    def set(self, instance, value, **kwargs):
        """ Set the LikertField data """

        if type(value) in (str, str):
            value = [v.strip() for v in value.split(',')]
        ObjectField.set(self, instance, value, **kwargs)
コード例 #24
0
ファイル: likertField.py プロジェクト: vwc/fv
    def set(self, instance, value, **kwargs):
        """ Set the LikertField data """

        if type(value) in STRING_TYPES:
            value = [v.strip() for v in value.split(',')]
        ObjectField.set(self, instance, value, **kwargs)
コード例 #25
0
def set(self, instance, value, **kwargs):
    """Mutator.
    ``value`` is a list of UIDs or one UID string to which I will add a
    reference to. None and [] are equal.
    Keyword arguments may be passed directly to addReference(), thereby
    creating properties on the reference objects.
    """
    tool = getToolByName(instance, "reference_catalog")
    backtargetUIDs = [
        ref.sourceUID
        for ref in tool.getBackReferences(instance, self.relationship)
    ]
    targetUIDs = [
        ref.targetUID
        for ref in tool.getReferences(instance, self.relationship)
    ]

    if not self.multiValued and value and type(value) not in (type(
        ()), type([])):
        value = (value, )

    if not value:
        value = ()

    uids = []
    for v in value:
        if type(v) in (type(''), type(u'')):
            uids.append(v)
        else:
            uids.append(v.UID())

    toobj = lambda uid: tool.lookupObject(uid)
    add = [
        toobj(v) for v in uids if v and v not in targetUIDs + backtargetUIDs
    ]
    sub = [toobj(t) for t in targetUIDs if t not in uids]
    backsub = [toobj(t) for t in backtargetUIDs if t not in uids]

    toreindex = []

    addRef_kw = kwargs.copy()
    addRef_kw.setdefault('referenceClass', self.referenceClass)
    if addRef_kw.has_key('schema'): del addRef_kw['schema']

    for obj in add:
        __traceback_info__ = (instance, obj.UID(), value, targetUIDs)
        if addRef_kw.get('isBackReference', None):
            src, tgt = obj, instance.UID()
        else:
            tgt, src = obj, instance.UID()
        tool.addReference(src, tgt, self.relationship, **addRef_kw)

    for obj in sub:
        tool.deleteReference(instance.UID(), obj, self.relationship)
    for obj in backsub:
        tool.deleteReference(obj, instance.UID(), self.relationship)

    if self.callStorageOnSet:
        ObjectField.set(self, instance, self.getRaw(instance), **kwargs)

    for obj in sub + backsub + add:
        obj.reindexObject()
コード例 #26
0
    def set(self, instance, value, **kwargs):
        """Mutator.

        ``value`` is a list of UIDs or one UID string to which I will add a
        reference to. None and [] are equal.

        Keyword arguments may be passed directly to addReference(), thereby
        creating properties on the reference objects.
        """
        tool = getToolByName(instance, REFERENCE_CATALOG)
        targetUIDs = [ref.sourceUID for ref in
                      tool.getBackReferences(instance, self.relationship)]

        if not self.multiValued and value \
           and type(value) not in (type(()), type([])):
            value = (value,)

        if not value:
            value = ()

        # convertobjects to uids if necessary
        uids = []
        for v in value:
            if type(v) in (type(''), type(u'')):
                uids.append(v)
            else:
                uids.append(v.UID())

        add = [v for v in uids if v and v not in targetUIDs]
        sub = [t for t in targetUIDs if t not in uids]

        # tweak keyword arguments for addReference
        addRef_kw = kwargs.copy()
        addRef_kw.setdefault('referenceClass', self.referenceClass)
        if addRef_kw.has_key('schema'): 
            del addRef_kw['schema']

        for uid in add:
            __traceback_info__ = (instance, uid, value, targetUIDs)
            if uid:
                # throws IndexError if uid is invalid
                tool.addReference(tool.lookupObject(uid), instance.UID(), 
                                  self.relationship, **addRef_kw)

        for uid in sub:
            tool.deleteReference(tool.lookupObject(uid), instance.UID(), 
                                 self.relationship)

        #values are set only in reference catalog. They are missing in real content.
        #I'll try to update objects. If I fail I swallow error.
        #it makes the previous section irrelevant, but I keep it for back compatibility and permission issues
        for uid in add:
            try:
                obj = tool.lookupObject(uid)
                if obj:
                    field = self.getReferenceField(obj)
                    if field:
                        if field.multiValued:
                            values = field.get(obj)
                            if instance not in values:
                                values.append(instance)
                                field.set(obj, values)
                                obj.reindexObject()
                        else:
                            value = field.get(obj)
                            if value != instance:
                                field.set(obj, value)
                                obj.reindexObject()
            except:
                pass
        for uid in sub:
            try:
                obj = tool.lookupObject(uid)
                if obj:
                    field = self.getReferenceField(obj)
                    if field:
                        if field.multiValued:
                            values = field.get(obj)
                            if instance in values:
                                values.remove(instance)
                                field.set(obj, values)
                                obj.reindexObject()
                        else:
                            value = field.get(obj)
                            if value == instance:
                                field.set(obj, '')
                                obj.reindexObject()
            except:
                pass





        if self.callStorageOnSet:
            #if this option is set the reference fields's values get written
            #to the storage even if the reference field never use the storage
            #e.g. if i want to store the reference UIDs into an SQL field
            ObjectField.set(self, instance, self.getRaw(instance), **kwargs)
コード例 #27
0
 def set(self, instance, value, **kwargs):
     value = self._decode_strings(value, instance, **kwargs)
     value = FormattableName(value)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #28
0
ファイル: DataGridField.py プロジェクト: dtgit/dtedu
    def set(self, instance, value, **kwargs):
        """
        The passed in object should be a records object, or a sequence of dictionaries
        """
        
        # Help to localize problems in Zope trace back
        __traceback_info__ = value, type(value)

        # we sanitize the values
        cleaned = []
        doSort = False
        
        logging.debug("Setting DGF value to " + str(value))
        
        if value == ({},):
            # With some Plone versions, it looks like that AT init
            # causes DGF to get one empty dictionary as the base value
            # and later, it will be appended as a cleaned row below if 
            # we don't filter out it here. 
            value = []
            
        
        if isinstance(value, basestring):
            # In the field mutator (set) the
            # passed value is not always a record, but sometimes a string.
            # In fact the RFC822Marshaller passes a string. 
            
            logging.debug("Doing string marshalling")
            
            records = []
            dict = {}
            rows = value.strip("{}").split(',')
            for atuple in rows:
                key, val = atuple.split(":", 1)
                key, val = key.strip(), val.strip()
                try:
                    dict[key].append(val)
                except AttributeError:
                    dict[key] = [dict[key], val]
                except KeyError:
                    dict[key] = val

            if len(dict) > 0:
                records.append(dict)

            value = records         
        else:
            
            # Passed in value is a HTML form data
            # from DataGridWidget. Value is Python array,
            # each item being a dictionary with column_name : value mappins
            # + orderinder which is used in JS reordering
            
            for row in value:
                order = row.get('orderindex_', None)
                
                empty = True
                                
                if order != "template_row_marker":
                    # don't process hidden template row as
                    # input data                     
                    
                    val = {}
                    for col in self.getColumnIds():
                        val[col] = (row.get(col,'')).strip()
                        
                        if val[col] != '':
                            empty = False
                                                                        
                    if order is not None:                        
                        try:
                            order = int(order)
                            doSort = True
                        except ValueError:
                            pass

                    # create sortable tuples
                    if (not self.allow_empty_rows) and empty:
                        logger.debug("Filtered out an empty row")
                    else:
                        logger.debug("Appending cleaned row:" + str(val))
                        cleaned.append((order, val.copy()))

            if doSort:
                cleaned.sort()

            # remove order keys when sorting is complete
            value = tuple([x for (throwaway, x) in cleaned])

        # fill in data
        ObjectField.set(self, instance, value, **kwargs)
コード例 #29
0
ファイル: image_rescale.py プロジェクト: smcmahon/image_diet
    image = brain.getObject()
    field = image.Schema().get('image')
    value = field.getRaw(image)
    try:
        size = value.getSize()
    except AttributeError:
        print "Skipping %s" % image.absolute_url()
        continue
    if size[0] > max_size[0] or size[1] > max_size[1]:
        factor = min(
            float(max_size[0]) / float(value.width),
            float(max_size[1]) / float(value.height))
        w = int(factor * value.width)
        h = int(factor * value.height)
        fvalue, format = field.scale(value.data, w, h)
        data = fvalue.read()
        if len(value.data) > len(data) + margin:
            print image.getId(), value.getSize(), len(value.data), len(data)
            ObjectField.set(field, image, data)
            obj_writes += 1
            if obj_writes >= commit_at:
                print "committing"
                commit()
                obj_writes = 0
            files_scaled += 1
            saved += len(value.data) - len(data)
commit()

print "***********"
print "Files scaled: %s, Bytes saved: %s" % (files_scaled, saved)
コード例 #30
0
ファイル: _field.py プロジェクト: Vinsurya/Plone
 def set(self, instance, value, **kwargs):
     value = [isinstance(expr, Expression.Expression) and expr or
              Expression.Expression(expr) for expr in value]
     ObjectField.set(self, instance, value, **kwargs)
コード例 #31
0
ファイル: _field.py プロジェクト: Vinsurya/Plone
 def set(self, instance, value, **kwargs):
     if not isinstance(value, Expression.Expression):
         value = Expression.Expression(value)
     ObjectField.set(self, instance, value, **kwargs)
コード例 #32
0
ファイル: fields.py プロジェクト: vwc/fv
 def set(self, instance, value, **kwargs):
     if value:
         ObjectField.set(self, instance, value, **kwargs)
コード例 #33
0
    def set(self, instance, value, **kwargs):
        """
        The passed in object should be a records object, or a sequence of
        dictionaries
        """

        # Help to localize problems in Zope trace back
        __traceback_info__ = value, type(value)

        # we sanitize the values
        cleaned = []
        doSort = False

        logging.debug("Setting DGF value to " + str(value))

        if value == ({},):
            # With some Plone versions, it looks like that AT init
            # causes DGF to get one empty dictionary as the base value
            # and later, it will be appended as a cleaned row below if
            # we don't filter out it here.
            value = []

        if isinstance(value, basestring):
            # replace () by []
            value = value.strip()
            if value.startswith('('):
                value = "[%s]" % value[1:-1]

            # if simple quotes are used as separators, replace them by '"'
            if value.replace(' ', '')[2] == "'":
                value = value.replace("'", '"')

            value = json.loads(value)
        else:

            # Passed in value is a HTML form data
            # from DataGridWidget. Value is Python array,
            # each item being a dictionary with column_name : value mappins
            # + orderinder which is used in JS reordering

            for row in value:
                order = row.get('orderindex_', None)

                empty = True

                if order != "template_row_marker":
                    # don't process hidden template row as
                    # input data
                    val = {}
                    for col in self.getColumnIds():
                        row_value = row.get(col, '')
                        # LinesColumn provides list, not string.
                        if isinstance(row_value, basestring):
                            val[col] = row_value.strip()
                        else:
                            val[col] = [value.strip() for value in row_value]

                        if val[col]:
                            empty = False

                    if order is not None:
                        try:
                            order = int(order)
                            doSort = True
                        except ValueError:
                            pass

                    # create sortable tuples
                    if (not self.allow_empty_rows) and empty:
                        logger.debug("Filtered out an empty row")
                    else:
                        logger.debug("Appending cleaned row:" + str(val))
                        cleaned.append((order, val.copy()))

            if doSort:
                cleaned.sort()

            # remove order keys when sorting is complete
            value = tuple([x for (throwaway, x) in cleaned])

        # fill in data
        ObjectField.set(self, instance, value, **kwargs)
コード例 #34
0
ファイル: Field.py プロジェクト: vwc/fv
 def set(self, instance, value, **kwargs):
     if type(value).__name__ == "str":
         value = [value]
     ObjectField.set(self, instance, value, **kwargs)