"""Salt Dental Partners adapter — iCIMS Angular platform, URL-based pagination.""" from __future__ import annotations import re from loguru import logger from gimme_job.adapters.base import ManifestDrivenAdapter from gimme_job.adapters.registry import register @register("saltdental") class SaltDentalAdapter(ManifestDrivenAdapter): def _wait_for_results(self, page) -> None: try: page.wait_for_selector( "mat-expansion-panel.search-result-item", timeout=15000, state="attached", ) except Exception: logger.debug("[saltdental] Results wait timed out — may be zero results") def collect_cards(self, page, manifest): self._wait_for_results(page) return super().collect_cards(page, manifest) def paginate(self, page, page_index: int, config) -> bool: """Navigate to next page by incrementing the &page= URL parameter.""" if page_index >= config.pagination.max_pages - 1: return False current_url = page.url next_page = page_index + 2 if re.search(r"[?&]page=\d+", current_url): next_url = re.sub(r"(page=)\d+", f"page={next_page}", current_url) else: sep = "&" if "?" in current_url else "?" next_url = f"{current_url}{sep}page={next_page}" logger.debug(f"[saltdental] Paginating to page {next_page}: {next_url}") page.goto(next_url, timeout=30000) self._wait_for_results(page) return True