from __future__ import annotations from apps.sources.models import RawDocument from .ats import ( GreenhouseAdapter, LeverAdapter, RecruiteeAdapter, SmartRecruitersAdapter, WorkableAdapter, ) from .base import ExtractionResult from .generic_html import GenericHtmlAdapter from .jsonld import JsonLdJobPostingAdapter from .kempen import KempenEmployerAdapter from .mol_region import MolRegionEmployerAdapter from .regional import CordaCampusAdapter, LocalEmployerListingAdapter from .rss import RssAdapter class AdapterRegistry: def __init__(self) -> None: self.greenhouse = GreenhouseAdapter() self.lever = LeverAdapter() self.recruitee = RecruiteeAdapter() self.smartrecruiters = SmartRecruitersAdapter() self.workable = WorkableAdapter() self.corda_campus = CordaCampusAdapter() self.local_employers = LocalEmployerListingAdapter() self.mol_region_employers = MolRegionEmployerAdapter() self.kempen_employers = KempenEmployerAdapter() self.jsonld = JsonLdJobPostingAdapter() self.generic = GenericHtmlAdapter() self.rss = RssAdapter() self.providers = [ self.corda_campus, self.local_employers, self.mol_region_employers, self.kempen_employers, self.greenhouse, self.lever, self.recruitee, self.smartrecruiters, self.workable, ] def extract(self, document: RawDocument) -> ExtractionResult: content = document.body_text url = document.final_url or document.url content_type = (document.content_type or "").lower() if document.kind == RawDocument.Kind.XML or "rss" in content_type or "atom" in content_type: return self.rss.extract(content, url=url) for provider in self.providers: if provider._supports_url(url): result = provider.extract(content, url=url) if any( msg in result.warnings for msg in ( "Geen parseerbare ATS-response", "Geen herkenbare ATS-markup voor deze adapter", ) ): continue return result jsonld_result = self.jsonld.extract(content, url=url) if jsonld_result.jobs: return jsonld_result generic_result = self.generic.extract(content, url=url) generic_result.warnings = jsonld_result.warnings + generic_result.warnings return generic_result registry = AdapterRegistry()