Files
VacatureRadar/apps/sources/adapters/registry.py
T
Jens b8091e59bd
deploy / deploy (push) Canceled after 0s
Initial deploy setup
2026-07-21 14:00:00 +02:00

62 lines
2.0 KiB
Python

from __future__ import annotations
from apps.sources.models import RawDocument
from .base import ExtractionResult
from .ats import (
GreenhouseAdapter,
LeverAdapter,
RecruiteeAdapter,
SmartRecruitersAdapter,
WorkableAdapter,
)
from .generic_html import GenericHtmlAdapter
from .jsonld import JsonLdJobPostingAdapter
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.jsonld = JsonLdJobPostingAdapter()
self.generic = GenericHtmlAdapter()
self.rss = RssAdapter()
self.providers = [
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()