karrio-server-core 2025.5rc12__py3-none-any.whl → 2026.1.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.
Files changed (112) hide show
  1. karrio/server/core/authentication.py +59 -25
  2. karrio/server/core/config.py +31 -0
  3. karrio/server/core/datatypes.py +30 -4
  4. karrio/server/core/dataunits.py +53 -22
  5. karrio/server/core/exceptions.py +287 -17
  6. karrio/server/core/filters.py +14 -0
  7. karrio/server/core/gateway.py +285 -10
  8. karrio/server/core/logging.py +403 -0
  9. karrio/server/core/management/commands/runserver.py +5 -0
  10. karrio/server/core/middleware.py +104 -2
  11. karrio/server/core/migrations/0006_add_api_log_requested_at_index.py +22 -0
  12. karrio/server/core/models/base.py +34 -1
  13. karrio/server/core/oauth_validators.py +2 -3
  14. karrio/server/core/permissions.py +1 -2
  15. karrio/server/core/serializers.py +183 -10
  16. karrio/server/core/signals.py +22 -28
  17. karrio/server/core/telemetry.py +573 -0
  18. karrio/server/core/tests/__init__.py +27 -0
  19. karrio/server/core/{tests.py → tests/base.py} +6 -7
  20. karrio/server/core/tests/test_exception_level.py +159 -0
  21. karrio/server/core/tests/test_resource_token.py +593 -0
  22. karrio/server/core/utils.py +688 -38
  23. karrio/server/core/validators.py +144 -222
  24. karrio/server/core/views/oauth.py +13 -12
  25. karrio/server/core/views/references.py +2 -2
  26. karrio/server/iam/apps.py +1 -4
  27. karrio/server/iam/migrations/0002_setup_carrier_permission_groups.py +103 -0
  28. karrio/server/iam/migrations/0003_remove_permission_groups.py +91 -0
  29. karrio/server/iam/permissions.py +7 -134
  30. karrio/server/iam/serializers.py +17 -2
  31. karrio/server/iam/signals.py +2 -4
  32. karrio/server/providers/admin.py +1 -1
  33. karrio/server/providers/management/commands/migrate_rate_sheets.py +101 -0
  34. karrio/server/providers/migrations/0082_add_zone_identifiers.py +50 -0
  35. karrio/server/providers/migrations/0083_add_optimized_rate_sheet_structure.py +33 -0
  36. karrio/server/providers/migrations/0084_alter_servicelevel_currency.py +168 -0
  37. karrio/server/providers/migrations/0085_populate_dhl_parcel_de_oauth_credentials.py +82 -0
  38. karrio/server/providers/migrations/0086_rename_dhl_parcel_de_customer_number_to_billing_number.py +71 -0
  39. karrio/server/providers/migrations/0087_alter_carrier_capabilities.py +38 -0
  40. karrio/server/providers/migrations/0088_servicelevel_surcharges.py +24 -0
  41. karrio/server/providers/migrations/0089_servicelevel_cost_max_volume.py +31 -0
  42. karrio/server/providers/migrations/0090_ratesheet_surcharges_servicelevel_zone_surcharge_ids.py +47 -0
  43. karrio/server/providers/migrations/0091_migrate_legacy_zones_surcharges.py +154 -0
  44. karrio/server/providers/models/__init__.py +1 -2
  45. karrio/server/providers/models/carrier.py +103 -18
  46. karrio/server/providers/models/service.py +188 -1
  47. karrio/server/providers/models/sheet.py +371 -0
  48. karrio/server/providers/serializers/base.py +263 -2
  49. karrio/server/providers/signals.py +2 -4
  50. karrio/server/providers/templates/providers/oauth_callback.html +105 -0
  51. karrio/server/providers/tests/__init__.py +5 -0
  52. karrio/server/providers/tests/test_connections.py +895 -0
  53. karrio/server/providers/views/carriers.py +1 -3
  54. karrio/server/providers/views/connections.py +322 -2
  55. karrio/server/samples.py +1 -1
  56. karrio/server/serializers/abstract.py +116 -21
  57. karrio/server/tracing/migrations/0007_tracingrecord_tracing_created_at_idx.py +19 -0
  58. karrio/server/tracing/models.py +2 -0
  59. karrio/server/tracing/utils.py +5 -8
  60. karrio/server/user/migrations/0007_user_metadata.py +25 -0
  61. karrio/server/user/models.py +38 -23
  62. karrio/server/user/serializers.py +1 -0
  63. karrio/server/user/templates/registration/registration_confirm_email.html +1 -1
  64. {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/METADATA +2 -2
  65. {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/RECORD +67 -86
  66. karrio/server/providers/extension/__init__.py +0 -1
  67. karrio/server/providers/extension/models/__init__.py +0 -1
  68. karrio/server/providers/extension/models/allied_express.py +0 -22
  69. karrio/server/providers/extension/models/allied_express_local.py +0 -22
  70. karrio/server/providers/extension/models/amazon_shipping.py +0 -27
  71. karrio/server/providers/extension/models/aramex.py +0 -25
  72. karrio/server/providers/extension/models/asendia_us.py +0 -21
  73. karrio/server/providers/extension/models/australiapost.py +0 -20
  74. karrio/server/providers/extension/models/boxknight.py +0 -19
  75. karrio/server/providers/extension/models/bpost.py +0 -21
  76. karrio/server/providers/extension/models/canadapost.py +0 -21
  77. karrio/server/providers/extension/models/canpar.py +0 -19
  78. karrio/server/providers/extension/models/chronopost.py +0 -22
  79. karrio/server/providers/extension/models/colissimo.py +0 -22
  80. karrio/server/providers/extension/models/dhl_express.py +0 -23
  81. karrio/server/providers/extension/models/dhl_parcel_de.py +0 -25
  82. karrio/server/providers/extension/models/dhl_poland.py +0 -22
  83. karrio/server/providers/extension/models/dhl_universal.py +0 -19
  84. karrio/server/providers/extension/models/dicom.py +0 -20
  85. karrio/server/providers/extension/models/dpd.py +0 -37
  86. karrio/server/providers/extension/models/dpdhl.py +0 -26
  87. karrio/server/providers/extension/models/easypost.py +0 -20
  88. karrio/server/providers/extension/models/eshipper.py +0 -21
  89. karrio/server/providers/extension/models/fedex.py +0 -25
  90. karrio/server/providers/extension/models/fedex_ws.py +0 -24
  91. karrio/server/providers/extension/models/freightcom.py +0 -21
  92. karrio/server/providers/extension/models/generic.py +0 -35
  93. karrio/server/providers/extension/models/geodis.py +0 -22
  94. karrio/server/providers/extension/models/hay_post.py +0 -22
  95. karrio/server/providers/extension/models/laposte.py +0 -19
  96. karrio/server/providers/extension/models/locate2u.py +0 -22
  97. karrio/server/providers/extension/models/nationex.py +0 -22
  98. karrio/server/providers/extension/models/purolator.py +0 -21
  99. karrio/server/providers/extension/models/roadie.py +0 -18
  100. karrio/server/providers/extension/models/royalmail.py +0 -19
  101. karrio/server/providers/extension/models/sendle.py +0 -22
  102. karrio/server/providers/extension/models/tge.py +0 -63
  103. karrio/server/providers/extension/models/tnt.py +0 -23
  104. karrio/server/providers/extension/models/ups.py +0 -23
  105. karrio/server/providers/extension/models/usps.py +0 -23
  106. karrio/server/providers/extension/models/usps_international.py +0 -23
  107. karrio/server/providers/extension/models/usps_wt.py +0 -24
  108. karrio/server/providers/extension/models/usps_wt_international.py +0 -24
  109. karrio/server/providers/extension/models/zoom2u.py +0 -23
  110. karrio/server/providers/tests.py +0 -3
  111. {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/WHEEL +0 -0
  112. {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/top_level.txt +0 -0
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- # @providers.has_rate_sheet("colissimo")
6
- class ColissimoSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "colissimo-settings"
9
- verbose_name = "Colissimo Settings"
10
- verbose_name_plural = "Colissimo Settings"
11
-
12
- password = models.CharField(max_length=100)
13
- contract_number = models.CharField(max_length=100)
14
- laposte_api_key = models.CharField(max_length=100, blank=True)
15
- services = models.ManyToManyField("ServiceLevel", blank=True)
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "colissimo"
20
-
21
-
22
- SETTINGS = ColissimoSettings
@@ -1,23 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier, COUNTRIES
3
-
4
-
5
- class DHLExpressSettings(Carrier):
6
- class Meta:
7
- db_table = "dhl_express-settings"
8
- verbose_name = "DHL Express Settings"
9
- verbose_name_plural = "DHL Express Settings"
10
-
11
- site_id = models.CharField(max_length=200)
12
- password = models.CharField(max_length=200)
13
- account_number = models.CharField(max_length=200, blank=True, default="")
14
- account_country_code = models.CharField(
15
- max_length=3, blank=True, null=True, choices=COUNTRIES
16
- )
17
-
18
- @property
19
- def carrier_name(self) -> str:
20
- return "dhl_express"
21
-
22
-
23
- SETTINGS = DHLExpressSettings
@@ -1,25 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- # @providers.has_rate_sheet("dhl_parcel_de")
6
- class DHLParcelDESettings(providers.Carrier):
7
- class Meta:
8
- db_table = "dhl-parcel-de-settings"
9
- verbose_name = "DHL Parcel DE Settings"
10
- verbose_name_plural = "DHL Parcel DE Settings"
11
-
12
- username = models.CharField(max_length=100)
13
- password = models.CharField(max_length=100)
14
- dhl_api_key = models.CharField(max_length=200)
15
- customer_number = models.CharField(max_length=50)
16
- tracking_consumer_key = models.CharField(max_length=200, blank=True, null=True)
17
- tracking_consumer_secret = models.CharField(max_length=200, blank=True, null=True)
18
- services = models.ManyToManyField("ServiceLevel", blank=True)
19
-
20
- @property
21
- def carrier_name(self) -> str:
22
- return "dhl_parcel_de"
23
-
24
-
25
- SETTINGS = DHLParcelDESettings
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- # @providers.has_rate_sheet("dhl_poland")
6
- class DHLPolandSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "dhl-poland-settings"
9
- verbose_name = "DHL Poland Settings"
10
- verbose_name_plural = "DHL Poland Settings"
11
-
12
- username = models.CharField(max_length=200)
13
- password = models.CharField(max_length=200)
14
- account_number = models.CharField(max_length=200, blank=True)
15
- services = models.ManyToManyField("ServiceLevel", blank=True)
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "dhl_poland"
20
-
21
-
22
- SETTINGS = DHLPolandSettings
@@ -1,19 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier
3
-
4
-
5
- class DHLUniversalSettings(Carrier):
6
- class Meta:
7
- db_table = "dhl_universal-settings"
8
- verbose_name = "DHL Universal Tracking Settings"
9
- verbose_name_plural = "DHL Universal Tracking Settings"
10
-
11
- consumer_key = models.CharField(max_length=200)
12
- consumer_secret = models.CharField(max_length=200)
13
-
14
- @property
15
- def carrier_name(self) -> str:
16
- return "dhl_universal"
17
-
18
-
19
- SETTINGS = DHLUniversalSettings
@@ -1,20 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier
3
-
4
-
5
- class DicomSettings(Carrier):
6
- class Meta:
7
- db_table = "dicom-settings"
8
- verbose_name = "Dicom Settings"
9
- verbose_name_plural = "Dicom Settings"
10
-
11
- username = models.CharField(max_length=50)
12
- password = models.CharField(max_length=50)
13
- billing_account = models.CharField(max_length=50, null=True, blank=True)
14
-
15
- @property
16
- def carrier_name(self) -> str:
17
- return "dicom"
18
-
19
-
20
- SETTINGS = DicomSettings
@@ -1,37 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- # @providers.has_rate_sheet("dpd")
6
- class DPDSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "dpd-settings"
9
- verbose_name = "DPD Settings"
10
- verbose_name_plural = "DPD Settings"
11
-
12
- delis_id = models.CharField(max_length=75)
13
- password = models.CharField(max_length=75)
14
- depot = models.CharField(max_length=25, null=True, blank=True)
15
- services = models.ManyToManyField("ServiceLevel", blank=True)
16
- account_country_code = models.CharField(
17
- max_length=3, blank=True, null=True, choices=providers.COUNTRIES
18
- )
19
- services = models.ManyToManyField("ServiceLevel", blank=True)
20
-
21
- @property
22
- def carrier_name(self) -> str:
23
- return "dpd"
24
-
25
- @property
26
- def default_services(self):
27
- import karrio.lib as lib
28
- from karrio.providers.dpd import units
29
-
30
- return lib.to_dict(
31
- units.DEFAULT_NL_SERVICES
32
- if self.account_country_code == "NL"
33
- else units.DEFAULT_SERVICES
34
- )
35
-
36
-
37
- SETTINGS = DPDSettings
@@ -1,26 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- # @providers.has_rate_sheet("dpdhl")
6
- class DPDHLSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "dpdhl-settings"
9
- verbose_name = "Deutsche Post DHL Settings"
10
- verbose_name_plural = "Deutsche Post DHL Settings"
11
-
12
- username = models.CharField(max_length=100)
13
- password = models.CharField(max_length=100)
14
- zt_id = models.CharField(max_length=100, blank=True, null=True, default="")
15
- zt_password = models.CharField(max_length=100, blank=True, null=True, default="")
16
- app_id = models.CharField(max_length=100, blank=True, null=True, default="")
17
- app_token = models.CharField(max_length=100, blank=True, null=True, default="")
18
- account_number = models.CharField(max_length=100, blank=True, null=True, default="")
19
- services = models.ManyToManyField("ServiceLevel", blank=True)
20
-
21
- @property
22
- def carrier_name(self) -> str:
23
- return "dpdhl"
24
-
25
-
26
- SETTINGS = DPDHLSettings
@@ -1,20 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier
3
-
4
-
5
- class EasyPostSettings(Carrier):
6
- CARRIER_NAME = "easypost"
7
-
8
- class Meta:
9
- db_table = "easypost-settings"
10
- verbose_name = "EasyPost Settings"
11
- verbose_name_plural = "EasyPost Settings"
12
-
13
- api_key = models.CharField(max_length=200)
14
-
15
- @property
16
- def carrier_name(self) -> str:
17
- return self.CARRIER_NAME
18
-
19
-
20
- SETTINGS = EasyPostSettings
@@ -1,21 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- class EShipperSettings(providers.Carrier):
6
- CARRIER_NAME = "eshipper"
7
-
8
- class Meta:
9
- db_table = "eshipper-settings"
10
- verbose_name = "eShipper Settings"
11
- verbose_name_plural = "eShipper Settings"
12
-
13
- principal = models.CharField(max_length=100)
14
- credential = models.CharField(max_length=100)
15
-
16
- @property
17
- def carrier_name(self) -> str:
18
- return self.CARRIER_NAME
19
-
20
-
21
- SETTINGS = EShipperSettings
@@ -1,25 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- class FedexSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "fedex-settings"
8
- verbose_name = "FedEx Settings"
9
- verbose_name_plural = "FedEx Settings"
10
-
11
- api_key = models.CharField(max_length=100, blank=True, null=True)
12
- secret_key = models.CharField(max_length=100, blank=True, null=True)
13
- track_api_key = models.CharField(max_length=100, blank=True, null=True)
14
- track_secret_key = models.CharField(max_length=100, blank=True, null=True)
15
- account_number = models.CharField(max_length=50, blank=True, null=True)
16
- account_country_code = models.CharField(
17
- max_length=3, blank=True, null=True, choices=providers.COUNTRIES
18
- )
19
-
20
- @property
21
- def carrier_name(self) -> str:
22
- return "fedex"
23
-
24
-
25
- SETTINGS = FedexSettings
@@ -1,24 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier, COUNTRIES
3
-
4
-
5
- class FedexWSSettings(Carrier):
6
- class Meta:
7
- db_table = "fedex-ws-settings"
8
- verbose_name = "FedEx Web Service Settings"
9
- verbose_name_plural = "FedEx Web Service Settings"
10
-
11
- password = models.CharField(max_length=200)
12
- meter_number = models.CharField(max_length=200)
13
- account_number = models.CharField(max_length=200)
14
- user_key = models.CharField(max_length=200, blank=True)
15
- account_country_code = models.CharField(
16
- max_length=3, blank=True, null=True, choices=COUNTRIES
17
- )
18
-
19
- @property
20
- def carrier_name(self) -> str:
21
- return "fedex"
22
-
23
-
24
- SETTINGS = FedexWSSettings
@@ -1,21 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier
3
-
4
-
5
- class FreightcomSettings(Carrier):
6
- CARRIER_NAME = "freightcom"
7
-
8
- class Meta:
9
- db_table = "freightcom-settings"
10
- verbose_name = "Freightcom Settings"
11
- verbose_name_plural = "Freightcom Settings"
12
-
13
- username = models.CharField(max_length=200)
14
- password = models.CharField(max_length=200)
15
-
16
- @property
17
- def carrier_name(self) -> str:
18
- return self.CARRIER_NAME
19
-
20
-
21
- SETTINGS = FreightcomSettings
@@ -1,35 +0,0 @@
1
- import django.db.models as models
2
- import django.core.validators as validators
3
- import karrio.server.providers.models as providers
4
-
5
-
6
- # @providers.has_rate_sheet("generic")
7
- class GenericSettings(providers.Carrier):
8
- CARRIER_NAME = "generic"
9
-
10
- class Meta:
11
- db_table = "generic-settings"
12
- verbose_name = "Custom Carrier Settings"
13
- verbose_name_plural = "Custom Carrier Settings"
14
-
15
- display_name = models.CharField(max_length=30, help_text="Carrier display name")
16
- custom_carrier_name = models.CharField(
17
- max_length=30,
18
- validators=[validators.RegexValidator(r"^[a-z0-9_]+$")],
19
- help_text="Unique carrier slug, lowercase alphanumeric characters and underscores only",
20
- )
21
- label_template = models.OneToOneField(
22
- "LabelTemplate", null=True, blank=True, on_delete=models.CASCADE
23
- )
24
- account_number = models.CharField(max_length=20, null=True, blank=True, default="")
25
- account_country_code = models.CharField(
26
- max_length=3, null=True, blank=True, choices=providers.COUNTRIES
27
- )
28
- services = models.ManyToManyField("ServiceLevel", blank=True)
29
-
30
- @property
31
- def carrier_name(self) -> str:
32
- return self.custom_carrier_name # "generic"
33
-
34
-
35
- SETTINGS = GenericSettings
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
-
3
- import karrio.server.providers.models.carrier as providers
4
-
5
-
6
- class GEODISSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "geodis-settings"
9
- verbose_name = "GEODIS Settings"
10
- verbose_name_plural = "GEODIS Settings"
11
-
12
- api_key = models.CharField(max_length=100)
13
- identifier = models.CharField(max_length=50)
14
- code_client = models.CharField(max_length=50)
15
- language = models.CharField(max_length=10, null=True, default="fr")
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "geodis"
20
-
21
-
22
- SETTINGS = GEODISSettings
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
-
3
- import karrio.server.providers.models.carrier as providers
4
-
5
-
6
- class HayPostSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "hay-post-settings"
9
- verbose_name = "Hay Post Settings"
10
- verbose_name_plural = "Hay Post Settings"
11
-
12
- username = models.CharField(max_length=100)
13
- password = models.CharField(max_length=100)
14
- customer_id = models.CharField(max_length=100)
15
- customer_type = models.CharField(max_length=100)
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "hay_post"
20
-
21
-
22
- SETTINGS = HayPostSettings
@@ -1,19 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models.carrier as providers
3
-
4
-
5
- class LaPosteSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "laposte-settings"
8
- verbose_name = "LaPoste Settings"
9
- verbose_name_plural = "LaPoste Settings"
10
-
11
- api_key = models.CharField(max_length=100)
12
- lang = models.CharField(max_length=10, null=True, default="fr_FR")
13
-
14
- @property
15
- def carrier_name(self) -> str:
16
- return "laposte"
17
-
18
-
19
- SETTINGS = LaPosteSettings
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models.carrier as providers
3
-
4
-
5
- class Locate2uSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "locate2u-settings"
8
- verbose_name = "Locate2u Settings"
9
- verbose_name_plural = "Locate2u Settings"
10
-
11
- client_id = models.CharField(max_length=200)
12
- client_secret = models.CharField(max_length=200)
13
- account_country_code = models.CharField(
14
- max_length=3, blank=True, null=True, choices=providers.COUNTRIES
15
- )
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "locate2u"
20
-
21
-
22
- SETTINGS = Locate2uSettings
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
-
3
- import karrio.server.providers.models.carrier as providers
4
-
5
-
6
- class NationexSettings(providers.Carrier):
7
- class Meta:
8
- db_table = "nationex-settings"
9
- verbose_name = "Nationex Settings"
10
- verbose_name_plural = "Nationex Settings"
11
-
12
- api_key = models.CharField(max_length=100)
13
- customer_id = models.CharField(max_length=50)
14
- billing_account = models.CharField(max_length=50, null=True, blank=True)
15
- language = models.CharField(max_length=10, null=True, default="en")
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "nationex"
20
-
21
-
22
- SETTINGS = NationexSettings
@@ -1,21 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier
3
-
4
-
5
- class PurolatorSettings(Carrier):
6
- class Meta:
7
- db_table = "purolator-settings"
8
- verbose_name = "Purolator Settings"
9
- verbose_name_plural = "Purolator Settings"
10
-
11
- username = models.CharField(max_length=200)
12
- password = models.CharField(max_length=200)
13
- account_number = models.CharField(max_length=200)
14
- user_token = models.CharField(max_length=200, null=True)
15
-
16
- @property
17
- def carrier_name(self) -> str:
18
- return "purolator"
19
-
20
-
21
- SETTINGS = PurolatorSettings
@@ -1,18 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models.carrier as providers
3
-
4
-
5
- class RoadieSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "roadie-settings"
8
- verbose_name = "Roadie Settings"
9
- verbose_name_plural = "Roadie Settings"
10
-
11
- api_key = models.CharField(max_length=100)
12
-
13
- @property
14
- def carrier_name(self) -> str:
15
- return "roadie"
16
-
17
-
18
- SETTINGS = RoadieSettings
@@ -1,19 +0,0 @@
1
- from django.db import models
2
- from karrio.server.providers.models.carrier import Carrier
3
-
4
-
5
- class RoyalMailSettings(Carrier):
6
- class Meta:
7
- db_table = "royalmail-settings"
8
- verbose_name = "Royal Mail Settings"
9
- verbose_name_plural = "Royal Mail Settings"
10
-
11
- client_id = models.CharField(max_length=200)
12
- client_secret = models.CharField(max_length=200)
13
-
14
- @property
15
- def carrier_name(self) -> str:
16
- return "royalmail"
17
-
18
-
19
- SETTINGS = RoyalMailSettings
@@ -1,22 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- class SendleSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "sendle-settings"
8
- verbose_name = "Sendle Settings"
9
- verbose_name_plural = "Sendle Settings"
10
-
11
- sendle_id = models.CharField(max_length=200)
12
- api_key = models.CharField(max_length=200)
13
- account_country_code = models.CharField(
14
- max_length=3, blank=True, null=True, choices=providers.COUNTRIES
15
- )
16
-
17
- @property
18
- def carrier_name(self) -> str:
19
- return "sendle"
20
-
21
-
22
- SETTINGS = SendleSettings
@@ -1,63 +0,0 @@
1
- import typing
2
- import django.db.models as models
3
- import django.core.cache as caching
4
- import karrio.server.providers.models as providers
5
-
6
-
7
- class TGESettings(providers.Carrier):
8
- CARRIER_NAME = "tge"
9
-
10
- class Meta:
11
- db_table = "tge-settings"
12
- verbose_name = "TGE Settings"
13
- verbose_name_plural = "TGE Settings"
14
-
15
- username = models.CharField(max_length=100)
16
- password = models.CharField(max_length=100)
17
- api_key = models.CharField(max_length=100)
18
- toll_username = models.CharField(max_length=100)
19
- toll_password = models.CharField(max_length=100)
20
- my_toll_token = models.TextField(max_length=None)
21
- my_toll_identity = models.CharField(max_length=100)
22
- account_code = models.CharField(max_length=100)
23
-
24
- @property
25
- def carrier_name(self) -> str:
26
- return self.CARRIER_NAME
27
-
28
- @property
29
- def sscc_count(self) -> typing.Optional[int]:
30
- cache_key = f"{self.carrier_name}|{self.api_key}"
31
- state = caching.cache.get(cache_key) or {}
32
-
33
- if state.get("sscc_count") is not None:
34
- return state["sscc_count"]
35
-
36
- meta = getattr(self.carrier_shipments.first(), "meta", {})
37
-
38
- if meta.get("sscc_count") is not None:
39
- state["sscc_count"] = meta["sscc_count"]
40
- caching.cache.set(cache_key, state)
41
- return meta["sscc_count"]
42
-
43
- return None
44
-
45
- @property
46
- def shipment_count(self) -> typing.Optional[int]:
47
- cache_key = f"{self.carrier_name}|{self.api_key}"
48
- state = caching.cache.get(cache_key) or {}
49
-
50
- if state.get("shipment_count") is not None:
51
- return state["shipment_count"]
52
-
53
- meta = getattr(self.carrier_shipments.first(), "meta", {})
54
-
55
- if meta.get("shipment_count") is not None:
56
- state["shipment_count"] = meta["shipment_count"]
57
- caching.cache.set(cache_key, state)
58
- return meta["shipment_count"]
59
-
60
- return None
61
-
62
-
63
- SETTINGS = TGESettings
@@ -1,23 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models.carrier as providers
3
-
4
-
5
- class TNTSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "tnt-settings"
8
- verbose_name = "TNT Settings"
9
- verbose_name_plural = "TNT Settings"
10
-
11
- username = models.CharField(max_length=100)
12
- password = models.CharField(max_length=100)
13
- account_number = models.CharField(max_length=100)
14
- account_country_code = models.CharField(
15
- max_length=3, blank=True, null=True, choices=providers.COUNTRIES
16
- )
17
-
18
- @property
19
- def carrier_name(self) -> str:
20
- return "tnt"
21
-
22
-
23
- SETTINGS = TNTSettings
@@ -1,23 +0,0 @@
1
- import django.db.models as models
2
- import karrio.server.providers.models as providers
3
-
4
-
5
- class UPSSettings(providers.Carrier):
6
- class Meta:
7
- db_table = "ups-settings"
8
- verbose_name = "UPS Settings"
9
- verbose_name_plural = "UPS Settings"
10
-
11
- client_id = models.CharField(max_length=200)
12
- client_secret = models.CharField(max_length=200)
13
- account_number = models.CharField(blank=True, null=True, max_length=100)
14
- account_country_code = models.CharField(
15
- max_length=3, blank=True, null=True, choices=providers.COUNTRIES
16
- )
17
-
18
- @property
19
- def carrier_name(self) -> str:
20
- return "ups"
21
-
22
-
23
- SETTINGS = UPSSettings