Example #1
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 #2
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)
Example #3
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)
    def get(self, instance, **kwargs):
        """ Return DataGridField value

        Value is a list object of rows.

        If parameter mimetype == 'text/plain' is passed,
        a string containing all cell values concatenated together is returned.
        This is for site indexing services (DataGridField.searchable = true).
        """

        if('mimetype' in kwargs and kwargs['mimetype'] == 'text/plain'):
            # Data is returned for text indexing
            # Concatenate all cell values
            buffer = StringIO.StringIO()

            value = ObjectField.get(self, instance, **kwargs) or ()
            value = self.resetFixedRows(instance, value)

            for row in value:
                for col in self.getColumnIds():
                    buffer.write(row.get(col, ''))
                    # separate the last word of a cell
                    # and the first of the next cell
                    buffer.write(' ')

            return encode(buffer.getvalue(), instance, **kwargs)

        else:
            # Return list containing all encoded rows
            value = ObjectField.get(self, instance, **kwargs) or ()
            value = self.resetFixedRows(instance, value)

            data = [encode(v, instance, **kwargs) for v in value]

            return tuple(data)
 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):
     __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):    
    """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 #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
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 #12
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 #13
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 get(self, instance, **kwargs):
        value = ObjectField.get(self, instance, **kwargs)
        if getattr(self, 'raw', False):
            return value

        if value in [None, ""]:
            return value

        request = getattr(instance, "REQUEST", None)
        provider = self.key_provider(instance, request)

        #need to show the value instead of "msg_decrypt_filler" but just readonly
        #if not provider.canDecrypt(self):
        #    return self.msg_decrypt_filler

        key = provider.getKey(self)

        if not key:
            return self.msg_cannot_crypt

        value = encryption.decrypt_value(key, value)

        # Decryption with the current key failed
        if value is None:
            return self.msg_bad_key

        return encode(value, instance, **kwargs)
Example #15
0
 def getRaw(self, instance, **kwargs):
     """Returns raw field value (possible wrapped in BaseUnit)
     """
     value = ObjectField.get(self, instance, **kwargs)
     # getattr(instance, "Remarks") returns a BaseUnit
     if callable(value):
         value = value()
     return value
Example #16
0
 def validate_required(self, instance, value, errors):
     try:
         float(value.latitude)
         float(value.longitude)
     except (ValueError, TypeError):
         result = False
     else:
         result = True
     return ObjectField.validate_required(self, instance, result, errors)
 def getAccessor(self, instance):
     ''' hook to post-generate the accessors for the subfields
         its a little bit hacky, because we need a special ClassGen here
     '''
     if not getattr(self, 'already_bootstrapped', False):
         fields = self.getFields()
         ClassGen.generateMethods(instance.__class__, self.Schema())
         self.already_bootstrapped = True
     return ObjectField.getAccessor(self, instance)
 def getAccessor(self, instance):
     ''' hook to post-generate the accessors for the subfields
         its a little bit hacky, because we need a special ClassGen here
     '''
     if not getattr(self, 'already_bootstrapped', False):
         fields = self.getFields()
         ClassGen.generateMethods(instance.__class__, self.Schema())
         self.already_bootstrapped = True
     return ObjectField.getAccessor(self, instance)
Example #19
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 #20
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 #21
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)
    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 #23
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))
    def get(self, instance, **kwargs):
        """ Return LikertField Data
            Result is a tuple of responses
        """

        value = ObjectField.get(self, instance, **kwargs)
        if not value:
            return tuple()
        else:
            return value
Example #25
0
    def get(self, instance, **kwargs):
        """ Return LikertField Data
            Result is a tuple of responses
        """

        value = ObjectField.get(self, instance, **kwargs)
        if value is None:
            return tuple([None] * len(questions))
        else:
            return value
    def get(self, instance, **kwargs):
        """ Return LikertField Data
            Result is a tuple of responses
        """

        value = ObjectField.get(self, instance, **kwargs)
        if not value:
            return tuple()
        else:
            return value
Example #27
0
 def get(self, instance, **kwargs):
     try:
         value = ObjectField.get(self, instance, **kwargs) or ()
         data = [encode(v, instance, **kwargs) for v in value]
     except Exception:
         value = ()
         data = [encode(v, instance, **kwargs) for v in value]
     if config.ZOPE_LINES_IS_TUPLE_TYPE:
         return tuple(data)
     else:
         return data
 def get(self, instance, **kwargs):
     try:
         value = ObjectField.get(self, instance, **kwargs) or ()
         data = [encode(v, instance, **kwargs) for v in value]
     except Exception:
         value = ()
         data = [encode(v, instance, **kwargs) for v in value]
     if config.ZOPE_LINES_IS_TUPLE_TYPE:
         return tuple(data)
     else:
         return data
Example #29
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 #30
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 #31
0
 def get(self, instance, **kwargs):
     """
     Getter which returns value as sorted list of tuples.
     """
     value = ObjectField.get(self, instance, **kwargs) or ()
     data = [encode(v, instance, **kwargs) for v in value]
     adict = {}
     for record in data:
         try:
             value, key = json.loads(record)
         except ValueError:
             key = record
             value = None
         adict[key] = value
     return sortedDictValues(adict)
 def get(self, instance, **kwargs):
     """
     Getter which returns value as sorted list of tuples.
     """
     value = ObjectField.get(self, instance, **kwargs) or ()
     data = [encode(v, instance, **kwargs) for v in value]
     adict = {}
     for record in data:
         try:
             value, key = json.loads(record)
         except ValueError:
             key = record
             value = None
         adict[key] = value
     return sortedDictValues(adict)
Example #33
0
    def getDefault(self, instance):
        default = ObjectField.getDefault(self, instance)
        if default:
            return default
        group = self.widget.getGroupId(instance)
        if not self.prefill_member:
            return default

        member = instance.portal_membership.getAuthenticatedMember()
        if not member:
            return default

        if self.limitToOwnGroups and group and group not in member.getGroups():
            return default

        default = member.getId()
        return default
Example #34
0
    def get(self, instance, **kwargs):
        # Get the Expression
        expr = ObjectField.get(self, instance, **kwargs)

        # use a custom context if it has been passed in
        context = kwargs.get('expression_context')
        if context is None:
            context = getExprContext(instance, instance)

        # Expression's __call__ returns a context dictionary if the
        # expression's text is an empty string.  We return None instead.
        if expr.text.strip():
            # Return the evaluated expression
            value = expr(context)
            return encode(value, instance, **kwargs)
        else:
            return None
Example #35
0
 def getRaw(self, instance, **kwargs):
     value = deepcopy(ObjectField.get(self, instance, **kwargs) or [])
     safe_value = []
     for query in value:
         safe_query = {}
         for k, v in query.items():
             if type(v) is list:
                 safe_v = []
                 for i in v:
                     safe_v.append(safe_unicode(i))
                 safe_query[k] = safe_v
             elif type(v) is str:
                 safe_query[k] = safe_unicode(v)
             else:
                 safe_query[k] = v
         safe_value.append(safe_query)
     return safe_value
Example #36
0
    def get(self, instance, **kwargs):
        # Get Expressions
        exprs = ObjectField.get(self, instance, **kwargs)

        # use a custom context if it has been passed in
        context = kwargs.get('expression_context')
        if context is None:
            context = getExprContext(instance, instance)

        # Return evaluated expressions, and check for empty expr texts.
        value = []
        for expr in exprs:
            if expr.text.strip():
                line = expr(context)
                value.append(encode(line, instance, **kwargs))
            else:
                value.append(None)
        return value
Example #37
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 #38
0
    def getDefault(self, instance):
        default = ObjectField.getDefault(self, instance)
        if default:
            return default
        
        # The field should not know about it's widget. from this point of view
        # this field sucks
        if hasattr(self.widget, 'getGroupId'):
            group = self.widget.getGroupId(instance)
        else:
            group = None

        if not self.prefill_member:
            return default
            
        member = instance.portal_membership.getAuthenticatedMember()
        if not member:
            return default

        if self.limitToOwnGroups and group and group not in member.getGroups():
            return default

        default = member.getId()
        return default
 def __init__(self, name=None, schema=None, **kwargs):
     ObjectField.__init__(self, name, **kwargs)
     if not schema:
         schema = self.schema.copy()
     self.setSchema(schema)
 def set(self, instance, value, **kwargs):
     value = self._decode_strings(value, instance, **kwargs)
     value = FormattableName(value)
     ObjectField.set(self, instance, value, **kwargs)
Example #41
0
 def getRaw(self, instance, **kwargs):
     return ObjectField.get(self, instance, **kwargs) or ()
 def __init__(self, name=None, schema=None, **kwargs):
     ObjectField.__init__(self, name, **kwargs)
     if not schema:
         schema = self.schema.copy()
     self.setSchema(schema)
 def validate_required(self, instance, value, errors):
     value = value or []
     value = [d for d in value if d.get('orderindex_', '1').isdigit()]
     return ObjectField.validate_required(self, instance, value, errors)
    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 #45
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):
        """
        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 #47
0
 def getRaw(self, instance, **kwargs):
     return deepcopy(ObjectField.get(self, instance, **kwargs) or [])
Example #48
0
 def get(self, instance, **kwargs):
     value = ObjectField.get(self, instance, **kwargs)
     return self._encode_strings(value, instance, **kwargs)
Example #49
0
 def get(self, instance, **kwargs):
     value = ObjectField.get(self, instance, **kwargs) or {}
     encoded_value = tuple([(encode(x[0], instance, **kwargs), x[1])
                            for x in value])
     return encoded_value
    def __init__(self, name=None, **kwargs):
        """ Create DataGridField instance
        """

        # call super constructor
        ObjectField.__init__(self, name, **kwargs)
Example #51
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)