diff --git a/contrib/api_template.py b/contrib/api_template.py index dce31ff..ea02391 100644 --- a/contrib/api_template.py +++ b/contrib/api_template.py @@ -1,6 +1,6 @@ from typing import Dict, List, Union -from mangadlp.metadata import ChapterData +from mangadlp.types import ChapterData,ComicInfo # api template for manga-dlp @@ -56,7 +56,7 @@ class YourAPI: }, } # or with --forcevol - self.manga_chapter_data: Dict[str, Dict[str, Union[str, int]]] = { + self.manga_chapter_data: Dict[str, ChapterData] = { "1:1": { "uuid": "abc", "volume": "1", @@ -157,7 +157,7 @@ class YourAPI: # example return { - "Volume": "abc", + "Volume": 1, "LanguageISO": "en", "Title": "test", } diff --git a/mangadlp/api/mangadex.py b/mangadlp/api/mangadex.py index 0fc2380..1d7b046 100644 --- a/mangadlp/api/mangadex.py +++ b/mangadlp/api/mangadex.py @@ -6,7 +6,7 @@ import requests from loguru import logger as log from mangadlp import utils -from mangadlp.metadata import ChapterData, ComicInfo +from mangadlp.types import ChapterData, ComicInfo class Mangadex: diff --git a/mangadlp/app.py b/mangadlp/app.py index 7aa7fec..6ee44c0 100644 --- a/mangadlp/app.py +++ b/mangadlp/app.py @@ -9,7 +9,8 @@ from mangadlp import downloader, utils from mangadlp.api.mangadex import Mangadex from mangadlp.cache import CacheDB from mangadlp.hooks import run_hook -from mangadlp.metadata import ChapterData, write_metadata +from mangadlp.metadata import write_metadata +from mangadlp.types import ChapterData from mangadlp.utils import get_file_format diff --git a/mangadlp/metadata.py b/mangadlp/metadata.py index 78eea57..d183147 100644 --- a/mangadlp/metadata.py +++ b/mangadlp/metadata.py @@ -1,9 +1,11 @@ from pathlib import Path -from typing import Any, Dict, Optional, Tuple, TypedDict, Union +from typing import Any, Dict, Tuple, Union import xmltodict from loguru import logger as log +from mangadlp.types import ComicInfo + METADATA_FILENAME = "ComicInfo.xml" METADATA_TEMPLATE = Path("mangadlp/metadata/ComicInfo_v2.0.xml") # define metadata types, defaults and valid values. an empty list means no value check @@ -59,55 +61,6 @@ METADATA_TYPES: Dict[str, Tuple[type, Any, list[Union[str, int]]]] = { } -class ComicInfo(TypedDict, total=False): - """ComicInfo.xml basic types. - - Validation is done via metadata.validate_metadata() - All valid types and values are specified in metadata.METADATA_TYPES - """ - - Title: Optional[str] - Series: Optional[str] - Number: Optional[str] - Count: Optional[int] - Volume: Optional[int] - AlternateSeries: Optional[str] - AlternateNumber: Optional[str] - AlternateCount: Optional[int] - Summary: Optional[str] - Notes: Optional[str] - Year: Optional[int] - Month: Optional[int] - Day: Optional[int] - Writer: Optional[str] - Colorist: Optional[str] - Publisher: Optional[str] - Genre: Optional[str] - Web: Optional[str] - PageCount: Optional[int] - LanguageISO: Optional[str] - Format: Optional[str] - BlackAndWhite: Optional[str] - Manga: Optional[str] - ScanInformation: Optional[str] - SeriesGroup: Optional[str] - AgeRating: Optional[str] - CommunityRating: Optional[int] - - -class ChapterData(TypedDict): - """Basic chapter-data types. - - All values have to be provided. - """ - - uuid: str - volume: str - chapter: str - name: str - pages: int - - def validate_metadata(metadata_in: ComicInfo) -> Dict[str, ComicInfo]: log.info("Validating metadata") diff --git a/mangadlp/types.py b/mangadlp/types.py new file mode 100644 index 0000000..b924bf4 --- /dev/null +++ b/mangadlp/types.py @@ -0,0 +1,50 @@ +from typing import Optional, TypedDict + + +class ComicInfo(TypedDict, total=False): + """ComicInfo.xml basic types. + + Validation is done via metadata.validate_metadata() + All valid types and values are specified in metadata.METADATA_TYPES + """ + + Title: Optional[str] + Series: Optional[str] + Number: Optional[str] + Count: Optional[int] + Volume: Optional[int] + AlternateSeries: Optional[str] + AlternateNumber: Optional[str] + AlternateCount: Optional[int] + Summary: Optional[str] + Notes: Optional[str] + Year: Optional[int] + Month: Optional[int] + Day: Optional[int] + Writer: Optional[str] + Colorist: Optional[str] + Publisher: Optional[str] + Genre: Optional[str] + Web: Optional[str] + PageCount: Optional[int] + LanguageISO: Optional[str] + Format: Optional[str] + BlackAndWhite: Optional[str] + Manga: Optional[str] + ScanInformation: Optional[str] + SeriesGroup: Optional[str] + AgeRating: Optional[str] + CommunityRating: Optional[int] + + +class ChapterData(TypedDict): + """Basic chapter-data types. + + All values have to be provided. + """ + + uuid: str + volume: str + chapter: str + name: str + pages: int