soulsync/core/metadata
Broque Thomas 529486a2d1 Foundation: typed Album/Track/Artist + per-provider converters
New core/metadata/types.py with canonical dataclasses + classmethod
converters for spotify/itunes/deezer/discogs/musicbrainz/hydrabase.
Each converter is the single place that knows that provider's wire
shape — addresses the duck-typing pattern Cin flagged.

Pure additive: no consumer code changed. Follow-up PRs migrate
consumers one at a time. Migration plan at
docs/metadata-types-migration.md.

Tests: 32 cases pin per-provider semantics + cross-provider
invariants. Also stabilized a flaky discogs test that depended on
local config state.
2026-05-03 22:21:32 -07:00
..
__init__.py Move image URL normalization into metadata helpers 2026-05-02 22:02:36 +03:00
album_mbid_cache.py Fix album MBID inconsistency: detector + persistent release-MBID cache 2026-05-03 17:16:39 -07:00
album_tracks.py Move metadata helpers into package modules 2026-04-29 11:28:42 +03:00
artist_image.py Move metadata helpers into package modules 2026-04-29 11:28:42 +03:00
artwork.py Move image URL normalization into metadata helpers 2026-05-02 22:02:36 +03:00
cache.py Move metadata API into package 2026-04-29 08:10:18 +03:00
common.py Tighten metadata and import safety 2026-04-27 20:28:05 +03:00
completion.py Move metadata helpers into package modules 2026-04-29 11:28:42 +03:00
discography.py Move metadata helpers into package modules 2026-04-29 11:28:42 +03:00
enrichment.py fix post-download tagging, and enable tagging for hifi 2026-05-02 07:50:12 -06:00
lookup.py Move metadata API into package 2026-04-29 08:10:18 +03:00
lyrics.py Move shared metadata helpers into package 2026-04-27 19:54:44 +03:00
registry.py Split metadata source and Spotify status 2026-05-02 22:02:00 +03:00
service.py Move metadata API into package 2026-04-29 08:10:18 +03:00
similar_artists.py Move metadata helpers into package modules 2026-04-29 11:28:42 +03:00
source.py Fix album MBID inconsistency: detector + persistent release-MBID cache 2026-05-03 17:16:39 -07:00
status.py Make Spotify status updates event-driven 2026-05-02 22:02:01 +03:00
types.py Foundation: typed Album/Track/Artist + per-provider converters 2026-05-03 22:21:32 -07:00