add metadata type check
Some checks failed
ci/woodpecker/push/tests Pipeline failed

This commit is contained in:
Ivan Schaller 2023-02-14 13:31:55 +01:00
parent a7b5c0b786
commit 796aeb8aa7
Signed by: olofvndrhr
GPG key ID: 2A6BE07D99C8C205
4 changed files with 52 additions and 8 deletions

View file

@ -97,6 +97,23 @@ class YourAPI:
The metadata as a dict The metadata as a dict
""" """
# metadata types. have to be correct to be valid
{
"Title": str,
"Series": str,
"Number": str,
"Count": int,
"Volume": int,
"Summary": str,
"Genre": str,
"Web": str,
"PageCount": int,
"LanguageISO": str,
"Format": str,
"ScanInformation": str,
"SeriesGroup": str,
}
# example # example
return { return {
"Volume": "abc", "Volume": "abc",

View file

@ -163,12 +163,12 @@ class Mangadex:
for chapter in r.json()["data"]: for chapter in r.json()["data"]:
attributes: dict = chapter["attributes"] attributes: dict = chapter["attributes"]
# chapter infos from feed # chapter infos from feed
chapter_num = attributes.get("chapter") or "" chapter_num: str = attributes.get("chapter") or ""
chapter_vol = attributes.get("volume") or "" chapter_vol: str = attributes.get("volume") or ""
chapter_uuid = chapter.get("id") or "" chapter_uuid: str = chapter.get("id") or ""
chapter_name = attributes.get("title") or "" chapter_name: str = attributes.get("title") or ""
chapter_external = attributes.get("externalUrl") or "" chapter_external: str = attributes.get("externalUrl") or ""
chapter_pages = attributes.get("pages") or "" chapter_pages: int = attributes.get("pages") or 0
# check for chapter title and fix it # check for chapter title and fix it
if chapter_name: if chapter_name:
@ -268,7 +268,7 @@ class Mangadex:
chapter_data = self.manga_chapter_data[chapter] chapter_data = self.manga_chapter_data[chapter]
metadata = { metadata = {
"Volume": chapter_data["volume"], "Volume": int(chapter_data["volume"]),
"Number": chapter_data["chapter"], "Number": chapter_data["chapter"],
"PageCount": chapter_data["pages"], "PageCount": chapter_data["pages"],
"Title": chapter_data["name"], "Title": chapter_data["name"],

View file

@ -9,6 +9,23 @@ def write_metadata(chapter_path: Path, metadata: dict) -> None:
log.warning("Can't add metadata for pdf format. Skipping") log.warning("Can't add metadata for pdf format. Skipping")
return return
# define metadata types
metadata_types: dict[str, type] = {
"Title": str,
"Series": str,
"Number": str,
"Count": int,
"Volume": int,
"Summary": str,
"Genre": str,
"Web": str,
"PageCount": int,
"LanguageISO": str,
"Format": str,
"ScanInformation": str,
"SeriesGroup": str,
}
try: try:
metadata_template = Path("mangadlp/metadata/ComicInfo.xml").read_text( metadata_template = Path("mangadlp/metadata/ComicInfo.xml").read_text(
encoding="utf8" encoding="utf8"
@ -22,12 +39,22 @@ def write_metadata(chapter_path: Path, metadata: dict) -> None:
log.info(f"Writing metadata to: '{metadata_file}'") log.info(f"Writing metadata to: '{metadata_file}'")
log.debug(f"Metadata items: {metadata}") log.debug(f"Metadata items: {metadata}")
for key, value in metadata.items(): for key, value in metadata.items():
# check if metadata is empty
if not value: if not value:
continue continue
# try to match with template
try: try:
metadata_empty["ComicInfo"][key] metadata_empty["ComicInfo"][key]
except KeyError: except KeyError:
continue continue
# check if metadata type is correct
log.debug(f"Key:{key} -> value={type(value)} -> check={metadata_types[key]}")
if not isinstance(value, metadata_types[key]): # noqa
log.warning(
f"Metadata has wrong type: {key}:{metadata_types[key]} -> {value}"
)
continue
log.debug(f"Updating metadata: '{key}' = '{value}'") log.debug(f"Updating metadata: '{key}' = '{value}'")
metadata_empty["ComicInfo"][key] = value metadata_empty["ComicInfo"][key] = value

View file

@ -14,7 +14,7 @@
<ScanInformation></ScanInformation> <ScanInformation></ScanInformation>
<SeriesGroup></SeriesGroup> <SeriesGroup></SeriesGroup>
<BlackAndWhite>Unknown</BlackAndWhite> <BlackAndWhite>Unknown</BlackAndWhite>
<Manga>Yes</Manga>
<AgeRating>Unknown</AgeRating> <AgeRating>Unknown</AgeRating>
<Manga>Yes</Manga>
<Notes>Downloaded with https://github.com/olofvndrhr/manga-dlp</Notes> <Notes>Downloaded with https://github.com/olofvndrhr/manga-dlp</Notes>
</ComicInfo> </ComicInfo>