diff --git a/alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py b/alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py new file mode 100644 index 0000000..bb08933 --- /dev/null +++ b/alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py @@ -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') diff --git a/media_manager/movies/models.py b/media_manager/movies/models.py index 7db5f63..2a8c5c8 100644 --- a/media_manager/movies/models.py +++ b/media_manager/movies/models.py @@ -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" ) diff --git a/media_manager/movies/repository.py b/media_manager/movies/repository.py index 63d4b3f..38e9ff4 100644 --- a/media_manager/movies/repository.py +++ b/media_manager/movies/repository.py @@ -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: diff --git a/media_manager/movies/service.py b/media_manager/movies/service.py index 2a0707c..e9a59c2 100644 --- a/media_manager/movies/service.py +++ b/media_manager/movies/service.py @@ -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}." diff --git a/media_manager/tv/models.py b/media_manager/tv/models.py index 6f34fe6..021fca2 100644 --- a/media_manager/tv/models.py +++ b/media_manager/tv/models.py @@ -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" diff --git a/media_manager/tv/repository.py b/media_manager/tv/repository.py index 37b39f6..bce49a5 100644 --- a/media_manager/tv/repository.py +++ b/media_manager/tv/repository.py @@ -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, diff --git a/media_manager/tv/service.py b/media_manager/tv/service.py index afe6e03..2acc0ea 100644 --- a/media_manager/tv/service.py +++ b/media_manager/tv/service.py @@ -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}."