Esempio n. 1
0
    def upgrade(self, cid):
        """ Upgrade criterion properties
        """
        criterion = self.get(cid)
        if not criterion:
            return
        properties = criterion.__dict__

        wid = properties.get('widget', None)
        schema = self.schema(wid=wid, cid=cid)
        if not schema:
            return

        criteria = {}
        for key, value in properties.items():
            if key not in schema:
                continue
            if isinstance(value, (list, tuple)):
                value_type = schema[key].value_type
                value = [fix_string(x) for x in value]
                value = [value_type.fromUnicode(x) for x in value]
            elif isinstance(value, (str, six.text_type)):
                _type = getattr(schema[key], "_type", None)
                value = fix_string(value, _type)
                try:
                    value = schema[key].fromUnicode(value)
                except ConstraintNotSatisfied as err:
                    logger.exception(err)
                    continue
                except AttributeError as err:
                    value_type = schema[key].value_type
                    if value:
                        value = [value_type.fromUnicode(value)]
                    else:
                        logger.warn(
                            "%s: Cleaning up empty %s:%s from criterion %s",
                            self.context.absolute_url(), key, value, cid)
                        delattr(criterion, key)
                except ValueError as err:
                    logger.exception(err)
                    # Cleanup OLD broken values from criterion
                    if getattr(criterion, key, None) == value:
                        logger.warn(
                            "%s: Cleaning up broken %s:%s from criterion %s",
                            self.context.absolute_url(), key, value, cid)
                        delattr(criterion, key)
                    continue
                except Exception as err:
                    logger.warn(
                        "%s: Could not upgrade %s: %s from criterion %s",
                        self.context.absolute_url(), key, value, cid)
                    logger.exception(err)
                    continue
            criteria[key] = value

        criterion.update(**criteria)
        self.criteria._p_changed = 1
Esempio n. 2
0
    def edit(self, cid, **properties):
        """ Update criterion properties
        """
        criterion = self.get(cid)
        if not criterion:
            raise KeyError(cid)

        wid = properties.get('widget', None)
        schema = self.schema(wid=wid, cid=cid)

        criteria = {}
        for key, value in properties.items():
            if key not in schema:
                continue
            if isinstance(value, (list, tuple)):
                value_type = schema[key].value_type
                value = [fix_string(x) for x in value]
                value = [value_type.fromUnicode(x) for x in value]
            elif isinstance(value, (str, six.text_type)):
                try:
                    value = schema[key].fromUnicode(value)
                except AttributeError:
                    continue
            criteria[key] = value

        criterion.update(**criteria)
        self.criteria._p_changed = 1
    def upgrade(self, cid):
        """ Upgrade criterion properties
        """
        criterion = self.get(cid)
        if not criterion:
            return
        properties = criterion.__dict__

        wid = properties.get('widget', None)
        schema = self.schema(wid=wid, cid=cid)
        if not schema:
            return

        criteria = {}
        for key, value in properties.items():
            if key not in schema:
                continue
            if isinstance(value, (list, tuple)):
                value_type = schema[key].value_type
                value = [fix_string(x) for x in value]
                value = [value_type.fromUnicode(x) for x in value]
            elif isinstance(value, (str, unicode)):
                value = fix_string(value)
                try:
                    value = schema[key].fromUnicode(value)
                except ConstraintNotSatisfied, err:
                    logger.exception(err)
                    continue
                except AttributeError, err:
                    value_type = schema[key].value_type
                    value = [value_type.fromUnicode(value)]
                except ValueError, err:
                    logger.exception(err)
                    # Cleanup OLD broken values from criterion
                    if getattr(criterion, key, None) == value:
                        logger.warn(
                            "%s: Cleaning up broken %s:%s from criterion %s",
                            self.context.absolute_url(), key, value, cid)
                        delattr(criterion, key)
                    continue
    def edit(self, cid, **properties):
        """ Update criterion properties
        """
        criterion = self.get(cid)
        if not criterion:
            raise KeyError(cid)

        wid = properties.get('widget', None)
        schema = self.schema(wid=wid, cid=cid)

        criteria = {}
        for key, value in properties.items():
            if key not in schema:
                continue
            if isinstance(value, (list, tuple)):
                value_type = schema[key].value_type
                value = [fix_string(x) for x in value]
                value = [value_type.fromUnicode(x) for x in value]
            elif isinstance(value, (str, unicode)):
                value = schema[key].fromUnicode(value)
            criteria[key] = value

        criterion.update(**criteria)
        self.criteria._p_changed = 1