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. """ rtype = decode(value[0].strip(), instance, **kwargs) num = value[1] year = value[2] alt = decode(value[3].strip(), instance, **kwargs) value = (rtype, num, year, alt) super(SerialTitleField, self).set(instance, value, **kwargs)
def set(self, instance, value, **kwargs): """ Check if value is an actual Money value. If not, attempt to convert it to one; otherwise, set to None. Assign all properties passed as kwargs to object. field.set( Money(10, 'ZAR') ) field.set( money_instance ) """ if value is not None: if type(value) in STRING_TYPES: cur, value = parseString(decode(value, instance)) if self.use_global_currency: cur = self.getGlobalCurrency() else: if cur is None: cur = self.getDefaultCurrency(instance) value = Money(value, cur) assert isinstance( value, Money), ('value must be Money instance. value == %s' % value) ObjectField.set(self, instance, value, **kwargs)
def set(self, instance, value, **kwargs): """ Save encrypted value. Value can be only saved if IKeyProvider.canDecrypt() value returns True. You should not reach this point otherwise as it's checked by widget. Empty values are saved as is. Other values are symmetrically encrypted using key provided by IKeyProvider. """ kwargs['field'] = self # Remove acquisition wrappers if not getattr(self, 'raw', False): value = decode(aq_base(value), instance, **kwargs) request = getattr(instance, "REQUEST", None) provider = self.key_provider(instance, request) # Handle None save specially if value in [None, ""]: self.getStorage(instance).set(self.getName(), instance, value, **kwargs) return if not provider.canDecrypt(self): raise CannotSaveError("You cannot save this field because you have no encryption right") key = provider.getKey(self) if not key: raise CannotSaveError(self.msg_cannot_crypt) value = encryption.encrypt_value(key, value) self.getStorage(instance).set(self.getName(), 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 colorise(self, instance, value, **kwargs): value = TextField.get(self, instance, mimetype='text/html', raw=1) if shasattr(value, 'transform'): data = value.transform(instance, 'text/plain') else: data = value colored_text = htmlHighlight( instance, decode(str(value), instance, **kwargs)) setattr(instance, 'colored_%s' % self.getName(), colored_text)
def set(self, instance, value, **kwargs): kwargs['field']=self try: path, string_value = value except TypeError: path, string_value = '','' if not hasattr(path, 'split'): path = '/'.join(path) string_value = decode(string_value, instance, **kwargs) self.getStorage(instance).set( self.getName(), instance, (path, string_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): """ Setter """ fname = self.getName() if not getattr(self, 'raw', False): # Remove acquisition wrappers value = decode(aq_base(value), instance, **kwargs) new_value = value try: old_value = self.getStorage(instance).get(fname, instance) except AttributeError: old_value = None # make changes only if new value is different from old value if new_value != old_value: kwargs['field'] = self self.getStorage(instance).set(self.getName(), instance, new_value, **kwargs) if not old_value: return # ZZZ: doing this in field set code is weird, should # have been done by definining a new event # this would have avoided hardcoding field here # Update organisation URL to depedencies fields = {'dataOwner': 'getDataOwner', 'processor': 'getProcessor'} cat = getToolByName(instance, 'portal_catalog') for fieldname, index in fields.items(): for b in cat.searchResults({index: old_value}): obj = b.getObject() field = obj.getField(fieldname) if not field: continue val = [new_value] # we're dealing with LinesField fields fvalue = field.getAccessor(obj)() if isinstance(fvalue, (list, tuple)): val = list(set(val + list(fvalue))) mutator = field.getMutator(obj) mutator(val) obj.reindexObject()
def get(self, instance, **kwargs): """ Return DataGridField value Value is a list object of rows. Row id dictionary object with standard 'link', 'uid' and 'title' keys plus extra informal *url* and *url_title* keys """ purl = getToolByName(instance, "portal_url") # use portal_catalog to hide protected object for the logged in user. catalog = getToolByName(instance, "portal_catalog") result = [] uids = {} rows = DataGridField.get(self, instance, **kwargs) for row in rows: uid = row.get("uid","") link = row.get("link","") title = decode(row.get("title",""), self) dataGridFieldRowData = row dataGridFieldRowData["url"] = "" dataGridFieldRowData["default_title"] = None if title: dataGridFieldRowData["title"] = title result.append(dataGridFieldRowData) data = result[-1] if uid: uids[uid] = data else: # Process remote URL and collect UIDs data["url"] = quote(link, safe='?$#@/:=+;$,&%') data["default_title"] = link # if title not set for remote url - set it equals to url # manually entered link does not have title column field if not data.get("title"): data["title"] = data["default_title"] # Process UIDs if uids: brains = catalog(UID=uids.keys()) for b in brains: data = uids[b.UID] data["url"] = b.getURL() data["link"] = b.getPath() data["default_title"] = self._brains_title_or_id(b, instance) # If title not set - get it from the brain if not data["title"]: data["title"] = data["default_title"] # Remove records with links to unexistent objects del_uids = set(uids.keys()) - set([b.UID for b in brains]) result = filter(lambda r: not r["uid"] in del_uids, result) return result
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 _decode_strings(self, value, instance, **kwargs): new_value = value for k, v in value.items(): if type(v) is type(''): nv = decode(v, instance, **kwargs) try: new_value[k] = nv except AttributeError: # Records don't provide __setitem__ setattr(new_value, k, nv) # convert datetimes if self.subfield_types.get(k, None) == 'datetime': try: val = DateTime(v) except: val = None new_value[k] = val return new_value
def _decode_strings(self, value, instance, **kwargs): new_value = value for k, v in value.items(): if type(v) is type(''): nv = decode(v, instance, **kwargs) try: new_value[k] = nv except AttributeError: # Records don't provide __setitem__ setattr(new_value, k , nv) # convert datetimes if self.subfield_types.get(k, None) == 'datetime': try: val = DateTime(v) except: val = None new_value[k] = val return new_value
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): """ Check if value is an actual Money value. If not, attempt to convert it to one; otherwise, set to None. Assign all properties passed as kwargs to object. field.set( Money(10, 'ZAR') ) field.set( money_instance ) """ if value is not None: if type(value) in STRING_TYPES: cur, value = parseString(decode(value, instance)) if self.use_global_currency: cur = self.getGlobalCurrency() else: if cur is None: cur = self.getDefaultCurrency(instance) value = Money(value, cur) assert isinstance(value, Money), ( 'value must be Money instance. value == %s' % value) ObjectField.set(self, instance, value, **kwargs)