From 2664cabae03fc52042a9a8bbb0f68424f3ef6f12 Mon Sep 17 00:00:00 2001 From: Kumi Date: Fri, 6 Sep 2024 21:32:59 +0200 Subject: [PATCH] feat: add support for 4PX tracking provider Introduce support for the 4PX tracking provider by integrating the track4px library. Added the necessary dependencies and implemented the FourPX class to fetch and yield tracking status events, enhancing our logistics tracking capabilities. --- pyproject.toml | 1 + src/trackbert/providers/fourpx.py | 33 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/trackbert/providers/fourpx.py diff --git a/pyproject.toml b/pyproject.toml index 71a2edc..96d1d58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ dependencies = [ "fedextrack", "dhltrack", "dpdtrack", + "track4px", "sqlalchemy", "alembic", "python-dateutil", diff --git a/src/trackbert/providers/fourpx.py b/src/trackbert/providers/fourpx.py new file mode 100644 index 0000000..26de799 --- /dev/null +++ b/src/trackbert/providers/fourpx.py @@ -0,0 +1,33 @@ +from ..classes.provider import BaseProvider +from ..classes.database import Event + +import json + +from track4px.classes.api import Track4PX + + +class FourPX(BaseProvider): + def __init__(self, *args, **kwargs): + pass + + def get_status(self, tracking_number, carrier): + api = Track4PX() + status = api.tracking(tracking_number, True) + + for event in status.events: + event_time = event.datetime.strftime("%Y-%m-%d %H:%M:%S") + + yield Event( + shipment_id=0, + event_time=event_time, + event_description=f"{event.location + ' ' if event.location else ''}{event.description}", + raw_event=event.raw, + ) + + def supported_carriers(self): + return [ + ("4px", 100, "4PX"), + ] + + +provider = FourPX