SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
1 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%

[ka6] fix connecteur dxctechnology: repli scan client quand le filtre serveur QC est factice dans la plateforme workday — le tenant dxctechnology (dxctechnology.wd1, site DXCJobs) expose une facette « locations » (Region, State or Province) qui liste « CAN - QC - MONTREAL » count=3 mais dont le filtre serveur renvoie total=0 pour N'IMPORTE QUELLE valeur (vérifié aussi avec DUBAI count=2 → 0) : facette d'affichage seulement. Le repli serveur ajouté ce matin pour jj (ec1b90d, déployé 04h18) sélectionnait cette facette factice → pagination filtrée vide → found=0 au sync de 04h45 (missed=3), statut stale, alors que les 3 offres Montréal existent toujours sur l'API. _list_pages détecte désormais le cas : si la première page filtrée serveur est vide alors que le listing non filtré annonçait des postes (total > 0), le filtre serveur est abandonné (une seule fois) et le scan client complet reprend (938 postes < plafond 60×20, is_quebec_location côté client). Sync rejoué : found=3 (médiane 3.0), les 3 offres réactivées miss_count=0. Non-régression : jj garde son repli serveur (found=1 en 1,9 s), desjardins sa facette province (found=270). pm2 restart job-ka-sync OK, site 200.

Simon-Pierre Boucher committed 14 days ago (Sep 10, 2026) parent ec1b90d

1 changed file +15 −0

modified jobka/connectors/workday.py +15 −0
@@ -180,7 +180,9 @@ class WorkdayConnector(BaseConnector):
180 180 applied: dict = dict(extra_facets or {})
181 181 offset = 0
182 182 total = 0
183 + unfiltered_total = 0
183 184 first = True
185 + qc_retried = False
184 186 for _ in range(self.max_pages):
185 187 data = self._req_json("post", url,
186 188 json={"appliedFacets": applied,
@@ -189,6 +191,7 @@ class WorkdayConnector(BaseConnector):
189 191 if first:
190 192 first = False
191 193 self._first_facets = data.get("facets") or []
194 + unfiltered_total = int(data.get("total") or 0)
192 195 if self.quebec_only:
193 196 qc = self._find_qc_facet(data.get("facets"))
194 197 if qc:
@@ -200,6 +203,18 @@ class WorkdayConnector(BaseConnector):
200 203 continue
201 204 items = data.get("jobPostings") or []
202 205 if not items:
206 + # Facette factice (tenant dxctechnology, constaté 2026-09-10) :
207 + # la facette « locations » annonce des postes QC (count > 0)
208 + # mais le filtre serveur renvoie 0 résultat quelle que soit la
209 + # valeur. Plutôt que de conclure à 0 offre, abandonner le
210 + # filtre serveur et revenir au scan client complet.
211 + if (self._server_filtered and offset == 0 and not qc_retried
212 + and unfiltered_total):
213 + qc_retried = True
214 + applied = dict(extra_facets or {})
215 + self._qc_facet = None
216 + self._server_filtered = False
217 + continue
203 218 return
204 219 yield from items
205 220 offset += PAGE_SIZE
206 221