def set(self, instance, value, **kwargs): """The passed in object should be a records object, or a sequence of dictionaries About link data: * interpretations: * if data not starts with standard protocol names (http://, ftp://) than *uid* field data will be used as reference * record removed if: * no data; * data contains UID of not existent object About title: * if there is UID of existent object and record has same title to the original object - title will not be saved. """ catalog = getToolByName(instance, "uid_catalog") if value is None: value = () if not isinstance(value, (ListType, TupleType)): value = value, result = [] for row in value: data = {} for key in [key for key in set(row) if not(key.startswith('_') or key.endswith('_'))]: data[key] = str(encode(row[key], self)).strip() uid = str(row.get("uid", "")).strip() link = str(row.get("link", "")).strip() title = str(encode(row.get("title", ""), self)) if not title == "": data["title"] = title if link == "": continue elif self.isRemoteURL(link): data["link"] = urlparse.urlunparse(urlparse.urlparse(link)) else: if uid == '': continue brains = catalog(UID=uid) if len(brains) == 0: continue # Found objects with pointed UID brain = brains[0] data["uid"] = uid # Fix title for uid if data.get("title", "") == getattr(brain, "Title", ""): data['title'] = "" result.append(data) DataGridField.set(self, instance, result, **kwargs) uids = [r["uid"] for r in result if r.get("uid")] ReferenceField.set(self, instance, uids, **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 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): 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)
def get(self, instance, **kwargs): """ Get management plan code and year """ value = ObjectField.get(self, instance, **kwargs) or () data = [encode(v, instance, **kwargs) for v in value] return tuple(data)
def _encode_strings(self, value, instance, **kwargs): new_value = value for k, v in value.items(): if type(v) is type(u''): nv = encode(v, instance, **kwargs) try: new_value[k] = nv except AttributeError: # Records don't provide __setitem__ setattr(new_value, k , nv) return new_value
def _encode_strings(self, value, instance, **kwargs): new_value = value for k, v in value.items(): if type(v) is type(u''): nv = encode(v, instance, **kwargs) try: new_value[k] = nv except AttributeError: # Records don't provide __setitem__ setattr(new_value, k, nv) return new_value
def get(self, instance, mimetype=None, raw=False, **kwargs): name = 'colored_%s' % self.getName() if kwargs.has_key('schema') and not raw and hasattr( instance, name): colored_text = getattr(instance, name) return encode(colored_text, instance, **kwargs) return TextField.get(self, instance, mimetype=mimetype, raw=raw, **kwargs)
def set(self, name, instance, value, **kwargs): field = kwargs['field'] tool = self.getTool(instance) mdata = tool.getMetadata(instance) if isinstance(value, unicode): value = encode(value, instance) data = {field.metadata_name: value} # Calling _setData directly, because there's # *no* method for setting one field at a time, # and setValues takes a dict and does # validation, which prevents us from setting # values. mdata._setData(data, set_id=self.metadata_set)
def set(self, name, instance, value, **kwargs): field = kwargs['field'] tool = self.getTool(instance) mdata = tool.getMetadata(instance) if isinstance(value, unicode): value = encode(value, instance) data = {field.metadata_name:value} # Calling _setData directly, because there's # *no* method for setting one field at a time, # and setValues takes a dict and does # validation, which prevents us from setting # values. mdata._setData(data, set_id=self.metadata_set)
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): # 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
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
def get(self, instance, **kwargs): """ Getter """ value = super(SerialTitleField, self).get(instance, **kwargs) or () data = [encode(v, instance, **kwargs) for v in value] return tuple(data)
def get(self, instance, **kwargs): try: path, value = ObjectField.get(self, instance, **kwargs) except (TypeError, ValueError): # No value set yet return ('','') return path, encode(value, instance, **kwargs)
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