dycw-utilities 0.109.25__py3-none-any.whl → 0.109.26__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.109.25
3
+ Version: 0.109.26
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -1,4 +1,4 @@
1
- utilities/__init__.py,sha256=MyGkR0d3_-KyEaReHVw4HUIouPnP_C4LJeJMaEoyS9g,61
1
+ utilities/__init__.py,sha256=u3bOXUZkUtu44-KigskBo_7SPJ0LgayUw3iTPoGATOo,61
2
2
  utilities/altair.py,sha256=Gpja-flOo-Db0PIPJLJsgzAlXWoKUjPU1qY-DQ829ek,9156
3
3
  utilities/astor.py,sha256=xuDUkjq0-b6fhtwjhbnebzbqQZAjMSHR1IIS5uOodVg,777
4
4
  utilities/asyncio.py,sha256=41oQUurWMvadFK5gFnaG21hMM0Vmfn2WS6OpC0R9mas,14757
@@ -73,7 +73,7 @@ utilities/streamlit.py,sha256=U9PJBaKP1IdSykKhPZhIzSPTZsmLsnwbEPZWzNhJPKk,2955
73
73
  utilities/sys.py,sha256=h0Xr7Vj86wNalvwJVP1wj5Y0kD_VWm1vzuXZ_jw94mE,2743
74
74
  utilities/tempfile.py,sha256=VqmZJAhTJ1OaVywFzk5eqROV8iJbW9XQ_QYAV0bpdRo,1384
75
75
  utilities/tenacity.py,sha256=1PUvODiBVgeqIh7G5TRt5WWMSqjLYkEqP53itT97WQc,4914
76
- utilities/text.py,sha256=L62EkdQJtatFpiXwIi0w6Z3js14RmDAkboUnhIZBxMg,6125
76
+ utilities/text.py,sha256=Ax_n-nY80_onWxag9M0PkmbaAqwyut9AEA9tEMd5lBs,6694
77
77
  utilities/threading.py,sha256=GvBOp4CyhHfN90wGXZuA2VKe9fGzMaEa7oCl4f3nnPU,1009
78
78
  utilities/timer.py,sha256=Rkc49KSpHuC8s7vUxGO9DU55U9I6yDKnchsQqrUCVBs,4075
79
79
  utilities/traceback.py,sha256=KwHPLdEbdj0fFhXo8MBfxcvem8A-VXYDwFMNJ6f0cTM,27328
@@ -87,7 +87,7 @@ utilities/warnings.py,sha256=yUgjnmkCRf6QhdyAXzl7u0qQFejhQG3PrjoSwxpbHrs,1819
87
87
  utilities/whenever.py,sha256=TjoTAJ1R27-rKXiXzdE4GzPidmYqm0W58XydDXp-QZM,17786
88
88
  utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
89
89
  utilities/zoneinfo.py,sha256=-DQz5a0Ikw9jfSZtL0BEQkXOMC9yGn_xiJYNCLMiqEc,1989
90
- dycw_utilities-0.109.25.dist-info/METADATA,sha256=i19O3DlnQ5ld8LT4devIhPYkO0WWg_MmVzpe4nIqICw,13005
91
- dycw_utilities-0.109.25.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
92
- dycw_utilities-0.109.25.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
93
- dycw_utilities-0.109.25.dist-info/RECORD,,
90
+ dycw_utilities-0.109.26.dist-info/METADATA,sha256=aJEgBNp03JxSJvRWENUjCb_0CqvmCZktjl1S-XNYfDQ,13005
91
+ dycw_utilities-0.109.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
92
+ dycw_utilities-0.109.26.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
93
+ dycw_utilities-0.109.26.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.109.25"
3
+ __version__ = "0.109.26"
utilities/text.py CHANGED
@@ -122,22 +122,40 @@ def split_key_value_pairs(
122
122
  mapping: bool = False,
123
123
  ) -> Sequence[tuple[str, str]] | StrStrMapping:
124
124
  """Split a string into key-value pairs."""
125
- pairs = [
126
- split_str(text_i, separator=pair_separator, n=2)
127
- for text_i in split_str(text, separator=list_separator)
128
- ]
125
+ try:
126
+ pairs = [
127
+ split_str(text_i, separator=pair_separator, n=2)
128
+ for text_i in split_str(text, separator=list_separator)
129
+ ]
130
+ except SplitStrError as error:
131
+ raise _SplitKeyValuePairsSplitError(text=text, inner=error.text) from None
129
132
  if not mapping:
130
133
  return pairs
131
134
  try:
132
135
  check_duplicates(k for k, _ in pairs)
133
136
  except CheckDuplicatesError as error:
134
- raise SplitKeyValuePairsError(text=text, counts=error.counts) from None
137
+ raise _SplitKeyValuePairsDuplicateKeysError(
138
+ text=text, counts=error.counts
139
+ ) from None
135
140
  return dict(pairs)
136
141
 
137
142
 
138
143
  @dataclass(kw_only=True, slots=True)
139
144
  class SplitKeyValuePairsError(Exception):
140
145
  text: str
146
+
147
+
148
+ @dataclass(kw_only=True, slots=True)
149
+ class _SplitKeyValuePairsSplitError(SplitKeyValuePairsError):
150
+ inner: str
151
+
152
+ @override
153
+ def __str__(self) -> str:
154
+ return f"Unable to split {self.text!r} into key-value pairs; got {self.inner!r}"
155
+
156
+
157
+ @dataclass(kw_only=True, slots=True)
158
+ class _SplitKeyValuePairsDuplicateKeysError(SplitKeyValuePairsError):
141
159
  counts: Mapping[str, int]
142
160
 
143
161
  @override
@@ -236,6 +254,7 @@ def strip_and_dedent(text: str, /, *, trailing: bool = False) -> str:
236
254
  __all__ = [
237
255
  "ParseBoolError",
238
256
  "ParseNoneError",
257
+ "SplitKeyValuePairsError",
239
258
  "SplitStrError",
240
259
  "join_strs",
241
260
  "parse_bool",