mirror of
https://github.com/maxdorninger/MediaManager.git
synced 2025-12-23 22:18:19 -05:00
Pass language as a value in show and movie objects. DB migration to add original_langauge column. Removes workarounds
This commit is contained in:
@@ -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')
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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}."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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}."
|
||||
|
||||
Reference in New Issue
Block a user