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)
예제 #3
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
예제 #5
0
    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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
파일: record.py 프로젝트: a25kk/stv2
 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
예제 #9
0
 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
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
파일: Facade.py 프로젝트: CGTIC/Plone_SP
 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)
예제 #14
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)
예제 #15
0
파일: _field.py 프로젝트: Vinsurya/Plone
    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
예제 #16
0
파일: _field.py 프로젝트: Vinsurya/Plone
    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
예제 #17
0
파일: field.py 프로젝트: eea/eea.reports
 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)
예제 #18
0
 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)
예제 #19
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
예제 #20
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