karrio-seko 2025.5rc5__py3-none-any.whl → 2025.5rc6__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/providers/seko/rate.py +68 -0
- karrio/providers/seko/shipment/create.py +38 -2
- karrio/providers/seko/units.py +14 -1
- karrio/providers/seko/utils.py +3 -0
- karrio/schemas/seko/rating_request.py +79 -1
- karrio/schemas/seko/rating_response.py +26 -2
- karrio/schemas/seko/shipping_request.py +9 -0
- karrio/schemas/seko/shipping_response.py +65 -3
- {karrio_seko-2025.5rc5.dist-info → karrio_seko-2025.5rc6.dist-info}/METADATA +1 -1
- {karrio_seko-2025.5rc5.dist-info → karrio_seko-2025.5rc6.dist-info}/RECORD +13 -13
- {karrio_seko-2025.5rc5.dist-info → karrio_seko-2025.5rc6.dist-info}/WHEEL +0 -0
- {karrio_seko-2025.5rc5.dist-info → karrio_seko-2025.5rc6.dist-info}/entry_points.txt +0 -0
- {karrio_seko-2025.5rc5.dist-info → karrio_seko-2025.5rc6.dist-info}/top_level.txt +0 -0
karrio/providers/seko/rate.py
CHANGED
@@ -55,6 +55,7 @@ def rate_request(
|
|
55
55
|
payload: models.RateRequest,
|
56
56
|
settings: provider_utils.Settings,
|
57
57
|
) -> lib.Serializable:
|
58
|
+
shipper = lib.to_address(payload.shipper)
|
58
59
|
recipient = lib.to_address(payload.recipient)
|
59
60
|
options = lib.to_shipping_options(
|
60
61
|
payload.options,
|
@@ -65,10 +66,37 @@ def rate_request(
|
|
65
66
|
options=options,
|
66
67
|
shipping_options_initializer=provider_units.shipping_options_initializer,
|
67
68
|
)
|
69
|
+
customs = lib.to_customs_info(
|
70
|
+
payload.customs,
|
71
|
+
shipper=payload.shipper,
|
72
|
+
recipient=payload.recipient,
|
73
|
+
weight_unit="KG",
|
74
|
+
)
|
75
|
+
commodities = lib.identity(customs.commodities if any(customs.commodities) else packages.items)
|
68
76
|
|
69
77
|
# map data to convert karrio model to seko specific type
|
70
78
|
request = seko.RatingRequestType(
|
71
79
|
DeliveryReference=payload.reference,
|
80
|
+
Reference2=options.seko_reference_2.state,
|
81
|
+
Reference3=options.seko_reference_3.state,
|
82
|
+
Origin=seko.DestinationType(
|
83
|
+
Id=options.seko_origin_id.state,
|
84
|
+
Name=payload.shipper.company_name,
|
85
|
+
Address=seko.AddressType(
|
86
|
+
BuildingName=shipper.company_name,
|
87
|
+
StreetAddress=shipper.street,
|
88
|
+
Suburb=shipper.city,
|
89
|
+
City=shipper.state_code,
|
90
|
+
PostCode=shipper.postal_code,
|
91
|
+
CountryCode=shipper.country_code,
|
92
|
+
),
|
93
|
+
ContactPerson=shipper.contact,
|
94
|
+
PhoneNumber=shipper.phone_number,
|
95
|
+
Email=shipper.email,
|
96
|
+
DeliveryInstructions=options.origin_instructions.state,
|
97
|
+
RecipientTaxId=shipper.tax_id,
|
98
|
+
SendTrackingEmail=None,
|
99
|
+
),
|
72
100
|
Destination=seko.DestinationType(
|
73
101
|
Id=options.seko_destination_id.state,
|
74
102
|
Name=recipient.company_name,
|
@@ -85,9 +113,29 @@ def rate_request(
|
|
85
113
|
Email=recipient.email,
|
86
114
|
DeliveryInstructions=options.destination_instructions.state,
|
87
115
|
RecipientTaxId=recipient.tax_id,
|
116
|
+
SendTrackingEmail=None,
|
88
117
|
),
|
89
118
|
IsSaturdayDelivery=options.seko_is_saturday_delivery.state,
|
90
119
|
IsSignatureRequired=options.seko_is_signature_required.state,
|
120
|
+
DangerousGoods=None,
|
121
|
+
Commodities=[
|
122
|
+
seko.CommodityType(
|
123
|
+
Description=commodity.description,
|
124
|
+
HarmonizedCode=commodity.sku,
|
125
|
+
Units=commodity.quantity,
|
126
|
+
UnitValue=commodity.value_amount,
|
127
|
+
UnitCostValue=commodity.value_amount,
|
128
|
+
UnitKg=commodity.weight.value,
|
129
|
+
Currency=commodity.value_currency,
|
130
|
+
Country=commodity.country_code,
|
131
|
+
IsDG=None,
|
132
|
+
itemSKU=commodity.sku,
|
133
|
+
ImageURL=commodity.metadata.get("image_url"),
|
134
|
+
DangerousGoodsItem=None,
|
135
|
+
Manufacturer=None,
|
136
|
+
)
|
137
|
+
for commodity in commodities
|
138
|
+
],
|
91
139
|
Packages=[
|
92
140
|
seko.PackageType(
|
93
141
|
Height=package.height.CM,
|
@@ -96,12 +144,32 @@ def rate_request(
|
|
96
144
|
Width=package.width.CM,
|
97
145
|
Kg=package.weight.KG,
|
98
146
|
Name=lib.text(package.description, max=50),
|
147
|
+
PackageCode=None,
|
99
148
|
Type=provider_units.PackagingType.map(
|
100
149
|
package.packaging_type or "your_packaging"
|
101
150
|
).value,
|
102
151
|
)
|
103
152
|
for package in packages
|
104
153
|
],
|
154
|
+
ShipType=options.seko_ship_type.state,
|
155
|
+
CostCentreName=settings.connection_config.cost_centre_name.state,
|
156
|
+
CostCentreId=settings.connection_config.cost_centre_id.state,
|
157
|
+
CodValue=options.cash_on_delivery.state,
|
158
|
+
TaxCollected=options.seko_tax_collected.state,
|
159
|
+
AmountCollected=options.seko_amount_collected.state,
|
160
|
+
CIFValue=options.seko_cif_value.state,
|
161
|
+
FreightValue=options.seko_freight_value.state,
|
162
|
+
DutiesAndTaxesByReceiver=lib.identity(
|
163
|
+
customs.duty.paid_by == "recipient" if payload.customs else None
|
164
|
+
),
|
165
|
+
TaxIds=[
|
166
|
+
seko.TaxIDType(
|
167
|
+
IdType=option.code,
|
168
|
+
IdNumber=option.state,
|
169
|
+
)
|
170
|
+
for key, option in customs.options.items()
|
171
|
+
if key in provider_units.CustomsOption and option.state is not None
|
172
|
+
],
|
105
173
|
)
|
106
174
|
|
107
175
|
return lib.Serializable(request, lib.to_dict)
|
@@ -92,6 +92,7 @@ def shipment_request(
|
|
92
92
|
) -> lib.Serializable:
|
93
93
|
shipper = lib.to_address(payload.shipper)
|
94
94
|
recipient = lib.to_address(payload.recipient)
|
95
|
+
return_address = lib.to_address(payload.return_address or payload.shipper)
|
95
96
|
packages = lib.to_packages(payload.parcels)
|
96
97
|
service = provider_units.ShippingService.map(payload.service).value_or_key
|
97
98
|
options = lib.to_shipping_options(
|
@@ -144,6 +145,8 @@ def shipment_request(
|
|
144
145
|
DeliveryInstructions=options.origin_instructions.state,
|
145
146
|
RecipientTaxId=shipper.tax_id,
|
146
147
|
SendTrackingEmail=None,
|
148
|
+
SignOffName=None,
|
149
|
+
SignOffRole=None,
|
147
150
|
),
|
148
151
|
Destination=seko.DestinationType(
|
149
152
|
Id=options.seko_destination_id.state,
|
@@ -164,22 +167,27 @@ def shipment_request(
|
|
164
167
|
DeliveryInstructions=options.destination_instructions.state,
|
165
168
|
RecipientTaxId=recipient.tax_id,
|
166
169
|
SendTrackingEmail=options.seko_send_tracking_email.state,
|
170
|
+
SignOffName=None,
|
171
|
+
SignOffRole=None,
|
167
172
|
),
|
168
173
|
DangerousGoods=None,
|
169
174
|
Commodities=[
|
170
175
|
seko.CommodityType(
|
171
176
|
Description=lib.identity(
|
172
|
-
lib.text(commodity.description or commodity.title, max=
|
177
|
+
lib.text(commodity.description or commodity.title, max=200) or "item"
|
173
178
|
),
|
174
179
|
HarmonizedCode=commodity.hs_code or "0000.00.00",
|
175
180
|
Units=commodity.quantity,
|
176
181
|
UnitValue=commodity.value_amount,
|
182
|
+
UnitCostValue=None,
|
177
183
|
UnitKg=commodity.weight,
|
178
184
|
Currency=commodity.value_currency,
|
179
185
|
Country=commodity.origin_country,
|
180
186
|
IsDG=None,
|
181
187
|
itemSKU=commodity.sku,
|
188
|
+
ImageURL=commodity.metadata.get("image_url"),
|
182
189
|
DangerousGoodsItem=None,
|
190
|
+
Manufacturer=None,
|
183
191
|
)
|
184
192
|
for commodity in commodities
|
185
193
|
],
|
@@ -194,6 +202,8 @@ def shipment_request(
|
|
194
202
|
provider_units.PackagingType.map(package.packaging_type).value
|
195
203
|
),
|
196
204
|
OverLabelBarcode=package.reference_number,
|
205
|
+
Id=package.options.seko_package_id.state,
|
206
|
+
PackageCode=package.reference_number,
|
197
207
|
)
|
198
208
|
for package in packages
|
199
209
|
],
|
@@ -212,7 +222,6 @@ def shipment_request(
|
|
212
222
|
Carrier=options.seko_carrier.state,
|
213
223
|
Service=service,
|
214
224
|
CostCentreName=settings.connection_config.cost_center.state,
|
215
|
-
CostCentreId=settings.connection_config.cost_center_id.state,
|
216
225
|
CodValue=options.cash_on_delivery.state,
|
217
226
|
TaxCollected=lib.identity(
|
218
227
|
options.seko_tax_collected.state
|
@@ -225,6 +234,8 @@ def shipment_request(
|
|
225
234
|
SendLabel="Y" if options.seko_send_label.state else None,
|
226
235
|
LabelBranding=settings.connection_config.label_branding.state,
|
227
236
|
InvoiceData=commercial_invoice,
|
237
|
+
CODValue=options.cash_on_delivery.state,
|
238
|
+
CostCentreId=settings.connection_config.cost_center_id.state,
|
228
239
|
TaxIds=[
|
229
240
|
seko.TaxIDType(
|
230
241
|
IdType=option.code,
|
@@ -234,6 +245,31 @@ def shipment_request(
|
|
234
245
|
if key in provider_units.CustomsOption and option.state is not None
|
235
246
|
],
|
236
247
|
Outputs=[label_type],
|
248
|
+
IsSaturdayDelivery=options.seko_is_saturday_delivery.state,
|
249
|
+
IsSignatureRequired=options.seko_is_signature_required.state,
|
250
|
+
SpecialInstructions=options.seko_special_instructions.state,
|
251
|
+
InsuranceValue=options.seko_insurance_value.state,
|
252
|
+
InsuranceCurrency=options.currency.state,
|
253
|
+
ReturnAddress=seko.DestinationType(
|
254
|
+
Id=return_address.tax_id,
|
255
|
+
Name=return_address.company_name,
|
256
|
+
Address=seko.AddressType(
|
257
|
+
BuildingName=return_address.company_name,
|
258
|
+
StreetAddress=return_address.street,
|
259
|
+
Suburb=return_address.city,
|
260
|
+
City=return_address.state_code,
|
261
|
+
PostCode=return_address.postal_code,
|
262
|
+
CountryCode=return_address.country_code,
|
263
|
+
),
|
264
|
+
ContactPerson=return_address.contact,
|
265
|
+
PhoneNumber=return_address.phone_number,
|
266
|
+
Email=return_address.email,
|
267
|
+
DeliveryInstructions=return_address.instructions,
|
268
|
+
RecipientTaxId=None,
|
269
|
+
SendTrackingEmail=None,
|
270
|
+
SignOffName=None,
|
271
|
+
SignOffRole=None,
|
272
|
+
),
|
237
273
|
)
|
238
274
|
|
239
275
|
return lib.Serializable(
|
karrio/providers/seko/units.py
CHANGED
@@ -76,6 +76,19 @@ class ShippingOption(lib.Enum):
|
|
76
76
|
seko_cif_value = lib.OptionEnum("CIFValue", float)
|
77
77
|
seko_freight_value = lib.OptionEnum("FreightValue", float)
|
78
78
|
seko_send_label = lib.OptionEnum("SendLabel", bool)
|
79
|
+
seko_special_instructions = lib.OptionEnum("SpecialInstructions")
|
80
|
+
seko_insurance_value = lib.OptionEnum("InsuranceValue", float)
|
81
|
+
seko_estimated_delivery_date = lib.OptionEnum("EstimatedDeliveryDate")
|
82
|
+
seko_dangerous_goods = lib.OptionEnum("DangerousGoods", bool)
|
83
|
+
seko_dg_additional_handling = lib.OptionEnum("DGAdditionalHandling")
|
84
|
+
seko_dg_hazchem_code = lib.OptionEnum("DGHazchemCode")
|
85
|
+
seko_dg_radioactive = lib.OptionEnum("DGRadioactive", bool)
|
86
|
+
seko_dg_cargo_aircraft_only = lib.OptionEnum("DGCargoAircraftOnly", bool)
|
87
|
+
seko_dg_limited_quantity = lib.OptionEnum("DGLimitedQuantity", bool)
|
88
|
+
seko_dg_total_quantity = lib.OptionEnum("DGTotalQuantity", int)
|
89
|
+
seko_dg_total_kg = lib.OptionEnum("DGTotalKg", float)
|
90
|
+
seko_dg_signoff_name = lib.OptionEnum("DGSignOffName")
|
91
|
+
seko_dg_signoff_role = lib.OptionEnum("DGSignOffRole")
|
79
92
|
|
80
93
|
""" Unified Option type mapping """
|
81
94
|
saturday_delivery = seko_is_saturday_delivery
|
@@ -119,8 +132,8 @@ class CustomsOption(lib.Enum):
|
|
119
132
|
""" Unified Customs Identifier type mapping """
|
120
133
|
|
121
134
|
ioss = IOSSNUMBER
|
122
|
-
nip_number = VATNUMBER
|
123
135
|
eori_number = EUEORINumber
|
136
|
+
vat_registration_number = VATNUMBER
|
124
137
|
|
125
138
|
|
126
139
|
class TrackingStatus(lib.Enum):
|
karrio/providers/seko/utils.py
CHANGED
@@ -98,6 +98,9 @@ class ConnectionConfig(lib.Enum):
|
|
98
98
|
currency = lib.OptionEnum("currency", str)
|
99
99
|
cost_center = lib.OptionEnum("cost_center", str)
|
100
100
|
cost_center_id = lib.OptionEnum("cost_center_id", str)
|
101
|
+
cost_centre_name = lib.OptionEnum("cost_centre_name", str)
|
102
|
+
cost_centre_id = lib.OptionEnum("cost_centre_id", str)
|
103
|
+
label_branding = lib.OptionEnum("label_branding", str)
|
101
104
|
shipping_options = lib.OptionEnum("shipping_options", list)
|
102
105
|
shipping_services = lib.OptionEnum("shipping_services", list)
|
103
106
|
|
@@ -3,6 +3,59 @@ import jstruct
|
|
3
3
|
import typing
|
4
4
|
|
5
5
|
|
6
|
+
@attr.s(auto_attribs=True)
|
7
|
+
class DangerousGoodsItemType:
|
8
|
+
Description: typing.Optional[str] = None
|
9
|
+
ClassOrDivision: typing.Optional[str] = None
|
10
|
+
UNorIDNo: typing.Optional[str] = None
|
11
|
+
PackingGroup: typing.Optional[str] = None
|
12
|
+
SubsidaryRisk: typing.Optional[str] = None
|
13
|
+
Packing: typing.Optional[str] = None
|
14
|
+
PackingInstr: typing.Optional[str] = None
|
15
|
+
Authorization: typing.Optional[str] = None
|
16
|
+
|
17
|
+
|
18
|
+
@attr.s(auto_attribs=True)
|
19
|
+
class ManufacturerType:
|
20
|
+
ManufacturerMID: typing.Optional[str] = None
|
21
|
+
Name: typing.Optional[str] = None
|
22
|
+
Address1: typing.Optional[str] = None
|
23
|
+
Address2: typing.Optional[str] = None
|
24
|
+
City: typing.Optional[str] = None
|
25
|
+
State: typing.Optional[str] = None
|
26
|
+
Zip: typing.Optional[str] = None
|
27
|
+
|
28
|
+
|
29
|
+
@attr.s(auto_attribs=True)
|
30
|
+
class CommodityType:
|
31
|
+
Description: typing.Optional[str] = None
|
32
|
+
HarmonizedCode: typing.Optional[str] = None
|
33
|
+
Units: typing.Optional[int] = None
|
34
|
+
UnitValue: typing.Optional[int] = None
|
35
|
+
UnitCostValue: typing.Optional[float] = None
|
36
|
+
UnitKg: typing.Optional[float] = None
|
37
|
+
Currency: typing.Optional[str] = None
|
38
|
+
Country: typing.Optional[str] = None
|
39
|
+
IsDG: typing.Optional[bool] = None
|
40
|
+
itemSKU: typing.Optional[str] = None
|
41
|
+
ImageURL: typing.Optional[str] = None
|
42
|
+
DangerousGoodsItem: typing.Optional[DangerousGoodsItemType] = jstruct.JStruct[DangerousGoodsItemType]
|
43
|
+
Manufacturer: typing.Optional[ManufacturerType] = jstruct.JStruct[ManufacturerType]
|
44
|
+
|
45
|
+
|
46
|
+
@attr.s(auto_attribs=True)
|
47
|
+
class DangerousGoodsType:
|
48
|
+
AdditionalHandlingInfo: typing.Optional[str] = None
|
49
|
+
HazchemCode: typing.Optional[str] = None
|
50
|
+
IsRadioActive: typing.Optional[bool] = None
|
51
|
+
CargoAircraftOnly: typing.Optional[bool] = None
|
52
|
+
IsDGLQ: typing.Optional[bool] = None
|
53
|
+
TotalQuantity: typing.Optional[int] = None
|
54
|
+
TotalKg: typing.Optional[float] = None
|
55
|
+
SignOffName: typing.Optional[str] = None
|
56
|
+
SignOffRole: typing.Optional[str] = None
|
57
|
+
|
58
|
+
|
6
59
|
@attr.s(auto_attribs=True)
|
7
60
|
class AddressType:
|
8
61
|
BuildingName: typing.Optional[str] = None
|
@@ -19,10 +72,11 @@ class DestinationType:
|
|
19
72
|
Name: typing.Optional[str] = None
|
20
73
|
Address: typing.Optional[AddressType] = jstruct.JStruct[AddressType]
|
21
74
|
ContactPerson: typing.Optional[str] = None
|
22
|
-
PhoneNumber: typing.Optional[
|
75
|
+
PhoneNumber: typing.Optional[str] = None
|
23
76
|
Email: typing.Optional[str] = None
|
24
77
|
DeliveryInstructions: typing.Optional[str] = None
|
25
78
|
RecipientTaxId: typing.Optional[int] = None
|
79
|
+
SendTrackingEmail: typing.Optional[bool] = None
|
26
80
|
|
27
81
|
|
28
82
|
@attr.s(auto_attribs=True)
|
@@ -37,10 +91,34 @@ class PackageType:
|
|
37
91
|
Type: typing.Optional[str] = None
|
38
92
|
|
39
93
|
|
94
|
+
@attr.s(auto_attribs=True)
|
95
|
+
class TaxIDType:
|
96
|
+
IdType: typing.Optional[str] = None
|
97
|
+
IdNumber: typing.Optional[str] = None
|
98
|
+
|
99
|
+
|
40
100
|
@attr.s(auto_attribs=True)
|
41
101
|
class RatingRequestType:
|
42
102
|
DeliveryReference: typing.Optional[str] = None
|
103
|
+
Reference2: typing.Optional[str] = None
|
104
|
+
Reference3: typing.Optional[str] = None
|
105
|
+
Origin: typing.Optional[DestinationType] = jstruct.JStruct[DestinationType]
|
43
106
|
Destination: typing.Optional[DestinationType] = jstruct.JStruct[DestinationType]
|
44
107
|
IsSaturdayDelivery: typing.Optional[bool] = None
|
45
108
|
IsSignatureRequired: typing.Optional[bool] = None
|
109
|
+
DangerousGoods: typing.Optional[DangerousGoodsType] = jstruct.JStruct[DangerousGoodsType]
|
110
|
+
Commodities: typing.Optional[typing.List[CommodityType]] = jstruct.JList[CommodityType]
|
46
111
|
Packages: typing.Optional[typing.List[PackageType]] = jstruct.JList[PackageType]
|
112
|
+
Carrier: typing.Optional[str] = None
|
113
|
+
Service: typing.Optional[str] = None
|
114
|
+
ProductCategory: typing.Optional[str] = None
|
115
|
+
ShipType: typing.Optional[str] = None
|
116
|
+
CostCentreName: typing.Optional[str] = None
|
117
|
+
CostCentreId: typing.Optional[str] = None
|
118
|
+
CodValue: typing.Optional[float] = None
|
119
|
+
TaxCollected: typing.Optional[bool] = None
|
120
|
+
AmountCollected: typing.Optional[float] = None
|
121
|
+
CIFValue: typing.Optional[float] = None
|
122
|
+
FreightValue: typing.Optional[float] = None
|
123
|
+
DutiesAndTaxesByReceiver: typing.Optional[bool] = None
|
124
|
+
TaxIds: typing.Optional[typing.List[TaxIDType]] = jstruct.JList[TaxIDType]
|
@@ -17,6 +17,12 @@ class AvailableType:
|
|
17
17
|
IsSaturdayDelivery: typing.Optional[bool] = None
|
18
18
|
IsFreightForward: typing.Optional[bool] = None
|
19
19
|
CarrierServiceType: typing.Optional[str] = None
|
20
|
+
EstimatedDeliveryDays: typing.Optional[int] = None
|
21
|
+
TransitTime: typing.Optional[str] = None
|
22
|
+
ServiceLevel: typing.Optional[str] = None
|
23
|
+
CarrierType: typing.Optional[int] = None
|
24
|
+
IsOvernight: typing.Optional[bool] = None
|
25
|
+
HasTrackPaks: typing.Optional[bool] = None
|
20
26
|
|
21
27
|
|
22
28
|
@attr.s(auto_attribs=True)
|
@@ -24,18 +30,36 @@ class RejectedType:
|
|
24
30
|
CarrierName: typing.Optional[str] = None
|
25
31
|
DeliveryType: typing.Optional[str] = None
|
26
32
|
Reason: typing.Optional[str] = None
|
33
|
+
CarrierId: typing.Optional[int] = None
|
34
|
+
QuoteId: typing.Optional[str] = None
|
35
|
+
ErrorCode: typing.Optional[str] = None
|
36
|
+
ErrorDetails: typing.Optional[str] = None
|
37
|
+
|
38
|
+
|
39
|
+
@attr.s(auto_attribs=True)
|
40
|
+
class SummaryType:
|
41
|
+
TotalAvailable: typing.Optional[int] = None
|
42
|
+
TotalRejected: typing.Optional[int] = None
|
43
|
+
TotalValidationErrors: typing.Optional[int] = None
|
44
|
+
Currency: typing.Optional[str] = None
|
45
|
+
RequestId: typing.Optional[str] = None
|
27
46
|
|
28
47
|
|
29
48
|
@attr.s(auto_attribs=True)
|
30
|
-
class
|
49
|
+
class ValidationErrorType:
|
31
50
|
Property: typing.Optional[str] = None
|
32
51
|
Message: typing.Optional[str] = None
|
33
52
|
Key: typing.Optional[str] = None
|
34
53
|
Value: typing.Optional[str] = None
|
54
|
+
ErrorCode: typing.Optional[str] = None
|
55
|
+
Severity: typing.Optional[str] = None
|
56
|
+
WarningCode: typing.Optional[str] = None
|
35
57
|
|
36
58
|
|
37
59
|
@attr.s(auto_attribs=True)
|
38
60
|
class RatingResponseType:
|
39
61
|
Available: typing.Optional[typing.List[AvailableType]] = jstruct.JList[AvailableType]
|
40
62
|
Rejected: typing.Optional[typing.List[RejectedType]] = jstruct.JList[RejectedType]
|
41
|
-
ValidationErrors: typing.Optional[
|
63
|
+
ValidationErrors: typing.Optional[typing.List[ValidationErrorType]] = jstruct.JList[ValidationErrorType]
|
64
|
+
Summary: typing.Optional[SummaryType] = jstruct.JStruct[SummaryType]
|
65
|
+
Warnings: typing.Optional[typing.List[ValidationErrorType]] = jstruct.JList[ValidationErrorType]
|
@@ -90,6 +90,8 @@ class PackageType:
|
|
90
90
|
Name: typing.Optional[str] = None
|
91
91
|
Type: typing.Optional[str] = None
|
92
92
|
OverLabelBarcode: typing.Optional[str] = None
|
93
|
+
Id: typing.Optional[int] = None
|
94
|
+
PackageCode: typing.Optional[str] = None
|
93
95
|
|
94
96
|
|
95
97
|
@attr.s(auto_attribs=True)
|
@@ -129,3 +131,10 @@ class ShippingRequestType:
|
|
129
131
|
CostCentreId: typing.Optional[str] = None
|
130
132
|
TaxIds: typing.Optional[typing.List[TaxIDType]] = jstruct.JList[TaxIDType]
|
131
133
|
Outputs: typing.Optional[typing.List[str]] = None
|
134
|
+
IsSaturdayDelivery: typing.Optional[bool] = None
|
135
|
+
IsSignatureRequired: typing.Optional[bool] = None
|
136
|
+
EstimatedDeliveryDate: typing.Optional[str] = None
|
137
|
+
SpecialInstructions: typing.Optional[str] = None
|
138
|
+
InsuranceValue: typing.Optional[float] = None
|
139
|
+
InsuranceCurrency: typing.Optional[str] = None
|
140
|
+
ReturnAddress: typing.Optional[DestinationType] = jstruct.JStruct[DestinationType]
|
@@ -7,10 +7,17 @@ import typing
|
|
7
7
|
class CommodityChangeType:
|
8
8
|
OriginalDescription: typing.Optional[str] = None
|
9
9
|
SuitableDescription: typing.Optional[str] = None
|
10
|
-
OriginalHSCode: typing.
|
10
|
+
OriginalHSCode: typing.Optional[str] = None
|
11
11
|
SuitableHsCode: typing.Optional[int] = None
|
12
12
|
|
13
13
|
|
14
|
+
@attr.s(auto_attribs=True)
|
15
|
+
class ItemDimensionsType:
|
16
|
+
Length: typing.Optional[float] = None
|
17
|
+
Width: typing.Optional[float] = None
|
18
|
+
Height: typing.Optional[float] = None
|
19
|
+
|
20
|
+
|
14
21
|
@attr.s(auto_attribs=True)
|
15
22
|
class ItemType:
|
16
23
|
PartNo: typing.Optional[int] = None
|
@@ -26,6 +33,9 @@ class ItemType:
|
|
26
33
|
BarcodeText: typing.Optional[str] = None
|
27
34
|
TrackingBarcode: typing.Optional[str] = None
|
28
35
|
TrackingBarcode2: typing.Optional[str] = None
|
36
|
+
ItemDescription: typing.Optional[str] = None
|
37
|
+
ItemWeight: typing.Optional[float] = None
|
38
|
+
ItemDimensions: typing.Optional[ItemDimensionsType] = jstruct.JStruct[ItemDimensionsType]
|
29
39
|
|
30
40
|
|
31
41
|
@attr.s(auto_attribs=True)
|
@@ -44,16 +54,63 @@ class ConsignmentType:
|
|
44
54
|
IsOvernight: typing.Optional[bool] = None
|
45
55
|
HasTrackPaks: typing.Optional[bool] = None
|
46
56
|
ConsignmentId: typing.Optional[int] = None
|
57
|
+
EstimatedDeliveryDate: typing.Optional[str] = None
|
58
|
+
ServiceLevel: typing.Optional[str] = None
|
59
|
+
TransitTime: typing.Optional[str] = None
|
47
60
|
OutputFiles: typing.Optional[OutputFilesType] = jstruct.JStruct[OutputFilesType]
|
48
61
|
Items: typing.Optional[typing.List[ItemType]] = jstruct.JList[ItemType]
|
49
62
|
|
50
63
|
|
64
|
+
@attr.s(auto_attribs=True)
|
65
|
+
class CustomsInfoType:
|
66
|
+
DeclarationNumber: typing.Optional[str] = None
|
67
|
+
CustomsValue: typing.Optional[float] = None
|
68
|
+
Currency: typing.Optional[str] = None
|
69
|
+
DutyPaidBy: typing.Optional[str] = None
|
70
|
+
TaxPaidBy: typing.Optional[str] = None
|
71
|
+
|
72
|
+
|
51
73
|
@attr.s(auto_attribs=True)
|
52
74
|
class ErrorType:
|
53
75
|
Property: typing.Optional[str] = None
|
54
76
|
Message: typing.Optional[str] = None
|
55
77
|
Key: typing.Optional[str] = None
|
56
78
|
Value: typing.Optional[str] = None
|
79
|
+
ErrorCode: typing.Optional[str] = None
|
80
|
+
Severity: typing.Optional[str] = None
|
81
|
+
WarningCode: typing.Optional[str] = None
|
82
|
+
|
83
|
+
|
84
|
+
@attr.s(auto_attribs=True)
|
85
|
+
class InsuranceInfoType:
|
86
|
+
InsuredValue: typing.Optional[float] = None
|
87
|
+
Currency: typing.Optional[str] = None
|
88
|
+
InsuranceType: typing.Optional[str] = None
|
89
|
+
Premium: typing.Optional[float] = None
|
90
|
+
|
91
|
+
|
92
|
+
@attr.s(auto_attribs=True)
|
93
|
+
class NotificationType:
|
94
|
+
Type: typing.Optional[str] = None
|
95
|
+
Recipient: typing.Optional[str] = None
|
96
|
+
Subject: typing.Optional[str] = None
|
97
|
+
Message: typing.Optional[str] = None
|
98
|
+
|
99
|
+
|
100
|
+
@attr.s(auto_attribs=True)
|
101
|
+
class ReturnInfoType:
|
102
|
+
ReturnTrackingNumber: typing.Optional[str] = None
|
103
|
+
ReturnLabelUrl: typing.Optional[str] = None
|
104
|
+
ReturnInstructions: typing.Optional[str] = None
|
105
|
+
|
106
|
+
|
107
|
+
@attr.s(auto_attribs=True)
|
108
|
+
class SummaryType:
|
109
|
+
TotalConsignments: typing.Optional[int] = None
|
110
|
+
TotalCost: typing.Optional[float] = None
|
111
|
+
Currency: typing.Optional[str] = None
|
112
|
+
RequestId: typing.Optional[str] = None
|
113
|
+
ProcessingTime: typing.Optional[str] = None
|
57
114
|
|
58
115
|
|
59
116
|
@attr.s(auto_attribs=True)
|
@@ -67,13 +124,18 @@ class ShippingResponseType:
|
|
67
124
|
HasTrackPaks: typing.Optional[bool] = None
|
68
125
|
Message: typing.Optional[str] = None
|
69
126
|
Errors: typing.Optional[typing.List[ErrorType]] = jstruct.JList[ErrorType]
|
127
|
+
Warnings: typing.Optional[typing.List[ErrorType]] = jstruct.JList[ErrorType]
|
70
128
|
SiteId: typing.Optional[int] = None
|
71
129
|
Consignments: typing.Optional[typing.List[ConsignmentType]] = jstruct.JList[ConsignmentType]
|
72
130
|
DestinationPort: typing.Optional[str] = None
|
73
131
|
Downloads: typing.Optional[typing.List[typing.Any]] = None
|
74
132
|
CommodityChanges: typing.Optional[typing.List[CommodityChangeType]] = jstruct.JList[CommodityChangeType]
|
75
133
|
CarrierType: typing.Optional[int] = None
|
76
|
-
AlertPath: typing.
|
77
|
-
Notifications: typing.Optional[typing.List[
|
134
|
+
AlertPath: typing.Optional[str] = None
|
135
|
+
Notifications: typing.Optional[typing.List[NotificationType]] = jstruct.JList[NotificationType]
|
78
136
|
InvoiceResponse: typing.Optional[str] = None
|
79
137
|
LogoPath: typing.Optional[str] = None
|
138
|
+
Summary: typing.Optional[SummaryType] = jstruct.JStruct[SummaryType]
|
139
|
+
CustomsInfo: typing.Optional[CustomsInfoType] = jstruct.JStruct[CustomsInfoType]
|
140
|
+
InsuranceInfo: typing.Optional[InsuranceInfoType] = jstruct.JStruct[InsuranceInfoType]
|
141
|
+
ReturnInfo: typing.Optional[ReturnInfoType] = jstruct.JStruct[ReturnInfoType]
|
@@ -6,23 +6,23 @@ karrio/plugins/seko/__init__.py,sha256=7BgFvF8_VRy3CKFmGv3iiBs3KJK_0wsAde8473Nl7
|
|
6
6
|
karrio/providers/seko/__init__.py,sha256=IzIUO4eo-TjsNmZeJ85u4yziUgnVu_uSg4dVct20e9U,527
|
7
7
|
karrio/providers/seko/error.py,sha256=0tcIO-sZSp039qmMy6M5AjJXOBxYo25Nxe3YzQOTkbM,2371
|
8
8
|
karrio/providers/seko/manifest.py,sha256=1r9yenrHGeQeOhacuHw4U28mE2cK0fanR-9pRKEH83w,1915
|
9
|
-
karrio/providers/seko/rate.py,sha256=
|
9
|
+
karrio/providers/seko/rate.py,sha256=FwnH3HFJ6iP9CLkdhkSbtv-vnoRpQYax_k5SuOAASRQ,6677
|
10
10
|
karrio/providers/seko/tracking.py,sha256=yhwJ0M0dPpC8Swe_z3P__aJ5XjDxLM7f4W_CIr4oMR8,3093
|
11
|
-
karrio/providers/seko/units.py,sha256=
|
12
|
-
karrio/providers/seko/utils.py,sha256=
|
11
|
+
karrio/providers/seko/units.py,sha256=EXwaMmyNwWNnJvtG1Tvct86fOlT_CsR2TnULT0_8FcQ,9729
|
12
|
+
karrio/providers/seko/utils.py,sha256=YWoDTiPqhsi77_NxrBs87fA5yY_O33jwdPiNPt4eoCs,3906
|
13
13
|
karrio/providers/seko/shipment/__init__.py,sha256=lmk_JKKObr83IAEeITBbVefCO-FeypZB8_jGIojIatA,225
|
14
14
|
karrio/providers/seko/shipment/cancel.py,sha256=O5VsuMidTRgpAikTIA5GbIbVSuIy0UCMk1LO3M9oLzk,1812
|
15
|
-
karrio/providers/seko/shipment/create.py,sha256
|
15
|
+
karrio/providers/seko/shipment/create.py,sha256=zwxZ9AhSj4jJL4Jlqb_70UJDoQlRIRWgmYtwblrj0hI,11119
|
16
16
|
karrio/schemas/seko/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
17
|
karrio/schemas/seko/error_response.py,sha256=PEcgmhsyboVfWL8BcYhFT_MppXUK5n3XYAv4ANMVWds,254
|
18
18
|
karrio/schemas/seko/manifest_response.py,sha256=KuO0CjtAw9ffhZXMEBQPEfymgsCSnshnPWcR7CTXy48,674
|
19
|
-
karrio/schemas/seko/rating_request.py,sha256=
|
20
|
-
karrio/schemas/seko/rating_response.py,sha256=
|
21
|
-
karrio/schemas/seko/shipping_request.py,sha256=
|
22
|
-
karrio/schemas/seko/shipping_response.py,sha256=
|
19
|
+
karrio/schemas/seko/rating_request.py,sha256=VfIMBDYGMAp5DsqBuC0wX2XQCl_agXyGFJfdASvTpAo,4648
|
20
|
+
karrio/schemas/seko/rating_response.py,sha256=DZJgnP9YJWXy-mABPLD6YcdmE0Z4oVXosMNVXnBnl4k,2422
|
21
|
+
karrio/schemas/seko/shipping_request.py,sha256=P7vFsGB1IZDfH85mq8pv4qsIL5tYRGsAWWRJcryfv3U,5481
|
22
|
+
karrio/schemas/seko/shipping_response.py,sha256=a-cBMrZyUu9y5OOqgt7VWO7-LJ1mWVuZRWm7ygUY12I,5289
|
23
23
|
karrio/schemas/seko/tracking_response.py,sha256=vWhaKhWP4ZSor5cVZ2h8CvZMxE3h87e4tDXfPAgCsF4,702
|
24
|
-
karrio_seko-2025.
|
25
|
-
karrio_seko-2025.
|
26
|
-
karrio_seko-2025.
|
27
|
-
karrio_seko-2025.
|
28
|
-
karrio_seko-2025.
|
24
|
+
karrio_seko-2025.5rc6.dist-info/METADATA,sha256=S46FOeTDEY-fClbRh4rmIxnFBO5gOGBCkYXMmgh2B0A,990
|
25
|
+
karrio_seko-2025.5rc6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
26
|
+
karrio_seko-2025.5rc6.dist-info/entry_points.txt,sha256=38t4NWTw7ZuhE4-KYDHI3ZAN-PKrfduhrwTofZuhDxg,53
|
27
|
+
karrio_seko-2025.5rc6.dist-info/top_level.txt,sha256=FZCY8Nwft8oEGHdl--xku8P3TrnOxu5dETEU_fWpRSM,20
|
28
|
+
karrio_seko-2025.5rc6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|