diff --git a/src/teilchensammler_cli/database.py b/src/teilchensammler_cli/database.py index 2d9f888..60cee27 100644 --- a/src/teilchensammler_cli/database.py +++ b/src/teilchensammler_cli/database.py @@ -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") diff --git a/src/teilchensammler_cli/main.py b/src/teilchensammler_cli/main.py index 9787807..f1d7c84 100644 --- a/src/teilchensammler_cli/main.py +++ b/src/teilchensammler_cli/main.py @@ -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 = "" diff --git a/src/teilchensammler_cli/models.py b/src/teilchensammler_cli/models.py index 4ed6afc..9422308 100644 --- a/src/teilchensammler_cli/models.py +++ b/src/teilchensammler_cli/models.py @@ -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