@@ -0,0 +1,61 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user