karrio-geodis 2025.5rc1__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.
@@ -0,0 +1,248 @@
1
+ from itertools import count
2
+ import karrio.lib as lib
3
+ import karrio.core.units as units
4
+ import karrio.core.models as models
5
+
6
+
7
+ class LabelType(lib.Enum):
8
+ PDF = "P"
9
+ PDF_themique = "T"
10
+ Json = "J"
11
+ EPL = "E"
12
+ ZPL_200dpi = "Z"
13
+ ZPL_300dpi = "Y"
14
+ ZPL_600dpi = "W"
15
+
16
+ ZPL = ZPL_300dpi
17
+ PNG = PDF
18
+
19
+
20
+ class Incoterm(lib.StrEnum):
21
+ CFR = "COST AND FREIGHT"
22
+ CIF = "COST, INSURANCE AND FREIGHT"
23
+ CIP = "CARRIAGE AND INSURANCE PAID TO"
24
+ CPT = "CARRIAGE PAID TO"
25
+ D = "CARRIAGE DUE"
26
+ DAF = "DELIVERED AT FRONTIER"
27
+ DAP = "DELIVERED AT PLACE"
28
+ DAT = "DELIVERED AT TERMINAL"
29
+ DDP = "DELIVERED DUTY PAID"
30
+ DDU = "DELIVERED DUTY UNPAID"
31
+ DEQ = "DELIVERED EX QUAY"
32
+ DES = "DELIVERED EX SHIP"
33
+ EXW = "EX WORKS"
34
+ FAS = "FREE ALONGSIDE SHIP"
35
+ FCA = "FREE CARRIER"
36
+ FDC = "FRANCO DOMICILE DEDOUANE"
37
+ FDU = "FRANCO DOMICILE NON DEDOUANE"
38
+ FOB = "FREE ON BOARD"
39
+ P = "CARRIAGE PAID"
40
+
41
+
42
+ class PackagingType(lib.StrEnum):
43
+ """Carrier specific packaging type"""
44
+
45
+ PACKAGE = "PACKAGE"
46
+
47
+ """ Unified Packaging type mapping """
48
+ envelope = PACKAGE
49
+ pak = PACKAGE
50
+ tube = PACKAGE
51
+ pallet = PACKAGE
52
+ small_box = PACKAGE
53
+ medium_box = PACKAGE
54
+ your_packaging = PACKAGE
55
+
56
+
57
+ class ConnectionConfig(lib.Enum):
58
+ agency_code = lib.OptionEnum("agency_code")
59
+
60
+
61
+ class ShippingService(lib.StrEnum):
62
+ """Carrier specific services"""
63
+
64
+ geodis_EXP = "EXP"
65
+ geodis_MES = "MES"
66
+ geodis_express_france = "NTX"
67
+ geodis_retour_trans_fr_messagerie_plus = "ENL"
68
+
69
+
70
+ class ShippingOption(lib.Enum):
71
+ """Carrier specific options"""
72
+
73
+ geodis_web_appointment = lib.OptionEnum("RDW", bool)
74
+ geodis_telephone_appointment = lib.OptionEnum("RDT", bool)
75
+ geodis_pick_up_at_a_geodis_agency = lib.OptionEnum("BRT", bool)
76
+ geodis_desired_date_of_delivery = lib.OptionEnum("DSL", bool)
77
+ geodis_delivery_on_a_saturday_morning = lib.OptionEnum("SAT", bool)
78
+
79
+ geodis_validate_envoi = lib.OptionEnum("validate_envoi", bool)
80
+ geodis_no_recepisse = lib.OptionEnum("no_recepisse")
81
+ geodis_instruction_enlevement = lib.OptionEnum("instruction_enlevement")
82
+ geodis_date_livraison = lib.OptionEnum("date_livraison")
83
+ geodis_heure_livraison = lib.OptionEnum("heure_livraison")
84
+ geodis_instruction_livraison = lib.OptionEnum("instruction_livraison")
85
+
86
+ """ Unified Option type mapping """
87
+ saturday_delivery = geodis_delivery_on_a_saturday_morning
88
+
89
+
90
+ def shipping_options_initializer(
91
+ options: dict,
92
+ package_options: units.ShippingOptions = None,
93
+ ) -> units.ShippingOptions:
94
+ """
95
+ Apply default values to the given options.
96
+ """
97
+
98
+ if package_options is not None:
99
+ options.update(package_options.content)
100
+
101
+ def items_filter(key: str) -> bool:
102
+ return key in ["RDW" "RDT", "BRT", "DSL", "SAT"]
103
+
104
+ return units.ShippingOptions(options, ShippingOption, items_filter=items_filter)
105
+
106
+
107
+ LABTEST_RATE_SHEET = [
108
+ # weight, 1001, 1002, 1003, 1007
109
+ (0.5, 49, 45, 53, 57),
110
+ (1, 52, 49, 58.25, 62.33),
111
+ (2, 56.85, 52.3, 65.52, 73.55),
112
+ (3, 64.27, 59.45, 71.78, 84.55),
113
+ (4, 70.92, 65.85, 77.5, 101.54),
114
+ (5, 81.85, 76.36, 89.04, 114.52),
115
+ (6, 86.59, 80.92, 93.86, 124.86),
116
+ (7, 92.78, 85.65, 101.12, 136.96),
117
+ (8, 95.04, 87.82, 108.65, 140.76),
118
+ (9, 98.29, 90.96, 111.24, 155.3),
119
+ (10, 99.38, 92, 113.76, 156.01),
120
+ (11, 99.92, 92.52, 114.2, 158.89),
121
+ (12, 100.83, 93.39, 115.23, 163.05),
122
+ (13, 110.65, 102.85, 126.47, 177.87),
123
+ (14, 117.14, 109.09, 137.07, 189.05),
124
+ (15, 119.56, 111.42, 139.25, 211.16),
125
+ (16, 130.04, 121.5, 144.96, 217.07),
126
+ (17, 131, 122.42, 148.01, 221.99),
127
+ (18, 133.1, 124.45, 150.56, 230.63),
128
+ (19, 133.96, 125.27, 156.72, 240.79),
129
+ (20, 136.25, 127.48, 157.88, 253.64),
130
+ (21, 141.53, 132.56, 161.94, 268.15),
131
+ (22, 142.47, 133.46, 162.8, 270.95),
132
+ (23, 143.33, 134.29, 163.58, 271.74),
133
+ (24, 144.1, 135.03, 164.64, 276.63),
134
+ (25, 145.46, 136.34, 165.95, 279.38),
135
+ (26, 179.69, 169.28, 207.52, 305.69),
136
+ (27, 187.89, 177.17, 218.5, 313.19),
137
+ (28, 191.51, 180.65, 219.41, 331.85),
138
+ (29, 192.26, 181.37, 223.14, 347.95),
139
+ (30, 193.03, 182.12, 227.02, 350),
140
+ (31, 196.46, 185.42, 235.14, 350.23),
141
+ (32, 197.18, 186.11, 235.78, 350.88),
142
+ (33, 198.05, 186.95, 241.1, 358.36),
143
+ (34, 198.82, 187.68, 243.97, 363.37),
144
+ (35, 199.55, 188.39, 251.02, 364.93),
145
+ (36, 200.36, 189.17, 252.83, 370.29),
146
+ (37, 201.06, 189.84, 253.53, 376.34),
147
+ (38, 209.95, 198.39, 259.95, 385.32),
148
+ (39, 219.27, 207.36, 264.51, 387.14),
149
+ (40, 220.5, 208.54, 275.76, 400.96),
150
+ (41, 221.3, 209.31, 277.4, 403.67),
151
+ (42, 222.24, 210.21, 279.07, 436),
152
+ (43, 227.36, 215.14, 289.98, 452.97),
153
+ (44, 235.77, 223.24, 297.17, 453.75),
154
+ (45, 236.9, 224.33, 298.18, 454.39),
155
+ (46, 238.34, 225.71, 298.96, 455.58),
156
+ (47, 239.04, 226.38, 305.55, 474.31),
157
+ (48, 239.78, 227.1, 310.68, 496.66),
158
+ (49, 242.16, 229.39, 311.31, 499.19),
159
+ (50, 245.52, 232.62, 312.11, 499.92),
160
+ (51, 247.86, 234.87, 322.96, 501.23),
161
+ (52, 248.18, 235.17, 323.27, 501.54),
162
+ (53, 255.48, 242.21, 327.89, 521.4),
163
+ (54, 255.81, 242.52, 328.22, 521.74),
164
+ (55, 261.77, 248.25, 332, 524.7),
165
+ (56, 262.08, 248.55, 332.31, 525.02),
166
+ (57, 268.97, 255.18, 336.38, 525.95),
167
+ (58, 269.28, 255.48, 336.69, 526.26),
168
+ (59, 279.46, 265.28, 340.87, 527.17),
169
+ (60, 279.94, 265.74, 341.34, 527.65),
170
+ (61, 280.79, 266.55, 342.9, 528.51),
171
+ (62, 281.26, 267, 343.36, 528.99),
172
+ (63, 282.09, 267.81, 345.96, 552.99),
173
+ (64, 282.52, 268.22, 346.39, 553.42),
174
+ (65, 284.01, 269.65, 374.39, 561.44),
175
+ (66, 284.32, 269.95, 374.7, 561.76),
176
+ (67, 285.81, 271.38, 402.7, 569.78),
177
+ (68, 286.34, 271.9, 403.23, 570.32),
178
+ (69, 287.84, 273.34, 431.24, 578.35),
179
+ (70, 288.34, 273.82, 431.74, 578.86),
180
+ ]
181
+
182
+
183
+ DEFAULT_SERVICES = [
184
+ models.ServiceLevel(
185
+ service_name="GEODIS Express",
186
+ service_code="geodis_EXP",
187
+ currency="USD",
188
+ domicile=True,
189
+ international=True,
190
+ zones=[
191
+ *[
192
+ models.ServiceZone(
193
+ label="1001",
194
+ rate=rate[1],
195
+ max_weight=rate[0],
196
+ country_codes=["BE", "FR", "DE", "IE", "IT", "LU", "NL", "MC"],
197
+ )
198
+ for rate in LABTEST_RATE_SHEET
199
+ ],
200
+ *[
201
+ models.ServiceZone(
202
+ label="1002",
203
+ rate=rate[2],
204
+ max_weight=rate[0],
205
+ country_codes=["GB"],
206
+ )
207
+ for rate in LABTEST_RATE_SHEET
208
+ ],
209
+ *[
210
+ models.ServiceZone(
211
+ label="1003",
212
+ rate=rate[3],
213
+ max_weight=rate[0],
214
+ country_codes=["AT", "DK", "ES", "FI", "GR", "PT", "SE"],
215
+ )
216
+ for rate in LABTEST_RATE_SHEET
217
+ ],
218
+ *[
219
+ models.ServiceZone(
220
+ label="1007",
221
+ rate=rate[4],
222
+ max_weight=rate[0],
223
+ country_codes=[
224
+ "CZ",
225
+ "HU",
226
+ "LV",
227
+ "LT",
228
+ "PL",
229
+ "SK",
230
+ "SI",
231
+ "BG",
232
+ "RO",
233
+ "HR",
234
+ "EE",
235
+ ],
236
+ )
237
+ for rate in LABTEST_RATE_SHEET
238
+ ],
239
+ ],
240
+ min_weight=0.5,
241
+ max_weight=70.0,
242
+ weight_unit=units.WeightUnit.LB,
243
+ max_length=68.0,
244
+ max_height=118.0,
245
+ dimension_unit=units.DimensionUnit.CM,
246
+ transit_days=6,
247
+ ),
248
+ ]
@@ -0,0 +1,58 @@
1
+ import json
2
+ import time
3
+ import hashlib
4
+ import karrio.lib as lib
5
+ import karrio.core as core
6
+
7
+ LanguageEnum = lib.units.create_enum("LanguageEnum", ["fr", "en"])
8
+
9
+
10
+ class Settings(core.Settings):
11
+ """GEODIS connection settings."""
12
+
13
+ api_key: str
14
+ identifier: str
15
+ code_client: str = None
16
+ language: LanguageEnum = "fr" # type: ignore
17
+
18
+ account_country_code: str = "FR"
19
+ metadata: dict = {}
20
+ config: dict = {}
21
+
22
+ @property
23
+ def carrier_name(self):
24
+ return "geodis"
25
+
26
+ @property
27
+ def server_url(self):
28
+ return (
29
+ "https://espace-client.geodis.com/services/services-mock"
30
+ if self.test_mode
31
+ else "https://espace-client.geodis.com/services"
32
+ )
33
+
34
+ @property
35
+ def connection_config(self) -> lib.units.Options:
36
+ from karrio.providers.geodis.units import ConnectionConfig
37
+
38
+ return lib.to_connection_config(
39
+ self.config or {},
40
+ option_type=ConnectionConfig,
41
+ )
42
+
43
+ def get_token(self, service: str, data: dict) -> str:
44
+ timestamp = "%d" % (time.time() * 1000)
45
+ hash = hashlib.sha256(
46
+ ";".join(
47
+ [
48
+ self.api_key,
49
+ self.identifier,
50
+ timestamp,
51
+ self.language,
52
+ service,
53
+ json.dumps(data, separators=(",", ":")),
54
+ ]
55
+ ).encode("utf-8")
56
+ ).hexdigest()
57
+
58
+ return ";".join([self.identifier, timestamp, self.language, hash])
File without changes
@@ -0,0 +1,10 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class CancelRequestType:
8
+ listNosRecepisses: typing.Optional[typing.List[str]] = None
9
+ listNosSuivis: typing.Optional[typing.List[str]] = None
10
+ listReferences: typing.Optional[typing.List[str]] = None
@@ -0,0 +1,73 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class DestinataireType:
8
+ nom: typing.Optional[str] = None
9
+ adresse1: typing.Optional[str] = None
10
+ adresse2: typing.Optional[str] = None
11
+ codePostal: typing.Optional[int] = None
12
+ ville: typing.Optional[str] = None
13
+ codePays: typing.Optional[str] = None
14
+ email: typing.Optional[str] = None
15
+ telFixe: typing.Optional[str] = None
16
+ indTelMobile: typing.Optional[int] = None
17
+ telMobile: typing.Optional[str] = None
18
+ nomContact: typing.Optional[str] = None
19
+ codePorte: typing.Optional[int] = None
20
+ codeTiers: typing.Optional[str] = None
21
+ noEntrepositaireAgree: typing.Any = None
22
+ particulier: typing.Optional[bool] = None
23
+
24
+
25
+ @attr.s(auto_attribs=True)
26
+ class ListRetoursEnvoisType:
27
+ index: typing.Optional[int] = None
28
+ horsSite: typing.Optional[bool] = None
29
+ codeSa: typing.Optional[str] = None
30
+ codeClient: typing.Optional[int] = None
31
+ codeProduit: typing.Optional[str] = None
32
+ reference1: typing.Optional[str] = None
33
+ reference2: typing.Optional[str] = None
34
+ dateDepartEnlevement: typing.Optional[str] = None
35
+ destinataire: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
36
+ noRecepisse: typing.Optional[int] = None
37
+ noSuivi: typing.Optional[str] = None
38
+ urlSuiviDestinataire: typing.Optional[str] = None
39
+ docEtiquette: typing.Any = None
40
+ docBordereau: typing.Any = None
41
+ docRecapitulatif: typing.Any = None
42
+ msgErreurEnregistrement: typing.Any = None
43
+ msgErreurValidation: typing.Any = None
44
+ msgErreurSuppression: typing.Any = None
45
+ msgErreurEtiquette: typing.Any = None
46
+ msgErreurBordereau: typing.Any = None
47
+ msgErreurRecapitulatif: typing.Any = None
48
+
49
+
50
+ @attr.s(auto_attribs=True)
51
+ class ContenuType:
52
+ msgErreur: typing.Any = None
53
+ nbEnvoisATraiter: typing.Optional[int] = None
54
+ nbEnvoisEnregistres: typing.Optional[int] = None
55
+ nbEnvoisValides: typing.Optional[int] = None
56
+ nbEnvoisSupprimes: typing.Optional[int] = None
57
+ nbAnomaliesSuppression: typing.Optional[int] = None
58
+ nbAnomaliesEtiquette: typing.Optional[int] = None
59
+ nbAnomaliesBordereau: typing.Optional[int] = None
60
+ nbAnomaliesRecapitulatif: typing.Optional[int] = None
61
+ docBordereau: typing.Any = None
62
+ docRecapitulatif: typing.Any = None
63
+ msgErreurBordereau: typing.Any = None
64
+ msgErreurRecapitulatif: typing.Any = None
65
+ listRetoursEnvois: typing.Optional[typing.List[ListRetoursEnvoisType]] = jstruct.JList[ListRetoursEnvoisType]
66
+
67
+
68
+ @attr.s(auto_attribs=True)
69
+ class CancelResponseType:
70
+ ok: typing.Optional[bool] = None
71
+ codeErreur: typing.Any = None
72
+ texteErreur: typing.Any = None
73
+ contenu: typing.Optional[ContenuType] = jstruct.JStruct[ContenuType]
@@ -0,0 +1,10 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class ErrorResponseType:
8
+ ok: typing.Optional[bool] = None
9
+ codeErreur: typing.Optional[str] = None
10
+ texteErreur: typing.Optional[str] = None
@@ -0,0 +1,166 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class ContreRemboursementType:
8
+ quantite: typing.Optional[float] = None
9
+ codeUnite: typing.Optional[str] = None
10
+
11
+
12
+ @attr.s(auto_attribs=True)
13
+ class DestinataireType:
14
+ nom: typing.Optional[str] = None
15
+ adresse1: typing.Optional[str] = None
16
+ adresse2: typing.Optional[str] = None
17
+ codePostal: typing.Optional[int] = None
18
+ ville: typing.Optional[str] = None
19
+ codePays: typing.Optional[str] = None
20
+ nomContact: typing.Optional[str] = None
21
+ email: typing.Optional[str] = None
22
+ telFixe: typing.Optional[str] = None
23
+ indTelMobile: typing.Optional[int] = None
24
+ telMobile: typing.Optional[str] = None
25
+ codePorte: typing.Optional[int] = None
26
+ codeTiers: typing.Optional[str] = None
27
+ noEntrepositaireAgree: typing.Optional[str] = None
28
+ particulier: typing.Optional[bool] = None
29
+
30
+
31
+ @attr.s(auto_attribs=True)
32
+ class PieceJointeType:
33
+ nom: typing.Optional[str] = None
34
+ type: typing.Optional[str] = None
35
+ contenu: typing.Optional[str] = None
36
+
37
+
38
+ @attr.s(auto_attribs=True)
39
+ class ListFactureType:
40
+ noFacture: typing.Optional[str] = None
41
+ montantFacture: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
42
+ dateFacture: typing.Optional[str] = None
43
+ pieceJointe: typing.Optional[PieceJointeType] = jstruct.JStruct[PieceJointeType]
44
+
45
+
46
+ @attr.s(auto_attribs=True)
47
+ class InformationDouaneType:
48
+ poidsNetTotal: typing.Optional[float] = None
49
+ eoriExpediteur: typing.Optional[str] = None
50
+ eoriDestinataire: typing.Optional[str] = None
51
+ emailExpediteurDouane: typing.Optional[str] = None
52
+ indTelExpediteurDouane: typing.Optional[str] = None
53
+ telExpediteurDouane: typing.Optional[str] = None
54
+ mandatRepresentation: typing.Optional[bool] = None
55
+ listFactures: typing.Optional[typing.List[ListFactureType]] = jstruct.JList[ListFactureType]
56
+
57
+
58
+ @attr.s(auto_attribs=True)
59
+ class ListDocumentsEnvoiType:
60
+ visibiliteDestinataire: typing.Optional[bool] = None
61
+ pieceJointe: typing.Optional[PieceJointeType] = jstruct.JStruct[PieceJointeType]
62
+
63
+
64
+ @attr.s(auto_attribs=True)
65
+ class ListMatieresDangereusType:
66
+ noONU: typing.Optional[str] = None
67
+ groupeEmballage: typing.Optional[str] = None
68
+ classeADR: typing.Optional[str] = None
69
+ codeTypeEmballage: typing.Optional[str] = None
70
+ nbEmballages: typing.Optional[int] = None
71
+ nomTechnique: typing.Optional[str] = None
72
+ codeQuantite: typing.Optional[str] = None
73
+ poidsVolume: typing.Optional[float] = None
74
+ dangerEnv: typing.Optional[bool] = None
75
+
76
+
77
+ @attr.s(auto_attribs=True)
78
+ class ListUmgType:
79
+ palette: typing.Optional[bool] = None
80
+ paletteConsignee: typing.Optional[bool] = None
81
+ quantite: typing.Optional[int] = None
82
+ poids: typing.Optional[float] = None
83
+ volume: typing.Optional[float] = None
84
+ longueurUnitaire: typing.Optional[float] = None
85
+ largeurUnitaire: typing.Optional[float] = None
86
+ hauteurUnitaire: typing.Optional[float] = None
87
+ referenceColis: typing.Optional[str] = None
88
+
89
+
90
+ @attr.s(auto_attribs=True)
91
+ class ListVinsSpiritueuxType:
92
+ regimeFiscal: typing.Optional[str] = None
93
+ nbCols: typing.Optional[int] = None
94
+ contenance: typing.Optional[float] = None
95
+ volumeEnDroits: typing.Optional[float] = None
96
+ noTitreMvtRefAdmin: typing.Optional[str] = None
97
+ dureeTransport: typing.Optional[float] = None
98
+
99
+
100
+ @attr.s(auto_attribs=True)
101
+ class ListEnvoisType:
102
+ noRecepisse: typing.Optional[str] = None
103
+ noSuivi: typing.Optional[str] = None
104
+ horsSite: typing.Optional[bool] = None
105
+ codeSa: typing.Optional[str] = None
106
+ codeClient: typing.Optional[int] = None
107
+ codeProduit: typing.Optional[str] = None
108
+ reference1: typing.Optional[str] = None
109
+ reference2: typing.Optional[str] = None
110
+ expediteur: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
111
+ dateDepartEnlevement: typing.Optional[str] = None
112
+ instructionEnlevement: typing.Optional[str] = None
113
+ destinataire: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
114
+ listUmgs: typing.Optional[typing.List[ListUmgType]] = jstruct.JList[ListUmgType]
115
+ natureEnvoi: typing.Optional[str] = None
116
+ poidsTotal: typing.Optional[float] = None
117
+ volumeTotal: typing.Optional[float] = None
118
+ largerTotal: typing.Optional[float] = None
119
+ hauteurTotal: typing.Optional[float] = None
120
+ longueurTotal: typing.Optional[float] = None
121
+ uniteTaxation: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
122
+ animauxPlumes: typing.Optional[bool] = None
123
+ optionLivraison: typing.Optional[str] = None
124
+ codeSaBureauRestant: typing.Optional[str] = None
125
+ idPointRelais: typing.Optional[str] = None
126
+ dateLivraison: typing.Optional[str] = None
127
+ heureLivraison: typing.Optional[str] = None
128
+ instructionLivraison: typing.Optional[str] = None
129
+ natureMarchandise: typing.Optional[str] = None
130
+ valeurDeclaree: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
131
+ contreRemboursement: typing.Optional[ContreRemboursementType] = jstruct.JStruct[ContreRemboursementType]
132
+ codeIncotermConditionLivraison: typing.Optional[str] = None
133
+ typeTva: typing.Optional[str] = None
134
+ sadLivToph: typing.Optional[bool] = None
135
+ sadSwap: typing.Optional[bool] = None
136
+ sadLivEtage: typing.Optional[bool] = None
137
+ sadMiseLieuUtil: typing.Optional[bool] = None
138
+ sadDepotage: typing.Optional[bool] = None
139
+ etage: typing.Optional[int] = None
140
+ emailNotificationDestinataire: typing.Optional[str] = None
141
+ smsNotificationDestinataire: typing.Optional[str] = None
142
+ emailNotificationExpediteur: typing.Optional[str] = None
143
+ emailConfirmationEnlevement: typing.Optional[str] = None
144
+ emailPriseEnChargeEnlevement: typing.Optional[str] = None
145
+ poidsQteLimiteeMD: typing.Optional[float] = None
146
+ dangerEnvQteLimiteeMD: typing.Optional[bool] = None
147
+ nbColisQteExcepteeMD: typing.Optional[int] = None
148
+ dangerEnvQteExcepteeMD: typing.Optional[bool] = None
149
+ listMatieresDangereuses: typing.Optional[typing.List[ListMatieresDangereusType]] = jstruct.JList[ListMatieresDangereusType]
150
+ listVinsSpiritueux: typing.Optional[typing.List[ListVinsSpiritueuxType]] = jstruct.JList[ListVinsSpiritueuxType]
151
+ nosUmsAEtiqueter: typing.Optional[str] = None
152
+ listDocumentsEnvoi: typing.Optional[typing.List[ListDocumentsEnvoiType]] = jstruct.JList[ListDocumentsEnvoiType]
153
+ informationDouane: typing.Optional[InformationDouaneType] = jstruct.JStruct[InformationDouaneType]
154
+
155
+
156
+ @attr.s(auto_attribs=True)
157
+ class ShippingRequestType:
158
+ modificationParReference1: typing.Optional[bool] = None
159
+ impressionEtiquette: typing.Optional[bool] = None
160
+ typeImpressionEtiquette: typing.Optional[str] = None
161
+ formatEtiquette: typing.Optional[str] = None
162
+ validationEnvoi: typing.Optional[bool] = None
163
+ suppressionSiEchecValidation: typing.Optional[bool] = None
164
+ impressionBordereau: typing.Optional[bool] = None
165
+ impressionRecapitulatif: typing.Optional[bool] = None
166
+ listEnvois: typing.Optional[typing.List[ListEnvoisType]] = jstruct.JList[ListEnvoisType]
@@ -0,0 +1,91 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class DestinataireType:
8
+ nom: typing.Optional[str] = None
9
+ adresse1: typing.Optional[str] = None
10
+ adresse2: typing.Optional[str] = None
11
+ codePostal: typing.Optional[int] = None
12
+ ville: typing.Optional[str] = None
13
+ codePays: typing.Optional[str] = None
14
+ email: typing.Optional[str] = None
15
+ telFixe: typing.Optional[str] = None
16
+ indTelMobile: typing.Optional[int] = None
17
+ telMobile: typing.Optional[str] = None
18
+ nomContact: typing.Optional[str] = None
19
+ codePorte: typing.Optional[int] = None
20
+ codeTiers: typing.Any = None
21
+ noEntrepositaireAgree: typing.Any = None
22
+ particulier: typing.Any = None
23
+
24
+
25
+ @attr.s(auto_attribs=True)
26
+ class DocEtiquetteType:
27
+ nom: typing.Optional[str] = None
28
+ type: typing.Optional[str] = None
29
+ contenu: typing.Optional[str] = None
30
+
31
+
32
+ @attr.s(auto_attribs=True)
33
+ class ListRetoursUMType:
34
+ numeroUM: typing.Optional[int] = None
35
+ typeUM: typing.Optional[str] = None
36
+ referenceUM: typing.Optional[str] = None
37
+ cabGeodisUM: typing.Optional[str] = None
38
+ cabGeodisEuropeUM: typing.Optional[str] = None
39
+
40
+
41
+ @attr.s(auto_attribs=True)
42
+ class ListRetoursEnvoisType:
43
+ index: typing.Optional[int] = None
44
+ horsSite: typing.Optional[bool] = None
45
+ codeSa: typing.Optional[str] = None
46
+ codeClient: typing.Optional[int] = None
47
+ codeProduit: typing.Optional[str] = None
48
+ reference1: typing.Optional[str] = None
49
+ reference2: typing.Optional[str] = None
50
+ dateDepartEnlevement: typing.Optional[str] = None
51
+ destinataire: typing.Optional[DestinataireType] = jstruct.JStruct[DestinataireType]
52
+ noRecepisse: typing.Optional[int] = None
53
+ noSuivi: typing.Optional[str] = None
54
+ urlSuiviDestinataire: typing.Optional[str] = None
55
+ listRetoursUM: typing.Optional[typing.List[ListRetoursUMType]] = jstruct.JList[ListRetoursUMType]
56
+ docEtiquette: typing.Optional[DocEtiquetteType] = jstruct.JStruct[DocEtiquetteType]
57
+ docBordereau: typing.Any = None
58
+ docRecapitulatif: typing.Any = None
59
+ msgErreurEnregistrement: typing.Any = None
60
+ msgErreurValidation: typing.Any = None
61
+ msgErreurSuppression: typing.Any = None
62
+ msgErreurEtiquette: typing.Any = None
63
+ msgErreurBordereau: typing.Any = None
64
+ msgErreurRecapitulatif: typing.Any = None
65
+
66
+
67
+ @attr.s(auto_attribs=True)
68
+ class ContenuType:
69
+ msgErreur: typing.Any = None
70
+ nbEnvoisATraiter: typing.Optional[int] = None
71
+ nbEnvoisEnregistres: typing.Optional[int] = None
72
+ nbEnvoisValides: typing.Optional[int] = None
73
+ nbEnvoisEtiquetes: typing.Optional[int] = None
74
+ nbEnvoisSupprimes: typing.Optional[int] = None
75
+ nbAnomaliesSuppression: typing.Optional[int] = None
76
+ nbAnomaliesEtiquette: typing.Optional[int] = None
77
+ nbAnomaliesBordereau: typing.Optional[int] = None
78
+ nbAnomaliesRecapitulatif: typing.Optional[int] = None
79
+ docBordereau: typing.Any = None
80
+ docRecapitulatif: typing.Any = None
81
+ msgErreurBordereau: typing.Any = None
82
+ msgErreurRecapitulatif: typing.Any = None
83
+ listRetoursEnvois: typing.Optional[typing.List[ListRetoursEnvoisType]] = jstruct.JList[ListRetoursEnvoisType]
84
+
85
+
86
+ @attr.s(auto_attribs=True)
87
+ class ShippingResponseType:
88
+ ok: typing.Optional[bool] = None
89
+ codeErreur: typing.Any = None
90
+ texteErreur: typing.Any = None
91
+ contenu: typing.Optional[ContenuType] = jstruct.JStruct[ContenuType]
@@ -0,0 +1,9 @@
1
+ import attr
2
+ import jstruct
3
+ import typing
4
+
5
+
6
+ @attr.s(auto_attribs=True)
7
+ class TrackingRequestType:
8
+ noSuivi: typing.Optional[str] = None
9
+ refUniExp: typing.Optional[str] = None