[deps] drop tortoise in favour of sqlmodel

This commit is contained in:
bronsen 2025-12-20 04:31:02 +01:00
parent 5a190fe590
commit de9a8497d8
5 changed files with 209 additions and 213 deletions

View file

@ -1,52 +1,31 @@
from datetime import datetime
import uuid
from tortoise import Model, fields
from tortoise.validators import MinValueValidator
from sqlmodel import (
Field,
SQLModel,
create_engine,
text,
)
class TimestampMixin:
created_at: fields.Field[datetime] = fields.DatetimeField(
auto_now_add=True,
)
modified_at: fields.Field[datetime] = fields.DatetimeField(
auto_now=True,
)
class TeilchenInput(SQLModel):
text: str
class Teilchen(TimestampMixin, Model):
name: fields.Field[str] = fields.TextField(
null=False,
)
description: fields.Field[str] = fields.TextField(
null=False,
)
number: fields.Field[int] = fields.IntField(
null=False,
validators=[
MinValueValidator(0),
],
)
class Teilchen(TeilchenInput, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid7, primary_key=True)
tags: fields.ManyToManyRelation["Tag"] = fields.ManyToManyField(
"models.Tag",
through="models.TeilchenTag",
related_name="teilchen",
forward_key="tag_id",
backward_key="teilchen_id",
)
name: str = Field(index=True)
description: str | None
tags: str | None
number: int = Field(default=1)
class Tag(TimestampMixin, Model):
name: fields.Field[str] = fields.CharField(
null=False,
max_length=20,
)
sqlite_url = "sqlite:///:memory:"
engine = create_engine(sqlite_url, echo=True)
class TeilchenTag(Model):
teilchen: fields.ForeignKeyRelation[Teilchen] = fields.ForeignKeyField(
"models.Teilchen",
)
tag: fields.ForeignKeyRelation[Tag] = fields.ForeignKeyField(
"models.Tag",
)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
with engine.connect() as connection:
_ = connection.execute(text("PRAGMA foreign_keys=ON")) # for sqlite only