karrio 2023.4__py3-none-any.whl → 2023.4.4__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/core/models.py CHANGED
@@ -4,14 +4,6 @@ from typing import List, Dict, Any, Union
4
4
  from jstruct import JList, JStruct, REQUIRED
5
5
 
6
6
 
7
- @attr.s(auto_attribs=True)
8
- class AddressExtra:
9
- street_name: str = None
10
- street_type: str = None
11
- suburb: str = None
12
- suite: str = None
13
-
14
-
15
7
  @attr.s(auto_attribs=True)
16
8
  class Address:
17
9
  """shipping party (contact and address) data type."""
@@ -35,8 +27,6 @@ class Address:
35
27
  federal_tax_id: str = None
36
28
  state_tax_id: str = None
37
29
 
38
- extra: AddressExtra = JStruct[AddressExtra]
39
-
40
30
 
41
31
  @attr.s(auto_attribs=True)
42
32
  class Commodity:
karrio/core/units.py CHANGED
@@ -1106,6 +1106,9 @@ class ComputedAddress(models.Address):
1106
1106
  self.address = address
1107
1107
 
1108
1108
  def __getattr__(self, item):
1109
+ if item == "street_number":
1110
+ return self._compute_street_number()
1111
+
1109
1112
  if hasattr(self.address, item):
1110
1113
  return getattr(self.address, item)
1111
1114
 
@@ -1123,6 +1126,33 @@ class ComputedAddress(models.Address):
1123
1126
  def address_lines(self) -> str:
1124
1127
  return self._compute_address_line(join=False)
1125
1128
 
1129
+ @property
1130
+ def street(self) -> typing.Optional[str]:
1131
+ return typing.cast(
1132
+ str,
1133
+ utils.SF.concat_str(
1134
+ self.street_number,
1135
+ self.street_name,
1136
+ join=True,
1137
+ ),
1138
+ )
1139
+
1140
+ @property
1141
+ def street_name(self) -> typing.Optional[str]:
1142
+ """The address line 1 without the street number"""
1143
+ return typing.cast(
1144
+ str,
1145
+ utils.SF.concat_str(
1146
+ *[
1147
+ _
1148
+ for _ in self.address.address_line1.split(" ")
1149
+ if _ != self.street_number
1150
+ ],
1151
+ join=True,
1152
+ ),
1153
+ )
1154
+ return self.address.address_line1.replace(self.street_number, "").strip()
1155
+
1126
1156
  @property
1127
1157
  def tax_id(self) -> typing.Optional[str]:
1128
1158
  return self.address.federal_tax_id or self.address.state_tax_id
@@ -1148,50 +1178,43 @@ class ComputedAddress(models.Address):
1148
1178
  def has_tax_info(self) -> bool:
1149
1179
  return any([self.address.federal_tax_id, self.address.state_tax_id])
1150
1180
 
1151
- @property
1152
- def suite(self) -> typing.Optional[str]:
1153
- return getattr(self.address.extra, "suite", None)
1154
-
1155
1181
  @property
1156
1182
  def contact(self) -> typing.Optional[str]:
1157
1183
  return getattr(self.address, "person_name", None) or getattr(
1158
1184
  self.address, "company_name", None
1159
1185
  )
1160
1186
 
1161
- @property
1162
- def street_name(self) -> typing.Optional[str]:
1163
- return getattr(self.address.extra, "street_name", None)
1164
-
1165
- @property
1166
- def street_type(self) -> typing.Optional[str]:
1167
- return getattr(self.address.extra, "street_type", None)
1168
-
1169
1187
  def _compute_address_line(self, join: bool = True) -> typing.Optional[str]:
1170
1188
  if any(
1171
1189
  [
1172
- self.address.street_number,
1173
- self.address.address_line1,
1174
- self.address.address_line2,
1190
+ self.street_number,
1191
+ self.street_name,
1192
+ self.address_line2,
1175
1193
  ]
1176
1194
  ):
1177
1195
  return utils.SF.concat_str(
1178
- self.address.street_number,
1179
- self.address.address_line1,
1180
- self.address.address_line2,
1196
+ self.street_number,
1197
+ self.street_name,
1198
+ self.address_line2,
1181
1199
  join=join,
1182
1200
  ) # type:ignore
1183
1201
 
1184
- if self.address.extra is not None:
1185
- return utils.SF.concat_str(
1186
- self.address.extra.suite,
1187
- self.address.street_number,
1188
- self.address.extra.street_name,
1189
- self.address.extra.street_type,
1190
- join=True,
1191
- ) # type:ignore
1192
-
1193
1202
  return None
1194
1203
 
1204
+ def _compute_street_number(self):
1205
+ _value = getattr(self.address, "street_number", None)
1206
+
1207
+ if _value is None:
1208
+ words = self.address.address_line1.split(" ")
1209
+
1210
+ if any(_.isdigit() for _ in words[0]):
1211
+ return words[0]
1212
+
1213
+ if any(_.isdigit() for _ in words[-1]):
1214
+ return words[-1]
1215
+
1216
+ return _value
1217
+
1195
1218
 
1196
1219
  class ComputedDocumentFile(models.DocumentFile):
1197
1220
  def __init__(self, document: typing.Optional[models.DocumentFile]):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: karrio
3
- Version: 2023.4
3
+ Version: 2023.4.4
4
4
  Summary: Multi-carrier shipping API integration with python
5
5
  Home-page: https://github.com/karrioapi/karrio
6
6
  Author: karrio
@@ -14,9 +14,9 @@ karrio/api/proxy.py,sha256=Mx5tpcL0L_02lIZ84AvnEfroVu5Qi22iz7AVueX4YjI,6320
14
14
  karrio/core/__init__.py,sha256=BboTt3huAYrsqcTcaq1lFX5O4uKiIi2cpWEXp68ItMo,71
15
15
  karrio/core/errors.py,sha256=iMwiwCwK0eiYzk5KJ9Qu86JMWpymw1zDCvmqY67ghSw,3006
16
16
  karrio/core/metadata.py,sha256=vs4doqUjxDSRbDulbdBeTAyFUIZ8MdjsRP74YjtdNEY,1081
17
- karrio/core/models.py,sha256=FaUyZ3SmkANPC4CfXKw6T8O4YAnXpvLmSM9GaxF9YaE,11152
17
+ karrio/core/models.py,sha256=wkqD4M7cCDFJmdpI3shDvxX4M9mFirL6K3yHUl0GIbM,10953
18
18
  karrio/core/settings.py,sha256=1d-w-U5nODMxsbmR0B4CdgggvYCzsgtSipP7GUWmFkI,753
19
- karrio/core/units.py,sha256=upyiW7PG2QyNxdiMtjJfH632IrHTh5qc4XNNLHQJCA0,57529
19
+ karrio/core/units.py,sha256=PyHjHEdge6fY-xZph9_NUQdbExROoyIpUSdRT8MgKIs,58015
20
20
  karrio/core/utils/__init__.py,sha256=NPxAugvQ4lhWOngITOagexXrsTQqlJQ0gyaXc9iBivg,739
21
21
  karrio/core/utils/caching.py,sha256=zx0R1XAWPuA0q2hz5xUw0-OLZhHd7haS41uO_Prg8Ng,1734
22
22
  karrio/core/utils/datetime.py,sha256=aFMqLB_AdRGM0By2TO8mYce-UlqExf_J2s2eLNtDClY,2311
@@ -45,7 +45,7 @@ karrio/universal/providers/rating/utils.py,sha256=WVyJWdxCdKM1YlhTHVFxEMyac0FKIG
45
45
  karrio/universal/providers/shipping/__init__.py,sha256=JRcfJWSeDSjO2g2fRnLgBurBXn01nVpdi21ShxLpG34,188
46
46
  karrio/universal/providers/shipping/shipment.py,sha256=t7PO4uSzD1ZL3q3UZWHAPD3UUZUKXReQvED8mVKUe1A,1512
47
47
  karrio/universal/providers/shipping/utils.py,sha256=1LuO31RMhpUls6-h5xhWkfky4G7tdWmGKmRhLkj-e98,593
48
- karrio-2023.4.dist-info/METADATA,sha256=dhVsyoub0aSABLGIyUP5-4BrtsGzMnBW11zS-YsHUA0,4703
49
- karrio-2023.4.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
50
- karrio-2023.4.dist-info/top_level.txt,sha256=mfkVZXzNuVRmA7NRlck_Ub-C8Zgtqxbx3gX1Rq_W-i0,7
51
- karrio-2023.4.dist-info/RECORD,,
48
+ karrio-2023.4.4.dist-info/METADATA,sha256=dRozbMtKfDyrdjkZtVUAHMOyE4vbgM3M-dzUyicgKJo,4705
49
+ karrio-2023.4.4.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
50
+ karrio-2023.4.4.dist-info/top_level.txt,sha256=mfkVZXzNuVRmA7NRlck_Ub-C8Zgtqxbx3gX1Rq_W-i0,7
51
+ karrio-2023.4.4.dist-info/RECORD,,