Files
VacatureRadar/apps/sources/adapters/registry.py
T
2026-07-22 05:12:07 +02:00

76 lines
2.6 KiB
Python

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()