Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5bb663ee8 | ||
|
|
d8101d7c55 | ||
|
|
336eeb7af2 |
3 changed files with 27 additions and 0 deletions
|
|
@ -1,5 +1,8 @@
|
||||||
import os
|
import os
|
||||||
from sqlmodel import SQLModel, create_engine
|
from sqlmodel import SQLModel, create_engine
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
sqlite_url = os.environ.get("DATABASE_URL", "sqlite:///database.db")
|
sqlite_url = os.environ.get("DATABASE_URL", "sqlite:///database.db")
|
||||||
|
|
@ -8,3 +11,4 @@ engine = create_engine(sqlite_url, echo=False)
|
||||||
|
|
||||||
def create_db_and_tables(engine):
|
def create_db_and_tables(engine):
|
||||||
SQLModel.metadata.create_all(engine)
|
SQLModel.metadata.create_all(engine)
|
||||||
|
logger.debug("Created tables, if not already present")
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ from textual.widgets import Button, DataTable, Footer, Header, Input, Static
|
||||||
from .database import create_db_and_tables, engine
|
from .database import create_db_and_tables, engine
|
||||||
from .models import add_to_database, load_initial_data, make_teilchen_input
|
from .models import add_to_database, load_initial_data, make_teilchen_input
|
||||||
|
|
||||||
|
# Make it so that log messages go to Textual; we should be able to then see
|
||||||
|
# these in the console
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level="NOTSET",
|
level="NOTSET",
|
||||||
handlers=[TextualHandler()],
|
handlers=[TextualHandler()],
|
||||||
|
|
@ -64,6 +66,7 @@ class SearchBar(Static):
|
||||||
async def parse_input(self, event: Input.Submitted) -> None:
|
async def parse_input(self, event: Input.Submitted) -> None:
|
||||||
|
|
||||||
if not (tc := await make_teilchen_input(event.value)):
|
if not (tc := await make_teilchen_input(event.value)):
|
||||||
|
logger.debug("could not create TeilchenCreate from data: %s", event.value)
|
||||||
return
|
return
|
||||||
|
|
||||||
event.input.value = ""
|
event.input.value = ""
|
||||||
|
|
|
||||||
|
|
@ -82,20 +82,40 @@ async def make_teilchen_input(text: str) -> TeilchenCreate | None:
|
||||||
|
|
||||||
|
|
||||||
async def load_initial_data(engine) -> Sequence[Teilchen]:
|
async def load_initial_data(engine) -> Sequence[Teilchen]:
|
||||||
|
"""Retrieve all Teilchen records from the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
engine (sqlalchemy.Engine): the engine or connection or whatever
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of Teilchen, potentially empty
|
||||||
|
"""
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
statement = select(
|
statement = select(
|
||||||
Teilchen.id, Teilchen.name, Teilchen.description, Teilchen.number, Teilchen.tags
|
Teilchen.id, Teilchen.name, Teilchen.description, Teilchen.number, Teilchen.tags
|
||||||
) # ty:ignore[no-matching-overload]
|
) # ty:ignore[no-matching-overload]
|
||||||
all_teilchen = session.exec(statement).all()
|
all_teilchen = session.exec(statement).all()
|
||||||
|
|
||||||
|
logger.debug("Loading initial data: found %s records", len(all_teilchen))
|
||||||
return all_teilchen
|
return all_teilchen
|
||||||
|
|
||||||
|
|
||||||
async def add_to_database(tc: TeilchenCreate, engine) -> Teilchen:
|
async def add_to_database(tc: TeilchenCreate, engine) -> Teilchen:
|
||||||
|
"""Add given data as a new record into the database.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
engine (sqlalchemy.Engine): the engine or connection or whatever
|
||||||
|
tc: Teilchen data (no `id` yet)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The newly created Teilchen (this time with `id`)
|
||||||
|
"""
|
||||||
|
logger.debug("received: %s", str(tc))
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
teilchen = Teilchen.model_validate(tc)
|
teilchen = Teilchen.model_validate(tc)
|
||||||
session.add(teilchen)
|
session.add(teilchen)
|
||||||
session.commit()
|
session.commit()
|
||||||
session.refresh(teilchen)
|
session.refresh(teilchen)
|
||||||
|
|
||||||
|
logger.debug("created: %s", str(teilchen))
|
||||||
return teilchen
|
return teilchen
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue