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
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