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.
- karrio/server/core/authentication.py +59 -25
- karrio/server/core/config.py +31 -0
- karrio/server/core/datatypes.py +30 -4
- karrio/server/core/dataunits.py +53 -22
- karrio/server/core/exceptions.py +287 -17
- karrio/server/core/filters.py +14 -0
- karrio/server/core/gateway.py +285 -10
- karrio/server/core/logging.py +403 -0
- karrio/server/core/management/commands/runserver.py +5 -0
- karrio/server/core/middleware.py +104 -2
- karrio/server/core/migrations/0006_add_api_log_requested_at_index.py +22 -0
- karrio/server/core/models/base.py +34 -1
- karrio/server/core/oauth_validators.py +2 -3
- karrio/server/core/permissions.py +1 -2
- karrio/server/core/serializers.py +183 -10
- karrio/server/core/signals.py +22 -28
- karrio/server/core/telemetry.py +573 -0
- karrio/server/core/tests/__init__.py +27 -0
- karrio/server/core/{tests.py → tests/base.py} +6 -7
- karrio/server/core/tests/test_exception_level.py +159 -0
- karrio/server/core/tests/test_resource_token.py +593 -0
- karrio/server/core/utils.py +688 -38
- karrio/server/core/validators.py +144 -222
- karrio/server/core/views/oauth.py +13 -12
- karrio/server/core/views/references.py +2 -2
- karrio/server/iam/apps.py +1 -4
- karrio/server/iam/migrations/0002_setup_carrier_permission_groups.py +103 -0
- karrio/server/iam/migrations/0003_remove_permission_groups.py +91 -0
- karrio/server/iam/permissions.py +7 -134
- karrio/server/iam/serializers.py +17 -2
- karrio/server/iam/signals.py +2 -4
- karrio/server/providers/admin.py +1 -1
- karrio/server/providers/management/commands/migrate_rate_sheets.py +101 -0
- karrio/server/providers/migrations/0082_add_zone_identifiers.py +50 -0
- karrio/server/providers/migrations/0083_add_optimized_rate_sheet_structure.py +33 -0
- karrio/server/providers/migrations/0084_alter_servicelevel_currency.py +168 -0
- karrio/server/providers/migrations/0085_populate_dhl_parcel_de_oauth_credentials.py +82 -0
- karrio/server/providers/migrations/0086_rename_dhl_parcel_de_customer_number_to_billing_number.py +71 -0
- karrio/server/providers/migrations/0087_alter_carrier_capabilities.py +38 -0
- karrio/server/providers/migrations/0088_servicelevel_surcharges.py +24 -0
- karrio/server/providers/migrations/0089_servicelevel_cost_max_volume.py +31 -0
- karrio/server/providers/migrations/0090_ratesheet_surcharges_servicelevel_zone_surcharge_ids.py +47 -0
- karrio/server/providers/migrations/0091_migrate_legacy_zones_surcharges.py +154 -0
- karrio/server/providers/models/__init__.py +1 -2
- karrio/server/providers/models/carrier.py +103 -18
- karrio/server/providers/models/service.py +188 -1
- karrio/server/providers/models/sheet.py +371 -0
- karrio/server/providers/serializers/base.py +263 -2
- karrio/server/providers/signals.py +2 -4
- karrio/server/providers/templates/providers/oauth_callback.html +105 -0
- karrio/server/providers/tests/__init__.py +5 -0
- karrio/server/providers/tests/test_connections.py +895 -0
- karrio/server/providers/views/carriers.py +1 -3
- karrio/server/providers/views/connections.py +322 -2
- karrio/server/samples.py +1 -1
- karrio/server/serializers/abstract.py +116 -21
- karrio/server/tracing/migrations/0007_tracingrecord_tracing_created_at_idx.py +19 -0
- karrio/server/tracing/models.py +2 -0
- karrio/server/tracing/utils.py +5 -8
- karrio/server/user/migrations/0007_user_metadata.py +25 -0
- karrio/server/user/models.py +38 -23
- karrio/server/user/serializers.py +1 -0
- karrio/server/user/templates/registration/registration_confirm_email.html +1 -1
- {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/METADATA +2 -2
- {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/RECORD +67 -86
- karrio/server/providers/extension/__init__.py +0 -1
- karrio/server/providers/extension/models/__init__.py +0 -1
- karrio/server/providers/extension/models/allied_express.py +0 -22
- karrio/server/providers/extension/models/allied_express_local.py +0 -22
- karrio/server/providers/extension/models/amazon_shipping.py +0 -27
- karrio/server/providers/extension/models/aramex.py +0 -25
- karrio/server/providers/extension/models/asendia_us.py +0 -21
- karrio/server/providers/extension/models/australiapost.py +0 -20
- karrio/server/providers/extension/models/boxknight.py +0 -19
- karrio/server/providers/extension/models/bpost.py +0 -21
- karrio/server/providers/extension/models/canadapost.py +0 -21
- karrio/server/providers/extension/models/canpar.py +0 -19
- karrio/server/providers/extension/models/chronopost.py +0 -22
- karrio/server/providers/extension/models/colissimo.py +0 -22
- karrio/server/providers/extension/models/dhl_express.py +0 -23
- karrio/server/providers/extension/models/dhl_parcel_de.py +0 -25
- karrio/server/providers/extension/models/dhl_poland.py +0 -22
- karrio/server/providers/extension/models/dhl_universal.py +0 -19
- karrio/server/providers/extension/models/dicom.py +0 -20
- karrio/server/providers/extension/models/dpd.py +0 -37
- karrio/server/providers/extension/models/dpdhl.py +0 -26
- karrio/server/providers/extension/models/easypost.py +0 -20
- karrio/server/providers/extension/models/eshipper.py +0 -21
- karrio/server/providers/extension/models/fedex.py +0 -25
- karrio/server/providers/extension/models/fedex_ws.py +0 -24
- karrio/server/providers/extension/models/freightcom.py +0 -21
- karrio/server/providers/extension/models/generic.py +0 -35
- karrio/server/providers/extension/models/geodis.py +0 -22
- karrio/server/providers/extension/models/hay_post.py +0 -22
- karrio/server/providers/extension/models/laposte.py +0 -19
- karrio/server/providers/extension/models/locate2u.py +0 -22
- karrio/server/providers/extension/models/nationex.py +0 -22
- karrio/server/providers/extension/models/purolator.py +0 -21
- karrio/server/providers/extension/models/roadie.py +0 -18
- karrio/server/providers/extension/models/royalmail.py +0 -19
- karrio/server/providers/extension/models/sendle.py +0 -22
- karrio/server/providers/extension/models/tge.py +0 -63
- karrio/server/providers/extension/models/tnt.py +0 -23
- karrio/server/providers/extension/models/ups.py +0 -23
- karrio/server/providers/extension/models/usps.py +0 -23
- karrio/server/providers/extension/models/usps_international.py +0 -23
- karrio/server/providers/extension/models/usps_wt.py +0 -24
- karrio/server/providers/extension/models/usps_wt_international.py +0 -24
- karrio/server/providers/extension/models/zoom2u.py +0 -23
- karrio/server/providers/tests.py +0 -3
- {karrio_server_core-2025.5rc12.dist-info → karrio_server_core-2026.1.1.dist-info}/WHEEL +0 -0
- {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
|