TMDB: Use TagKey for predefined & genre tags

master
Felix Stupp 1 year ago
parent 4d10e70fb2
commit ee6d235a6c
Signed by: zocker
GPG Key ID: 93E1BD26F6B02FB7

@ -5,6 +5,7 @@ from functools import cached_property
import itertools
import math
from typing import (
Iterable,
Literal,
NewType,
Optional,
@ -12,6 +13,12 @@ from typing import (
TypedDict,
)
from ...models import (
Tag,
TagKey,
predefined_movie_tag,
)
import tmdbsimple as tmdb # type: ignore
@ -24,6 +31,8 @@ tmdb.API_KEY = "f090bb54758cabf231fb605d3e3e0468"
EXTRACTOR_KEY = ".extractor/org.themoviedb"
EXTRACTOR_NAME = "The Movie DB"
GENRE_PREFIX = f"{EXTRACTOR_KEY}/genre"
TMDB_DATE_FORMAT = "%Y-%m-%d"
TMDB_REGEX_URI = r"""
(
@ -266,6 +275,11 @@ class TmdbMovieData:
def _info(self) -> TmdbMovieInfoDict:
return self.obj.info(append_to_response="external_ids,images,keywords") # type: ignore
def get_tags(self) -> Iterable[Tag]:
yield predefined_movie_tag()
for genre in self.genres:
yield get_genre_tag(genre)
@cached_property
def description(self) -> Optional[str]:
return self._info.get("overview")
@ -335,3 +349,34 @@ class TmdbMovieData:
@cached_property
def tmdb_id(self) -> int:
return self._info["id"]
def get_genre_tag(genre: GenreTitle) -> Tag:
return get_any_tag(
category_key=GENRE_PREFIX,
category_name="Genre",
element_key=genre.lower(),
element_name=genre,
)
def get_any_tag(
*,
category_key: str,
category_name: str,
element_key: str,
element_name: str,
) -> Tag:
TagKey.get_or_create_tag(
tag_key=category_key,
title=f"[{EXTRACTOR_NAME}] {category_name}",
use_for_preferences=False,
)
return TagKey.get_or_create_tag(
tag_key=f"{category_key}/{element_key}",
title=f"[{EXTRACTOR_NAME}] [{category_name}] {element_name}",
use_for_preferences=True,
super_tags=[
category_key,
],
)

@ -1,15 +1,11 @@
from __future__ import annotations
import itertools
import re
from typing import List, Optional
from pony import orm
from typing import Optional
from ...models import (
MediaElement,
MediaThumbnail,
Tag,
)
from ..all.tmdb import (
EXTRACTOR_KEY,
@ -102,10 +98,6 @@ class TmdbMovieMediaExtractor(MediaExtractor[TmdbMovieData]):
data.tmdb_short_uri,
)
)
for genre in itertools.chain(["Movie"], data.genres):
tag_list: List[Tag] = list(
orm.select(tag for tag in Tag if tag.title == genre)
)
if len(tag_list) == 1:
object.tag_list.add(tag_list[0])
for tag in data.get_tags(data):
object.tag_list.add(tag)
return ChangedReport.ChangedSome # TODO improve

Loading…
Cancel
Save