Fixing some small things.

Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
2024-04-24 14:34:11 -04:00
parent f51109f08a
commit da7fc7460b
2 changed files with 31 additions and 13 deletions

View File

@@ -14,7 +14,6 @@ from sqlalchemy import String
from sqlalchemy import Table
from sqlalchemy import UniqueConstraint
from sqlalchemy import func
from sqlalchemy import text
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import registry
@@ -152,12 +151,12 @@ class Track:
date_added (DateTime): Date the track was added to the database.
rating (float): Rating of the track on a 1-5 scale.
genre_id (int): ForeignKey linking to the genre.
category_id (int): Foreign key linking to the category.
server_id (str): Identifier for the server where the track is hosted, indexed.
genre (Genre): The genre for this track.
playlist_tracks (list[PlaylistTrack]): List of playlist tracks for this track.
category_id (int): Foreign key linking to the category.
category (Category): The category for this track.
holidays (list[Holiday]): The list of holidays this track is assigned to.
server_id (str): Identifier for the server where the track is hosted, indexed.
"""
__tablename__ = "tracks"
@@ -299,6 +298,7 @@ class Episode:
name (Mapped[str]): The title of the episode.
filename (Mapped[str]): The filename of the episode's media file.
podcast_id (Mapped[int]): Foreign key linking to the associated podcast.
server_id (str): Identifier for the server where the episode is hosted, indexed.
podcast (Mapped[Podcast]): The podcast this episode belongs to.
"""
@@ -308,6 +308,10 @@ class Episode:
name: Mapped[str] = mapped_column(String(255), nullable=False)
filename: Mapped[str] = mapped_column(String(255), nullable=False)
podcast_id: Mapped[int] = mapped_column(ForeignKey("podcasts.id"))
server_id: Mapped[str] = mapped_column(
String(255), nullable=False, index=True, unique=True
)
podcast: Mapped[Podcast] = relationship("Podcast", back_populates="episodes")
@@ -337,8 +341,10 @@ class Statistics:
for holidays.
max_holiday_general_base (Mapped[int]): The maximum number of general tracks in one sublist for
holidays.
track_update_start_timestamp (Mapped[DateTime]): The timestamp when track updates begin.
track_update_end_timestamp (Mapped[DateTime]): The timestamp when track updates end.
start_update (Mapped[DateTime]): The timestamp when track updates begin.
end_update (Mapped[DateTime]): The timestamp when track updates end.
start_playlist_gen (Mapped[DateTime]): The timestamp when the playlist generation begins.
end_playlist_gen (Mapped[DateTime]): The timestamp when the playlist generation ends.
"""
__tablename__ = "statistics"
@@ -360,9 +366,15 @@ class Statistics:
max_regular_general_base: Mapped[int] = mapped_column(Integer)
max_holiday_favorite_base: Mapped[int] = mapped_column(Integer)
max_holiday_general_base: Mapped[int] = mapped_column(Integer)
track_update_start_timestamp: Mapped[DateTime] = mapped_column(
DateTime, server_default=text("CURRENT_TIMESTAMP")
start_update: Mapped[DateTime | None] = mapped_column(
DateTime, nullable=True, server_default=None
)
track_update_end_timestamp: Mapped[DateTime] = mapped_column(
DateTime, server_default=text("CURRENT_TIMESTAMP")
end_update: Mapped[DateTime | None] = mapped_column(
DateTime, nullable=True, server_default=None
)
start_playlist_gen: Mapped[DateTime | None] = mapped_column(
DateTime, nullable=True, server_default=None
)
end_playlist_gen: Mapped[DateTime | None] = mapped_column(
DateTime, nullable=True, server_default=None
)

View File

@@ -106,12 +106,17 @@ async def cleanup_unused_genres(session: AsyncSession) -> None:
await session.rollback()
async def update_statistics_timestamps(session: AsyncSession, operation: str) -> None:
async def update_statistics_timestamps(
session: AsyncSession, operation: str
) -> datetime:
"""Update the start or end timestamps in the statistics model based on the specified operation.
Args:
session (AsyncSession): The database session.
operation (str): A string to specify whether to update 'start' or 'end' timestamp.
Returns:
datetime: The datetime of the last update.
"""
try:
async with session.begin():
@@ -119,11 +124,10 @@ async def update_statistics_timestamps(session: AsyncSession, operation: str) ->
stats_obj = stats.scalars().first()
if operation == "start":
stats_obj.track_update_start_timestamp = datetime.now()
stats_obj.track_update_end_timestamp = None
stats_obj.start_update = datetime.now()
log_message = "Statistics start timestamp updated."
elif operation == "end":
stats_obj.track_update_end_timestamp = datetime.now()
stats_obj.end_update = datetime.now()
log_message = "Statistics end timestamp updated."
else:
raise ValueError(
@@ -133,6 +137,8 @@ async def update_statistics_timestamps(session: AsyncSession, operation: str) ->
await session.commit()
await logger.info(log_message)
return stats_obj.end_update
except SQLAlchemyError as e:
await logger.error(f"Database error during statistics timestamp update: {e}")
await session.rollback()