karrio-server-core 2025.5rc25__py3-none-any.whl → 2025.5rc26__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.

@@ -104,30 +104,31 @@ def contextual_reference(request: Request = None, reduced: bool = True):
104
104
  }
105
105
 
106
106
  def _get_generic_carriers():
107
+ # Get all carriers, then filter by extension instead of hardcoded slug
107
108
  system_custom_carriers = [
108
- c for c in gateway.Carriers.list(system_only=True, carrier_name="generic")
109
+ c for c in gateway.Carriers.list(system_only=True)
110
+ if c.ext == "generic"
109
111
  ]
110
112
  custom_carriers = [
111
113
  c
112
114
  for c in (
113
- gateway.Carriers.list(context=request, carrier_name="generic").exclude(
114
- is_system=True
115
- )
115
+ gateway.Carriers.list(context=request).exclude(is_system=True)
116
116
  if is_authenticated
117
117
  else []
118
118
  )
119
+ if c.ext == "generic"
119
120
  ]
120
121
 
121
122
  extra_carriers = {
122
- f"{c.credentials.get('custom_carrier_name') or 'generic'}": c.display_name
123
+ c.carrier_code: c.display_name
123
124
  for c in custom_carriers
124
125
  }
125
126
  system_carriers = {
126
- f"{c.credentials.get('custom_carrier_name') or 'generic'}": c.display_name
127
+ c.carrier_code: c.display_name
127
128
  for c in system_custom_carriers
128
129
  }
129
130
  extra_services = {
130
- f"{c.credentials.get('custom_carrier_name') or 'generic'}": {
131
+ c.carrier_code: {
131
132
  s.service_code: s.service_code
132
133
  for s in c.services
133
134
  or [
@@ -190,6 +190,7 @@ class Shipments:
190
190
  rate_provider = (
191
191
  (parent.meta or {}).get("rate_provider") or carrier.carrier_name
192
192
  ).lower()
193
+ custom_carrier_name = carrier.credentials.get("custom_carrier_name")
193
194
 
194
195
  return {
195
196
  **(parent.meta or {}),
@@ -197,6 +198,7 @@ class Shipments:
197
198
  "carrier": rate_provider,
198
199
  "service_name": service_name,
199
200
  "rate_provider": rate_provider, # TODO: deprecate 'rate_provider' in favor of 'carrier'
201
+ **({"custom_carrier_name": custom_carrier_name} if custom_carrier_name else {}),
200
202
  }
201
203
 
202
204
  def process_selected_rate() -> dict:
@@ -0,0 +1,25 @@
1
+ # Generated by Django 5.2.7 on 2025-10-14 01:00
2
+
3
+ import functools
4
+ import karrio.server.core.models
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ("user", "0006_workspaceconfig"),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.AddField(
16
+ model_name="user",
17
+ name="metadata",
18
+ field=models.JSONField(
19
+ default=functools.partial(
20
+ karrio.server.core.models._identity, *(), **{"value": {}}
21
+ ),
22
+ help_text="User defined metadata",
23
+ ),
24
+ ),
25
+ ]
@@ -45,6 +45,9 @@ class UserManager(auth.UserManager):
45
45
  class User(auth.AbstractUser):
46
46
  full_name = models.CharField(_("full name"), max_length=150, blank=True)
47
47
  email = models.EmailField(_("email address"), unique=True)
48
+ metadata = models.JSONField(
49
+ default=core.field_default({}), help_text="User defined metadata"
50
+ )
48
51
 
49
52
  USERNAME_FIELD = "email"
50
53
  REQUIRED_FIELDS: list = []
@@ -75,15 +78,24 @@ class User(auth.AbstractUser):
75
78
  ctx = middleware.SessionContext.get_current_request()
76
79
  _permissions = []
77
80
 
78
- if conf.settings.MULTI_ORGANIZATIONS and ctx is not None and hasattr(ctx, 'org') and ctx.org is not None:
81
+ if (
82
+ conf.settings.MULTI_ORGANIZATIONS
83
+ and ctx is not None
84
+ and hasattr(ctx, "org")
85
+ and ctx.org is not None
86
+ ):
79
87
  org_user = ctx.org.organization_users.filter(user_id=self.pk)
80
88
  if org_user.exists():
81
89
  try:
82
90
  context_permission = iam.ContextPermission.objects.get(
83
- object_pk=org_user.first().pk,
84
- content_type=ContentType.objects.get_for_model(org_user.first()),
85
- )
86
- _permissions = list(context_permission.groups.all().values_list("name", flat=True))
91
+ object_pk=org_user.first().pk,
92
+ content_type=ContentType.objects.get_for_model(
93
+ org_user.first()
94
+ ),
95
+ )
96
+ _permissions = list(
97
+ context_permission.groups.all().values_list("name", flat=True)
98
+ )
87
99
  except iam.ContextPermission.DoesNotExist:
88
100
  pass
89
101
 
@@ -94,9 +106,11 @@ class User(auth.AbstractUser):
94
106
  return list(Group.objects.all().values_list("name", flat=True))
95
107
 
96
108
  if not any(_permissions) and self.is_staff:
97
- return list(Group.objects.exclude(
98
- name__in=["manage_system", "manage_team", "manage_org_owner"]
99
- ).values_list("name", flat=True))
109
+ return list(
110
+ Group.objects.exclude(
111
+ name__in=["manage_system", "manage_team", "manage_org_owner"]
112
+ ).values_list("name", flat=True)
113
+ )
100
114
 
101
115
  return _permissions
102
116
 
@@ -5,6 +5,6 @@
5
5
 
6
6
  <p>{% trans "Please click the following link to verify your email address." %}</p>
7
7
 
8
- {{ link }}
8
+ <p><a href="{{ link }}">{{ link }}</a></p>
9
9
 
10
10
  {% endautoescape %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: karrio_server_core
3
- Version: 2025.5rc25
3
+ Version: 2025.5rc26
4
4
  Summary: Multi-carrier shipping API Core module
5
5
  Author-email: karrio <hello@karrio.io>
6
6
  License-Expression: Apache-2.0
@@ -7,11 +7,11 @@ karrio/server/core/apps.py,sha256=VKRPRoB2YY1JlEpCe2AE6k57M1qkPADfq5RYZuLjEOw,21
7
7
  karrio/server/core/authentication.py,sha256=NiXbfcz3SJjYSKBGLT9-HRYATZXfPRuyALS5bzpNT9U,10555
8
8
  karrio/server/core/context_processors.py,sha256=B80cJ_7-uviNRYyrfsCcOaUQFBf_eAgQ0hHZPtM5Olw,323
9
9
  karrio/server/core/datatypes.py,sha256=lM0kKKcEoULrEvpJajbBfiz0xAU4OgOQoiAvalKllNg,10085
10
- karrio/server/core/dataunits.py,sha256=8yXrsxhGYN-Q7pondiuitcFbnJeTTG2IJmVskzm-SGs,5673
10
+ karrio/server/core/dataunits.py,sha256=myuZ0BNJ-EZPbf3hsi7JP7nlRqGcUYh_TOQUEQOhlD4,5602
11
11
  karrio/server/core/exceptions.py,sha256=AR4FNT_1wkMkuv_ZELB9pVRL3RRWsSJ7hrNgBP7H3EU,6038
12
12
  karrio/server/core/fields.py,sha256=5i5eetbxFkIQ9uoFk8k2xPl1mXXnaVKlPV4xwlF3inY,345
13
13
  karrio/server/core/filters.py,sha256=nHj742vPWE3Xs_tpwRRVUh00OwxnF22xKfIK7rx-sw4,27434
14
- karrio/server/core/gateway.py,sha256=TH3-RIxZ2BUrteyDAXWxH_GvY4pC4A_l7t-pRbLDO-M,25747
14
+ karrio/server/core/gateway.py,sha256=lyPN-oCnviH3U2an5SdVw_jeyUfALfFN9JMkLxvNVSA,25925
15
15
  karrio/server/core/middleware.py,sha256=euRkeIvNv3G-b_U3fKDO6po-2dbYF0LiXUYg2nyeCI0,3017
16
16
  karrio/server/core/oauth_validators.py,sha256=5JxDkXB_HX4a4xJltZcFGukO7o2cUl9h2t9O8Gp87Zc,6673
17
17
  karrio/server/core/permissions.py,sha256=JY3_hTEnyDTWG-weAWPx8xMoaRZwpNL2HaSssBzjH7Y,1189
@@ -182,7 +182,7 @@ karrio/server/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
182
182
  karrio/server/user/admin.py,sha256=psRIcm1IjR6K_69cJJCDBUQT226I9gPvfFhHoAeA_3Q,2514
183
183
  karrio/server/user/apps.py,sha256=hCTQ-YXuDd7eW4ZMkVf6OcmmFCu5uVpFWCxfb1lzdCw,209
184
184
  karrio/server/user/forms.py,sha256=hgEbEs17Cwib5KsckVweapEmAQvE0fWpwxkJMDc__Y0,1049
185
- karrio/server/user/models.py,sha256=j9Oh9MOGfnX2SKkWe72nxaVW8018tzUtSr2gw2dMQmM,6380
185
+ karrio/server/user/models.py,sha256=cBQU7523rm71ibAAswaGGYbqAho-83wUU6MipP6c7Nc,6703
186
186
  karrio/server/user/serializers.py,sha256=tdTB0g4q3EIY2Uv7rrpWlkKEuHms-fTK6XXUr_Z6hBY,1557
187
187
  karrio/server/user/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
188
188
  karrio/server/user/urls.py,sha256=3p-ZivD78caBDDeV63XJjMuILdr258JXED788OJ_hLQ,243
@@ -194,11 +194,12 @@ karrio/server/user/migrations/0003_token_test_mode.py,sha256=YEqSXx6FDysbTqAuZmw
194
194
  karrio/server/user/migrations/0004_group.py,sha256=ki5yjRYDwgNk-Wmy8slb_PvPJmFAOrXf9k7o3rm4JZw,791
195
195
  karrio/server/user/migrations/0005_token_label.py,sha256=YlKQMJs5OjInq-seb5r-0hwPzIZlb3ay0nuKoLJgGDk,515
196
196
  karrio/server/user/migrations/0006_workspaceconfig.py,sha256=vhprvPvdt7AIUr44KLVd-cVQh4opEL1lIVoW5HHTiYI,2089
197
+ karrio/server/user/migrations/0007_user_metadata.py,sha256=ndv3eHZWPIExC1JR6ChpkzuXCIsHXTvWgg0bXnRIWbc,619
197
198
  karrio/server/user/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
199
  karrio/server/user/templates/registration/login.html,sha256=3_tj-0rKfwkCk-fp_GT8xFQhLqjGcJs3uZzOAaI40Sw,3690
199
- karrio/server/user/templates/registration/registration_confirm_email.html,sha256=zFDkNN_BHMQyrBv_mU8aoqXxYxG91TGuf6pKwRa5jxE,247
200
+ karrio/server/user/templates/registration/registration_confirm_email.html,sha256=haJ1DVM27umaxegACs4tNAj296HxVZfWCSTyD0Nt5I8,279
200
201
  karrio/server/user/templates/registration/registration_confirm_email.txt,sha256=I_zN_pJTRigfyiYbyQK0wFfrI5Zq1JG8lf0TyLA9fN0,94
201
- karrio_server_core-2025.5rc25.dist-info/METADATA,sha256=kaUiZHAwqnLTbZHMXCShe3C4MAfpmZ81cVh0W5hGz0o,797
202
- karrio_server_core-2025.5rc25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
203
- karrio_server_core-2025.5rc25.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
204
- karrio_server_core-2025.5rc25.dist-info/RECORD,,
202
+ karrio_server_core-2025.5rc26.dist-info/METADATA,sha256=JwltRzVVakiHjj1wLen6UWzQ0EXg_1mqkE4CR70J8E8,797
203
+ karrio_server_core-2025.5rc26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
204
+ karrio_server_core-2025.5rc26.dist-info/top_level.txt,sha256=D1D7x8R3cTfjF_15mfiO7wCQ5QMtuM4x8GaPr7z5i78,12
205
+ karrio_server_core-2025.5rc26.dist-info/RECORD,,