HTML 82.1%
Python 14.6%
TypeScript 1.9%
CSS 1%
JavaScript 0.5%
1# =============================================================================2# Job·Ka — Groupe KA3# Auteur : Simon-Pierre Boucher4# Contact : contact@spboucher.ai5# Fichier : jobka/connectors/quadreal.py6# Rôle : Connecteur QuadReal — workday (tenant quadreal.wd10), balayage des7# deux sites carrières du tenant : Parkbridge + QuadReal8# [généré par scripts/gen_connectors.py, flux vérifié le 2026-08-23]9# Créé : 2026-08-23 Modifié : 2026-09-1810# =============================================================================11"""QuadReal Property Group expose DEUX sites carrières sur le même tenant12Workday `quadreal.wd10` : `Parkbridge` (filiale Parkbridge Lifestyle13Communities) et `QuadReal` (site principal corporate).1415Contexte 2026-09-10 : le connecteur ne balayait que `Parkbridge`, dont16l'unique offre QC historique (R0006877, Préposé à l'entretien ménager, Magog)17a été dépubliée par l'employeur (détail 403 « permission denied », recherche18par mot-clé et ID → 0, facette province réduite à AB/ON/BC sur 7 postes).19Pendant ce temps le site principal `QuadReal` publiait 68 postes dont 1 au20Québec (R0006871, Property Administrator/Administrateur immobilier,21Montréal) — invisible pour le connecteur. fetch() balaie désormais22`Parkbridge` PUIS `QuadReal` et déduplique par external_id (jobReqId,23unique au tenant) ; le SITE est permuté en attribut d'instance, la classe24plateforme et les autres tenants workday restent intacts.2526Re-vérifié le 2026-09-18 : l'offre R0006871 (Montréal) a été dépubliée à la27source (détail 404, recherche par ID → 0) — les deux sites n'ont AUCUNE offre28QC (facettes provinces = AB/ON/BC/NY/CA sur 8 + 69 postes, offres multi-lieux29toutes Vancouver/Calgary/Toronto). 0 est le volume légitime tant que QuadReal30ne republie pas au Québec."""31from ..schema import JobPosting32from .workday import WorkdayConnector333435class QuadrealConnector(WorkdayConnector):36 source_id = 'quadreal'37 EMPLOYER = 'QuadReal'38 TENANT = 'quadreal'39 HOST = 'wd10'40 SITE = 'Parkbridge'41 EXTRA_SITES = ('QuadReal',)4243 def fetch(self) -> list[JobPosting]:44 jobs = super().fetch() # site Parkbridge (défaut)45 seen = {j.external_id for j in jobs}46 for site in self.EXTRA_SITES:47 self.SITE = site # attribut d'instance : la48 try: # classe (autres tenants)49 extra = super().fetch() # n'est pas modifiée50 finally:51 self.SITE = type(self).SITE52 jobs.extend(j for j in extra if j.external_id not in seen)53 seen.update(j.external_id for j in extra)54 return jobs55