diff --git a/app/api/cards.py b/app/api/cards.py index 8f04a6f..0880e27 100644 --- a/app/api/cards.py +++ b/app/api/cards.py @@ -1,27 +1,28 @@ import typing import litestar -from litestar.params import FromPath # noqa: TC002 +from litestar.di import NamedDependency +from litestar.params import FromPath from app import models, schemas -from app.repositories import CardsRepository # noqa: TC001 +from app.repositories import CardsRepository @litestar.get("/decks/{deck_id:int}/cards/") -async def list_cards(deck_id: FromPath[int], cards_repository: CardsRepository) -> schemas.Cards: +async def list_cards(deck_id: FromPath[int], cards_repository: NamedDependency[CardsRepository]) -> schemas.Cards: objects = await cards_repository.list_for_deck(deck_id) return schemas.Cards.from_models(objects) @litestar.get("/cards/{card_id:int}/") -async def get_card(card_id: FromPath[int], cards_repository: CardsRepository) -> schemas.Card: +async def get_card(card_id: FromPath[int], cards_repository: NamedDependency[CardsRepository]) -> schemas.Card: instance = await cards_repository.get_one(models.Card.id == card_id) return schemas.Card.model_validate(instance) @litestar.post("/decks/{deck_id:int}/cards/") async def create_cards( - deck_id: FromPath[int], data: list[schemas.CardCreate], cards_repository: CardsRepository + deck_id: FromPath[int], data: list[schemas.CardCreate], cards_repository: NamedDependency[CardsRepository] ) -> schemas.Cards: objects = await cards_repository.add_cards(deck_id, data) return schemas.Cards.from_models(objects) @@ -29,7 +30,7 @@ async def create_cards( @litestar.put("/decks/{deck_id:int}/cards/") async def update_cards( - deck_id: FromPath[int], data: list[schemas.Card], cards_repository: CardsRepository + deck_id: FromPath[int], data: list[schemas.Card], cards_repository: NamedDependency[CardsRepository] ) -> schemas.Cards: objects = await cards_repository.upsert_cards(deck_id, data) return schemas.Cards.from_models(objects) diff --git a/app/api/decks.py b/app/api/decks.py index 2dc6743..f29901a 100644 --- a/app/api/decks.py +++ b/app/api/decks.py @@ -1,20 +1,21 @@ import typing import litestar -from litestar.params import FromPath # noqa: TC002 +from litestar.di import NamedDependency +from litestar.params import FromPath from app import schemas -from app.repositories import DecksRepository # noqa: TC001 +from app.repositories import DecksRepository @litestar.get("/decks/") -async def list_decks(decks_repository: DecksRepository) -> schemas.Decks: +async def list_decks(decks_repository: NamedDependency[DecksRepository]) -> schemas.Decks: objects = await decks_repository.get_many() return schemas.Decks.from_models(objects) @litestar.get("/decks/{deck_id:int}/") -async def get_deck(deck_id: FromPath[int], decks_repository: DecksRepository) -> schemas.DeckWithCards: +async def get_deck(deck_id: FromPath[int], decks_repository: NamedDependency[DecksRepository]) -> schemas.DeckWithCards: instance = await decks_repository.fetch_with_cards(deck_id) return schemas.DeckWithCards.model_validate(instance) @@ -23,14 +24,14 @@ async def get_deck(deck_id: FromPath[int], decks_repository: DecksRepository) -> async def update_deck( deck_id: FromPath[int], data: schemas.DeckCreate, - decks_repository: DecksRepository, + decks_repository: NamedDependency[DecksRepository], ) -> schemas.Deck: instance = await decks_repository.update(data=data.model_dump(), item_id=deck_id) return schemas.Deck.model_validate(instance) @litestar.post("/decks/") -async def create_deck(data: schemas.DeckCreate, decks_repository: DecksRepository) -> schemas.Deck: +async def create_deck(data: schemas.DeckCreate, decks_repository: NamedDependency[DecksRepository]) -> schemas.Deck: instance = await decks_repository.create(data) return schemas.Deck.model_validate(instance) diff --git a/pyproject.toml b/pyproject.toml index f2e42ec..12cccf3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,14 +62,12 @@ ignore = [ "ISC001", # flake8-implicit-str-concat "S105", # Possible hardcoded password "CPY001", # Missing copyright notice at top of file + "TC", # Litestar and modern-di read annotations at runtime ] isort.lines-after-imports = 2 isort.no-lines-before = ["standard-library", "local-folder"] [tool.ruff.lint.extend-per-file-ignores] -"app/resources/*.py" = [ - "TC", # modern-di reads DI creator annotations at runtime -] "tests/*.py" = [ "S101", # allow asserts ]