Skip to content

Commit 622b703

Browse files
committed
purolator: handle french tracking descriptions
1 parent 267fef1 commit 622b703

2 files changed

Lines changed: 60 additions & 0 deletions

File tree

modules/connectors/purolator/karrio/providers/purolator/units.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import pathlib
33
import re
44
import typing
5+
import unicodedata
56
import karrio.lib as lib
67
import karrio.core.units as units
78
import karrio.core.models as models
@@ -325,6 +326,12 @@ class TrackingStatus(lib.Enum):
325326
"returned to shipper",
326327
"to be returned to sender",
327328
"returned to the shipper",
329+
"retourne a l'expediteur",
330+
"retour a l'expediteur",
331+
"renvoye a l'expediteur",
332+
"retourne a l expediteur",
333+
"retour a l expediteur",
334+
"renvoye a l expediteur",
328335
),
329336
TrackingStatus.return_to_sender.name,
330337
),
@@ -333,6 +340,12 @@ class TrackingStatus(lib.Enum):
333340
"available for pickup",
334341
"held for pickup",
335342
"pickup location",
343+
"disponible pour le ramassage",
344+
"disponible pour ramassage",
345+
"point de ramassage",
346+
"point de cueillette",
347+
"ramassage",
348+
"ramasser",
336349
),
337350
TrackingStatus.ready_for_pickup.name,
338351
),
@@ -356,6 +369,24 @@ class TrackingStatus(lib.Enum):
356369
"rail delay",
357370
"ferry delay",
358371
"service disruption",
372+
"retard",
373+
"retarde",
374+
"retardee",
375+
"retardes",
376+
"retardees",
377+
"reporte",
378+
"reportee",
379+
"reportes",
380+
"reportees",
381+
"replanifie",
382+
"replanifiee",
383+
"replanifies",
384+
"replanifiees",
385+
"meteo",
386+
"intemperies",
387+
"fermeture de route",
388+
"catastrophe naturelle",
389+
"perturbation de service",
359390
),
360391
TrackingStatus.delivery_delayed.name,
361392
),
@@ -364,6 +395,12 @@ class TrackingStatus(lib.Enum):
364395

365396
def normalize_tracking_description(description: typing.Optional[str]) -> str:
366397
normalized = re.sub(r"\s+", " ", str(description or "").strip().lower())
398+
normalized = normalized.replace("’", "'")
399+
normalized = "".join(
400+
c
401+
for c in unicodedata.normalize("NFKD", normalized)
402+
if not unicodedata.combining(c)
403+
)
367404
return normalized.rstrip(".")
368405

369406

modules/connectors/purolator/tests/purolator/test_tracking.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,29 @@ def test_map_tracking_status_with_undeliverable_keyword_fallback(self):
9393
provider_units.TrackingStatus.unknown.name,
9494
)
9595

96+
def test_map_tracking_status_with_french_descriptions(self):
97+
self.assertEqual(
98+
provider_units.map_tracking_status(
99+
"Undeliverable",
100+
"Envoi disponible pour le ramassage au point de service",
101+
),
102+
provider_units.TrackingStatus.ready_for_pickup.name,
103+
)
104+
self.assertEqual(
105+
provider_units.map_tracking_status(
106+
"Undeliverable",
107+
"Envoi retourné à l’expéditeur",
108+
),
109+
provider_units.TrackingStatus.return_to_sender.name,
110+
)
111+
self.assertEqual(
112+
provider_units.map_tracking_status(
113+
"Undeliverable",
114+
"Livraison retardée en raison des conditions météo",
115+
),
116+
provider_units.TrackingStatus.delivery_delayed.name,
117+
)
118+
96119

97120
if __name__ == "__main__":
98121
unittest.main()

0 commit comments

Comments
 (0)