コード例 #1
0
ファイル: field.py プロジェクト: eea/eea.reports
 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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
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)
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
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)
コード例 #8
0
    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()
コード例 #9
0
    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
コード例 #10
0
ファイル: field.py プロジェクト: macagua/eduIntelligent-cynin
    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)
コード例 #11
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)
コード例 #12
0
    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
コード例 #13
0
ファイル: record.py プロジェクト: a25kk/stv2
    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
コード例 #14
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)
コード例 #15
0
    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)