karrio-parcelone 2026.1.3__py3-none-any.whl → 2026.1.5__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.
@@ -21,6 +21,7 @@ METADATA = PluginMetadata(
21
21
  is_hub=True, # ParcelOne is a multi-carrier hub
22
22
  options=units.ShippingOption,
23
23
  services=units.ShippingService,
24
+ service_levels=units.DEFAULT_SERVICES,
24
25
  connection_configs=units.ConnectionConfig,
25
26
  # Extra info
26
27
  website="https://parcel.one",
@@ -1,6 +1,7 @@
1
1
  """Karrio ParcelOne shipment cancellation implementation."""
2
2
 
3
3
  import typing
4
+ import karrio.schemas.parcelone as parcelone
4
5
  import karrio.lib as lib
5
6
  import karrio.core.models as models
6
7
  import karrio.providers.parcelone.error as error
@@ -14,7 +15,10 @@ def parse_shipment_cancel_response(
14
15
  """Parse shipment cancellation response from ParcelOne REST API."""
15
16
  response = _response.deserialize()
16
17
  messages = error.parse_error_response(response, settings)
17
- success = response.get("success") == 1
18
+
19
+ cancel_response = lib.to_object(parcelone.CancelResponseType, response)
20
+ result = cancel_response.results
21
+ success = cancel_response.success == 1 and (result.Success == 1 if result else False)
18
22
 
19
23
  confirmation = lib.identity(
20
24
  models.ConfirmationDetails(
@@ -99,6 +99,7 @@ def _parse_tracking_event(event: parcelone.TrackingEventType) -> models.Tracking
99
99
  try_formats=["%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S"],
100
100
  )
101
101
  status = provider_units.TrackingStatus.find(event.StatusCode)
102
+ reason = provider_units.TrackingIncidentReason.find(event.StatusCode)
102
103
 
103
104
  return models.TrackingEvent(
104
105
  date=date,
@@ -111,6 +112,7 @@ def _parse_tracking_event(event: parcelone.TrackingEventType) -> models.Tracking
111
112
  current_format="%Y-%m-%dT%H:%M:%S",
112
113
  ),
113
114
  status=status.name if status else None,
115
+ reason=reason.name if reason else None,
114
116
  )
115
117
 
116
118
 
@@ -234,6 +234,50 @@ class TrackingStatus(lib.Enum):
234
234
  ]
235
235
 
236
236
 
237
+ class TrackingIncidentReason(lib.Enum):
238
+ """Maps carrier exception codes to normalized incident reasons.
239
+
240
+ IMPORTANT: This enum is required for tracking implementations.
241
+ It maps carrier-specific exception/status codes to standardized
242
+ incident reasons for tracking events. The reason field helps
243
+ identify why a delivery exception occurred.
244
+
245
+ Categories of reasons:
246
+ - carrier_*: Issues caused by the carrier
247
+ - consignee_*: Issues caused by the recipient
248
+ - customs_*: Customs-related delays
249
+ - weather_*: Weather/force majeure events
250
+ """
251
+
252
+ # Carrier-caused issues
253
+ carrier_damaged_parcel = ["DAMAGED", "DMG"]
254
+ carrier_sorting_error = ["MISROUTED", "MSR"]
255
+ carrier_address_not_found = ["ADDRESS_NOT_FOUND", "ANF"]
256
+ carrier_parcel_lost = ["LOST", "LP"]
257
+ carrier_not_enough_time = ["LATE", "NO_TIME"]
258
+ carrier_vehicle_issue = ["VEHICLE_BREAKDOWN", "VB"]
259
+
260
+ # Consignee-caused issues
261
+ consignee_refused = ["REFUSED", "RJ"]
262
+ consignee_business_closed = ["BUSINESS_CLOSED", "BC"]
263
+ consignee_not_available = ["NOT_AVAILABLE", "NA"]
264
+ consignee_not_home = ["NOT_HOME", "NH", "ADDRESSEE_NOT_FOUND"]
265
+ consignee_incorrect_address = ["WRONG_ADDRESS", "IA"]
266
+ consignee_access_restricted = ["ACCESS_RESTRICTED", "AR"]
267
+
268
+ # Customs-related issues
269
+ customs_delay = ["CUSTOMS", "CUSTOMS_CLEARANCE", "CD"]
270
+ customs_documentation = ["CUSTOMS_DOCS", "CM"]
271
+ customs_duties_unpaid = ["PAYMENT_REQUIRED", "DU"]
272
+
273
+ # Weather/force majeure
274
+ weather_delay = ["WEATHER", "WE"]
275
+ natural_disaster = ["NATURAL_DISASTER", "ND"]
276
+
277
+ # Unknown/unmapped
278
+ unknown = []
279
+
280
+
237
281
  def load_services_from_csv() -> list:
238
282
  """
239
283
  Load service definitions from CSV file.
@@ -311,6 +355,8 @@ def load_services_from_csv() -> list:
311
355
  zone = models.ServiceZone(
312
356
  label=row.get("zone_label", "Default Zone"),
313
357
  rate=float(row.get("rate", 0.0)),
358
+ min_weight=float(row["min_weight"]) if row.get("min_weight") else None,
359
+ max_weight=float(row["max_weight"]) if row.get("max_weight") else None,
314
360
  transit_days=transit_days,
315
361
  country_codes=country_codes if country_codes else None,
316
362
  )
@@ -1,6 +1,69 @@
1
1
  """ParcelOne API schema types."""
2
2
 
3
- from karrio.schemas.parcelone.shipping_request import *
4
- from karrio.schemas.parcelone.shipping_response import *
5
- from karrio.schemas.parcelone.tracking_response import *
6
- from karrio.schemas.parcelone.error import *
3
+ # Import shipping request types
4
+ from karrio.schemas.parcelone.shipping_request import (
5
+ CepSpecialType,
6
+ FormatType,
7
+ MaxChargesType,
8
+ CustomDetailType,
9
+ IntDocDataType,
10
+ PackageDimensionsType,
11
+ PackageVolumeClassType,
12
+ ServiceType,
13
+ PackageType,
14
+ BankAccountType,
15
+ ShipmentAddressType,
16
+ ShipmentContactType,
17
+ ShipFromDataType,
18
+ ShipToDataType,
19
+ ShippingDataType,
20
+ ShippingRequestType,
21
+ )
22
+
23
+ # Import shipping response types with prefixes to avoid collision
24
+ from karrio.schemas.parcelone.shipping_response import (
25
+ ErrorType as ShipmentErrorType,
26
+ WarningType as ShipmentWarningType,
27
+ ActionResultType as ShipmentActionResultType,
28
+ TotalChargesType,
29
+ FormatType as ResponseFormatType,
30
+ DocumentsResultType as ShipmentDocumentsResultType,
31
+ PackageResultType as ShipmentPackageResultType,
32
+ ResultsType as ShipmentResultType,
33
+ ShippingResponseType,
34
+ )
35
+
36
+ # Import tracking response types
37
+ from karrio.schemas.parcelone.tracking_response import (
38
+ EventType as TrackingEventType,
39
+ ResultsType as TrackingResultType,
40
+ TrackingResponseType,
41
+ )
42
+
43
+ # Import cancel response types
44
+ from karrio.schemas.parcelone.cancel_response import (
45
+ ErrorType as CancelErrorType,
46
+ WarningType as CancelWarningType,
47
+ ResultsType as CancelResultType,
48
+ CancelResponseType,
49
+ )
50
+
51
+ # Import error types
52
+ from karrio.schemas.parcelone.error import (
53
+ ErrorType as ErrorDetailType,
54
+ ErrorResponseType,
55
+ )
56
+
57
+ # Backwards compatibility aliases for shipping request types
58
+ ShippingDataRequestType = ShippingRequestType
59
+ ShipmentType = ShippingDataType
60
+ AddressType = ShipmentAddressType
61
+ ContactType = ShipmentContactType
62
+ ShipToType = ShipToDataType
63
+ ShipFromType = ShipFromDataType
64
+ MeasurementType = PackageVolumeClassType
65
+ DimensionsType = PackageDimensionsType
66
+ AmountType = MaxChargesType
67
+ ShipmentServiceType = ServiceType
68
+ ShipmentPackageType = PackageType
69
+ CEPSpecialType = CepSpecialType
@@ -0,0 +1,37 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class ErrorType:
8
+ ErrorNo: typing.Optional[str] = None
9
+ Message: typing.Optional[str] = None
10
+ StatusCode: typing.Optional[int] = None
11
+
12
+
13
+ @attr.s(auto_attribs=True)
14
+ class WarningType:
15
+ WarningNo: typing.Optional[str] = None
16
+ Message: typing.Optional[str] = None
17
+
18
+
19
+ @attr.s(auto_attribs=True)
20
+ class ResultsType:
21
+ ShipmentID: typing.Optional[int] = None
22
+ ShipmentRef: typing.Optional[str] = None
23
+ TrackingID: typing.Optional[str] = None
24
+ Success: typing.Optional[int] = None
25
+ Errors: typing.Optional[typing.List[ErrorType]] = jstruct.JList[ErrorType]
26
+ Warnings: typing.Optional[typing.List[WarningType]] = jstruct.JList[WarningType]
27
+
28
+
29
+ @attr.s(auto_attribs=True)
30
+ class CancelResponseType:
31
+ status: typing.Optional[int] = None
32
+ success: typing.Optional[int] = None
33
+ message: typing.Optional[str] = None
34
+ type: typing.Optional[str] = None
35
+ instance: typing.Optional[str] = None
36
+ results: typing.Optional[ResultsType] = jstruct.JStruct[ResultsType]
37
+ UniqId: typing.Optional[str] = None
@@ -1,27 +1,21 @@
1
- """ParcelOne REST API v1 - Error Types."""
2
-
3
1
  import attr
4
2
  import jstruct
5
3
  import typing
6
4
 
7
5
 
8
6
  @attr.s(auto_attribs=True)
9
- class ErrorDetailType:
10
- """Error detail information."""
11
-
7
+ class ErrorType:
12
8
  ErrorNo: typing.Optional[str] = None
13
9
  Message: typing.Optional[str] = None
14
- StatusCode: typing.Optional[str] = None
10
+ StatusCode: typing.Optional[int] = None
15
11
 
16
12
 
17
13
  @attr.s(auto_attribs=True)
18
14
  class ErrorResponseType:
19
- """API error response."""
20
-
21
15
  status: typing.Optional[int] = None
22
16
  success: typing.Optional[int] = None
23
17
  message: typing.Optional[str] = None
24
18
  type: typing.Optional[str] = None
25
19
  instance: typing.Optional[str] = None
26
- errors: typing.Optional[typing.List[ErrorDetailType]] = jstruct.JList[ErrorDetailType]
20
+ errors: typing.Optional[typing.List[ErrorType]] = jstruct.JList[ErrorType]
27
21
  UniqId: typing.Optional[str] = None
@@ -1,69 +1,16 @@
1
- """ParcelOne Shipping REST API v1 - Request Types."""
2
-
3
1
  import attr
4
2
  import jstruct
5
3
  import typing
6
4
 
7
5
 
8
6
  @attr.s(auto_attribs=True)
9
- class AddressType:
10
- """Address data format."""
11
-
12
- Street: typing.Optional[str] = None
13
- Streetno: typing.Optional[str] = None
14
- PostalCode: typing.Optional[str] = None
15
- City: typing.Optional[str] = None
16
- District: typing.Optional[str] = None
17
- State: typing.Optional[str] = None
18
- Country: typing.Optional[str] = None
19
-
20
-
21
- @attr.s(auto_attribs=True)
22
- class ContactType:
23
- """Contact information."""
24
-
25
- Email: typing.Optional[str] = None
26
- Phone: typing.Optional[str] = None
27
- Mobile: typing.Optional[str] = None
28
- Fax: typing.Optional[str] = None
29
- AttentionName: typing.Optional[str] = None
30
-
31
-
32
- @attr.s(auto_attribs=True)
33
- class ShipToType:
34
- """Recipient/consignee address data."""
35
-
36
- Name1: typing.Optional[str] = None
37
- Name2: typing.Optional[str] = None
38
- Name3: typing.Optional[str] = None
39
- Reference: typing.Optional[str] = None
40
- ShipmentAddress: typing.Optional[AddressType] = jstruct.JStruct[AddressType]
41
- ShipmentContact: typing.Optional[ContactType] = jstruct.JStruct[ContactType]
42
- PrivateAddressIndicator: typing.Optional[int] = None
43
- SalesTaxID: typing.Optional[str] = None
44
- CustomsID: typing.Optional[str] = None
45
- BranchID: typing.Optional[str] = None
46
- CEPCustID: typing.Optional[str] = None
47
-
48
-
49
- @attr.s(auto_attribs=True)
50
- class ShipFromType:
51
- """Consigner/sender address data."""
52
-
53
- Name1: typing.Optional[str] = None
54
- Name2: typing.Optional[str] = None
55
- Name3: typing.Optional[str] = None
56
- Reference: typing.Optional[str] = None
57
- ShipmentAddress: typing.Optional[AddressType] = jstruct.JStruct[AddressType]
58
- ShipmentContact: typing.Optional[ContactType] = jstruct.JStruct[ContactType]
59
- SalesTaxID: typing.Optional[str] = None
60
- CustomsID: typing.Optional[str] = None
7
+ class CepSpecialType:
8
+ Key: typing.Optional[str] = None
9
+ Value: typing.Optional[str] = None
61
10
 
62
11
 
63
12
  @attr.s(auto_attribs=True)
64
13
  class FormatType:
65
- """Document format specification."""
66
-
67
14
  Type: typing.Optional[str] = None
68
15
  Size: typing.Optional[str] = None
69
16
  Unit: typing.Optional[str] = None
@@ -73,122 +20,175 @@ class FormatType:
73
20
 
74
21
 
75
22
  @attr.s(auto_attribs=True)
76
- class MeasurementType:
77
- """Weight or volume measurement."""
78
-
79
- Unit: typing.Optional[str] = None
23
+ class MaxChargesType:
24
+ Currency: typing.Optional[str] = None
80
25
  Value: typing.Optional[str] = None
26
+ Description: typing.Optional[str] = None
27
+
28
+
29
+ @attr.s(auto_attribs=True)
30
+ class CustomDetailType:
31
+ Contents: typing.Optional[str] = None
32
+ Quantity: typing.Optional[int] = None
33
+ NetWeightPerItem: typing.Optional[float] = None
34
+ NetWeight: typing.Optional[float] = None
35
+ ItemValuePerItem: typing.Optional[float] = None
36
+ ItemValue: typing.Optional[float] = None
37
+ TariffNumber: typing.Optional[int] = None
38
+ Origin: typing.Optional[str] = None
39
+ AdditionalInfo: typing.Optional[typing.List[CepSpecialType]] = jstruct.JList[CepSpecialType]
81
40
 
82
41
 
83
42
  @attr.s(auto_attribs=True)
84
- class DimensionsType:
85
- """Package dimensions."""
43
+ class IntDocDataType:
44
+ PrintInternationalDocuments: typing.Optional[int] = None
45
+ InternationalDocumentFormat: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
46
+ ConsignerCustomsID: typing.Optional[int] = None
47
+ ShipToRef: typing.Optional[str] = None
48
+ CustomDetails: typing.Optional[typing.List[CustomDetailType]] = jstruct.JList[CustomDetailType]
49
+ Postage: typing.Optional[float] = None
50
+ TotalValue: typing.Optional[float] = None
51
+ Currency: typing.Optional[str] = None
52
+ TotalWeightkg: typing.Optional[float] = None
53
+ ItemCategory: typing.Optional[int] = None
54
+ Explanation: typing.Optional[str] = None
55
+ OfficeOfOrigin: typing.Optional[str] = None
56
+ Comments: typing.Optional[str] = None
57
+ Date: typing.Optional[str] = None
58
+ License: typing.Optional[int] = None
59
+ LicenseNo: typing.Optional[str] = None
60
+ Certificate: typing.Optional[int] = None
61
+ CertificateNo: typing.Optional[str] = None
62
+ Invoice: typing.Optional[int] = None
63
+ InvoiceNo: typing.Optional[str] = None
64
+ NonDeliveryInstruction: typing.Optional[str] = None
65
+ ServiceLevel: typing.Optional[str] = None
66
+ ValidatedForExport: typing.Optional[str] = None
67
+ AdditionalInfo: typing.Optional[typing.List[CepSpecialType]] = jstruct.JList[CepSpecialType]
86
68
 
69
+
70
+ @attr.s(auto_attribs=True)
71
+ class PackageDimensionsType:
72
+ Measurement: typing.Optional[str] = None
87
73
  Length: typing.Optional[str] = None
88
74
  Width: typing.Optional[str] = None
89
75
  Height: typing.Optional[str] = None
90
76
 
91
77
 
92
78
  @attr.s(auto_attribs=True)
93
- class AmountType:
94
- """Monetary amount."""
95
-
96
- Currency: typing.Optional[str] = None
79
+ class PackageVolumeClassType:
80
+ Unit: typing.Optional[str] = None
97
81
  Value: typing.Optional[str] = None
98
- Description: typing.Optional[str] = None
99
82
 
100
83
 
101
84
  @attr.s(auto_attribs=True)
102
- class ShipmentServiceType:
103
- """Service for shipment or package."""
104
-
85
+ class ServiceType:
105
86
  ServiceID: typing.Optional[str] = None
106
- Value: typing.Optional[AmountType] = jstruct.JStruct[AmountType]
87
+ Value: typing.Optional[MaxChargesType] = jstruct.JStruct[MaxChargesType]
107
88
  Parameters: typing.Optional[str] = None
108
89
 
109
90
 
110
91
  @attr.s(auto_attribs=True)
111
- class CustomDetailType:
112
- """Customs detail line item."""
113
-
114
- Contents: typing.Optional[str] = None
115
- ItemValue: typing.Optional[float] = None
116
- ItemValuePerItem: typing.Optional[float] = None
117
- NetWeight: typing.Optional[float] = None
118
- NetWeightPerItem: typing.Optional[float] = None
119
- Origin: typing.Optional[str] = None
120
- Quantity: typing.Optional[int] = None
121
- TariffNumber: typing.Optional[str] = None
92
+ class PackageType:
93
+ PackageID: typing.Optional[str] = None
94
+ PackageRef: typing.Optional[str] = None
95
+ PackageTrackingID: typing.Optional[str] = None
96
+ PackageType: typing.Optional[str] = None
97
+ PackageWeight: typing.Optional[PackageVolumeClassType] = jstruct.JStruct[PackageVolumeClassType]
98
+ PackageDimensions: typing.Optional[PackageDimensionsType] = jstruct.JStruct[PackageDimensionsType]
99
+ PackageVolume: typing.Optional[PackageVolumeClassType] = jstruct.JStruct[PackageVolumeClassType]
100
+ Services: typing.Optional[typing.List[ServiceType]] = jstruct.JList[ServiceType]
101
+ IntDocData: typing.Optional[IntDocDataType] = jstruct.JStruct[IntDocDataType]
102
+ Remarks: typing.Optional[str] = None
122
103
 
123
104
 
124
105
  @attr.s(auto_attribs=True)
125
- class InternationalDocFormatType:
126
- """International document format."""
127
-
128
- Type: typing.Optional[str] = None
129
- Size: typing.Optional[str] = None
106
+ class BankAccountType:
107
+ BankCode: typing.Optional[str] = None
108
+ Bank: typing.Optional[str] = None
109
+ AccountOwner: typing.Optional[str] = None
110
+ AccountNumber: typing.Optional[str] = None
111
+ Iban: typing.Optional[str] = None
112
+ Bic: typing.Optional[str] = None
130
113
 
131
114
 
132
115
  @attr.s(auto_attribs=True)
133
- class IntDocDataType:
134
- """International/customs documentation data."""
135
-
136
- ConsignerCustomsID: typing.Optional[str] = None
137
- Invoice: typing.Optional[int] = None
138
- InvoiceNo: typing.Optional[str] = None
139
- PrintInternationalDocuments: typing.Optional[int] = None
140
- InternationalDocumentFormat: typing.Optional[InternationalDocFormatType] = jstruct.JStruct[InternationalDocFormatType]
141
- ShipToRef: typing.Optional[str] = None
142
- TotalWeightkg: typing.Optional[float] = None
143
- Postage: typing.Optional[float] = None
144
- ItemCategory: typing.Optional[int] = None
145
- CustomDetails: typing.Optional[typing.List[CustomDetailType]] = jstruct.JList[CustomDetailType]
116
+ class ShipmentAddressType:
117
+ Street: typing.Optional[str] = None
118
+ Streetno: typing.Optional[int] = None
119
+ PostalCode: typing.Optional[int] = None
120
+ City: typing.Optional[str] = None
121
+ District: typing.Optional[str] = None
122
+ State: typing.Optional[str] = None
123
+ Country: typing.Optional[str] = None
146
124
 
147
125
 
148
126
  @attr.s(auto_attribs=True)
149
- class ShipmentPackageType:
150
- """Package within a shipment."""
151
-
152
- PackageRef: typing.Optional[str] = None
153
- PackageType: typing.Optional[str] = None
154
- PackageWeight: typing.Optional[MeasurementType] = jstruct.JStruct[MeasurementType]
155
- PackageDimensions: typing.Optional[DimensionsType] = jstruct.JStruct[DimensionsType]
156
- PackageVolume: typing.Optional[MeasurementType] = jstruct.JStruct[MeasurementType]
157
- Services: typing.Optional[typing.List[ShipmentServiceType]] = jstruct.JList[ShipmentServiceType]
158
- IntDocData: typing.Optional[IntDocDataType] = jstruct.JStruct[IntDocDataType]
159
- Remarks: typing.Optional[str] = None
127
+ class ShipmentContactType:
128
+ Email: typing.Optional[str] = None
129
+ Phone: typing.Optional[str] = None
130
+ Mobile: typing.Optional[str] = None
131
+ Fax: typing.Optional[str] = None
132
+ Company: typing.Optional[str] = None
133
+ ContactPerson: typing.Optional[str] = None
134
+ AttentionName: typing.Optional[str] = None
135
+ Salutation: typing.Optional[str] = None
136
+ FirstName: typing.Optional[str] = None
137
+ LastName: typing.Optional[str] = None
138
+ BirthDate: typing.Optional[str] = None
160
139
 
161
140
 
162
141
  @attr.s(auto_attribs=True)
163
- class CEPSpecialType:
164
- """CEP-specific special options."""
165
-
166
- Key: typing.Optional[str] = None
167
- Value: typing.Optional[str] = None
142
+ class ShipFromDataType:
143
+ Reference: typing.Optional[str] = None
144
+ Name1: typing.Optional[str] = None
145
+ Name2: typing.Optional[str] = None
146
+ Name3: typing.Optional[str] = None
147
+ ShipmentAddress: typing.Optional[ShipmentAddressType] = jstruct.JStruct[ShipmentAddressType]
148
+ ShipmentContact: typing.Optional[ShipmentContactType] = jstruct.JStruct[ShipmentContactType]
149
+ SalesTaxID: typing.Optional[str] = None
150
+ CustomsID: typing.Optional[str] = None
151
+ BankAccount: typing.Optional[BankAccountType] = jstruct.JStruct[BankAccountType]
168
152
 
169
153
 
170
154
  @attr.s(auto_attribs=True)
171
- class ShipmentType:
172
- """Complete shipment registration request."""
155
+ class ShipToDataType:
156
+ Reference: typing.Optional[str] = None
157
+ Name1: typing.Optional[str] = None
158
+ Name2: typing.Optional[str] = None
159
+ Name3: typing.Optional[str] = None
160
+ ShipmentAddress: typing.Optional[ShipmentAddressType] = jstruct.JStruct[ShipmentAddressType]
161
+ PrivateAddressIndicator: typing.Optional[int] = None
162
+ ShipmentContact: typing.Optional[ShipmentContactType] = jstruct.JStruct[ShipmentContactType]
163
+ SalesTaxID: typing.Optional[str] = None
164
+ CustomsID: typing.Optional[str] = None
165
+ BranchID: typing.Optional[str] = None
166
+ CEPCustID: typing.Optional[str] = None
167
+
173
168
 
169
+ @attr.s(auto_attribs=True)
170
+ class ShippingDataType:
171
+ ShipmentID: typing.Optional[str] = None
174
172
  ShipmentRef: typing.Optional[str] = None
173
+ TrackingID: typing.Optional[str] = None
175
174
  CEPID: typing.Optional[str] = None
176
175
  ProductID: typing.Optional[str] = None
177
- MandatorID: typing.Optional[str] = None
178
- ConsignerID: typing.Optional[str] = None
179
- ShipToData: typing.Optional[ShipToType] = jstruct.JStruct[ShipToType]
180
- ShipFromData: typing.Optional[ShipFromType] = jstruct.JStruct[ShipFromType]
176
+ CustomerID: typing.Optional[str] = None
177
+ MandatorID: typing.Optional[int] = None
178
+ ConsignerID: typing.Optional[int] = None
179
+ ShipToData: typing.Optional[ShipToDataType] = jstruct.JStruct[ShipToDataType]
180
+ ShipFromData: typing.Optional[ShipFromDataType] = jstruct.JStruct[ShipFromDataType]
181
181
  ReturnShipmentIndicator: typing.Optional[int] = None
182
182
  PrintLabel: typing.Optional[int] = None
183
183
  LabelFormat: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
184
184
  PrintDocuments: typing.Optional[int] = None
185
- DocumentFormat: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
186
185
  ReturnCharges: typing.Optional[int] = None
187
- MaxCharges: typing.Optional[AmountType] = jstruct.JStruct[AmountType]
186
+ MaxCharges: typing.Optional[MaxChargesType] = jstruct.JStruct[MaxChargesType]
187
+ DocumentFormat: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
188
188
  Software: typing.Optional[str] = None
189
- Packages: typing.Optional[typing.List[ShipmentPackageType]] = jstruct.JList[ShipmentPackageType]
190
- Services: typing.Optional[typing.List[ShipmentServiceType]] = jstruct.JList[ShipmentServiceType]
191
- CEPSpecials: typing.Optional[typing.List[CEPSpecialType]] = jstruct.JList[CEPSpecialType]
189
+ Packages: typing.Optional[typing.List[PackageType]] = jstruct.JList[PackageType]
190
+ Services: typing.Optional[typing.List[ServiceType]] = jstruct.JList[ServiceType]
191
+ CEPSpecials: typing.Optional[typing.List[CepSpecialType]] = jstruct.JList[CepSpecialType]
192
192
  CostCenter: typing.Optional[str] = None
193
193
  Other1: typing.Optional[str] = None
194
194
  Other2: typing.Optional[str] = None
@@ -196,7 +196,5 @@ class ShipmentType:
196
196
 
197
197
 
198
198
  @attr.s(auto_attribs=True)
199
- class ShippingDataRequestType:
200
- """Root shipping data request wrapper."""
201
-
202
- ShippingData: typing.Optional[ShipmentType] = jstruct.JStruct[ShipmentType]
199
+ class ShippingRequestType:
200
+ ShippingData: typing.Optional[ShippingDataType] = jstruct.JStruct[ShippingDataType]
@@ -1,108 +1,90 @@
1
- """ParcelOne Shipping REST API v1 - Response Types."""
2
-
3
1
  import attr
4
2
  import jstruct
5
3
  import typing
6
4
 
7
5
 
8
6
  @attr.s(auto_attribs=True)
9
- class FormatType:
10
- """Document format."""
11
-
12
- Type: typing.Optional[str] = None
13
- Size: typing.Optional[str] = None
14
- Unit: typing.Optional[str] = None
15
- Orientation: typing.Optional[int] = None
16
- Height: typing.Optional[str] = None
17
- Width: typing.Optional[str] = None
18
-
19
-
20
- @attr.s(auto_attribs=True)
21
- class AmountType:
22
- """Monetary amount."""
23
-
24
- Currency: typing.Optional[str] = None
25
- Value: typing.Optional[str] = None
26
- Description: typing.Optional[str] = None
27
-
28
-
29
- @attr.s(auto_attribs=True)
30
- class ShipmentErrorType:
31
- """Error information."""
32
-
7
+ class ErrorType:
33
8
  ErrorNo: typing.Optional[str] = None
34
9
  Message: typing.Optional[str] = None
35
- StatusCode: typing.Optional[str] = None
10
+ StatusCode: typing.Optional[int] = None
36
11
 
37
12
 
38
13
  @attr.s(auto_attribs=True)
39
- class ShipmentWarningType:
40
- """Warning information."""
41
-
14
+ class WarningType:
42
15
  WarningNo: typing.Optional[str] = None
43
16
  Message: typing.Optional[str] = None
44
- StatusCode: typing.Optional[str] = None
17
+ StatusCode: typing.Optional[int] = None
45
18
 
46
19
 
47
20
  @attr.s(auto_attribs=True)
48
- class ShipmentActionResultType:
49
- """Result of shipment action with IDs and status."""
50
-
51
- ShipmentID: typing.Optional[str] = None
21
+ class ActionResultType:
22
+ ShipmentID: typing.Optional[int] = None
52
23
  ShipmentRef: typing.Optional[str] = None
53
24
  TrackingID: typing.Optional[str] = None
54
25
  Success: typing.Optional[int] = None
55
- Errors: typing.Optional[typing.List[ShipmentErrorType]] = jstruct.JList[ShipmentErrorType]
56
- Warnings: typing.Optional[typing.List[ShipmentWarningType]] = jstruct.JList[ShipmentWarningType]
26
+ Errors: typing.Optional[typing.List[ErrorType]] = jstruct.JList[ErrorType]
27
+ Warnings: typing.Optional[typing.List[WarningType]] = jstruct.JList[WarningType]
57
28
 
58
29
 
59
30
  @attr.s(auto_attribs=True)
60
- class ShipmentPackageResultType:
61
- """Package result with label and tracking info."""
62
-
63
- ShipmentID: typing.Optional[str] = None
64
- PackageID: typing.Optional[int] = None
65
- PackageRef: typing.Optional[str] = None
66
- TrackingID: typing.Optional[str] = None
67
- DocType: typing.Optional[str] = None
68
- Format: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
69
- Label: typing.Optional[str] = None
70
- TrackingURL: typing.Optional[str] = None
71
- CarrierTrackURL: typing.Optional[str] = None
72
- Charges: typing.Optional[typing.List[AmountType]] = jstruct.JList[AmountType]
31
+ class TotalChargesType:
32
+ Currency: typing.Optional[str] = None
33
+ Value: typing.Optional[str] = None
34
+ Description: typing.Optional[str] = None
73
35
 
74
36
 
75
37
  @attr.s(auto_attribs=True)
76
- class ShipmentDocumentsResultType:
77
- """Document result (returns, customs docs, etc)."""
38
+ class FormatType:
39
+ Type: typing.Optional[str] = None
40
+ Size: typing.Optional[str] = None
41
+ Unit: typing.Optional[str] = None
42
+ Orientation: typing.Optional[int] = None
43
+ Height: typing.Optional[int] = None
44
+ Width: typing.Optional[int] = None
45
+
78
46
 
79
- ShipmentID: typing.Optional[str] = None
80
- PackageID: typing.Optional[str] = None
47
+ @attr.s(auto_attribs=True)
48
+ class DocumentsResultType:
49
+ ShipmentID: typing.Optional[int] = None
50
+ PackageID: typing.Optional[int] = None
81
51
  TrackingID: typing.Optional[str] = None
82
52
  DocType: typing.Optional[str] = None
83
53
  Format: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
84
54
  Document: typing.Optional[str] = None
85
- Charges: typing.Optional[typing.List[AmountType]] = jstruct.JList[AmountType]
55
+ Charges: typing.Optional[typing.List[TotalChargesType]] = jstruct.JList[TotalChargesType]
86
56
  PackageRef: typing.Optional[str] = None
87
57
  PackageTrackingID: typing.Optional[str] = None
88
- ActionResult: typing.Optional[ShipmentActionResultType] = jstruct.JStruct[ShipmentActionResultType]
58
+ ActionResult: typing.Optional[ActionResultType] = jstruct.JStruct[ActionResultType]
89
59
  DocumentID: typing.Optional[str] = None
90
60
  Type: typing.Optional[str] = None
91
61
  Size: typing.Optional[str] = None
92
62
 
93
63
 
94
64
  @attr.s(auto_attribs=True)
95
- class ShipmentResultType:
96
- """Complete shipment result with labels and documents."""
65
+ class PackageResultType:
66
+ ShipmentID: typing.Optional[int] = None
67
+ PackageID: typing.Optional[int] = None
68
+ PackageRef: typing.Optional[str] = None
69
+ TrackingID: typing.Optional[str] = None
70
+ DocType: typing.Optional[str] = None
71
+ Format: typing.Optional[FormatType] = jstruct.JStruct[FormatType]
72
+ Label: typing.Optional[str] = None
73
+ TrackingURL: typing.Optional[str] = None
74
+ CarrierTrackURL: typing.Optional[str] = None
75
+ Charges: typing.Optional[typing.List[TotalChargesType]] = jstruct.JList[TotalChargesType]
76
+
97
77
 
98
- YourShipmentID: typing.Optional[str] = None
99
- ActionResult: typing.Optional[ShipmentActionResultType] = jstruct.JStruct[ShipmentActionResultType]
78
+ @attr.s(auto_attribs=True)
79
+ class ResultsType:
80
+ YourShipmentID: typing.Optional[int] = None
81
+ ActionResult: typing.Optional[ActionResultType] = jstruct.JStruct[ActionResultType]
100
82
  LabelURL: typing.Optional[str] = None
101
- Charges: typing.Optional[typing.List[AmountType]] = jstruct.JList[AmountType]
102
- TotalCharges: typing.Optional[AmountType] = jstruct.JStruct[AmountType]
103
- PackageResults: typing.Optional[typing.List[ShipmentPackageResultType]] = jstruct.JList[ShipmentPackageResultType]
104
- DocumentsResults: typing.Optional[typing.List[ShipmentDocumentsResultType]] = jstruct.JList[ShipmentDocumentsResultType]
105
- InternationalDocumentsResults: typing.Optional[typing.List[ShipmentDocumentsResultType]] = jstruct.JList[ShipmentDocumentsResultType]
83
+ Charges: typing.Optional[typing.List[TotalChargesType]] = jstruct.JList[TotalChargesType]
84
+ TotalCharges: typing.Optional[TotalChargesType] = jstruct.JStruct[TotalChargesType]
85
+ PackageResults: typing.Optional[typing.List[PackageResultType]] = jstruct.JList[PackageResultType]
86
+ DocumentsResults: typing.Optional[typing.List[DocumentsResultType]] = jstruct.JList[DocumentsResultType]
87
+ InternationalDocumentsResults: typing.Optional[typing.List[DocumentsResultType]] = jstruct.JList[DocumentsResultType]
106
88
  LabelsAvailable: typing.Optional[int] = None
107
89
  DocumentsAvailable: typing.Optional[int] = None
108
90
  InternationalDocumentsAvailable: typing.Optional[int] = None
@@ -111,61 +93,10 @@ class ShipmentResultType:
111
93
 
112
94
  @attr.s(auto_attribs=True)
113
95
  class ShippingResponseType:
114
- """Root shipping response wrapper."""
115
-
116
- status: typing.Optional[int] = None
117
- success: typing.Optional[int] = None
118
- message: typing.Optional[str] = None
119
- type: typing.Optional[str] = None
120
- instance: typing.Optional[str] = None
121
- results: typing.Optional[ShipmentResultType] = jstruct.JStruct[ShipmentResultType]
122
- UniqId: typing.Optional[str] = None
123
-
124
-
125
- @attr.s(auto_attribs=True)
126
- class ShipmentStatusResultType:
127
- """Shipment status result."""
128
-
129
- ActionResult: typing.Optional[ShipmentActionResultType] = jstruct.JStruct[ShipmentActionResultType]
130
- ShipmentStatusCode: typing.Optional[str] = None
131
- ShipmentStatus: typing.Optional[str] = None
132
- LastTrackingNo: typing.Optional[str] = None
133
- LastCEP: typing.Optional[str] = None
134
-
135
-
136
- @attr.s(auto_attribs=True)
137
- class ShipmentStatusResponseType:
138
- """Shipment status API response."""
139
-
140
- status: typing.Optional[int] = None
141
- success: typing.Optional[int] = None
142
- message: typing.Optional[str] = None
143
- type: typing.Optional[str] = None
144
- instance: typing.Optional[str] = None
145
- results: typing.Optional[ShipmentStatusResultType] = jstruct.JStruct[ShipmentStatusResultType]
146
- UniqId: typing.Optional[str] = None
147
-
148
-
149
- @attr.s(auto_attribs=True)
150
- class CancelShipmentResultType:
151
- """Cancel shipment result."""
152
-
153
- ShipmentID: typing.Optional[str] = None
154
- ShipmentRef: typing.Optional[str] = None
155
- TrackingID: typing.Optional[str] = None
156
- Success: typing.Optional[int] = None
157
- Errors: typing.Optional[typing.List[ShipmentErrorType]] = jstruct.JList[ShipmentErrorType]
158
- Warnings: typing.Optional[typing.List[ShipmentWarningType]] = jstruct.JList[ShipmentWarningType]
159
-
160
-
161
- @attr.s(auto_attribs=True)
162
- class CancelShipmentResponseType:
163
- """Cancel shipment API response."""
164
-
165
96
  status: typing.Optional[int] = None
166
97
  success: typing.Optional[int] = None
167
98
  message: typing.Optional[str] = None
168
99
  type: typing.Optional[str] = None
169
100
  instance: typing.Optional[str] = None
170
- results: typing.Optional[CancelShipmentResultType] = jstruct.JStruct[CancelShipmentResultType]
171
101
  UniqId: typing.Optional[str] = None
102
+ results: typing.Optional[ResultsType] = jstruct.JStruct[ResultsType]
@@ -1,14 +1,10 @@
1
- """ParcelOne TrackLMC REST API v1 - Response Types."""
2
-
3
1
  import attr
4
2
  import jstruct
5
3
  import typing
6
4
 
7
5
 
8
6
  @attr.s(auto_attribs=True)
9
- class TrackingEventType:
10
- """Single tracking event."""
11
-
7
+ class EventType:
12
8
  DateTime: typing.Optional[str] = None
13
9
  Location: typing.Optional[str] = None
14
10
  Status: typing.Optional[str] = None
@@ -18,9 +14,7 @@ class TrackingEventType:
18
14
 
19
15
 
20
16
  @attr.s(auto_attribs=True)
21
- class TrackingResultType:
22
- """Tracking result with events."""
23
-
17
+ class ResultsType:
24
18
  TrackingID: typing.Optional[str] = None
25
19
  CarrierIDLMC: typing.Optional[str] = None
26
20
  CarrierTrackingID: typing.Optional[str] = None
@@ -29,17 +23,15 @@ class TrackingResultType:
29
23
  DeliveryDate: typing.Optional[str] = None
30
24
  EstimatedDelivery: typing.Optional[str] = None
31
25
  SignedBy: typing.Optional[str] = None
32
- Events: typing.Optional[typing.List[TrackingEventType]] = jstruct.JList[TrackingEventType]
26
+ Events: typing.Optional[typing.List[EventType]] = jstruct.JList[EventType]
33
27
 
34
28
 
35
29
  @attr.s(auto_attribs=True)
36
30
  class TrackingResponseType:
37
- """TrackLMC API response."""
38
-
39
31
  status: typing.Optional[int] = None
40
32
  success: typing.Optional[int] = None
41
33
  message: typing.Optional[str] = None
42
34
  type: typing.Optional[str] = None
43
35
  instance: typing.Optional[str] = None
44
- results: typing.Optional[TrackingResultType] = jstruct.JStruct[TrackingResultType]
45
36
  UniqId: typing.Optional[str] = None
37
+ results: typing.Optional[ResultsType] = jstruct.JStruct[ResultsType]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: karrio_parcelone
3
- Version: 2026.1.3
3
+ Version: 2026.1.5
4
4
  Summary: Karrio - ParcelOne Shipping Extension
5
5
  Author-email: karrio <hello@karrio.io>
6
6
  License-Expression: LGPL-3.0
@@ -0,0 +1,27 @@
1
+ karrio/mappers/parcelone/__init__.py,sha256=Hm9BZgD1F-cH6se9I5Lm9UbfPiN_QcdQ4A5ttNVN6Bo,155
2
+ karrio/mappers/parcelone/mapper.py,sha256=Ykbr_l7VrHOK-AwRDkdYoz9yxkIDwOrnlr9YmmORlzA,1967
3
+ karrio/mappers/parcelone/proxy.py,sha256=hzpB2eXCdB8Kf2PF6wbhYCuKOHwttM-Vuqruut1nWCE,3050
4
+ karrio/mappers/parcelone/settings.py,sha256=pV7bY8h1r-f9MFO3YlOVz-HUM2CEmTY0wV7SMhxvSPM,1093
5
+ karrio/plugins/parcelone/__init__.py,sha256=NgOrhNfRNOrM01LHrPXtbXiRYuK52NOzB1eW71ZQsys,1059
6
+ karrio/providers/parcelone/__init__.py,sha256=rPdlLNi9BuIe-KvOGApmypWKXe6ed1OZdSk-iJ7mYEE,458
7
+ karrio/providers/parcelone/error.py,sha256=S1eHg4Glhg4bJeUQQIrPa4Xqoc7aD0UpWnT4WRUHDwI,2680
8
+ karrio/providers/parcelone/rate.py,sha256=K3VphVI_fsF23auRoMYi_0tS4q9zGf2l-aNyY09rPKY,6033
9
+ karrio/providers/parcelone/tracking.py,sha256=XM3SfCNULOH5GOyTa0u_Yqbj7I7fjAXQjnh6Bk2yMV8,4857
10
+ karrio/providers/parcelone/units.py,sha256=gUseSpPbmf9Yei85Q6z8JZSwQ0usUj3fKJ52guI4oMI,12227
11
+ karrio/providers/parcelone/utils.py,sha256=RCFFMyvnzamRZozZPH9y1kaoI3cqqLhkTI52Tu9bIyk,1594
12
+ karrio/providers/parcelone/shipment/__init__.py,sha256=PHnQyOCF2Nd7pJ2um51RBubPNBlN72w41Ialoz93qB4,411
13
+ karrio/providers/parcelone/shipment/cancel.py,sha256=s53xX1bu6P6Wufht5zYpg_k3MgnegJXd-qf1nS6GGvk,2201
14
+ karrio/providers/parcelone/shipment/create.py,sha256=_siw6FYpZ7xxHC4t38pa27Gch_gXmPrayitvgS02JSI,10338
15
+ karrio/schemas/parcelone/__init__.py,sha256=JWQD0_qIcLhbrFDRIR_TROC25mCP9GN6VDfn8vBicmc,1975
16
+ karrio/schemas/parcelone/cancel_response.py,sha256=emn2bClHL8bqh3w_1dOHGVbchq_2RHKoZBzcPBiTJcI,1101
17
+ karrio/schemas/parcelone/error.py,sha256=wQ8UxZwuW-G9Wy3u1B-7AfPNrGy_AgFaFPcCXq1TT9E,588
18
+ karrio/schemas/parcelone/shipping_request.py,sha256=HCHpQetWWeARWvr66_zAZrplK-NU1x_KbKsFp3N0DcY,7755
19
+ karrio/schemas/parcelone/shipping_response.py,sha256=Hj_AsUU8vaigQGtlEfVmWawJftbCI4ujdEnLz8S_eu0,3890
20
+ karrio/schemas/parcelone/tracking_response.py,sha256=TvfXW5XlplSUIWimpv_nADWhMduE1YOizFYxvEsZByU,1204
21
+ modules/connectors/parcelone/karrio/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ modules/connectors/parcelone/karrio/schemas/parcelone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ karrio_parcelone-2026.1.5.dist-info/METADATA,sha256=dkwJPzDlHY_iiKbZ7JzTBk-8i9FMB7Y23YHF7oIlhJY,1158
24
+ karrio_parcelone-2026.1.5.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
25
+ karrio_parcelone-2026.1.5.dist-info/entry_points.txt,sha256=1OkpMf6SZ1OT_O_KDu2HDN1aAi53cZs7hKuEMZeBob0,63
26
+ karrio_parcelone-2026.1.5.dist-info/top_level.txt,sha256=vW2vHMlcvPhowYde9HXvS4SbHP3s8Kk0TmJE1d4dfHE,35
27
+ karrio_parcelone-2026.1.5.dist-info/RECORD,,
@@ -1,26 +0,0 @@
1
- karrio/mappers/parcelone/__init__.py,sha256=Hm9BZgD1F-cH6se9I5Lm9UbfPiN_QcdQ4A5ttNVN6Bo,155
2
- karrio/mappers/parcelone/mapper.py,sha256=Ykbr_l7VrHOK-AwRDkdYoz9yxkIDwOrnlr9YmmORlzA,1967
3
- karrio/mappers/parcelone/proxy.py,sha256=hzpB2eXCdB8Kf2PF6wbhYCuKOHwttM-Vuqruut1nWCE,3050
4
- karrio/mappers/parcelone/settings.py,sha256=pV7bY8h1r-f9MFO3YlOVz-HUM2CEmTY0wV7SMhxvSPM,1093
5
- karrio/plugins/parcelone/__init__.py,sha256=_HfYwz4S1WJ7slylNLWHgVdSiRRxLYG_HGcJ7_O1R-g,1016
6
- karrio/providers/parcelone/__init__.py,sha256=rPdlLNi9BuIe-KvOGApmypWKXe6ed1OZdSk-iJ7mYEE,458
7
- karrio/providers/parcelone/error.py,sha256=S1eHg4Glhg4bJeUQQIrPa4Xqoc7aD0UpWnT4WRUHDwI,2680
8
- karrio/providers/parcelone/rate.py,sha256=K3VphVI_fsF23auRoMYi_0tS4q9zGf2l-aNyY09rPKY,6033
9
- karrio/providers/parcelone/tracking.py,sha256=6K4PbYPM2KjgcmZZ1OxrcVrf9obSI9CAPlOvoq0mJqQ,4735
10
- karrio/providers/parcelone/units.py,sha256=522WoCocbz9I1Xzje7L1uC2wslLyd_C3-xk10-QWGf0,10415
11
- karrio/providers/parcelone/utils.py,sha256=RCFFMyvnzamRZozZPH9y1kaoI3cqqLhkTI52Tu9bIyk,1594
12
- karrio/providers/parcelone/shipment/__init__.py,sha256=PHnQyOCF2Nd7pJ2um51RBubPNBlN72w41Ialoz93qB4,411
13
- karrio/providers/parcelone/shipment/cancel.py,sha256=P4hufFBTOkyUFQgWqXR6SMS_grVWCuWwLb_cQvVRMLM,1995
14
- karrio/providers/parcelone/shipment/create.py,sha256=_siw6FYpZ7xxHC4t38pa27Gch_gXmPrayitvgS02JSI,10338
15
- karrio/schemas/parcelone/__init__.py,sha256=WfvAzf5Bf2YmkigHqWpsHgwfFZrRpBoDYojc2QMxjxY,250
16
- karrio/schemas/parcelone/error.py,sha256=Js8AAYR5m24C_anVYEhDUQ1e1wYI98HPVT8rCPn8eh0,718
17
- karrio/schemas/parcelone/shipping_request.py,sha256=cEmB5WMvWOAbzZPpPdLnKG0g8voWHkya7dKLWZkBF6c,6802
18
- karrio/schemas/parcelone/shipping_response.py,sha256=ufxUaLy_4ML05pADxIYHYOhxFapHbc18dgQ0UcEMoLQ,6205
19
- karrio/schemas/parcelone/tracking_response.py,sha256=emkJ4kcX3dnHPMCYz-CW6iCea0AlONdb_igba4UO-dQ,1413
20
- modules/connectors/parcelone/karrio/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- modules/connectors/parcelone/karrio/schemas/parcelone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- karrio_parcelone-2026.1.3.dist-info/METADATA,sha256=qYrQ-IQK1OeJTSXWs99W-d_huJaXZZnuszCQTDGBPS4,1158
23
- karrio_parcelone-2026.1.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
24
- karrio_parcelone-2026.1.3.dist-info/entry_points.txt,sha256=1OkpMf6SZ1OT_O_KDu2HDN1aAi53cZs7hKuEMZeBob0,63
25
- karrio_parcelone-2026.1.3.dist-info/top_level.txt,sha256=vW2vHMlcvPhowYde9HXvS4SbHP3s8Kk0TmJE1d4dfHE,35
26
- karrio_parcelone-2026.1.3.dist-info/RECORD,,