Files
musicseerr/backend/api/v1/schemas/discover.py
T
2026-04-03 15:53:00 +01:00

160 lines
4.2 KiB
Python

from api.v1.schemas.home import HomeArtist, HomeSection, ServicePrompt
from api.v1.schemas.common import GenreArtistMap, IntegrationStatus
from api.v1.schemas.weekly_exploration import WeeklyExplorationSection
from models.youtube import YouTubeQuotaResponse as YouTubeQuotaResponse
from infrastructure.msgspec_fastapi import AppStruct
class BecauseYouListenTo(AppStruct):
seed_artist: str
seed_artist_mbid: str
section: HomeSection
listen_count: int = 0
banner_url: str | None = None
wide_thumb_url: str | None = None
fanart_url: str | None = None
class DiscoverQueueItemLight(AppStruct):
release_group_mbid: str
album_name: str
artist_name: str
artist_mbid: str
recommendation_reason: str
cover_url: str | None = None
is_wildcard: bool = False
in_library: bool = False
class DiscoverQueueEnrichment(AppStruct):
artist_mbid: str | None = None
release_date: str | None = None
country: str | None = None
tags: list[str] = []
youtube_url: str | None = None
youtube_search_url: str = ""
youtube_search_available: bool = False
artist_description: str | None = None
listen_count: int | None = None
class DiscoverQueueItemFull(DiscoverQueueItemLight):
enrichment: DiscoverQueueEnrichment | None = None
class YouTubeSearchResponse(AppStruct):
video_id: str | None = None
embed_url: str | None = None
error: str | None = None
cached: bool = False
class TrackCacheCheckItem(AppStruct):
artist: str
track: str
class TrackCacheCheckRequest(AppStruct):
items: list[TrackCacheCheckItem] = []
class TrackCacheCheckResponseItem(AppStruct):
artist: str
track: str
cached: bool = False
class TrackCacheCheckResponse(AppStruct):
items: list[TrackCacheCheckResponseItem] = []
class DiscoverQueueResponse(AppStruct):
items: list[DiscoverQueueItemLight | DiscoverQueueItemFull] = []
queue_id: str = ""
class DiscoverQueueIgnoreRequest(AppStruct):
release_group_mbid: str
artist_mbid: str
release_name: str
artist_name: str
class DiscoverQueueValidateRequest(AppStruct):
release_group_mbids: list[str]
class DiscoverQueueValidateResponse(AppStruct):
in_library: list[str] = []
class QueueSettings(AppStruct):
queue_size: int
queue_ttl: int
seed_artists: int
wildcard_slots: int
similar_artists_limit: int
albums_per_similar: int
enrich_ttl: int
lastfm_mbid_max_lookups: int
class DiscoverQueueStatusResponse(AppStruct):
status: str
source: str
queue_id: str | None = None
item_count: int | None = None
built_at: float | None = None
stale: bool | None = None
error: str | None = None
class QueueGenerateRequest(AppStruct):
source: str | None = None
force: bool = False
class QueueGenerateResponse(AppStruct):
action: str
status: str
source: str
queue_id: str | None = None
item_count: int | None = None
built_at: float | None = None
stale: bool | None = None
error: str | None = None
class DiscoverIgnoredRelease(AppStruct):
release_group_mbid: str
artist_mbid: str
release_name: str
artist_name: str
ignored_at: float
class DiscoverIntegrationStatus(IntegrationStatus):
pass
class DiscoverResponse(AppStruct):
because_you_listen_to: list[BecauseYouListenTo] = []
discover_queue_enabled: bool = True
fresh_releases: HomeSection | None = None
missing_essentials: HomeSection | None = None
rediscover: HomeSection | None = None
artists_you_might_like: HomeSection | None = None
popular_in_your_genres: HomeSection | None = None
genre_list: HomeSection | None = None
globally_trending: HomeSection | None = None
weekly_exploration: WeeklyExplorationSection | None = None
integration_status: DiscoverIntegrationStatus | None = None
service_prompts: list[ServicePrompt] = []
genre_artists: GenreArtistMap = {}
genre_artist_images: GenreArtistMap = {}
lastfm_weekly_artist_chart: HomeSection | None = None
lastfm_weekly_album_chart: HomeSection | None = None
lastfm_recent_scrobbles: HomeSection | None = None
refreshing: bool = False
service_status: dict[str, str] | None = None