class PostComment(Model): _id = fields.IntegerField() _post = fields.ForeignKeyField(to=Post) _name = fields.CharField(default_value='anonymous') _email = fields.CharField() _state = fields.CharField(choices=PostCommentState, default_value=PostCommentState.PENDING) _body = fields.CharField() _created_at = fields.DatetimeField(auto_now_add=True) _modified_at = fields.DatetimeField(auto_now=True) class Meta: db_table = 'post_comments' async def _insert(self): # TODO: fix this in kinton state = self._state self._state = state.value await super()._insert() self._state = state async def _update(self, update_fields=()): # TODO: fix this in kinton state = self._state self._state = state.value await super()._update(update_fields) self._state = state def set_email(self, value): value = PostComment._email.parse(value) if value: validate_email(value) self._email = value
class Subscription(Model): _id = fields.IntegerField() _name = fields.CharField(default_value='anonymous') _email = fields.CharField() _verified = BooleanField(default_value=False) _token = fields.CharField() _created_at = fields.DatetimeField(auto_now_add=True) _modified_at = fields.DatetimeField(auto_now=True) class Meta: db_table = 'subscriptions' def set_email(self, value): value = Subscription._email.parse(value).lower() validate_email(value) self._email = value
class Post(Model): _id = fields.IntegerField() _title = fields.CharField() _category = fields.ForeignKeyField(to=Category) _author = fields.ForeignKeyField(to=Author) _tag = fields.ManyToManyField(to=Tag) _created_at = fields.DatetimeField(auto_now_add=True) _modified_at = fields.DatetimeField(auto_now=True)
class Token(Model): _id = fields.IntegerField() _value = fields.CharField() _user = fields.ForeignKeyField(to=User) class Meta: db_table = 'tokens' async def delete(self): # TODO: refactor this in kinton db_client = DBClient() await db_client.update('DELETE FROM tokens WHERE id = $1', self.id)
class User(Model): _id = fields.IntegerField() _username = fields.CharField() _email = fields.CharField() _password = fields.CharField() class Meta: db_table = 'users' def set_password(self, value: str): if self._id is None: self._password = make_password(value) else: self._password = value def get_password_salt(self): return self._password.split('$')[0] @property def is_authenticated(self) -> bool: return True
class Post(Model): _id = fields.IntegerField() _title = fields.CharField() _title_slug = fields.CharField(immutable=True) _body = fields.CharField() _description = fields.CharField() _state = fields.CharField(choices=PostState, default_value=PostState.DRAFT) _category = fields.ForeignKeyField(to=Category) _author = fields.ForeignKeyField(to=User) _published_at = fields.DatetimeField() _created_at = fields.DatetimeField(auto_now_add=True) _modified_at = fields.DatetimeField(auto_now=True) class Meta: db_table = 'posts' def set_title(self, value): value = str(value) self._title = value value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') value = re.sub(r'[^\w\s-]', '', value.lower()) self._title_slug = re.sub(r'[-\s]+', '-', value).strip('-_') async def _insert(self): # TODO: fix this in kinton state = self._state self._state = state.value await super()._insert() self._state = state async def _update(self, update_fields=()): # TODO: fix this in kinton state = self._state self._state = state.value await super()._update(update_fields) self._state = state
class Example(Model): _id = fields.IntegerField() _value = fields.CharField()
class SomeModel(Model): _value = fields.CharField() class Meta: db_table = 'another_table_name'
class Category(Model): _id = fields.IntegerField() _name = fields.CharField() class Meta: db_table = 'categories'
class Author(Model): _id = fields.IntegerField() _name = fields.CharField()
class Category(Model): _id = fields.IntegerField() _name = fields.CharField() _description = fields.CharField()
class Tag(Model): _id = fields.IntegerField() _name = fields.CharField()