soulsync/tests/downloads
Broque Thomas a3929b457b E1: Add RateLimitPolicy declaration mechanism
`core/download_engine/rate_limit.py` introduces a per-source
policy declaration: download_concurrency + download_delay_seconds.
Plugins declare via `RATE_LIMIT_POLICY` class attribute or a
`rate_limit_policy()` method.

Engine applies the declared policy to engine.worker at
register_plugin time — set_concurrency + set_delay get pushed
in automatically. Plugins without a declaration get the
conservative default (1 / 0). The set_engine callback fires
AFTER policy registration so config-driven sources (YouTube
reads user-tunable youtube.download_delay) can override.

Plan doc updated to reflect Phase D skip (search code is 90%
source-specific, not 60% — lifting it would be lossy or
bloated).

Pure additive — no plugin migrated yet. 8 tests pin the
resolution priority + engine wire-up + override semantics.
Suite still green (327 download tests).
2026-05-04 14:38:20 -07:00
..
__init__.py PR4a: lift sync history recording to core/downloads/history.py 2026-04-27 20:37:16 -07:00
test_background_download_worker.py C1: Add BackgroundDownloadWorker to engine 2026-05-04 13:21:41 -07:00
test_deezer_pinning.py C6: Migrate Deezer to engine.worker 2026-05-04 14:02:03 -07:00
test_download_engine.py B2: Engine owns cross-source query dispatch 2026-05-04 12:42:15 -07:00
test_download_orchestrator.py B3: Orchestrator delegates query methods to engine 2026-05-04 12:59:04 -07:00
test_downloads_cancel.py PR4b: lift cancel + clear download routes to core/downloads/cancel.py 2026-04-27 21:41:35 -07:00
test_downloads_candidates.py PR6: lift _attempt_download_with_candidates to core/downloads/candidates.py 2026-04-28 22:06:33 -07:00
test_downloads_cleanup.py PR4c: lift _automatic_wishlist_cleanup_after_db_update to core/downloads/cleanup.py 2026-04-27 22:23:41 -07:00
test_downloads_history.py PR4a: lift sync history recording to core/downloads/history.py 2026-04-27 20:37:16 -07:00
test_downloads_lifecycle.py Rename wishlist lifecycle helper 2026-04-30 08:06:02 +03:00
test_downloads_master.py PR4h: lift _run_full_missing_tracks_process to core/downloads/master.py 2026-04-28 10:34:13 -07:00
test_downloads_post_processing.py Trim slow retry from post-processing test 2026-04-28 21:27:01 +03:00
test_downloads_staging.py Lift _try_staging_match to core/downloads/staging.py 2026-04-28 23:26:15 -07:00
test_downloads_status.py PR4e: lift status helpers + 3 routes to core/downloads/status.py 2026-04-27 23:26:26 -07:00
test_downloads_task_worker.py PR4f: lift _download_track_worker to core/downloads/task_worker.py 2026-04-28 07:50:01 -07:00
test_hifi_pinning.py C5: Migrate HiFi to engine.worker 2026-05-04 13:57:01 -07:00
test_lidarr_pinning.py A8: Pin LidarrDownloadClient download lifecycle behavior 2026-05-04 12:10:49 -07:00
test_qobuz_pinning.py C4: Migrate Qobuz to engine.worker 2026-05-04 13:52:55 -07:00
test_rate_limit_policy.py E1: Add RateLimitPolicy declaration mechanism 2026-05-04 14:38:20 -07:00
test_soulseek_pinning.py A1: Pin SoulseekClient download lifecycle behavior 2026-05-04 11:45:44 -07:00
test_soundcloud_pinning.py C7: Migrate SoundCloud to engine.worker 2026-05-04 14:24:50 -07:00
test_tidal_pinning.py C3: Migrate Tidal to engine.worker 2026-05-04 13:49:36 -07:00
test_youtube_pinning.py C2: Migrate YouTube to engine.worker 2026-05-04 13:38:18 -07:00