[deps] drop tortoise in favour of sqlmodel
This commit is contained in:
parent
5a190fe590
commit
de9a8497d8
5 changed files with 209 additions and 213 deletions
|
|
@ -16,9 +16,6 @@ from textual.widgets import (
|
|||
Input,
|
||||
Static,
|
||||
)
|
||||
from tortoise import Tortoise
|
||||
|
||||
from teilchensammler_cli import settings
|
||||
|
||||
|
||||
@final
|
||||
|
|
@ -99,14 +96,8 @@ class AddInventoryScreen(Screen[None]):
|
|||
@final
|
||||
class SammlerApp(App[None]):
|
||||
async def on_mount(self) -> None:
|
||||
await Tortoise.init(config=settings.TORTOISE_ORM_CONFIG)
|
||||
await Tortoise.generate_schemas(safe=True)
|
||||
_ = self.push_screen(AddInventoryScreen())
|
||||
|
||||
async def on_unmount(self) -> None:
|
||||
# https://tortoise.github.io/setup.html#the-importance-of-cleaning-up
|
||||
await Tortoise.close_connections()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
app = SammlerApp()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
TORTOISE_ORM_CONFIG = {
|
||||
"connections": {
|
||||
"default": {
|
||||
"engine": "tortoise.backends.sqlite",
|
||||
"credentials": {"file_path": "db.sqlite3"},
|
||||
},
|
||||
},
|
||||
"apps": {
|
||||
"app": {
|
||||
"models": ["teilchensammer_cli.models", "aerich.models"],
|
||||
"default_connection": "default",
|
||||
}
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue