"""Job source provider package. Public API: JobSource interface + get_job_source() factory. Heavy provider imports are deferred to get_job_source() so loading this package does not pull in pandas, jobspy, or apify-client at import time. """ from __future__ import annotations from .base import JobSource __all__ = ["JobSource", "get_job_source"] def get_job_source(settings=None) -> JobSource: """Return the configured JobSource instance. Reads job_source from settings (default: get_settings()). Lazy-imports the chosen module so the unused provider's heavy deps are never loaded. Raises ValueError for unknown provider names. """ if settings is None: from ..config import get_settings settings = get_settings() provider = settings.job_source.lower() if provider == "jobspy": from .jobspy_source import JobSpySource return JobSpySource() if provider == "apify": from .apify_source import ApifySource return ApifySource() raise ValueError( f"Unknown job_source {settings.job_source!r}. Valid values: 'jobspy', 'apify'." )