Compare commits

..

3 commits

Author SHA1 Message Date
bronsen
e5bb663ee8 main,database: add debug log stanzas
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
closes: #7
2026-02-22 20:59:45 +01:00
bronsen
d8101d7c55 models: log incoming and outgoing data with debug logger 2026-02-22 20:42:42 +01:00
bronsen
336eeb7af2 codestyle: add docstrings to helper functions 2026-02-22 20:41:40 +01:00
3 changed files with 27 additions and 0 deletions

View file

@ -1,5 +1,8 @@
import os
from sqlmodel import SQLModel, create_engine
import logging
logger = logging.getLogger(__name__)
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):
SQLModel.metadata.create_all(engine)
logger.debug("Created tables, if not already present")

View file

@ -15,6 +15,8 @@ from textual.widgets import Button, DataTable, Footer, Header, Input, Static
from .database import create_db_and_tables, engine
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(
level="NOTSET",
handlers=[TextualHandler()],
@ -64,6 +66,7 @@ class SearchBar(Static):
async def parse_input(self, event: Input.Submitted) -> None:
if not (tc := await make_teilchen_input(event.value)):
logger.debug("could not create TeilchenCreate from data: %s", event.value)
return
event.input.value = ""

View file

@ -82,20 +82,40 @@ async def make_teilchen_input(text: str) -> TeilchenCreate | None:
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:
statement = select(
Teilchen.id, Teilchen.name, Teilchen.description, Teilchen.number, Teilchen.tags
) # ty:ignore[no-matching-overload]
all_teilchen = session.exec(statement).all()
logger.debug("Loading initial data: found %s records", len(all_teilchen))
return all_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:
teilchen = Teilchen.model_validate(tc)
session.add(teilchen)
session.commit()
session.refresh(teilchen)
logger.debug("created: %s", str(teilchen))
return teilchen