SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
5 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%
2.0 KB · 46 lines python
Raw Blame History
1# =============================================================================2# Job·Ka — Groupe KA3# Auteur  : Simon-Pierre Boucher4# Contact : contact@spboucher.ai5# Fichier : jobka/connectors/shell.py6# Rôle    : Connecteur Shell Canada — workday (tenant shell.wd3, sites7#           ShellCareers + Fasttrack)8#           [généré par scripts/gen_connectors.py, flux vérifié le 2026-08-22]9# Créé    : 2026-08-22   Modifié : 2026-08-2710# =============================================================================11# Note ka6 (2026-08-27) : l'unique offre QC (Terminal Operator – Fixed Term,12# Montreal - Terminal, R208883, publiée 2026-08-26) a été dépubliée à la source13# en moins de 24 h (détail 404, recherche interne 0, facette locationCountry14# sans Canada) → volume 0 légitime, médiane historique 0.5. Shell publie par15# ailleurs ses postes opérationnels/horaires sur un second site Workday du16# même tenant, « Fasttrack » (vérifié : R209807 Scotford - Refinery y figure) ;17# pour ne pas rater un futur poste québécois publié uniquement là, on balaie18# aussi ce site, avec dédup par external_id (certaines offres paraissent sur19# les deux). Le filtre Québec de la classe de base s'applique inchangé.20from .workday import WorkdayConnector21from ..schema import JobPosting222324class ShellConnector(WorkdayConnector):25    source_id = 'shell'26    EMPLOYER = 'Shell Canada'27    TENANT = 'shell'28    HOST = 'wd3'29    SITE = 'ShellCareers'30    EXTRA_SITES = ('Fasttrack',)3132    def fetch(self) -> list[JobPosting]:33        jobs = super().fetch()34        seen = {j.external_id for j in jobs}35        site = self.SITE36        try:37            for extra in self.EXTRA_SITES:38                self.SITE = extra39                fresh = [j for j in super().fetch()40                         if j.external_id not in seen]41                jobs.extend(fresh)42                seen.update(j.external_id for j in fresh)43        finally:44            self.SITE = site45        return jobs46