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.
@@ -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
- try:
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
- try:
34
- from karrio.server.events.task_definitions.base import webhook
32
+ from karrio.server.events.task_definitions.base import webhook
35
33
 
36
- webhook.notify_webhook_subscribers(*args, **kwargs)
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
- try:
50
- utils.failsafe(
51
- lambda: archiving.run_data_archiving(*args, **kwargs),
52
- "An error occured during data archiving: $error",
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
- # update values only if changed; This is important for webhooks notification
157
- changes = []
158
- meta = details.meta or {}
156
+ # Compute status from tracking details
159
157
  status = utils.compute_tracking_status(details).value
160
- events = utils.process_events(
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
- info = lib.to_dict(details.info or {})
169
-
170
- if events != tracker.events:
171
- tracker.events = events
172
- changes.append("events")
173
-
174
- if options != tracker.options:
175
- tracker.options = options
176
- changes.append("options")
177
-
178
- if details.meta != tracker.meta:
179
- tracker.meta = meta
180
- changes.append("meta")
181
-
182
- if details.delivered != tracker.delivered:
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": "http://localhost:8080",
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": "http://localhost:8080",
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": "http://localhost:8080",
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": "http://localhost:8080",
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": "http://localhost:8080",
123
+ "url": "https://api.karrio.io",
124
124
  "description": "Testing Hook",
125
125
  "enabled_events": ["all"],
126
126
  "test_mode": True,
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: karrio_server_events
3
- Version: 2025.5rc35
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: Apache-2.0
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
@@ -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=3vP52gFdCo9hctLRKnYvEi9iz1UK8GL_a47Nw44h3Nc,1834
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=rSzNZiRGmchgJj81iSl9X6QXExsTfxegqTyfRkjOvPE,9111
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=5Ts3RG_DQ5x0mnWRgTLOX-7FjSAEHXCvT913Sm7FLNM,3860
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.5rc35.dist-info/METADATA,sha256=udp3Y8My2q74CuIdnd9qte8hrZ-rux6l_o3gjCQaREA,705
43
- karrio_server_events-2025.5rc35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
- karrio_server_events-2025.5rc35.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
45
- karrio_server_events-2025.5rc35.dist-info/RECORD,,
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,,