karrio-server-events 2025.5rc35__py3-none-any.whl → 2025.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- karrio/server/events/task_definitions/base/__init__.py +11 -19
- karrio/server/events/task_definitions/base/tracking.py +17 -58
- karrio/server/events/tests/test_webhooks.py +5 -5
- {karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/METADATA +2 -2
- {karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/RECORD +7 -7
- {karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/WHEEL +0 -0
- {karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/top_level.txt +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import time
|
|
2
1
|
import logging
|
|
3
2
|
from django.conf import settings
|
|
4
3
|
from huey import crontab
|
|
5
4
|
from huey.contrib.djhuey import db_task, db_periodic_task
|
|
6
5
|
|
|
7
6
|
import karrio.server.core.utils as utils
|
|
7
|
+
from karrio.server.core.telemetry import with_task_telemetry
|
|
8
8
|
|
|
9
9
|
logger = logging.getLogger(__name__)
|
|
10
10
|
DATA_ARCHIVING_SCHEDULE = int(getattr(settings, "DATA_ARCHIVING_SCHEDULE", 168))
|
|
@@ -14,45 +14,37 @@ DEFAULT_TRACKERS_UPDATE_INTERVAL = int(
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@db_periodic_task(crontab(minute=f"*/{DEFAULT_TRACKERS_UPDATE_INTERVAL}"))
|
|
17
|
+
@with_task_telemetry("background_trackers_update")
|
|
17
18
|
def background_trackers_update():
|
|
18
19
|
from karrio.server.events.task_definitions.base import tracking
|
|
19
20
|
|
|
20
21
|
@utils.run_on_all_tenants
|
|
21
22
|
def _run(**kwargs):
|
|
22
|
-
|
|
23
|
-
tracking.update_trackers()
|
|
24
|
-
except Exception as e:
|
|
25
|
-
logger.error(f"An error occured during tracking statuses update: {e}")
|
|
23
|
+
tracking.update_trackers()
|
|
26
24
|
|
|
27
25
|
_run()
|
|
28
26
|
|
|
29
27
|
|
|
30
28
|
@db_task(retries=5, retry_delay=60)
|
|
31
29
|
@utils.tenant_aware
|
|
30
|
+
@with_task_telemetry("notify_webhooks")
|
|
32
31
|
def notify_webhooks(*args, **kwargs):
|
|
33
|
-
|
|
34
|
-
from karrio.server.events.task_definitions.base import webhook
|
|
32
|
+
from karrio.server.events.task_definitions.base import webhook
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
except Exception as e:
|
|
39
|
-
logger.error(f"An error occured during webhook notification: {e}")
|
|
40
|
-
raise e
|
|
34
|
+
webhook.notify_webhook_subscribers(*args, **kwargs)
|
|
41
35
|
|
|
42
36
|
|
|
43
37
|
@db_periodic_task(crontab(hour=f"*/{DATA_ARCHIVING_SCHEDULE}"))
|
|
38
|
+
@with_task_telemetry("periodic_data_archiving")
|
|
44
39
|
def periodic_data_archiving(*args, **kwargs):
|
|
45
40
|
from karrio.server.events.task_definitions.base import archiving
|
|
46
41
|
|
|
47
42
|
@utils.run_on_all_tenants
|
|
48
43
|
def _run(**kwargs):
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
)
|
|
54
|
-
except Exception as e:
|
|
55
|
-
logger.error(f"An error occured during data archiving: {e}")
|
|
44
|
+
utils.failsafe(
|
|
45
|
+
lambda: archiving.run_data_archiving(*args, **kwargs),
|
|
46
|
+
"An error occured during data archiving: $error",
|
|
47
|
+
)
|
|
56
48
|
|
|
57
49
|
_run()
|
|
58
50
|
|
|
@@ -153,69 +153,28 @@ def save_updated_trackers(
|
|
|
153
153
|
t for t in trackers if t.tracking_number == details.tracking_number
|
|
154
154
|
]
|
|
155
155
|
for tracker in related_trackers:
|
|
156
|
-
#
|
|
157
|
-
changes = []
|
|
158
|
-
meta = details.meta or {}
|
|
156
|
+
# Compute status from tracking details
|
|
159
157
|
status = utils.compute_tracking_status(details).value
|
|
160
|
-
|
|
161
|
-
response_events=details.events,
|
|
162
|
-
current_events=tracker.events,
|
|
163
|
-
)
|
|
158
|
+
# Merge options with existing tracker options
|
|
164
159
|
options = {
|
|
165
160
|
**(tracker.options or {}),
|
|
166
161
|
tracker.tracking_number: details.meta,
|
|
167
162
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
tracker
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
tracker.delivered = details.delivered
|
|
184
|
-
changes.append("delivered")
|
|
185
|
-
|
|
186
|
-
if status != tracker.status:
|
|
187
|
-
tracker.status = status
|
|
188
|
-
changes.append("status")
|
|
189
|
-
|
|
190
|
-
if details.estimated_delivery != tracker.estimated_delivery:
|
|
191
|
-
tracker.estimated_delivery = details.estimated_delivery
|
|
192
|
-
changes.append("estimated_delivery")
|
|
193
|
-
|
|
194
|
-
if details.images is not None and (
|
|
195
|
-
details.images.delivery_image != tracker.delivery_image
|
|
196
|
-
or details.images.signature_image != tracker.signature_image
|
|
197
|
-
):
|
|
198
|
-
changes.append("delivery_image")
|
|
199
|
-
changes.append("signature_image")
|
|
200
|
-
tracker.delivery_image = (
|
|
201
|
-
details.images.delivery_image or tracker.delivery_image
|
|
202
|
-
)
|
|
203
|
-
tracker.signature_image = (
|
|
204
|
-
details.images.signature_image or tracker.signature_image
|
|
205
|
-
)
|
|
206
|
-
|
|
207
|
-
if any(info.keys()) and info != tracker.info:
|
|
208
|
-
tracker.info = serializers.process_dictionaries_mutations(
|
|
209
|
-
["info"], dict(info=info), tracker
|
|
210
|
-
)["info"]
|
|
211
|
-
changes.append("info")
|
|
212
|
-
|
|
213
|
-
if any(changes):
|
|
214
|
-
tracker.save(update_fields=changes)
|
|
215
|
-
serializers.update_shipment_tracker(tracker)
|
|
216
|
-
logger.debug("Tracking info updated successfully", tracking_number=details.tracking_number, changes=changes)
|
|
217
|
-
else:
|
|
218
|
-
logger.debug("No changes detected", tracking_number=details.tracking_number)
|
|
163
|
+
|
|
164
|
+
# Use the centralized update_tracker function
|
|
165
|
+
serializers.update_tracker(
|
|
166
|
+
tracker,
|
|
167
|
+
dict(
|
|
168
|
+
events=details.events,
|
|
169
|
+
delivered=details.delivered,
|
|
170
|
+
status=status,
|
|
171
|
+
estimated_delivery=details.estimated_delivery,
|
|
172
|
+
options=options,
|
|
173
|
+
meta=details.meta,
|
|
174
|
+
info=lib.to_dict(details.info or {}),
|
|
175
|
+
images=details.images,
|
|
176
|
+
),
|
|
177
|
+
)
|
|
219
178
|
|
|
220
179
|
except Exception as update_error:
|
|
221
180
|
logger.warning("Failed to update tracker", tracking_number=details.tracking_number, error=str(update_error))
|
|
@@ -32,7 +32,7 @@ class TestWebhookDetails(APITestCase):
|
|
|
32
32
|
super().setUp()
|
|
33
33
|
self.webhook: Webhook = Webhook.objects.create(
|
|
34
34
|
**{
|
|
35
|
-
"url": "
|
|
35
|
+
"url": "https://api.karrio.io",
|
|
36
36
|
"description": "Testing Hook",
|
|
37
37
|
"enabled_events": ["all"],
|
|
38
38
|
"test_mode": True,
|
|
@@ -84,14 +84,14 @@ class TestWebhookDetails(APITestCase):
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
WEBHOOK_DATA = {
|
|
87
|
-
"url": "
|
|
87
|
+
"url": "https://api.karrio.io",
|
|
88
88
|
"description": "Testing Hook",
|
|
89
89
|
"enabled_events": ["all"],
|
|
90
90
|
"test_mode": True,
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
WEBHOOK_RESPONSE = {
|
|
94
|
-
"url": "
|
|
94
|
+
"url": "https://api.karrio.io",
|
|
95
95
|
"description": "Testing Hook",
|
|
96
96
|
"enabled_events": ["all"],
|
|
97
97
|
"test_mode": True,
|
|
@@ -108,7 +108,7 @@ WEBHOOK_UPDATE_DATA = {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
WEBHOOK_UPDATED_RESPONSE = {
|
|
111
|
-
"url": "
|
|
111
|
+
"url": "https://api.karrio.io",
|
|
112
112
|
"description": "Testing Hook Updated",
|
|
113
113
|
"enabled_events": ["shipment_purchased", "shipment_cancelled"],
|
|
114
114
|
"test_mode": True,
|
|
@@ -120,7 +120,7 @@ WEBHOOK_UPDATED_RESPONSE = {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
WEBHOOK_NOTIFIED_RESPONSE = {
|
|
123
|
-
"url": "
|
|
123
|
+
"url": "https://api.karrio.io",
|
|
124
124
|
"description": "Testing Hook",
|
|
125
125
|
"enabled_events": ["all"],
|
|
126
126
|
"test_mode": True,
|
{karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/METADATA
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: karrio_server_events
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.5.1
|
|
4
4
|
Summary: Multi-carrier shipping API Events module
|
|
5
5
|
Author-email: karrio <hello@karrio.io>
|
|
6
|
-
License-Expression:
|
|
6
|
+
License-Expression: LGPL-3.0
|
|
7
7
|
Project-URL: Homepage, https://github.com/karrioapi/karrio
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Requires-Python: >=3.11
|
{karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/RECORD
RENAMED
|
@@ -24,14 +24,14 @@ karrio/server/events/serializers/base.py,sha256=Civqqod7X2u8wUfQpx7NejFpQfqQD8UW
|
|
|
24
24
|
karrio/server/events/serializers/event.py,sha256=dKYqldfSEjKMY7uB1rBFfEfSZ_dfEp8EPxbkBBSWzcc,289
|
|
25
25
|
karrio/server/events/serializers/webhook.py,sha256=Ri5JS1SXpSsPUvQH989T_7Amu1p46y5TP54MEEhK8j8,889
|
|
26
26
|
karrio/server/events/task_definitions/__init__.py,sha256=bpT73UG7mZL_JjEqMwbYx6q69jA8J5Jcoul1LcDokhA,81
|
|
27
|
-
karrio/server/events/task_definitions/base/__init__.py,sha256=
|
|
27
|
+
karrio/server/events/task_definitions/base/__init__.py,sha256=2c3k6qtrdTZ6gxV3JJIpVo7CV83xzVn0vLF8nBpud28,1622
|
|
28
28
|
karrio/server/events/task_definitions/base/archiving.py,sha256=HVUfgzTSsfa-o2u6N1VuyPopnVLdFRwvv-3ix5LjKHc,7270
|
|
29
|
-
karrio/server/events/task_definitions/base/tracking.py,sha256=
|
|
29
|
+
karrio/server/events/task_definitions/base/tracking.py,sha256=3i4ArtrPLioVNcPICQiHPkXOpEayVCJqlMYHexWMchY,7081
|
|
30
30
|
karrio/server/events/task_definitions/base/webhook.py,sha256=QNRq3xhLWQEbrs3zSy6Sa0AXUPhWE7YenKpPzZoFwL0,3616
|
|
31
31
|
karrio/server/events/tests/__init__.py,sha256=5szv9hDvu0R0jtm3XWktY19rCaE8bZ2LdjRm4oJ0pYA,220
|
|
32
32
|
karrio/server/events/tests/test_events.py,sha256=Fxi1hv_lyuRJw5Y_ydywhq5P3akpxet4mFMFSiHU96c,4066
|
|
33
33
|
karrio/server/events/tests/test_tracking_tasks.py,sha256=oOPdjhVax4SzTgBwKxySosgWOX6ZJ2Y-cYvXp3kj0lw,12114
|
|
34
|
-
karrio/server/events/tests/test_webhooks.py,sha256=
|
|
34
|
+
karrio/server/events/tests/test_webhooks.py,sha256=RcGPghj8HmWC0mA3KaOiFbXh3PneVf9ufY0kdtxod9I,3860
|
|
35
35
|
karrio/server/events/views/__init__.py,sha256=Y4hfjd_YSOHj6L7oH41bssVW8rXI_l4vD_IthfNuJ2o,90
|
|
36
36
|
karrio/server/events/views/webhooks.py,sha256=191DjXCoSTM_9AA-Kw-JxQ2TYQ6uYOQMrIDv11ZeTo0,5300
|
|
37
37
|
karrio/server/graph/schemas/__init__.py,sha256=iOEMwnlORWezdO8-2vxBIPSR37D7JGjluZ8f55vzxls,81
|
|
@@ -39,7 +39,7 @@ karrio/server/graph/schemas/events/__init__.py,sha256=Yg1rWew5DgSb_OnLy8n7qqwPLf
|
|
|
39
39
|
karrio/server/graph/schemas/events/inputs.py,sha256=Mgy9qCUrbL-sMI5dNXsnbW8K5_PnGKM13brzZrc5OWk,1526
|
|
40
40
|
karrio/server/graph/schemas/events/mutations.py,sha256=930g2D5TnAEgEjfEfLml1Q9OGCyxe2D592BhzSGDQAQ,1862
|
|
41
41
|
karrio/server/graph/schemas/events/types.py,sha256=TPlrDwQV4LZXu-1t4gFl_eYayU39THmgYT3uv7VXnnw,2759
|
|
42
|
-
karrio_server_events-2025.
|
|
43
|
-
karrio_server_events-2025.
|
|
44
|
-
karrio_server_events-2025.
|
|
45
|
-
karrio_server_events-2025.
|
|
42
|
+
karrio_server_events-2025.5.1.dist-info/METADATA,sha256=gM1-orecV25tI7kBQ4LA8zqdKZNiVua6rwEzayyb-a4,701
|
|
43
|
+
karrio_server_events-2025.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
44
|
+
karrio_server_events-2025.5.1.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
|
|
45
|
+
karrio_server_events-2025.5.1.dist-info/RECORD,,
|
|
File without changes
|
{karrio_server_events-2025.5rc35.dist-info → karrio_server_events-2025.5.1.dist-info}/top_level.txt
RENAMED
|
File without changes
|