Pass language as a value in show and movie objects. DB migration to add original_langauge column. Removes workarounds

This commit is contained in:
aasmoe
2025-12-13 19:22:09 +00:00
parent 8695d26ad9
commit fda59e49b2
7 changed files with 54 additions and 10 deletions

View File

@@ -0,0 +1,42 @@
"""add original_language columns to show and movie tables
Revision ID: 16e78af9e5bf
Revises: eb0bd3cc1852
Create Date: 2025-12-13 18:47:02.146038
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
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
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)
)
# Add original_language column to movie table
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')
# Remove original_language column from show table
op.drop_column('show', 'original_language')

View File

@@ -19,6 +19,7 @@ class Movie(Base):
overview: Mapped[str]
year: Mapped[int | None]
library: Mapped[str] = mapped_column(default="")
original_language: Mapped[str | None] = mapped_column(default=None)
movie_requests: Mapped[list["MovieRequest"]] = relationship(
"MovieRequest", back_populates="movie", cascade="all, delete-orphan"
)

View File

@@ -115,10 +115,10 @@ class MovieRepository:
db_movie.name = movie.name
db_movie.overview = movie.overview
db_movie.year = movie.year
db_movie.original_language = movie.original_language
else: # Insert new movie
log.debug(f"Creating new movie: {movie.name}")
# HACK: Remove exclude once original_language column is added to database
db_movie = Movie(**movie.model_dump(exclude={'original_language'}))
db_movie = Movie(**movie.model_dump())
self.db.add(db_movie)
try:

View File

@@ -71,9 +71,7 @@ class MovieService:
"""
movie_with_metadata = metadata_provider.get_movie_metadata(id=external_id, language=language)
saved_movie = self.movie_repository.save_movie(movie=movie_with_metadata)
# HACK: Temporary workaround - using show_with_metadata instead of saved_show because
# original_language is not yet persisted to database. Once database has original_language column this shuold be changed back?
metadata_provider.download_movie_poster_image(movie=movie_with_metadata)
metadata_provider.download_movie_poster_image(movie=saved_movie)
return saved_movie
def add_movie_request(self, movie_request: MovieRequest) -> MovieRequest:
@@ -643,7 +641,8 @@ class MovieService:
"""
log.debug(f"Found movie: {db_movie.name} for metadata update.")
fresh_movie_data = metadata_provider.get_movie_metadata(id=db_movie.external_id)
# 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)
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

@@ -21,6 +21,7 @@ class Show(Base):
ended: Mapped[bool] = mapped_column(default=False)
continuous_download: Mapped[bool] = mapped_column(default=False)
library: Mapped[str] = mapped_column(default="")
original_language: Mapped[str | None] = mapped_column(default=None)
seasons: Mapped[list["Season"]] = relationship(
back_populates="show", cascade="all, delete"

View File

@@ -135,6 +135,7 @@ class TvRepository:
db_show.name = show.name
db_show.overview = show.overview
db_show.year = show.year
db_show.original_language = show.original_language
else: # Insert new show
db_show = Show(
id=show.id,
@@ -144,6 +145,7 @@ class TvRepository:
overview=show.overview,
year=show.year,
ended=show.ended,
original_language=show.original_language,
seasons=[
Season(
id=season.id,

View File

@@ -77,9 +77,7 @@ class TvService:
"""
show_with_metadata = metadata_provider.get_show_metadata(id=external_id, language=language)
saved_show = self.tv_repository.save_show(show=show_with_metadata)
# HACK: Temporary workaround - using show_with_metadata instead of saved_show because
# original_language is not yet persisted to database. Once database has original_language column this shuold be changed back?
metadata_provider.download_show_poster_image(show=show_with_metadata)
metadata_provider.download_show_poster_image(show=saved_show)
return saved_show
def add_season_request(self, season_request: SeasonRequest) -> SeasonRequest:
@@ -704,7 +702,8 @@ class TvService:
log.debug(f"Found show: {db_show.name} for metadata update.")
# old_poster_url = db_show.poster_url # poster_url removed from db_show
fresh_show_data = metadata_provider.get_show_metadata(id=db_show.external_id)
# 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)
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}."