karrio-server-core 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.

Potentially problematic release.


This version of karrio-server-core might be problematic. Click here for more details.

Files changed (241) hide show
  1. karrio/server/conf.py +54 -0
  2. karrio/server/core/__init__.py +3 -0
  3. karrio/server/core/admin.py +1 -0
  4. karrio/server/core/apps.py +10 -0
  5. karrio/server/core/authentication.py +313 -0
  6. karrio/server/core/context_processors.py +12 -0
  7. karrio/server/core/datatypes.py +369 -0
  8. karrio/server/core/dataunits.py +156 -0
  9. karrio/server/core/exceptions.py +200 -0
  10. karrio/server/core/fields.py +12 -0
  11. karrio/server/core/filters.py +823 -0
  12. karrio/server/core/gateway.py +720 -0
  13. karrio/server/core/management/commands/cli.py +19 -0
  14. karrio/server/core/management/commands/create_oauth_client.py +41 -0
  15. karrio/server/core/middleware.py +95 -0
  16. karrio/server/core/migrations/0001_initial.py +28 -0
  17. karrio/server/core/migrations/0002_apilogindex.py +69 -0
  18. karrio/server/core/migrations/0003_apilogindex_test_mode.py +62 -0
  19. karrio/server/core/migrations/0004_metafield.py +74 -0
  20. karrio/server/core/migrations/0005_alter_metafield_type_alter_metafield_value.py +23 -0
  21. karrio/server/core/migrations/__init__.py +0 -0
  22. karrio/server/core/models/__init__.py +48 -0
  23. karrio/server/core/models/base.py +70 -0
  24. karrio/server/core/models/entity.py +22 -0
  25. karrio/server/core/models/metafield.py +144 -0
  26. karrio/server/core/models/third_party.py +21 -0
  27. karrio/server/core/oauth_validators.py +171 -0
  28. karrio/server/core/permissions.py +37 -0
  29. karrio/server/core/renderers.py +11 -0
  30. karrio/server/core/router.py +3 -0
  31. karrio/server/core/serializers.py +1898 -0
  32. karrio/server/core/signals.py +57 -0
  33. karrio/server/core/tests.py +98 -0
  34. karrio/server/core/urls.py +12 -0
  35. karrio/server/core/utils.py +479 -0
  36. karrio/server/core/validators.py +416 -0
  37. karrio/server/core/views/__init__.py +2 -0
  38. karrio/server/core/views/api.py +133 -0
  39. karrio/server/core/views/metadata.py +44 -0
  40. karrio/server/core/views/oauth.py +74 -0
  41. karrio/server/core/views/references.py +82 -0
  42. karrio/server/core/views/schema.py +310 -0
  43. karrio/server/filters/__init__.py +2 -0
  44. karrio/server/filters/abstract.py +26 -0
  45. karrio/server/iam/__init__.py +0 -0
  46. karrio/server/iam/admin.py +3 -0
  47. karrio/server/iam/apps.py +21 -0
  48. karrio/server/iam/migrations/0001_initial.py +33 -0
  49. karrio/server/iam/migrations/__init__.py +0 -0
  50. karrio/server/iam/models.py +48 -0
  51. karrio/server/iam/permissions.py +134 -0
  52. karrio/server/iam/serializers.py +39 -0
  53. karrio/server/iam/signals.py +20 -0
  54. karrio/server/iam/tests.py +3 -0
  55. karrio/server/iam/views.py +3 -0
  56. karrio/server/openapi.py +75 -0
  57. karrio/server/providers/__init__.py +1 -0
  58. karrio/server/providers/admin.py +364 -0
  59. karrio/server/providers/apps.py +10 -0
  60. karrio/server/providers/extension/__init__.py +1 -0
  61. karrio/server/providers/extension/models/__init__.py +1 -0
  62. karrio/server/providers/extension/models/allied_express.py +22 -0
  63. karrio/server/providers/extension/models/allied_express_local.py +22 -0
  64. karrio/server/providers/extension/models/amazon_shipping.py +27 -0
  65. karrio/server/providers/extension/models/aramex.py +25 -0
  66. karrio/server/providers/extension/models/asendia_us.py +21 -0
  67. karrio/server/providers/extension/models/australiapost.py +20 -0
  68. karrio/server/providers/extension/models/boxknight.py +19 -0
  69. karrio/server/providers/extension/models/bpost.py +21 -0
  70. karrio/server/providers/extension/models/canadapost.py +21 -0
  71. karrio/server/providers/extension/models/canpar.py +19 -0
  72. karrio/server/providers/extension/models/chronopost.py +22 -0
  73. karrio/server/providers/extension/models/colissimo.py +22 -0
  74. karrio/server/providers/extension/models/dhl_express.py +23 -0
  75. karrio/server/providers/extension/models/dhl_parcel_de.py +25 -0
  76. karrio/server/providers/extension/models/dhl_poland.py +22 -0
  77. karrio/server/providers/extension/models/dhl_universal.py +19 -0
  78. karrio/server/providers/extension/models/dicom.py +20 -0
  79. karrio/server/providers/extension/models/dpd.py +37 -0
  80. karrio/server/providers/extension/models/dpdhl.py +26 -0
  81. karrio/server/providers/extension/models/easypost.py +20 -0
  82. karrio/server/providers/extension/models/eshipper.py +21 -0
  83. karrio/server/providers/extension/models/fedex.py +25 -0
  84. karrio/server/providers/extension/models/fedex_ws.py +24 -0
  85. karrio/server/providers/extension/models/freightcom.py +21 -0
  86. karrio/server/providers/extension/models/generic.py +35 -0
  87. karrio/server/providers/extension/models/geodis.py +22 -0
  88. karrio/server/providers/extension/models/hay_post.py +22 -0
  89. karrio/server/providers/extension/models/laposte.py +19 -0
  90. karrio/server/providers/extension/models/locate2u.py +22 -0
  91. karrio/server/providers/extension/models/nationex.py +22 -0
  92. karrio/server/providers/extension/models/purolator.py +21 -0
  93. karrio/server/providers/extension/models/roadie.py +18 -0
  94. karrio/server/providers/extension/models/royalmail.py +19 -0
  95. karrio/server/providers/extension/models/sendle.py +22 -0
  96. karrio/server/providers/extension/models/tge.py +63 -0
  97. karrio/server/providers/extension/models/tnt.py +23 -0
  98. karrio/server/providers/extension/models/ups.py +23 -0
  99. karrio/server/providers/extension/models/usps.py +23 -0
  100. karrio/server/providers/extension/models/usps_international.py +23 -0
  101. karrio/server/providers/extension/models/usps_wt.py +24 -0
  102. karrio/server/providers/extension/models/usps_wt_international.py +24 -0
  103. karrio/server/providers/extension/models/zoom2u.py +23 -0
  104. karrio/server/providers/migrations/0001_initial.py +140 -0
  105. karrio/server/providers/migrations/0002_carrier_active.py +18 -0
  106. karrio/server/providers/migrations/0003_auto_20201230_0820.py +24 -0
  107. karrio/server/providers/migrations/0004_auto_20210212_0554.py +178 -0
  108. karrio/server/providers/migrations/0005_auto_20210212_0555.py +18 -0
  109. karrio/server/providers/migrations/0006_australiapostsettings.py +29 -0
  110. karrio/server/providers/migrations/0007_auto_20210213_0206.py +21 -0
  111. karrio/server/providers/migrations/0008_auto_20210214_0409.py +30 -0
  112. karrio/server/providers/migrations/0009_auto_20210308_0302.py +18 -0
  113. karrio/server/providers/migrations/0010_auto_20210409_0852.py +32 -0
  114. karrio/server/providers/migrations/0011_auto_20210409_0853.py +21 -0
  115. karrio/server/providers/migrations/0012_alter_carrier_options.py +17 -0
  116. karrio/server/providers/migrations/0013_tntsettings.py +30 -0
  117. karrio/server/providers/migrations/0014_auto_20210612_1608.py +46 -0
  118. karrio/server/providers/migrations/0015_auto_20210615_1601.py +28 -0
  119. karrio/server/providers/migrations/0016_alter_purolatorsettings_user_token.py +18 -0
  120. karrio/server/providers/migrations/0017_auto_20210805_0359.py +1293 -0
  121. karrio/server/providers/migrations/0018_alter_fedexsettings_user_key.py +18 -0
  122. karrio/server/providers/migrations/0019_dhlpolandsettings_servicelevel.py +65 -0
  123. karrio/server/providers/migrations/0020_genericsettings_labeltemplate.py +52 -0
  124. karrio/server/providers/migrations/0021_auto_20211231_2353.py +40 -0
  125. karrio/server/providers/migrations/0022_carrier_metadata.py +18 -0
  126. karrio/server/providers/migrations/0023_auto_20220124_1916.py +27 -0
  127. karrio/server/providers/migrations/0024_alter_genericsettings_custom_carrier_name.py +19 -0
  128. karrio/server/providers/migrations/0025_alter_servicelevel_service_code.py +19 -0
  129. karrio/server/providers/migrations/0026_auto_20220208_0132.py +59 -0
  130. karrio/server/providers/migrations/0027_auto_20220304_1340.py +29 -0
  131. karrio/server/providers/migrations/0028_auto_20220323_1500.py +33 -0
  132. karrio/server/providers/migrations/0029_easypostsettings.py +27 -0
  133. karrio/server/providers/migrations/0030_amazonmwssettings.py +29 -0
  134. karrio/server/providers/migrations/0031_delete_amazonmwssettings.py +18 -0
  135. karrio/server/providers/migrations/0032_alter_carrier_test.py +18 -0
  136. karrio/server/providers/migrations/0033_auto_20220708_1350.py +22 -0
  137. karrio/server/providers/migrations/0034_amazonmwssettings_dpdhlsettings.py +47 -0
  138. karrio/server/providers/migrations/0035_alter_carrier_capabilities.py +43 -0
  139. karrio/server/providers/migrations/0036_upsfreightsettings.py +31 -0
  140. karrio/server/providers/migrations/0037_chronopostsettings.py +29 -0
  141. karrio/server/providers/migrations/0038_alter_genericsettings_label_template.py +19 -0
  142. karrio/server/providers/migrations/0039_auto_20220906_0612.py +23 -0
  143. karrio/server/providers/migrations/0040_dpdhlsettings_services.py +18 -0
  144. karrio/server/providers/migrations/0041_auto_20221105_0705.py +38 -0
  145. karrio/server/providers/migrations/0042_auto_20221215_1642.py +23 -0
  146. karrio/server/providers/migrations/0043_alter_genericsettings_account_number_and_more.py +39 -0
  147. karrio/server/providers/migrations/0044_carrier_carrier_capabilities.py +64 -0
  148. karrio/server/providers/migrations/0045_alter_carrier_active_alter_carrier_carrier_id.py +31 -0
  149. karrio/server/providers/migrations/0046_remove_dpdhlsettings_signature_and_more.py +41 -0
  150. karrio/server/providers/migrations/0047_dpdsettings.py +286 -0
  151. karrio/server/providers/migrations/0048_servicelevel_min_weight_servicelevel_transit_days_and_more.py +64 -0
  152. karrio/server/providers/migrations/0049_boxknightsettings_geodissettings_lapostesettings_and_more.py +156 -0
  153. karrio/server/providers/migrations/0050_carrier_is_system_alter_carrier_metadata_and_more.py +106 -0
  154. karrio/server/providers/migrations/0051_rename_username_upssettings_client_id_and_more.py +31 -0
  155. karrio/server/providers/migrations/0052_alter_upssettings_account_number_and_more.py +20 -0
  156. karrio/server/providers/migrations/0053_locate2usettings.py +281 -0
  157. karrio/server/providers/migrations/0054_zoom2usettings.py +280 -0
  158. karrio/server/providers/migrations/0055_rename_amazonmwssettings_amazonshippingsettings_and_more.py +44 -0
  159. karrio/server/providers/migrations/0056_asendiaussettings_geodissettings_code_client_and_more.py +75 -0
  160. karrio/server/providers/migrations/0057_alter_servicelevel_weight_unit_belgianpostsettings.py +51 -0
  161. karrio/server/providers/migrations/0058_alliedexpresssettings.py +38 -0
  162. karrio/server/providers/migrations/0059_ratesheet.py +81 -0
  163. karrio/server/providers/migrations/0060_belgianpostsettings_rate_sheet_and_more.py +73 -0
  164. karrio/server/providers/migrations/0061_alliedexpresssettings_service_type.py +17 -0
  165. karrio/server/providers/migrations/0062_sendlesettings_account_country_code.py +257 -0
  166. karrio/server/providers/migrations/0063_servicelevel_metadata.py +25 -0
  167. karrio/server/providers/migrations/0064_alliedexpresslocalsettings.py +43 -0
  168. karrio/server/providers/migrations/0065_servicelevel_carrier_service_code_and_more.py +66 -0
  169. karrio/server/providers/migrations/0066_rename_fedexsettings_fedexwssettings_and_more.py +28 -0
  170. karrio/server/providers/migrations/0067_fedexsettings.py +283 -0
  171. karrio/server/providers/migrations/0068_fedexsettings_track_api_key_and_more.py +38 -0
  172. karrio/server/providers/migrations/0069_alter_canadapostsettings_contract_id_and_more.py +23 -0
  173. karrio/server/providers/migrations/0070_tgesettings_alter_carrier_capabilities.py +65 -0
  174. karrio/server/providers/migrations/0071_alter_tgesettings_my_toll_token.py +18 -0
  175. karrio/server/providers/migrations/0072_rename_eshippersettings_eshipperxmlsettings_and_more.py +28 -0
  176. karrio/server/providers/migrations/0073_delete_eshipperxmlsettings.py +41 -0
  177. karrio/server/providers/migrations/0074_eshippersettings.py +38 -0
  178. karrio/server/providers/migrations/0075_haypostsettings.py +40 -0
  179. karrio/server/providers/migrations/0076_rename_customer_registration_id_uspsinternationalsettings_account_number_and_more.py +125 -0
  180. karrio/server/providers/migrations/0077_uspswtinternationalsettings_uspswtsettings_and_more.py +165 -0
  181. karrio/server/providers/migrations/0078_auto_20240813_1552.py +120 -0
  182. karrio/server/providers/migrations/0079_alter_carrier_options_alter_ratesheet_created_by.py +31 -0
  183. karrio/server/providers/migrations/0080_alter_aramexsettings_account_country_code_and_more.py +3025 -0
  184. karrio/server/providers/migrations/0081_remove_alliedexpresssettings_carrier_ptr_and_more.py +338 -0
  185. karrio/server/providers/migrations/__init__.py +0 -0
  186. karrio/server/providers/models/__init__.py +17 -0
  187. karrio/server/providers/models/carrier.py +309 -0
  188. karrio/server/providers/models/config.py +30 -0
  189. karrio/server/providers/models/service.py +62 -0
  190. karrio/server/providers/models/sheet.py +60 -0
  191. karrio/server/providers/models/template.py +39 -0
  192. karrio/server/providers/models/utils.py +58 -0
  193. karrio/server/providers/router.py +3 -0
  194. karrio/server/providers/serializers/__init__.py +3 -0
  195. karrio/server/providers/serializers/base.py +277 -0
  196. karrio/server/providers/signals.py +27 -0
  197. karrio/server/providers/tests.py +3 -0
  198. karrio/server/providers/urls.py +11 -0
  199. karrio/server/providers/views/__init__.py +0 -0
  200. karrio/server/providers/views/carriers.py +269 -0
  201. karrio/server/providers/views/connections.py +176 -0
  202. karrio/server/samples.py +352 -0
  203. karrio/server/serializers/__init__.py +2 -0
  204. karrio/server/serializers/abstract.py +506 -0
  205. karrio/server/tracing/__init__.py +0 -0
  206. karrio/server/tracing/admin.py +63 -0
  207. karrio/server/tracing/apps.py +8 -0
  208. karrio/server/tracing/migrations/0001_initial.py +41 -0
  209. karrio/server/tracing/migrations/0002_auto_20220710_1307.py +22 -0
  210. karrio/server/tracing/migrations/0003_auto_20221105_0317.py +43 -0
  211. karrio/server/tracing/migrations/0004_tracingrecord_carrier_account_idx.py +24 -0
  212. karrio/server/tracing/migrations/0005_optimise_tracingrecord_request_log_idx.py +25 -0
  213. karrio/server/tracing/migrations/0006_alter_tracingrecord_options_and_more.py +49 -0
  214. karrio/server/tracing/migrations/__init__.py +0 -0
  215. karrio/server/tracing/models.py +80 -0
  216. karrio/server/tracing/tests.py +3 -0
  217. karrio/server/tracing/utils.py +112 -0
  218. karrio/server/user/__init__.py +0 -0
  219. karrio/server/user/admin.py +96 -0
  220. karrio/server/user/apps.py +7 -0
  221. karrio/server/user/forms.py +35 -0
  222. karrio/server/user/migrations/0001_initial.py +41 -0
  223. karrio/server/user/migrations/0002_token.py +29 -0
  224. karrio/server/user/migrations/0003_token_test_mode.py +20 -0
  225. karrio/server/user/migrations/0004_group.py +26 -0
  226. karrio/server/user/migrations/0005_token_label.py +21 -0
  227. karrio/server/user/migrations/0006_workspaceconfig.py +63 -0
  228. karrio/server/user/migrations/__init__.py +0 -0
  229. karrio/server/user/models.py +203 -0
  230. karrio/server/user/serializers.py +46 -0
  231. karrio/server/user/templates/registration/login.html +108 -0
  232. karrio/server/user/templates/registration/registration_confirm_email.html +10 -0
  233. karrio/server/user/templates/registration/registration_confirm_email.txt +3 -0
  234. karrio/server/user/tests.py +3 -0
  235. karrio/server/user/urls.py +10 -0
  236. karrio/server/user/utils.py +60 -0
  237. karrio/server/user/views.py +9 -0
  238. karrio_server_core-2025.5rc1.dist-info/METADATA +32 -0
  239. karrio_server_core-2025.5rc1.dist-info/RECORD +241 -0
  240. karrio_server_core-2025.5rc1.dist-info/WHEEL +5 -0
  241. karrio_server_core-2025.5rc1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,125 @@
1
+ # Generated by Django 4.2.14 on 2024-07-27 13:09
2
+
3
+ from django import forms
4
+ from django.db import migrations, models
5
+ import django.utils.timezone
6
+ import karrio.lib as lib
7
+
8
+
9
+ def forwards_func(apps, schema_editor):
10
+ db_alias = schema_editor.connection.alias
11
+ USPSSettings = apps.get_model("providers", "USPSSettings")
12
+ USPSInternationalSettings = apps.get_model("providers", "USPSInternationalSettings")
13
+
14
+ usps_accounts = USPSSettings.objects.using(db_alias).all().iterator()
15
+ usps_intl_accounts = (
16
+ USPSInternationalSettings.objects.using(db_alias).all().iterator()
17
+ )
18
+
19
+ carrier_accounts = [
20
+ *[(_.carrier_ptr, _) for _ in usps_accounts],
21
+ *[(_.carrier_ptr, _) for _ in usps_intl_accounts],
22
+ ]
23
+
24
+ for _carrier, _settings in carrier_accounts:
25
+ _carrier.metadata = {
26
+ **(_carrier.metadata or {}),
27
+ "__settings": {
28
+ "carrier_name": "usps",
29
+ **(_carrier.metadata or {}).get("__settings", {}),
30
+ **(lib.failsafe(lambda: forms.model_to_dict(_settings)) or {}),
31
+ },
32
+ }
33
+
34
+ _carrier.save(using=db_alias)
35
+
36
+
37
+ def reverse_func(apps, schema_editor):
38
+ pass
39
+
40
+
41
+ class Migration(migrations.Migration):
42
+
43
+ dependencies = [
44
+ ("providers", "0075_haypostsettings"),
45
+ ]
46
+
47
+ operations = [
48
+ migrations.RunPython(forwards_func, reverse_func),
49
+ migrations.RenameField(
50
+ model_name="uspsinternationalsettings",
51
+ old_name="customer_registration_id",
52
+ new_name="account_number",
53
+ ),
54
+ migrations.RenameField(
55
+ model_name="uspsinternationalsettings",
56
+ old_name="logistics_manager_mailer_id",
57
+ new_name="account_type",
58
+ ),
59
+ migrations.RemoveField(
60
+ model_name="uspsinternationalsettings",
61
+ name="mailer_id",
62
+ ),
63
+ migrations.RemoveField(
64
+ model_name="uspsinternationalsettings",
65
+ name="password",
66
+ ),
67
+ migrations.RemoveField(
68
+ model_name="uspsinternationalsettings",
69
+ name="username",
70
+ ),
71
+ migrations.RemoveField(
72
+ model_name="uspssettings",
73
+ name="customer_registration_id",
74
+ ),
75
+ migrations.RemoveField(
76
+ model_name="uspssettings",
77
+ name="logistics_manager_mailer_id",
78
+ ),
79
+ migrations.RemoveField(
80
+ model_name="uspssettings",
81
+ name="mailer_id",
82
+ ),
83
+ migrations.RemoveField(
84
+ model_name="uspssettings",
85
+ name="password",
86
+ ),
87
+ migrations.RemoveField(
88
+ model_name="uspssettings",
89
+ name="username",
90
+ ),
91
+ migrations.AddField(
92
+ model_name="uspsinternationalsettings",
93
+ name="client_id",
94
+ field=models.CharField(default=django.utils.timezone.now, max_length=100),
95
+ preserve_default=False,
96
+ ),
97
+ migrations.AddField(
98
+ model_name="uspsinternationalsettings",
99
+ name="client_secret",
100
+ field=models.CharField(default=django.utils.timezone.now, max_length=100),
101
+ preserve_default=False,
102
+ ),
103
+ migrations.AddField(
104
+ model_name="uspssettings",
105
+ name="account_number",
106
+ field=models.CharField(blank=True, max_length=100, null=True),
107
+ ),
108
+ migrations.AddField(
109
+ model_name="uspssettings",
110
+ name="account_type",
111
+ field=models.CharField(blank=True, max_length=100, null=True),
112
+ ),
113
+ migrations.AddField(
114
+ model_name="uspssettings",
115
+ name="client_id",
116
+ field=models.CharField(default=django.utils.timezone.now, max_length=100),
117
+ preserve_default=False,
118
+ ),
119
+ migrations.AddField(
120
+ model_name="uspssettings",
121
+ name="client_secret",
122
+ field=models.CharField(default=django.utils.timezone.now, max_length=100),
123
+ preserve_default=False,
124
+ ),
125
+ ]
@@ -0,0 +1,165 @@
1
+ # Generated by Django 4.2.14 on 2024-08-06 06:12
2
+
3
+ from django.conf import settings
4
+ from django.db import migrations, models
5
+ import django.db.models.deletion
6
+ import functools
7
+ import karrio.server.core.models
8
+
9
+
10
+ class Migration(migrations.Migration):
11
+
12
+ dependencies = [
13
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+ (
15
+ "providers",
16
+ "0076_rename_customer_registration_id_uspsinternationalsettings_account_number_and_more",
17
+ ),
18
+ ]
19
+
20
+ operations = [
21
+ migrations.CreateModel(
22
+ name="USPSWTInternationalSettings",
23
+ fields=[
24
+ (
25
+ "carrier_ptr",
26
+ models.OneToOneField(
27
+ auto_created=True,
28
+ on_delete=django.db.models.deletion.CASCADE,
29
+ parent_link=True,
30
+ primary_key=True,
31
+ serialize=False,
32
+ to="providers.carrier",
33
+ ),
34
+ ),
35
+ ("username", models.CharField(max_length=200)),
36
+ ("password", models.CharField(max_length=200)),
37
+ ("mailer_id", models.CharField(blank=True, max_length=200, null=True)),
38
+ (
39
+ "customer_registration_id",
40
+ models.CharField(blank=True, max_length=200, null=True),
41
+ ),
42
+ (
43
+ "logistics_manager_mailer_id",
44
+ models.CharField(blank=True, max_length=200, null=True),
45
+ ),
46
+ ],
47
+ options={
48
+ "verbose_name": "USPS Web Tools International Settings",
49
+ "verbose_name_plural": "USPS Web Tools International Settings",
50
+ "db_table": "usps_wt_international-settings",
51
+ },
52
+ bases=("providers.carrier",),
53
+ ),
54
+ migrations.CreateModel(
55
+ name="USPSWTSettings",
56
+ fields=[
57
+ (
58
+ "carrier_ptr",
59
+ models.OneToOneField(
60
+ auto_created=True,
61
+ on_delete=django.db.models.deletion.CASCADE,
62
+ parent_link=True,
63
+ primary_key=True,
64
+ serialize=False,
65
+ to="providers.carrier",
66
+ ),
67
+ ),
68
+ ("username", models.CharField(max_length=200)),
69
+ ("password", models.CharField(max_length=200)),
70
+ ("mailer_id", models.CharField(blank=True, max_length=200, null=True)),
71
+ (
72
+ "customer_registration_id",
73
+ models.CharField(blank=True, max_length=200, null=True),
74
+ ),
75
+ (
76
+ "logistics_manager_mailer_id",
77
+ models.CharField(blank=True, max_length=200, null=True),
78
+ ),
79
+ ],
80
+ options={
81
+ "verbose_name": "USPS Web Settings",
82
+ "verbose_name_plural": "USPS Web Settings",
83
+ "db_table": "usps_wt-settings",
84
+ },
85
+ bases=("providers.carrier",),
86
+ ),
87
+ migrations.AlterModelOptions(
88
+ name="carrier",
89
+ options={},
90
+ ),
91
+ migrations.RemoveField(
92
+ model_name="belgianpostsettings",
93
+ name="rate_sheet",
94
+ ),
95
+ migrations.RemoveField(
96
+ model_name="colissimosettings",
97
+ name="rate_sheet",
98
+ ),
99
+ migrations.RemoveField(
100
+ model_name="dhlparceldesettings",
101
+ name="rate_sheet",
102
+ ),
103
+ migrations.RemoveField(
104
+ model_name="dhlpolandsettings",
105
+ name="rate_sheet",
106
+ ),
107
+ migrations.RemoveField(
108
+ model_name="dpdhlsettings",
109
+ name="rate_sheet",
110
+ ),
111
+ migrations.RemoveField(
112
+ model_name="dpdsettings",
113
+ name="rate_sheet",
114
+ ),
115
+ migrations.RemoveField(
116
+ model_name="genericsettings",
117
+ name="rate_sheet",
118
+ ),
119
+ migrations.AddField(
120
+ model_name="carrier",
121
+ name="carrier_code",
122
+ field=models.CharField(
123
+ db_index=True,
124
+ default="generic",
125
+ help_text="eg. dhl_express, fedex, ups, usps, ...",
126
+ max_length=100,
127
+ ),
128
+ ),
129
+ migrations.AddField(
130
+ model_name="carrier",
131
+ name="credentials",
132
+ field=models.JSONField(
133
+ default=functools.partial(
134
+ karrio.server.core.models._identity, *(), **{"value": {}}
135
+ ),
136
+ help_text="Carrier connection credentials",
137
+ ),
138
+ ),
139
+ migrations.AddField(
140
+ model_name="carrier",
141
+ name="rate_sheet",
142
+ field=models.ForeignKey(
143
+ blank=True,
144
+ null=True,
145
+ on_delete=django.db.models.deletion.SET_NULL,
146
+ to="providers.ratesheet",
147
+ ),
148
+ ),
149
+ migrations.AlterField(
150
+ model_name="carrier",
151
+ name="active_users",
152
+ field=models.ManyToManyField(
153
+ blank=True, related_name="connection_users", to=settings.AUTH_USER_MODEL
154
+ ),
155
+ ),
156
+ migrations.AlterField(
157
+ model_name="carrier",
158
+ name="carrier_id",
159
+ field=models.CharField(
160
+ db_index=True,
161
+ help_text="eg. canadapost, dhl_express, fedex, purolator_courrier, ups...",
162
+ max_length=150,
163
+ ),
164
+ ),
165
+ ]
@@ -0,0 +1,120 @@
1
+ # Generated by Django 4.2.15 on 2024-08-13 15:52
2
+
3
+ import karrio.lib as lib
4
+ from django import forms
5
+ import django.conf as conf
6
+ import karrio.server.core.models
7
+ from django.db import migrations, models, transaction
8
+
9
+
10
+ @transaction.atomic
11
+ def forwards_func(apps, schema_editor):
12
+ try:
13
+ from karrio.server.providers.models import MODELS
14
+ except ImportError:
15
+ pass
16
+
17
+ db_alias = schema_editor.connection.alias
18
+ User = apps.get_model(*conf.settings.AUTH_USER_MODEL.split("."))
19
+ Carrier = apps.get_model("providers", "Carrier")
20
+ RateSheet = apps.get_model("providers", "RateSheet")
21
+
22
+ carrier_accounts = Carrier.objects.using(db_alias).all().iterator()
23
+
24
+ for _carrier in carrier_accounts:
25
+ _carrier_name, _settings = next(
26
+ (
27
+ (
28
+ name,
29
+ _carrier.metadata.get("__settings")
30
+ or forms.model_to_dict(getattr(_carrier, model.__name__.lower())),
31
+ )
32
+ for name, model in MODELS.items()
33
+ if hasattr(_carrier, model.__name__.lower())
34
+ ),
35
+ (
36
+ _carrier.metadata.get("__settings", {}).get("carrier_name")
37
+ or "eshipper",
38
+ _carrier.metadata.get("__settings", {}),
39
+ ),
40
+ )
41
+
42
+ _services = _settings.pop("services", {})
43
+ _carrier.credentials = {
44
+ key: value
45
+ for key, value in _settings.items()
46
+ if key
47
+ not in [
48
+ "active",
49
+ "services",
50
+ "rate_sheet",
51
+ "carrier_ptr",
52
+ "is_system",
53
+ "capabilities",
54
+ "active_users",
55
+ "created_by",
56
+ "test_mode",
57
+ "metadata",
58
+ "credentials",
59
+ "carrier_code",
60
+ "carrier_id",
61
+ ]
62
+ }
63
+ _carrier.carrier_code = _carrier_name
64
+ _carrier.metadata = {
65
+ key: value
66
+ for key, value in (_carrier.metadata or {}).items()
67
+ if key not in ["__settings"]
68
+ }
69
+
70
+ if "username" in _settings and "password" in _settings:
71
+ if _carrier_name == "usps":
72
+ _carrier.carrier_code = "usps_wt"
73
+ if _carrier_name == "usps_international":
74
+ _carrier.carrier_code = "usps_wt_international"
75
+ if _carrier_name == "eshipper":
76
+ _carrier.credentials = {
77
+ **_carrier.credentials,
78
+ "principal": lib.identity(
79
+ _settings.get("principal")
80
+ if any(_settings.get("principal") or "")
81
+ else _settings.get("username")
82
+ ),
83
+ "credential": lib.identity(
84
+ _settings.get("credential")
85
+ if any(_settings.get("credential") or "")
86
+ else _settings.get("password")
87
+ ),
88
+ }
89
+
90
+ if any(_services):
91
+ settings = getattr(_carrier, MODELS[_carrier_name].__name__.lower())
92
+ _carrier.rate_sheet = karrio.server.core.models._identity(
93
+ getattr(settings, "rate_sheet", None)
94
+ or RateSheet.objects.create(
95
+ name=f"{_carrier_name} - sheet",
96
+ slug=f"{_carrier_name} - rate-sheet",
97
+ carrier_name=_carrier_name,
98
+ is_system=_carrier.is_system,
99
+ created_by=_carrier.created_by
100
+ or User.objects.filter(is_superuser=True).first(),
101
+ )
102
+ )
103
+ _carrier.rate_sheet.services.set(_services)
104
+
105
+ _carrier.save(using=db_alias)
106
+
107
+
108
+ def reverse_func(apps, schema_editor):
109
+ pass
110
+
111
+
112
+ class Migration(migrations.Migration):
113
+
114
+ dependencies = [
115
+ ("providers", "0077_uspswtinternationalsettings_uspswtsettings_and_more"),
116
+ ]
117
+
118
+ operations = [
119
+ migrations.RunPython(forwards_func, reverse_func),
120
+ ]
@@ -0,0 +1,31 @@
1
+ # Generated by Django 4.2.15 on 2024-08-24 03:01
2
+
3
+ from django.conf import settings
4
+ from django.db import migrations, models
5
+ import django.db.models.deletion
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12
+ ("providers", "0078_auto_20240813_1552"),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.AlterModelOptions(
17
+ name="carrier",
18
+ options={"ordering": ["test_mode", "-created_at"]},
19
+ ),
20
+ migrations.AlterField(
21
+ model_name="ratesheet",
22
+ name="created_by",
23
+ field=models.ForeignKey(
24
+ blank=True,
25
+ editable=False,
26
+ null=True,
27
+ on_delete=django.db.models.deletion.CASCADE,
28
+ to=settings.AUTH_USER_MODEL,
29
+ ),
30
+ ),
31
+ ]