karrio-server-manager 2025.5rc1__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.
Files changed (102) hide show
  1. karrio/server/manager/__init__.py +1 -0
  2. karrio/server/manager/admin.py +1 -0
  3. karrio/server/manager/apps.py +13 -0
  4. karrio/server/manager/migrations/0001_initial.py +1358 -0
  5. karrio/server/manager/migrations/0002_auto_20201127_0721.py +61 -0
  6. karrio/server/manager/migrations/0003_auto_20201230_0820.py +34 -0
  7. karrio/server/manager/migrations/0004_auto_20210125_2125.py +18 -0
  8. karrio/server/manager/migrations/0005_auto_20210216_0758.py +27 -0
  9. karrio/server/manager/migrations/0006_auto_20210307_0438.py +24 -0
  10. karrio/server/manager/migrations/0006_auto_20210308_0302.py +53 -0
  11. karrio/server/manager/migrations/0007_merge_20210311_1428.py +14 -0
  12. karrio/server/manager/migrations/0008_remove_shipment_doc_images.py +17 -0
  13. karrio/server/manager/migrations/0009_auto_20210326_1425.py +28 -0
  14. karrio/server/manager/migrations/0010_auto_20210403_1404.py +28 -0
  15. karrio/server/manager/migrations/0011_auto_20210426_1924.py +48 -0
  16. karrio/server/manager/migrations/0012_auto_20210427_1319.py +24 -0
  17. karrio/server/manager/migrations/0013_customs_invoice_date.py +18 -0
  18. karrio/server/manager/migrations/0014_auto_20210515_0928.py +24 -0
  19. karrio/server/manager/migrations/0015_auto_20210601_0340.py +182 -0
  20. karrio/server/manager/migrations/0016_shipment_archived.py +18 -0
  21. karrio/server/manager/migrations/0017_auto_20210629_1650.py +22 -0
  22. karrio/server/manager/migrations/0018_auto_20210705_1049.py +23 -0
  23. karrio/server/manager/migrations/0019_auto_20210722_1131.py +43 -0
  24. karrio/server/manager/migrations/0020_tracking_messages.py +20 -0
  25. karrio/server/manager/migrations/0021_tracking_estimated_delivery.py +18 -0
  26. karrio/server/manager/migrations/0022_auto_20211122_2100.py +53 -0
  27. karrio/server/manager/migrations/0023_auto_20211227_2141.py +118 -0
  28. karrio/server/manager/migrations/0024_alter_parcel_items.py +18 -0
  29. karrio/server/manager/migrations/0025_auto_20220113_1158.py +25 -0
  30. karrio/server/manager/migrations/0026_parcel_reference_number.py +18 -0
  31. karrio/server/manager/migrations/0027_custom_migration_2021_1.py +47 -0
  32. karrio/server/manager/migrations/0028_auto_20220303_1153.py +39 -0
  33. karrio/server/manager/migrations/0029_auto_20220303_1249.py +55 -0
  34. karrio/server/manager/migrations/0030_alter_shipment_status.py +44 -0
  35. karrio/server/manager/migrations/0031_shipment_invoice.py +34 -0
  36. karrio/server/manager/migrations/0032_custom_migration_2022_3.py +26 -0
  37. karrio/server/manager/migrations/0033_auto_20220504_1335.py +57 -0
  38. karrio/server/manager/migrations/0034_commodity_hs_code.py +18 -0
  39. karrio/server/manager/migrations/0035_parcel_options.py +26 -0
  40. karrio/server/manager/migrations/0036_alter_tracking_shipment.py +24 -0
  41. karrio/server/manager/migrations/0037_auto_20220710_1350.py +28 -0
  42. karrio/server/manager/migrations/0038_alter_tracking_status.py +18 -0
  43. karrio/server/manager/migrations/0039_documentuploadrecord.py +43 -0
  44. karrio/server/manager/migrations/0040_parcel_freight_class.py +18 -0
  45. karrio/server/manager/migrations/0041_alter_commodity_options_alter_parcel_options.py +29 -0
  46. karrio/server/manager/migrations/0042_remove_shipment_shipment_tracking_number_idx_and_more.py +658 -0
  47. karrio/server/manager/migrations/0043_customs_duty_billing_address_and_more.py +62 -0
  48. karrio/server/manager/migrations/0044_address_address_line1_temp_and_more.py +326 -0
  49. karrio/server/manager/migrations/0045_alter_customs_duty_billing_address_and_more.py +45 -0
  50. karrio/server/manager/migrations/0046_auto_20230114_0930.py +78 -0
  51. karrio/server/manager/migrations/0047_remove_shipment_shipment_tracking_number_idx_and_more.py +595 -0
  52. karrio/server/manager/migrations/0048_commodity_title_alter_commodity_description_and_more.py +53 -0
  53. karrio/server/manager/migrations/0049_auto_20230318_0708.py +39 -0
  54. karrio/server/manager/migrations/0050_address_street_number_tracking_account_number_and_more.py +60 -0
  55. karrio/server/manager/migrations/0051_auto_20230330_0556.py +56 -0
  56. karrio/server/manager/migrations/0052_auto_20230520_0811.py +35 -0
  57. karrio/server/manager/migrations/0053_alter_commodity_weight_unit_alter_parcel_weight_unit.py +32 -0
  58. karrio/server/manager/migrations/0054_alter_address_company_name_alter_address_person_name.py +22 -0
  59. karrio/server/manager/migrations/0055_alter_tracking_status.py +32 -0
  60. karrio/server/manager/migrations/0056_tracking_delivery_image_tracking_signature_image.py +22 -0
  61. karrio/server/manager/migrations/0057_alter_customs_invoice_date.py +18 -0
  62. karrio/server/manager/migrations/0058_manifest_shipment_manifest.py +124 -0
  63. karrio/server/manager/migrations/0059_shipment_return_address.py +24 -0
  64. karrio/server/manager/migrations/0060_pickup_meta_alter_address_country_code_and_more.py +527 -0
  65. karrio/server/manager/migrations/0061_alter_customs_incoterm.py +37 -0
  66. karrio/server/manager/migrations/0062_alter_tracking_status.py +35 -0
  67. karrio/server/manager/migrations/__init__.py +0 -0
  68. karrio/server/manager/models.py +984 -0
  69. karrio/server/manager/router.py +3 -0
  70. karrio/server/manager/serializers/__init__.py +50 -0
  71. karrio/server/manager/serializers/address.py +82 -0
  72. karrio/server/manager/serializers/commodity.py +51 -0
  73. karrio/server/manager/serializers/customs.py +84 -0
  74. karrio/server/manager/serializers/document.py +113 -0
  75. karrio/server/manager/serializers/manifest.py +85 -0
  76. karrio/server/manager/serializers/parcel.py +84 -0
  77. karrio/server/manager/serializers/pickup.py +285 -0
  78. karrio/server/manager/serializers/rate.py +19 -0
  79. karrio/server/manager/serializers/shipment.py +869 -0
  80. karrio/server/manager/serializers/tracking.py +250 -0
  81. karrio/server/manager/signals.py +70 -0
  82. karrio/server/manager/tests/__init__.py +10 -0
  83. karrio/server/manager/tests/test_addresses.py +110 -0
  84. karrio/server/manager/tests/test_custom_infos.py +97 -0
  85. karrio/server/manager/tests/test_parcels.py +104 -0
  86. karrio/server/manager/tests/test_pickups.py +345 -0
  87. karrio/server/manager/tests/test_shipments.py +833 -0
  88. karrio/server/manager/tests/test_trackers.py +215 -0
  89. karrio/server/manager/urls.py +10 -0
  90. karrio/server/manager/views/__init__.py +9 -0
  91. karrio/server/manager/views/addresses.py +154 -0
  92. karrio/server/manager/views/customs.py +159 -0
  93. karrio/server/manager/views/documents.py +131 -0
  94. karrio/server/manager/views/manifests.py +160 -0
  95. karrio/server/manager/views/parcels.py +155 -0
  96. karrio/server/manager/views/pickups.py +182 -0
  97. karrio/server/manager/views/shipments.py +335 -0
  98. karrio/server/manager/views/trackers.py +364 -0
  99. karrio_server_manager-2025.5rc1.dist-info/METADATA +28 -0
  100. karrio_server_manager-2025.5rc1.dist-info/RECORD +102 -0
  101. karrio_server_manager-2025.5rc1.dist-info/WHEEL +5 -0
  102. karrio_server_manager-2025.5rc1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,345 @@
1
+ import json
2
+ import logging
3
+ from unittest.mock import patch, ANY
4
+ from django.urls import reverse
5
+ from rest_framework import status
6
+ from karrio.core.models import PickupDetails, ConfirmationDetails, ChargeDetails
7
+ from karrio.server.manager.tests.test_shipments import TestShipmentFixture
8
+ import karrio.server.manager.models as models
9
+
10
+
11
+ class TestFixture(TestShipmentFixture):
12
+ def setUp(self) -> None:
13
+ super().setUp()
14
+
15
+ self.address: models.Address = models.Address.objects.create(
16
+ **{
17
+ "postal_code": "E1C4Z8",
18
+ "city": "Moncton",
19
+ "federal_tax_id": None,
20
+ "state_tax_id": None,
21
+ "person_name": "John Poop",
22
+ "company_name": "A corp.",
23
+ "country_code": "CA",
24
+ "email": "john@a.com",
25
+ "phone_number": "514 000 0000",
26
+ "state_code": "NB",
27
+ "street_number": None,
28
+ "residential": False,
29
+ "address_line1": "125 Church St",
30
+ "address_line2": None,
31
+ "validate_location": False,
32
+ "validation": None,
33
+ "created_by": self.user,
34
+ }
35
+ )
36
+ self.shipment.tracking_number = "123456789012"
37
+ self.shipment.selected_rate_carrier = self.carrier
38
+ self.shipment.save()
39
+
40
+
41
+ class TestPickupSchedule(TestFixture):
42
+ def test_schedule_pickup(self):
43
+ url = reverse(
44
+ "karrio.server.manager:shipment-pickup-request",
45
+ kwargs=dict(carrier_name="canadapost"),
46
+ )
47
+
48
+ with patch("karrio.server.core.gateway.utils.identity") as mock:
49
+ mock.return_value = SCHEDULE_RETURNED_VALUE
50
+ response = self.client.post(f"{url}", PICKUP_DATA)
51
+ response_data = json.loads(response.content)
52
+
53
+ self.assertEqual(response.status_code, status.HTTP_201_CREATED)
54
+ self.assertDictEqual(response_data, PICKUP_RESPONSE)
55
+
56
+
57
+ class TestPickupDetails(TestFixture):
58
+ def setUp(self) -> None:
59
+ super().setUp()
60
+ self.pickup: models.Pickup = models.Pickup.objects.create(
61
+ address=self.address,
62
+ pickup_carrier=self.carrier,
63
+ created_by=self.user,
64
+ test_mode=True,
65
+ pickup_date="2020-10-25",
66
+ ready_time="13:00",
67
+ closing_time="17:00",
68
+ instruction="Should not be folded",
69
+ package_location="At the main entrance hall",
70
+ confirmation_number="00110215",
71
+ pickup_charge={"name": "Pickup fees", "amount": 0.0, "currency": "CAD"},
72
+ )
73
+ self.pickup.shipments.set([self.shipment])
74
+
75
+ def test_udpate_pickup(self):
76
+ url = reverse(
77
+ "karrio.server.manager:shipment-pickup-details",
78
+ kwargs=dict(pk=self.pickup.pk),
79
+ )
80
+
81
+ with patch("karrio.server.core.gateway.utils.identity") as mock:
82
+ mock.return_value = UPDATE_RETURNED_VALUE
83
+ response = self.client.post(url, PICKUP_UPDATE_DATA)
84
+ response_data = json.loads(response.content)
85
+
86
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
87
+ self.assertDictEqual(response_data, PICKUP_UPDATE_RESPONSE)
88
+
89
+ def test_cancel_pickup(self):
90
+ url = reverse(
91
+ "karrio.server.manager:shipment-pickup-cancel",
92
+ kwargs=dict(pk=self.pickup.pk),
93
+ )
94
+
95
+ with patch("karrio.server.core.gateway.utils.identity") as mock:
96
+ mock.return_value = CANCEL_RETURNED_VALUE
97
+ response = self.client.post(url, {})
98
+ response_data = json.loads(response.content)
99
+
100
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
101
+ self.assertDictEqual(response_data, PICKUP_CANCEL_RESPONSE)
102
+
103
+
104
+ PICKUP_DATA = {
105
+ "pickup_date": "2020-10-25",
106
+ "ready_time": "13:00",
107
+ "closing_time": "17:00",
108
+ "instruction": "Should not be folded",
109
+ "package_location": "At the main entrance hall",
110
+ "address": {
111
+ "address_line1": "125 Church St",
112
+ "person_name": "John Doe",
113
+ "company_name": "A corp.",
114
+ "phone_number": "514 000 0000",
115
+ "city": "Moncton",
116
+ "country_code": "CA",
117
+ "postal_code": "E1C4Z8",
118
+ "residential": False,
119
+ "state_code": "NB",
120
+ "email": "john@a.com",
121
+ "validate_location": False,
122
+ "validation": None,
123
+ },
124
+ "tracking_numbers": ["123456789012"],
125
+ }
126
+
127
+ PICKUP_UPDATE_DATA = {
128
+ "ready_time": "14:00",
129
+ "package_location": "At the main entrance hall next to the distributor",
130
+ "address": {"person_name": "Janet Jackson"},
131
+ }
132
+
133
+
134
+ SCHEDULE_RETURNED_VALUE = [
135
+ PickupDetails(
136
+ carrier_id="canadapost",
137
+ carrier_name="canadapost",
138
+ confirmation_number="27241",
139
+ pickup_date="2020-10-25",
140
+ pickup_charge=ChargeDetails(name="Pickup fees", amount=0.0, currency="CAD"),
141
+ ready_time="13:00",
142
+ closing_time="17:00",
143
+ ),
144
+ [],
145
+ ]
146
+
147
+ UPDATE_RETURNED_VALUE = [
148
+ PickupDetails(
149
+ carrier_id="canadapost",
150
+ carrier_name="canadapost",
151
+ confirmation_number="27241",
152
+ pickup_date="2020-10-23",
153
+ ready_time="14:00",
154
+ closing_time="17:00",
155
+ ),
156
+ [],
157
+ ]
158
+
159
+ CANCEL_RETURNED_VALUE = [
160
+ ConfirmationDetails(
161
+ carrier_id="canadapost",
162
+ carrier_name="canadapost",
163
+ operation="Cancel Pickup",
164
+ success=True,
165
+ ),
166
+ [],
167
+ ]
168
+
169
+
170
+ PICKUP_RESPONSE = {
171
+ "id": ANY,
172
+ "object_type": "pickup",
173
+ "carrier_name": "canadapost",
174
+ "carrier_id": "canadapost",
175
+ "confirmation_number": "27241",
176
+ "pickup_date": "2020-10-25",
177
+ "pickup_charge": {"name": "Pickup fees", "amount": 0.0, "currency": "CAD"},
178
+ "ready_time": "13:00",
179
+ "closing_time": "17:00",
180
+ "test_mode": True,
181
+ "address": {
182
+ "id": ANY,
183
+ "object_type": "address",
184
+ "postal_code": "E1C4Z8",
185
+ "city": "Moncton",
186
+ "federal_tax_id": None,
187
+ "state_tax_id": None,
188
+ "person_name": "John Doe",
189
+ "company_name": "A corp.",
190
+ "country_code": "CA",
191
+ "email": "john@a.com",
192
+ "phone_number": "+1 514-000-0000",
193
+ "state_code": "NB",
194
+ "street_number": None,
195
+ "residential": False,
196
+ "address_line1": "125 Church St",
197
+ "address_line2": None,
198
+ "validate_location": False,
199
+ "validation": None,
200
+ },
201
+ "parcels": [
202
+ {
203
+ "id": ANY,
204
+ "object_type": "parcel",
205
+ "weight": 1.0,
206
+ "width": None,
207
+ "height": None,
208
+ "length": None,
209
+ "packaging_type": None,
210
+ "package_preset": "canadapost_corrugated_small_box",
211
+ "description": None,
212
+ "content": None,
213
+ "is_document": False,
214
+ "items": [],
215
+ "weight_unit": "KG",
216
+ "dimension_unit": None,
217
+ "freight_class": None,
218
+ "reference_number": ANY,
219
+ "options": {},
220
+ }
221
+ ],
222
+ "instruction": "Should not be folded",
223
+ "package_location": "At the main entrance hall",
224
+ "options": {},
225
+ "metadata": {},
226
+ "meta": ANY,
227
+ }
228
+
229
+ PICKUP_UPDATE_RESPONSE = {
230
+ "id": ANY,
231
+ "object_type": "pickup",
232
+ "carrier_name": "canadapost",
233
+ "carrier_id": "canadapost",
234
+ "confirmation_number": "00110215",
235
+ "pickup_date": "2020-10-25",
236
+ "pickup_charge": {"name": "Pickup fees", "amount": 0.0, "currency": "CAD"},
237
+ "ready_time": "14:00",
238
+ "closing_time": "17:00",
239
+ "test_mode": True,
240
+ "address": {
241
+ "id": ANY,
242
+ "object_type": "address",
243
+ "postal_code": "E1C4Z8",
244
+ "city": "Moncton",
245
+ "federal_tax_id": None,
246
+ "state_tax_id": None,
247
+ "person_name": "Janet Jackson",
248
+ "company_name": "A corp.",
249
+ "country_code": "CA",
250
+ "email": "john@a.com",
251
+ "phone_number": "514 000 0000",
252
+ "state_code": "NB",
253
+ "street_number": None,
254
+ "residential": False,
255
+ "address_line1": "125 Church St",
256
+ "address_line2": None,
257
+ "validate_location": False,
258
+ "validation": None,
259
+ },
260
+ "parcels": [
261
+ {
262
+ "id": ANY,
263
+ "object_type": "parcel",
264
+ "weight": 1.0,
265
+ "width": None,
266
+ "height": None,
267
+ "length": None,
268
+ "packaging_type": None,
269
+ "package_preset": "canadapost_corrugated_small_box",
270
+ "description": None,
271
+ "content": None,
272
+ "is_document": False,
273
+ "items": [],
274
+ "weight_unit": "KG",
275
+ "dimension_unit": None,
276
+ "freight_class": None,
277
+ "reference_number": ANY,
278
+ "options": {},
279
+ }
280
+ ],
281
+ "instruction": "Should not be folded",
282
+ "package_location": "At the main entrance hall next to the distributor",
283
+ "options": {},
284
+ "metadata": {},
285
+ "meta": ANY,
286
+ }
287
+
288
+ PICKUP_CANCEL_RESPONSE = {
289
+ "id": ANY,
290
+ "object_type": "pickup",
291
+ "carrier_name": "canadapost",
292
+ "carrier_id": "canadapost",
293
+ "confirmation_number": "00110215",
294
+ "pickup_date": "2020-10-25",
295
+ "pickup_charge": {"name": "Pickup fees", "amount": 0.0, "currency": "CAD"},
296
+ "ready_time": "13:00",
297
+ "closing_time": "17:00",
298
+ "address": {
299
+ "id": None,
300
+ "postal_code": "E1C4Z8",
301
+ "city": "Moncton",
302
+ "federal_tax_id": None,
303
+ "state_tax_id": None,
304
+ "person_name": "John Poop",
305
+ "company_name": "A corp.",
306
+ "country_code": "CA",
307
+ "email": "john@a.com",
308
+ "phone_number": "514 000 0000",
309
+ "state_code": "NB",
310
+ "street_number": None,
311
+ "residential": False,
312
+ "address_line1": "125 Church St",
313
+ "address_line2": None,
314
+ "validate_location": False,
315
+ "object_type": "address",
316
+ "validation": None,
317
+ },
318
+ "parcels": [
319
+ {
320
+ "id": ANY,
321
+ "weight": 1.0,
322
+ "width": None,
323
+ "height": None,
324
+ "length": None,
325
+ "packaging_type": None,
326
+ "package_preset": "canadapost_corrugated_small_box",
327
+ "description": None,
328
+ "content": None,
329
+ "is_document": False,
330
+ "weight_unit": "KG",
331
+ "dimension_unit": None,
332
+ "items": [],
333
+ "freight_class": None,
334
+ "reference_number": "0000000002",
335
+ "options": {},
336
+ "object_type": "parcel",
337
+ }
338
+ ],
339
+ "instruction": "Should not be folded",
340
+ "package_location": "At the main entrance hall",
341
+ "options": {},
342
+ "metadata": {},
343
+ "test_mode": True,
344
+ "meta": ANY,
345
+ }