Example #1
0
File: Fields.py Project: 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)
Example #2
0
File: Fields.py Project: 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)
Example #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)
 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)
 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)
Example #6
0
    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)
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() 
Example #8
0
File: record.py Project: 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)
Example #9
0
    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)
Example #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)
Example #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)
Example #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)
    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)
Example #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)
Example #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))
Example #16
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)
Example #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))
Example #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)
Example #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)
Example #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
Example #21
0
 def set(self, instance, value, **kwargs):
     value = self._decode_strings(value, instance, **kwargs)
     value = FormattableNames(value)
     ObjectField.set(self, instance, value, **kwargs)
 def set(self, instance, value, **kwargs):
     return ObjectField.set(self,instance,value,**kwargs)
    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)
Example #24
0
    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)
Example #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()
    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)
 def set(self, instance, value, **kwargs):
     value = self._decode_strings(value, instance, **kwargs)
     value = FormattableName(value)
     ObjectField.set(self, instance, value, **kwargs)
Example #28
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):
            # 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)
Example #29
0
    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)
Example #30
0
 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)
Example #31
0
 def set(self, instance, value, **kwargs):
     if not isinstance(value, Expression.Expression):
         value = Expression.Expression(value)
     ObjectField.set(self, instance, value, **kwargs)
Example #32
0
File: fields.py Project: vwc/fv
 def set(self, instance, value, **kwargs):
     if value:
         ObjectField.set(self, instance, value, **kwargs)
    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)
Example #34
0
File: Field.py Project: vwc/fv
 def set(self, instance, value, **kwargs):
     if type(value).__name__ == "str":
         value = [value]
     ObjectField.set(self, instance, value, **kwargs)