format files

This commit is contained in:
maxid
2025-12-23 19:54:27 +01:00
parent 0c30ede537
commit 3b920135c2
6 changed files with 71 additions and 51 deletions

View File

@@ -5,6 +5,7 @@ Revises: eb0bd3cc1852
Create Date: 2025-12-13 18:47:02.146038
"""
from typing import Sequence, Union
from alembic import op
@@ -12,8 +13,8 @@ import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '16e78af9e5bf'
down_revision: Union[str, None] = 'eb0bd3cc1852'
revision: str = "16e78af9e5bf"
down_revision: Union[str, None] = "eb0bd3cc1852"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
@@ -21,22 +22,16 @@ depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
"""Upgrade schema."""
# Add original_language column to show table
op.add_column(
'show',
sa.Column('original_language', sa.String(10), nullable=True)
)
op.add_column("show", sa.Column("original_language", sa.String(10), nullable=True))
# Add original_language column to movie table
op.add_column(
'movie',
sa.Column('original_language', sa.String(10), nullable=True)
)
op.add_column("movie", sa.Column("original_language", sa.String(10), nullable=True))
def downgrade() -> None:
"""Downgrade schema."""
# Remove original_language column from movie table
op.drop_column('movie', 'original_language')
op.drop_column("movie", "original_language")
# Remove original_language column from show table
op.drop_column('show', 'original_language')
op.drop_column("show", "original_language")

View File

@@ -3,8 +3,9 @@ from pydantic_settings import BaseSettings
class TmdbConfig(BaseSettings):
tmdb_relay_url: str = "https://metadata-relay.dorninger.co/tmdb"
primary_languages: list[str] = [] # ISO 639-1 language codes
default_language: str = "en" # ISO 639-1 language codes
primary_languages: list[str] = [] # ISO 639-1 language codes
default_language: str = "en" # ISO 639-1 language codes
class TvdbConfig(BaseSettings):
tvdb_relay_url: str = "https://metadata-relay.dorninger.co/tvdb"

View File

@@ -32,7 +32,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
"""
Determine the language parameter to use for TMDB API calls.
Returns the original language if it's in primary_languages, otherwise returns default_language.
:param original_language: The original language code (ISO 639-1) of the media
:return: Language parameter (ISO 639-1 format, e.g., 'en', 'no')
"""
@@ -45,8 +45,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
language = self.default_language
try:
response = requests.get(
url=f"{self.url}/tv/shows/{id}",
params={"language": language}
url=f"{self.url}/tv/shows/{id}", params={"language": language}
)
response.raise_for_status()
return response.json()
@@ -59,13 +58,15 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
)
raise
def __get_season_metadata(self, show_id: int, season_number: int, language: str | None = None) -> dict:
def __get_season_metadata(
self, show_id: int, season_number: int, language: str | None = None
) -> dict:
if language is None:
language = self.default_language
try:
response = requests.get(
url=f"{self.url}/tv/shows/{show_id}/{season_number}",
params={"language": language}
params={"language": language},
)
response.raise_for_status()
return response.json()
@@ -102,7 +103,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
def __get_trending_tv(self) -> dict:
try:
response = requests.get(url=f"{self.url}/tv/trending", params={"language": self.default_language})
response = requests.get(
url=f"{self.url}/tv/trending",
params={"language": self.default_language},
)
response.raise_for_status()
return response.json()
except requests.RequestException as e:
@@ -119,8 +123,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
language = self.default_language
try:
response = requests.get(
url=f"{self.url}/movies/{id}",
params={"language": language}
url=f"{self.url}/movies/{id}", params={"language": language}
)
response.raise_for_status()
return response.json()
@@ -155,7 +158,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
def __get_trending_movies(self) -> dict:
try:
response = requests.get(url=f"{self.url}/movies/trending", params={"language": self.default_language})
response = requests.get(
url=f"{self.url}/movies/trending",
params={"language": self.default_language},
)
response.raise_for_status()
return response.json()
except requests.RequestException as e:
@@ -170,10 +176,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
def download_show_poster_image(self, show: Show) -> bool:
# Determine which language to use based on show's original_language
language = self.__get_language_param(show.original_language)
# Fetch metadata in the appropriate language to get localized poster
show_metadata = self.__get_show_metadata(show.external_id, language=language)
# downloading the poster
# all pictures from TMDB should already be jpeg, so no need to convert
if show_metadata["poster_path"] is not None:
@@ -206,20 +212,20 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
if language is None:
show_metadata = self.__get_show_metadata(id)
language = show_metadata.get("original_language")
# Determine which language to use for metadata
language = self.__get_language_param(language)
# Fetch show metadata in the appropriate language
show_metadata = self.__get_show_metadata(id, language=language)
season_list = []
# inserting all the metadata into the objects
for season in show_metadata["seasons"]:
season_metadata = self.__get_season_metadata(
show_id=show_metadata["id"],
show_id=show_metadata["id"],
season_number=season["season_number"],
language=language
language=language,
)
episode_list = []
@@ -287,19 +293,18 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
)
else:
poster_url = None
# Determine which name to use based on primary_languages
original_language = result.get("original_language")
original_name = result.get("original_name")
display_name = result["name"]
overview = result["overview"]
# Use original name if language is in primary_languages and skip overview
if original_language and original_language in self.primary_languages:
display_name = original_name
overview = None
formatted_results.append(
MetaDataProviderSearchResult(
poster_path=poster_url,
@@ -334,13 +339,13 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
if language is None:
movie_metadata = self.__get_movie_metadata(id=id)
language = movie_metadata.get("original_language")
# Determine which language to use for metadata
language = self.__get_language_param(language)
# Fetch movie metadata in the appropriate language
movie_metadata = self.__get_movie_metadata(id=id, language=language)
year = media_manager.metadataProvider.utils.get_year_from_date(
movie_metadata["release_date"]
)
@@ -384,18 +389,18 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
)
else:
poster_url = None
# Determine which name to use based on primary_languages
original_language = result.get("original_language")
original_title = result.get("original_title")
display_name = result["title"]
overview = result["overview"]
# Use original name if language is in primary_languages and skip overview
if original_language and original_language in self.primary_languages:
display_name = original_title
overview = None
formatted_results.append(
MetaDataProviderSearchResult(
poster_path=poster_url,
@@ -418,10 +423,12 @@ class TmdbMetadataProvider(AbstractMetadataProvider):
def download_movie_poster_image(self, movie: Movie) -> bool:
# Determine which language to use based on movie's original_language
language = self.__get_language_param(movie.original_language)
# Fetch metadata in the appropriate language to get localized poster
movie_metadata = self.__get_movie_metadata(id=movie.external_id, language=language)
movie_metadata = self.__get_movie_metadata(
id=movie.external_id, language=language
)
# downloading the poster
# all pictures from TMDB should already be jpeg, so no need to convert
if movie_metadata["poster_path"] is not None:

View File

@@ -63,7 +63,10 @@ class MovieService:
self.notification_service = notification_service
def add_movie(
self, external_id: int, metadata_provider: AbstractMetadataProvider, language: str | None = None
self,
external_id: int,
metadata_provider: AbstractMetadataProvider,
language: str | None = None,
) -> Movie | None:
"""
Add a new movie to the database.
@@ -72,7 +75,9 @@ class MovieService:
:param metadata_provider: The name of the metadata provider.
:param language: Optional language code (ISO 639-1) to fetch metadata in.
"""
movie_with_metadata = metadata_provider.get_movie_metadata(id=external_id, language=language)
movie_with_metadata = metadata_provider.get_movie_metadata(
id=external_id, language=language
)
saved_movie = self.movie_repository.save_movie(movie=movie_with_metadata)
metadata_provider.download_movie_poster_image(movie=saved_movie)
return saved_movie
@@ -699,7 +704,9 @@ class MovieService:
log.debug(f"Found movie: {db_movie.name} for metadata update.")
# Use stored original_language preference for metadata fetching
fresh_movie_data = metadata_provider.get_movie_metadata(id=db_movie.external_id, language=db_movie.original_language)
fresh_movie_data = metadata_provider.get_movie_metadata(
id=db_movie.external_id, language=db_movie.original_language
)
if not fresh_movie_data:
log.warning(
f"Could not fetch fresh metadata for movie {db_movie.name} (External ID: {db_movie.external_id}) from {db_movie.metadata_provider}."

View File

@@ -58,7 +58,10 @@ router = APIRouter()
},
)
def add_a_show(
tv_service: tv_service_dep, metadata_provider: metadata_provider_dep, show_id: int, language: str | None = None
tv_service: tv_service_dep,
metadata_provider: metadata_provider_dep,
show_id: int,
language: str | None = None,
):
try:
show = tv_service.add_show(

View File

@@ -69,7 +69,10 @@ class TvService:
self.notification_service = notification_service
def add_show(
self, external_id: int, metadata_provider: AbstractMetadataProvider, language: str | None = None
self,
external_id: int,
metadata_provider: AbstractMetadataProvider,
language: str | None = None,
) -> Show | None:
"""
Add a new show to the database.
@@ -78,7 +81,9 @@ class TvService:
:param metadata_provider: The name of the metadata provider.
:param language: Optional language code (ISO 639-1) to fetch metadata in.
"""
show_with_metadata = metadata_provider.get_show_metadata(id=external_id, language=language)
show_with_metadata = metadata_provider.get_show_metadata(
id=external_id, language=language
)
saved_show = self.tv_repository.save_show(show=show_with_metadata)
metadata_provider.download_show_poster_image(show=saved_show)
return saved_show
@@ -758,7 +763,9 @@ class TvService:
# old_poster_url = db_show.poster_url # poster_url removed from db_show
# Use stored original_language preference for metadata fetching
fresh_show_data = metadata_provider.get_show_metadata(id=db_show.external_id, language=db_show.original_language)
fresh_show_data = metadata_provider.get_show_metadata(
id=db_show.external_id, language=db_show.original_language
)
if not fresh_show_data:
log.warning(
f"Could not fetch fresh metadata for show {db_show.name} (External ID: {db_show.external_id}) from {db_show.metadata_provider}."