d8d8ecd78f
SubscribeStar now downloads + verifies through the native core ingester instead of gallery-dl — the go-live switch for milestone #71. - download_backends: subscribestar added to NATIVE_INGESTER_PLATFORMS; a _NATIVE_INGESTERS registry + _resolve_native_campaign_id make _run_native_ingester / preview_source / verify_source_credential platform-aware. SubscribeStar's campaign_id IS the creator URL (no resolver); Patreon still resolves the vanity. preview now catches the shared NativeIngestError (covers both platforms). - platform_lock: subscribestar serialized (one paced walk at a time). - gallery_dl: subscribestar entry removed from PLATFORM_DEFAULTS (rule 22 — no fallback once native works). - frontend SourceActions: isPatreon → isNative (patreon|subscribestar) so the recover/recapture actions show for subscribestar; download_service's cursor/mode/post_first + the preview endpoint already key on uses_native_ingester, so backfill/recovery/recapture/preview light up for free. - tests: download_backends (subscribestar native), platform_lock (serialized), and three gallery-dl-sample tests repointed to hentaifoundry (api_credentials verify, gallery_dl_service skip-value, api_sources arm-no-preflight). post_is_gated stays best-effort (can't cause junk downloads); not gating this. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
25 lines
839 B
Python
25 lines
839 B
Python
"""download_backends — the single predicate that routes a platform to the
|
|
native ingester vs. gallery-dl. Pure, no DB."""
|
|
|
|
from backend.app.services.download_backends import (
|
|
NATIVE_INGESTER_PLATFORMS,
|
|
uses_native_ingester,
|
|
)
|
|
|
|
|
|
def test_native_platforms():
|
|
for platform in ("patreon", "subscribestar"):
|
|
assert uses_native_ingester(platform) is True
|
|
assert platform in NATIVE_INGESTER_PLATFORMS
|
|
|
|
|
|
def test_gallery_dl_platforms_are_not_native():
|
|
# The platforms still served by gallery-dl must NOT route to the native
|
|
# ingester — guards an accidental over-broad migration.
|
|
for platform in ("hentaifoundry", "discord", "pixiv", "deviantart"):
|
|
assert uses_native_ingester(platform) is False
|
|
|
|
|
|
def test_unknown_platform_is_not_native():
|
|
assert uses_native_ingester("nonsense") is False
|