Compare commits

..

No commits in common. "f41f8e28e504d4976b5b5255f7bb3dcd191c33e2" and "9728e764e9416b1c1907381d403fb0c27b6b2655" have entirely different histories.

7 changed files with 11 additions and 69 deletions

View file

@ -1,6 +1,6 @@
[project]
name = "teilchensammler-cli"
version = "0.3.3"
version = "0.3.2"
description = "Build up and maintain an inventory of electronics parts and tools."
readme = "README.md"
requires-python = ">=3.12,<4.0"

View file

@ -3,7 +3,7 @@ from sqlmodel import SQLModel, create_engine
sqlite_url = os.environ.get("DATABASE_URL", "sqlite:///database.db")
engine = create_engine(sqlite_url, echo=False)
engine = create_engine(sqlite_url, echo=True)
def create_db_and_tables():

View file

@ -17,7 +17,7 @@ logging.basicConfig(
logger = logging.getLogger(__name__)
class SammlerApp(App):
class SammlerApp(App[None]):
async def on_mount(self) -> None:
create_db_and_tables()
_ = self.push_screen(AddInventoryScreen())

View file

@ -37,22 +37,14 @@ async def make_teilchen_input(text: str) -> TeilchenCreate | None:
import re
from natsort import natsorted
text = text.strip()
if not text:
logger.error("Empty text.")
return None
name_end = text.find(".")
if name_end == -1: # "." not in text
logger.warning("Missing period '.' from text.")
logger.debug("Could not find period symbol in input: %s", text)
return None
else:
name = text[0:name_end]
name = text[0:name_end]
if not name:
logger.warning("Could not extract name.")
logger.error("Could not extract name.")
logger.debug("Could not extract name from input: %s", text)
return None

View file

@ -7,7 +7,7 @@ from textual.widgets import Button, DataTable, Footer, Header, Input, Static
from .models import load_initial_data
TEILCHEN_DATA_HEADER = "pk Name Description Number Tags".split()
FAKE_DATA_HEADER = "pk Name Description Number Tags".split()
class SearchBar(Static):
@ -46,12 +46,12 @@ class SearchResults(Widget):
yield DataTable(id="table-search-result", cursor_type="row", zebra_stripes=True)
async def on_mount(self) -> None:
table: DataTable = self.query_one(DataTable)
table.add_columns(*TEILCHEN_DATA_HEADER)
table.add_rows(await load_initial_data())
table: DataTable[None] = self.query_one(DataTable[None])
_ = table.add_columns(*FAKE_DATA_HEADER)
_ = table.add_rows(await load_initial_data())
class AddInventoryScreen(Screen):
class AddInventoryScreen(Screen[None]):
def compose(self) -> ComposeResult:
yield Header()
yield SearchBar()

View file

@ -1,54 +1,4 @@
from typing import TypedDict
import pytest
import logging
from teilchensammler_cli.models import TeilchenCreate, make_teilchen_input
logger = logging.getLogger(__name__)
def test_initial_layout(snap_compare):
from teilchensammler_cli.main import app
assert snap_compare(app, terminal_size=(130, 40))
class Teilchen(TypedDict):
"""The things I do for my LSP..."""
name: str
description: str
tags: str
text: str
number: int
empty_teilchen: Teilchen = {
"name": "",
"description": "",
"tags": "",
"text": "",
"number": 1,
}
@pytest.mark.parametrize(
"example_input,expected",
[
("", None),
("a", None),
("a.", {"name": "a", "text": "a."}),
("aa", None),
("aa.", {"name": "aa", "text": "aa."}),
],
)
async def test_teilchendata_must_include_period(
example_input: str, expected: dict[str, str | int] | None
) -> None:
thing = expected
if expected:
arguments = empty_teilchen | expected
thing = TeilchenCreate(**arguments) # ty:ignore[invalid-argument-type]
assert await make_teilchen_input(example_input) == thing

2
uv.lock generated
View file

@ -1249,7 +1249,7 @@ wheels = [
[[package]]
name = "teilchensammler-cli"
version = "0.3.3"
version = "0.3.2"
source = { editable = "." }
dependencies = [
{ name = "ciso8601" },