summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorWolfgang Müller2025-01-19 18:39:28 +0100
committerWolfgang Müller2025-01-19 23:36:36 +0100
commit90d636534b37f4993758297ae9330ff578244ea5 (patch)
tree1a8f7b072b4b8b43a88ee61dc92e8d769b1897bf
parent6636cb95330381205a3271fdc2878599cd231003 (diff)
downloadhircine-90d636534b37f4993758297ae9330ff578244ea5.tar.gz
backend/lint: Use built-in collection types for type annotations
-rw-r--r--src/hircine/api/filters.py16
-rw-r--r--src/hircine/api/inputs.py10
-rw-r--r--src/hircine/api/mutation/resolvers.py9
-rw-r--r--src/hircine/api/query/__init__.py4
-rw-r--r--src/hircine/api/types.py34
-rw-r--r--src/hircine/db/models.py20
-rw-r--r--src/hircine/plugins/__init__.py3
-rw-r--r--src/hircine/scanner.py4
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 = [