karrio-dhl-poland 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,146 @@
1
+ import karrio.lib as lib
2
+ import karrio.core.units as units
3
+ import karrio.core.models as models
4
+
5
+
6
+ class CustomsContentType(lib.StrEnum):
7
+ other = "9"
8
+ sale_of_goods = "11"
9
+ return_of_goods = "21"
10
+ gifts = "31"
11
+ samples_of_goods = "32"
12
+ documents = "91"
13
+
14
+ """ Unified Content type mapping """
15
+ gift = gifts
16
+ sample = samples_of_goods
17
+ merchandise = sale_of_goods
18
+ return_merchandise = return_of_goods
19
+
20
+
21
+ class LabelType(lib.StrEnum):
22
+ BLP_LABEL = "BLP"
23
+ LBLP_LABEL_A4_PDF = "LBLP"
24
+ ZBLP_LABEL_ZPL = "ZBLP"
25
+
26
+ """ Unified Label type mapping """
27
+ PDF = BLP_LABEL
28
+ ZPL = ZBLP_LABEL_ZPL
29
+
30
+
31
+ class PaymentType(lib.StrEnum):
32
+ shipper = "SHIPPER"
33
+ receiver = "RECEIVER"
34
+ user = "USER"
35
+
36
+ """ Unified Payment type mapping """
37
+ sender = shipper
38
+ recipient = receiver
39
+ third_party = user
40
+
41
+
42
+ class PackagingType(lib.StrEnum):
43
+ dhl_poland_envelope = "ENVELOPE"
44
+ dhl_poland_package = "PACKAGE"
45
+ dhl_poland_pallet = "PALLET"
46
+
47
+ """ Unified Packaging type mapping """
48
+ envelope = dhl_poland_envelope
49
+ pak = dhl_poland_package
50
+ tube = dhl_poland_package
51
+ pallet = dhl_poland_pallet
52
+ small_box = dhl_poland_package
53
+ medium_box = dhl_poland_package
54
+ large_box = dhl_poland_package
55
+ your_packaging = dhl_poland_package
56
+
57
+
58
+ class Service(lib.Enum):
59
+ dhl_poland_premium = "PR"
60
+ dhl_poland_polska = "AH"
61
+ dhl_poland_09 = "09"
62
+ dhl_poland_12 = "12"
63
+ dhl_poland_connect = "EK"
64
+ dhl_poland_international = "PI"
65
+
66
+
67
+ class ShippingOption(lib.Enum):
68
+ dhl_poland_delivery_in_18_22_hours = lib.OptionEnum("1722", bool)
69
+ dhl_poland_delivery_on_saturday = lib.OptionEnum("SATURDAY", bool)
70
+ dhl_poland_pickup_on_staturday = lib.OptionEnum("NAD_SOBOTA", bool)
71
+ dhl_poland_insuration = lib.OptionEnum("UBEZP", float)
72
+ dhl_poland_collect_on_delivery = lib.OptionEnum("COD", float)
73
+ dhl_poland_information_to_receiver = lib.OptionEnum("PDI")
74
+ dhl_poland_return_of_document = lib.OptionEnum("ROD", bool)
75
+ dhl_poland_proof_of_delivery = lib.OptionEnum("POD", bool)
76
+ dhl_poland_delivery_to_neighbour = lib.OptionEnum("SAS", bool)
77
+ dhl_poland_self_collect = lib.OptionEnum("ODB", bool)
78
+
79
+ """ Unified Option type mapping """
80
+ insurance = dhl_poland_insuration
81
+ cash_on_delivery = dhl_poland_collect_on_delivery
82
+ saturday_delivery = dhl_poland_delivery_on_saturday
83
+
84
+
85
+ def shipping_options_initializer(
86
+ options: dict,
87
+ package_options: units.ShippingOptions = None,
88
+ ) -> units.ShippingOptions:
89
+ """
90
+ Apply default values to the given options.
91
+ """
92
+ _options = options.copy()
93
+
94
+ if package_options is not None:
95
+ _options.update(package_options.content)
96
+
97
+ def items_filter(key: str) -> bool:
98
+ return key in ShippingOption # type: ignore
99
+
100
+ return units.ShippingOptions(_options, ShippingOption, items_filter=items_filter)
101
+
102
+
103
+ DEFAULT_SERVICES = [
104
+ models.ServiceLevel(
105
+ service_name="DHL Poland Premium",
106
+ service_code="dhl_poland_premium",
107
+ currency="EUR",
108
+ domicile=True,
109
+ zones=[models.ServiceZone(label="Zone 1", rate=0.0)],
110
+ ),
111
+ models.ServiceLevel(
112
+ service_name="DHL Poland Polska",
113
+ service_code="dhl_poland_polska",
114
+ currency="EUR",
115
+ domicile=True,
116
+ zones=[models.ServiceZone(label="Zone 1", rate=0.0)],
117
+ ),
118
+ models.ServiceLevel(
119
+ service_name="DHL Poland 09",
120
+ service_code="dhl_poland_09",
121
+ currency="EUR",
122
+ domicile=True,
123
+ zones=[models.ServiceZone(label="Zone 1", rate=0.0)],
124
+ ),
125
+ models.ServiceLevel(
126
+ service_name="DHL Poland 12",
127
+ service_code="dhl_poland_12",
128
+ currency="EUR",
129
+ domicile=True,
130
+ zones=[models.ServiceZone(label="Zone 1", rate=0.0)],
131
+ ),
132
+ models.ServiceLevel(
133
+ service_name="DHL Poland Connect",
134
+ service_code="dhl_poland_connect",
135
+ currency="EUR",
136
+ international=True,
137
+ zones=[models.ServiceZone(label="Zone 1", rate=0.0)],
138
+ ),
139
+ models.ServiceLevel(
140
+ service_name="DHL Poland International",
141
+ service_code="dhl_poland_international",
142
+ currency="EUR",
143
+ international=True,
144
+ zones=[models.ServiceZone(label="Zone 1", rate=0.0)],
145
+ ),
146
+ ]
@@ -0,0 +1,62 @@
1
+ """Karrio DHL Parcel Poland client settings."""
2
+
3
+ from karrio.schemas.dhl_poland.services import AuthData
4
+ from karrio.core.settings import Settings as BaseSettings
5
+ from karrio.core.utils import Envelope, apply_namespaceprefix, XP
6
+
7
+
8
+ class Settings(BaseSettings):
9
+ """DHL Parcel Poland connection settings."""
10
+
11
+ username: str
12
+ password: str
13
+ account_number: str = None
14
+
15
+ id: str = None
16
+ account_country_code: str = "PL"
17
+ metadata: dict = {}
18
+
19
+ @property
20
+ def carrier_name(self):
21
+ return "dhl_poland"
22
+
23
+ @property
24
+ def server_url(self):
25
+ return (
26
+ "https://sandbox.dhl24.com.pl/webapi2/provider/service.html?ws=1"
27
+ if self.test_mode
28
+ else "https://dhl24.com.pl/webapi2/provider/service.html?ws=1"
29
+ )
30
+
31
+ @property
32
+ def tracking_url(self):
33
+ return "https://www.dhl.com/pl-en/home/tracking/tracking-parcel.html?submit=1&tracking-id={}"
34
+
35
+ @property
36
+ def auth_data(self):
37
+ return AuthData(
38
+ username=self.username,
39
+ password=self.password,
40
+ )
41
+
42
+ @staticmethod
43
+ def serialize(envelope: Envelope, request_name: str, namesapce: str) -> str:
44
+ namespacedef_ = (
45
+ 'xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"'
46
+ f' xmlns="{namesapce}"'
47
+ )
48
+ envelope.ns_prefix_ = "soap-env"
49
+ envelope.Body.ns_prefix_ = envelope.ns_prefix_
50
+
51
+ apply_namespaceprefix(envelope.Body.anytypeobjs_[0], "")
52
+ return (
53
+ XP.export(envelope, namespacedef_=namespacedef_)
54
+ .replace(
55
+ "<%s:%s" % (envelope.ns_prefix_, request_name),
56
+ "<%s%s" % ("", request_name),
57
+ )
58
+ .replace(
59
+ "</%s:%s" % (envelope.ns_prefix_, request_name),
60
+ "</%s%s" % ("", request_name),
61
+ )
62
+ )
File without changes