From a49eebe15b86e3b9c5e77687cbf9edbde6ffb487 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 27 Sep 2026 23:22:46 +0300 Subject: [PATCH 1/3] fix: mark repository handler parameters with NamedDependency --- app/api/cards.py | 9 +++++---- app/api/decks.py | 9 +++++---- pyproject.toml | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/api/cards.py b/app/api/cards.py index 8f04a6f..c858bdf 100644 --- a/app/api/cards.py +++ b/app/api/cards.py @@ -1,6 +1,7 @@ import typing import litestar +from litestar.di import NamedDependency # noqa: TC002 from litestar.params import FromPath # noqa: TC002 from app import models, schemas @@ -8,20 +9,20 @@ @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..3e2eaae 100644 --- a/app/api/decks.py +++ b/app/api/decks.py @@ -1,6 +1,7 @@ import typing import litestar +from litestar.di import NamedDependency # noqa: TC002 from litestar.params import FromPath # noqa: TC002 from app import schemas @@ -8,13 +9,13 @@ @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..5a830e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,6 +78,7 @@ isort.no-lines-before = ["standard-library", "local-folder"] addopts = "--cov=. --cov-report term-missing --cov-fail-under=100" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" +filterwarnings = ["error::litestar.exceptions.LitestarDeprecationWarning"] [tool.coverage.report] exclude_also = [ From 55a1a434e74d5b12a9f887614137d716ace5f69d Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 27 Sep 2026 23:26:11 +0300 Subject: [PATCH 2/3] chore: ignore ruff TC rules globally --- app/api/cards.py | 6 +++--- app/api/decks.py | 6 +++--- pyproject.toml | 4 +--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/api/cards.py b/app/api/cards.py index c858bdf..0880e27 100644 --- a/app/api/cards.py +++ b/app/api/cards.py @@ -1,11 +1,11 @@ import typing import litestar -from litestar.di import NamedDependency # noqa: TC002 -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/") diff --git a/app/api/decks.py b/app/api/decks.py index 3e2eaae..f29901a 100644 --- a/app/api/decks.py +++ b/app/api/decks.py @@ -1,11 +1,11 @@ import typing import litestar -from litestar.di import NamedDependency # noqa: TC002 -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/") diff --git a/pyproject.toml b/pyproject.toml index 5a830e7..027df90 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 ] From 02da65f1b78fe6a0aa3fa7e7dab42901bbdb53c5 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 27 Sep 2026 23:27:30 +0300 Subject: [PATCH 3/3] test: drop LitestarDeprecationWarning filter --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 027df90..12cccf3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,7 +76,6 @@ isort.no-lines-before = ["standard-library", "local-folder"] addopts = "--cov=. --cov-report term-missing --cov-fail-under=100" asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" -filterwarnings = ["error::litestar.exceptions.LitestarDeprecationWarning"] [tool.coverage.report] exclude_also = [