def __init__(self, type_, default=None, name=None, parser=None, deparser=None, primary_key=False, on_update=None, choices=None, encrypt=False, input=None, output=None, noneable=False, attr_name=None, version=None, length=None, auto_increment=False, charset=None): if default is not None and noneable: noneable = False # auto increment id self.id = self.__class__.id + 1 self.__class__.id = self.id self.type = type_ self.name = name self.default = default self._parser = (parser if parser is not None else lambda x: transform_type(x, self.type)) self._deparser = (deparser if deparser is not None else lambda x: transform_type(x, str)) self._primary_key = primary_key self.on_update = on_update self.choices = choices self.encrypt = encrypt self.input = input self.output = output self.noneable = noneable if not primary_key else False self.attr_name = attr_name or name self.version = version self.length = length self.auto_increment = auto_increment self.charset = charset self._alias_name = None self._model_ref = lambda: None self.AES_KEY = '' self._getter = None self._setter = None if self.choices is None and isinstance(self.type, type) and issubclass( self.type, Enum): self.choices = self.type
def _set_v1(self, obj, value): db = obj._get_db() db_key = self._get_db_field_key(obj) if value is None and self.noneable: # beansdb 不支持 set None db.db_delete(db_key) return value = transform_type(value, self.type) db.db_set(db_key, value)
def __init__(self, type, default=None, name=None, parser=None, deparser=None, primary_key=False, on_update=None, choices=None, encrypt=False, input=None, output=None, noneable=False, attr_name=None, version=None): if default is not None and noneable: noneable = False # auto increment id self.id = self.__class__.id + 1 self.__class__.id = self.id self.type = type self.name = name self.default = default self._parser = (parser if parser is not None else lambda x: transform_type(x, self.type)) self._deparser = (deparser if deparser is not None else lambda x: transform_type(x, str)) self._primary_key = primary_key self.on_update = on_update self.choices = choices self.encrypt = encrypt self.input = input self.output = output self.noneable = noneable self.attr_name = attr_name or name self.version = version self._alias_name = None self._model_ref = lambda: None
def _get(self, obj, objtype): attr_name = self.attr_name data = self._get_data(obj) parsed_data = self._get_parsed_data(obj) if attr_name in parsed_data: return parsed_data[attr_name] v = data.get(attr_name, missing) if v is not missing: if isinstance(v, Expression): return v if not type_checker(self.type, v) and (v is not None or not self.noneable): v = transform_type(v, self.type) if self.output: v = self.output(v) parsed_data[attr_name] = v return v if self.noneable or obj._olo_is_new: return raise AttributeError( # pragma: no cover 'Cannot found `{}` from `{}` instance'.format( self.name, obj.__class__.__name__))