diff options
author | Wolfgang Müller | 2025-01-19 18:39:28 +0100 |
---|---|---|
committer | Wolfgang Müller | 2025-01-19 23:36:36 +0100 |
commit | 90d636534b37f4993758297ae9330ff578244ea5 (patch) | |
tree | 1a8f7b072b4b8b43a88ee61dc92e8d769b1897bf | |
parent | 6636cb95330381205a3271fdc2878599cd231003 (diff) | |
download | hircine-90d636534b37f4993758297ae9330ff578244ea5.tar.gz |
backend/lint: Use built-in collection types for type annotations
-rw-r--r-- | src/hircine/api/filters.py | 16 | ||||
-rw-r--r-- | src/hircine/api/inputs.py | 10 | ||||
-rw-r--r-- | src/hircine/api/mutation/resolvers.py | 9 | ||||
-rw-r--r-- | src/hircine/api/query/__init__.py | 4 | ||||
-rw-r--r-- | src/hircine/api/types.py | 34 | ||||
-rw-r--r-- | src/hircine/db/models.py | 20 | ||||
-rw-r--r-- | src/hircine/plugins/__init__.py | 3 | ||||
-rw-r--r-- | src/hircine/scanner.py | 4 |
8 files changed, 48 insertions, 52 deletions
diff --git a/src/hircine/api/filters.py b/src/hircine/api/filters.py index ab44cf9..807178b 100644 --- a/src/hircine/api/filters.py +++ b/src/hircine/api/filters.py @@ -1,5 +1,5 @@ from abc import ABC, abstractmethod -from typing import Generic, List, Optional, TypeVar +from typing import Generic, Optional, TypeVar import strawberry from sqlalchemy import and_, func, or_, select @@ -29,9 +29,9 @@ class Matchable(ABC): @strawberry.input class AssociationFilter(Matchable): - any: Optional[List[int]] = strawberry.field(default_factory=lambda: None) - all: Optional[List[int]] = strawberry.field(default_factory=lambda: None) - exact: Optional[List[int]] = strawberry.field(default_factory=lambda: None) + any: Optional[list[int]] = strawberry.field(default_factory=lambda: None) + all: Optional[list[int]] = strawberry.field(default_factory=lambda: None) + exact: Optional[list[int]] = strawberry.field(default_factory=lambda: None) empty: Optional[bool] = None def _exists(self, condition): @@ -220,9 +220,9 @@ class TagAssociationFilter(AssociationFilter): we unpack the database IDs from the input IDs. """ - any: Optional[List[str]] = strawberry.field(default_factory=lambda: None) - all: Optional[List[str]] = strawberry.field(default_factory=lambda: None) - exact: Optional[List[str]] = strawberry.field(default_factory=lambda: None) + any: Optional[list[str]] = strawberry.field(default_factory=lambda: None) + all: Optional[list[str]] = strawberry.field(default_factory=lambda: None) + exact: Optional[list[str]] = strawberry.field(default_factory=lambda: None) def where(self, id): try: @@ -252,7 +252,7 @@ class TagAssociationFilter(AssociationFilter): @strawberry.input class Filter(Matchable, Generic[T]): - any: Optional[List["T"]] = strawberry.field(default_factory=lambda: None) + any: Optional[list["T"]] = strawberry.field(default_factory=lambda: None) empty: Optional[bool] = None def _empty(self): diff --git a/src/hircine/api/inputs.py b/src/hircine/api/inputs.py index 38e17e4..039c211 100644 --- a/src/hircine/api/inputs.py +++ b/src/hircine/api/inputs.py @@ -1,6 +1,6 @@ import datetime from abc import ABC, abstractmethod -from typing import List, Optional, Type +from typing import Optional import strawberry from sqlalchemy.orm.util import identity_key @@ -72,7 +72,7 @@ class Fetchable(ABC): Additionally, fetched items can be "constrained" to enforce API rules. """ - _model: Type[Base] + _model: type[Base] @abstractmethod async def fetch(self, ctx: MutationContext): @@ -151,7 +151,7 @@ class Input(FetchableID): @strawberry.input class InputList(FetchableID): - ids: List[int] + ids: list[int] async def fetch(self, ctx: MutationContext): if not self.ids: @@ -271,7 +271,7 @@ class WorldsUpdateInput(UpdateInputList): @strawberry.input class ComicTagsUpdateInput(UpdateInputList): - ids: List[str] = strawberry.field(default_factory=lambda: []) + ids: list[str] = strawberry.field(default_factory=lambda: []) @classmethod def parse_input(cls, id): @@ -334,7 +334,7 @@ class UpsertOptions: @strawberry.input class UpsertInputList(FetchableName): - names: List[str] = strawberry.field(default_factory=lambda: []) + names: list[str] = strawberry.field(default_factory=lambda: []) options: Optional[UpsertOptions] = UNSET async def fetch(self, ctx: MutationContext): diff --git a/src/hircine/api/mutation/resolvers.py b/src/hircine/api/mutation/resolvers.py index 1a0cd45..b3587f7 100644 --- a/src/hircine/api/mutation/resolvers.py +++ b/src/hircine/api/mutation/resolvers.py @@ -1,6 +1,5 @@ from datetime import datetime, timezone from pathlib import Path -from typing import List from strawberry import UNSET @@ -130,7 +129,7 @@ def update_attr(obj, field, value, mode): setattr(obj, field, value) -async def _update(ids: List[int], modelcls, input, successcls): +async def _update(ids: list[int], modelcls, input, successcls): multiple = len(ids) > 1 async with db.session() as s: @@ -163,21 +162,21 @@ async def _update(ids: List[int], modelcls, input, successcls): def update(modelcls): - async def inner(ids: List[int], input: update_input_cls(modelcls)): + async def inner(ids: list[int], input: update_input_cls(modelcls)): return await _update(ids, modelcls, input, UpdateSuccess) return inner def upsert(modelcls): - async def inner(ids: List[int], input: upsert_input_cls(modelcls)): + async def inner(ids: list[int], input: upsert_input_cls(modelcls)): return await _update(ids, modelcls, input, UpsertSuccess) return inner def delete(modelcls, post_delete=None): - async def inner(ids: List[int]): + async def inner(ids: list[int]): async with db.session() as s: objects, missing = await ops.get_all(s, modelcls, ids) if missing: diff --git a/src/hircine/api/query/__init__.py b/src/hircine/api/query/__init__.py index 7bc4b7d..37b22df 100644 --- a/src/hircine/api/query/__init__.py +++ b/src/hircine/api/query/__init__.py @@ -1,5 +1,3 @@ -from typing import List - import strawberry import hircine.api.responses as rp @@ -43,7 +41,7 @@ class Query: circle: rp.CircleResponse = query(single(models.Circle)) circles: FilterResult[Circle] = query(every(models.Circle)) comic: rp.ComicResponse = query(single(models.Comic, full=True)) - comic_scrapers: List[ComicScraper] = query(comic_scrapers) + comic_scrapers: list[ComicScraper] = query(comic_scrapers) comic_tags: FilterResult[ComicTag] = query(comic_tags) comics: FilterResult[Comic] = query(every(models.Comic)) namespace: rp.NamespaceResponse = query(single(models.Namespace)) diff --git a/src/hircine/api/types.py b/src/hircine/api/types.py index bbd13fa..68b2ccc 100644 --- a/src/hircine/api/types.py +++ b/src/hircine/api/types.py @@ -1,5 +1,5 @@ import datetime -from typing import Generic, List, Optional, TypeVar +from typing import Generic, Optional, TypeVar import strawberry @@ -74,7 +74,7 @@ class MixinModifyDates(MixinCreatedAt): @strawberry.type class FilterResult(Generic[T]): count: int - edges: List["T"] + edges: list["T"] @strawberry.type @@ -94,8 +94,8 @@ class Archive(MixinName, MixinOrganized, Base): @strawberry.type class FullArchive(MixinCreatedAt, Archive): - pages: List["Page"] - comics: List["Comic"] + pages: list["Page"] + comics: list["Comic"] mtime: datetime.datetime def __init__(self, model): @@ -143,11 +143,11 @@ class Comic(MixinFavourite, MixinOrganized, MixinBookmarked, Base): rating: Optional[Rating] category: Optional[Category] censorship: Optional[Censorship] - tags: List["ComicTag"] - artists: List["Artist"] - characters: List["Character"] - circles: List["Circle"] - worlds: List["World"] + tags: list["ComicTag"] + artists: list["Artist"] + characters: list["Character"] + circles: list["Circle"] + worlds: list["World"] page_count: int def __init__(self, model): @@ -172,7 +172,7 @@ class Comic(MixinFavourite, MixinOrganized, MixinBookmarked, Base): class FullComic(MixinModifyDates, Comic): archive: "Archive" url: Optional[str] - pages: List["Page"] + pages: list["Page"] direction: Direction layout: Layout @@ -196,7 +196,7 @@ class Tag(MixinName, Base): @strawberry.type class FullTag(Tag): - namespaces: List["Namespace"] + namespaces: list["Namespace"] def __init__(self, model): super().__init__(model) @@ -270,7 +270,7 @@ class ComicScraper: @strawberry.type class ScrapeComicResult: data: "ScrapedComic" - warnings: List[str] = strawberry.field(default_factory=lambda: []) + warnings: list[str] = strawberry.field(default_factory=lambda: []) @strawberry.type @@ -285,11 +285,11 @@ class ScrapedComic: censorship: Optional[Censorship] = None direction: Optional[Direction] = None layout: Optional[Layout] = None - tags: List[str] = strawberry.field(default_factory=lambda: []) - artists: List[str] = strawberry.field(default_factory=lambda: []) - characters: List[str] = strawberry.field(default_factory=lambda: []) - circles: List[str] = strawberry.field(default_factory=lambda: []) - worlds: List[str] = strawberry.field(default_factory=lambda: []) + tags: list[str] = strawberry.field(default_factory=lambda: []) + artists: list[str] = strawberry.field(default_factory=lambda: []) + characters: list[str] = strawberry.field(default_factory=lambda: []) + circles: list[str] = strawberry.field(default_factory=lambda: []) + worlds: list[str] = strawberry.field(default_factory=lambda: []) @classmethod def from_generator(cls, generator): diff --git a/src/hircine/db/models.py b/src/hircine/db/models.py index 575771b..f204998 100644 --- a/src/hircine/db/models.py +++ b/src/hircine/db/models.py @@ -1,6 +1,6 @@ import os from datetime import date, datetime, timezone -from typing import List, Optional +from typing import Optional from sqlalchemy import ( DateTime, @@ -104,12 +104,12 @@ class Archive(MixinID, MixinCreatedAt, MixinOrganized, Base): cover_id: Mapped[int] = mapped_column(ForeignKey("image.id")) cover: Mapped["Image"] = relationship(lazy="joined", innerjoin=True) - pages: Mapped[List["Page"]] = relationship( + pages: Mapped[list["Page"]] = relationship( back_populates="archive", order_by="(Page.index)", cascade="save-update, merge, expunge, delete, delete-orphan", ) - comics: Mapped[List["Comic"]] = relationship( + comics: Mapped[list["Comic"]] = relationship( back_populates="archive", cascade="save-update, merge, expunge, delete, delete-orphan", ) @@ -176,37 +176,37 @@ class Comic( archive_id: Mapped[int] = mapped_column(ForeignKey("archive.id")) archive: Mapped["Archive"] = relationship(back_populates="comics") - pages: Mapped[List["Page"]] = relationship(order_by="(Page.index)") + pages: Mapped[list["Page"]] = relationship(order_by="(Page.index)") page_count: Mapped[int] - tags: Mapped[List["ComicTag"]] = relationship( + tags: Mapped[list["ComicTag"]] = relationship( lazy="selectin", cascade="save-update, merge, expunge, delete, delete-orphan", passive_deletes=True, ) - artists: Mapped[List["Artist"]] = relationship( + artists: Mapped[list["Artist"]] = relationship( secondary="comicartist", lazy="selectin", order_by="(Artist.name, Artist.id)", passive_deletes=True, ) - characters: Mapped[List["Character"]] = relationship( + characters: Mapped[list["Character"]] = relationship( secondary="comiccharacter", lazy="selectin", order_by="(Character.name, Character.id)", passive_deletes=True, ) - circles: Mapped[List["Circle"]] = relationship( + circles: Mapped[list["Circle"]] = relationship( secondary="comiccircle", lazy="selectin", order_by="(Circle.name, Circle.id)", passive_deletes=True, ) - worlds: Mapped[List["World"]] = relationship( + worlds: Mapped[list["World"]] = relationship( secondary="comicworld", lazy="selectin", order_by="(World.name, World.id)", @@ -233,7 +233,7 @@ class Comic( class Tag(MixinID, MixinModifyDates, MixinName, Base): description: Mapped[Optional[str]] - namespaces: Mapped[List["Namespace"]] = relationship( + namespaces: Mapped[list["Namespace"]] = relationship( secondary="tagnamespaces", passive_deletes=True, order_by="(Namespace.sort_name, Namespace.name, Namespace.id)", diff --git a/src/hircine/plugins/__init__.py b/src/hircine/plugins/__init__.py index a1aea90..7bd3612 100644 --- a/src/hircine/plugins/__init__.py +++ b/src/hircine/plugins/__init__.py @@ -1,9 +1,8 @@ from importlib.metadata import entry_points -from typing import Dict, Type from hircine.scraper import Scraper -scraper_registry: Dict[str, Type[Scraper]] = {} +scraper_registry: dict[str, type[Scraper]] = {} transformers = [] diff --git a/src/hircine/scanner.py b/src/hircine/scanner.py index d2b5cd3..29ae04f 100644 --- a/src/hircine/scanner.py +++ b/src/hircine/scanner.py @@ -7,7 +7,7 @@ from concurrent.futures import ProcessPoolExecutor from datetime import datetime, timezone from enum import Enum from hashlib import file_digest -from typing import List, NamedTuple +from typing import NamedTuple from zipfile import ZipFile, is_zipfile from blake3 import blake3 @@ -86,7 +86,7 @@ class AddArchive(NamedTuple): path: str size: int mtime: datetime - members: List[Member] + members: list[Member] async def upsert_images(self, session): input = [ |