Phase 4. core/exports/export_sources.py supplies the real I/O behind each waterfall source and assembles resolve_fn: cache -> DB (tracks.musicbrainz_recording_id via text match) -> file tag (UFID/musicbrainz_trackid) -> live MusicBrainz match_recording. Every source is fail-safe (any error -> None -> fall through, export never breaks). A fresh non-cache hit is written back to the persistent cache so the same song is free next export. Sources are injectable; build_resolve_fn wiring (cache short-circuit + write-back) is unit-tested. 4 tests. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| artist_export.py | ||
| export_sources.py | ||
| jspf_export.py | ||
| mbid_resolver.py | ||
| playlist_export.py | ||
| recording_mbid_cache.py | ||