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 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)
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)
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()
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)
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)
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)
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) 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)
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): """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))
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 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)
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)
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
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)
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)
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)
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)
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)
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)
def set(self, instance, value, **kwargs): if not isinstance(value, Expression.Expression): value = Expression.Expression(value) ObjectField.set(self, instance, value, **kwargs)
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)
def set(self, instance, value, **kwargs): if type(value).__name__ == "str": value = [value] ObjectField.set(self, instance, value, **kwargs)