dycw-utilities 0.109.2__py3-none-any.whl → 0.109.3__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.2
3
+ Version: 0.109.3
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=BFspQsIuZJOmuE31YyhwkR4P62-Ad5dFurosyyABzLA,60
1
+ utilities/__init__.py,sha256=XHS4BHXBA86Rjy07zPtJwGLkB2QC4JUa0pQjTRZS2zE,60
2
2
  utilities/altair.py,sha256=NSyDsm8QlkAGmsGdxVwCkHnPxt_35yJBa9Lg7bz9Ays,9054
3
3
  utilities/astor.py,sha256=xuDUkjq0-b6fhtwjhbnebzbqQZAjMSHR1IIS5uOodVg,777
4
4
  utilities/asyncio.py,sha256=41oQUurWMvadFK5gFnaG21hMM0Vmfn2WS6OpC0R9mas,14757
@@ -40,7 +40,7 @@ utilities/operator.py,sha256=0M2yZJ0PODH47ogFEnkGMBe_cfxwZR02T_92LZVZvHo,3715
40
40
  utilities/optuna.py,sha256=loyJGWTzljgdJaoLhP09PT8Jz6o_pwBOwehY33lHkhw,1923
41
41
  utilities/orjson.py,sha256=Wj5pzG_VdgoAy14a7Luhem-BgYrRtRFvvl_POiszRd0,36930
42
42
  utilities/os.py,sha256=D_FyyT-6TtqiN9KSS7c9g1fnUtgxmyMtzAjmYLkk46A,3587
43
- utilities/parse.py,sha256=yLLH51VNwmcWbEvwqh6M-weWt7NIayd7No67Oe80S3k,4585
43
+ utilities/parse.py,sha256=-rnx9qBKo9UZbE1HtvBwYOs4vF7YiJiciPAM6IKmfRc,5183
44
44
  utilities/pathlib.py,sha256=31WPMXdLIyXgYOMMl_HOI2wlo66MGSE-cgeelk-Lias,1410
45
45
  utilities/period.py,sha256=ikHXsWtDLr553cfH6p9mMaiCnIAP69B7q84ckWV3HaA,10884
46
46
  utilities/pickle.py,sha256=Bhvd7cZl-zQKQDFjUerqGuSKlHvnW1K2QXeU5UZibtg,657
@@ -75,7 +75,7 @@ utilities/threading.py,sha256=GvBOp4CyhHfN90wGXZuA2VKe9fGzMaEa7oCl4f3nnPU,1009
75
75
  utilities/timer.py,sha256=Rkc49KSpHuC8s7vUxGO9DU55U9I6yDKnchsQqrUCVBs,4075
76
76
  utilities/traceback.py,sha256=KwHPLdEbdj0fFhXo8MBfxcvem8A-VXYDwFMNJ6f0cTM,27328
77
77
  utilities/types.py,sha256=QK8kgH80TJdh_vktaZHrCEk7f1f8kHiDr8dJlK8aSac,17814
78
- utilities/typing.py,sha256=h1vt82GUs-3ww7yFbZ3BWjdUM4NBPHaptcJHSKuRa5E,5341
78
+ utilities/typing.py,sha256=gLg4EbE1FX52fJ1d3ji4i08qolwu9qgWt8w_w_Y5DTk,5512
79
79
  utilities/tzdata.py,sha256=2ZsPmhTVM9Ptrxb4QrWKtKOB9RiH8IOO-A1u7ULdVbg,176
80
80
  utilities/tzlocal.py,sha256=42BCquGF54oIqIKe5RGziP4K8Nbm3Ey7uqcNn6m5ge8,534
81
81
  utilities/uuid.py,sha256=jJTFxz-CWgltqNuzmythB7iEQ-Q1mCwPevUfKthZT3c,611
@@ -84,7 +84,7 @@ utilities/warnings.py,sha256=yUgjnmkCRf6QhdyAXzl7u0qQFejhQG3PrjoSwxpbHrs,1819
84
84
  utilities/whenever.py,sha256=5x2t47VJmJRWcd_NLFy54NkB3uom-XQYxEbLtEfL1bs,17775
85
85
  utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
86
86
  utilities/zoneinfo.py,sha256=-DQz5a0Ikw9jfSZtL0BEQkXOMC9yGn_xiJYNCLMiqEc,1989
87
- dycw_utilities-0.109.2.dist-info/METADATA,sha256=9cmTxKEFxwqlG4VNbAnM88UGivDzayFQlB0ntOvtBno,13004
88
- dycw_utilities-0.109.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
89
- dycw_utilities-0.109.2.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
90
- dycw_utilities-0.109.2.dist-info/RECORD,,
87
+ dycw_utilities-0.109.3.dist-info/METADATA,sha256=TF66WIpVFJnaJA80lxa_GKBZKZUzfz8VWd95FQW8v4A,13004
88
+ dycw_utilities-0.109.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
89
+ dycw_utilities-0.109.3.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
90
+ dycw_utilities-0.109.3.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.109.2"
3
+ __version__ = "0.109.3"
utilities/parse.py CHANGED
@@ -5,6 +5,7 @@ from contextlib import suppress
5
5
  from dataclasses import dataclass
6
6
  from enum import Enum
7
7
  from pathlib import Path
8
+ from re import DOTALL
8
9
  from types import NoneType
9
10
  from typing import Any, override
10
11
 
@@ -12,9 +13,10 @@ from utilities.datetime import is_subclass_date_not_datetime
12
13
  from utilities.enum import ParseEnumError, parse_enum
13
14
  from utilities.functions import is_subclass_int_not_bool
14
15
  from utilities.iterables import one, one_str
16
+ from utilities.re import ExtractGroupError, extract_group
15
17
  from utilities.sentinel import ParseSentinelError, Sentinel, parse_sentinel
16
18
  from utilities.text import ParseBoolError, ParseNoneError, parse_bool, parse_none
17
- from utilities.typing import get_args, is_literal_type, is_optional_type
19
+ from utilities.typing import get_args, is_literal_type, is_optional_type, is_tuple_type
18
20
  from utilities.version import ParseVersionError, Version, parse_version
19
21
 
20
22
 
@@ -42,6 +44,18 @@ def parse_text(
42
44
  return _parse_text_type(inner, text, case_sensitive=case_sensitive)
43
45
  except ParseTextError:
44
46
  raise ParseTextError(obj=obj, text=text) from None
47
+ if is_tuple_type(obj):
48
+ args = get_args(obj)
49
+ try:
50
+ texts = extract_group(r"^\((.*)\)$", text, flags=DOTALL).split(", ")
51
+ except ExtractGroupError:
52
+ raise ParseTextError(obj=obj, text=text) from None
53
+ if len(args) != len(texts):
54
+ raise ParseTextError(obj=obj, text=text)
55
+ return tuple(
56
+ parse_text(arg, text, case_sensitive=case_sensitive, head=head)
57
+ for arg, text in zip(args, texts, strict=True)
58
+ )
45
59
  raise ParseTextError(obj=obj, text=text) from None
46
60
 
47
61
 
utilities/typing.py CHANGED
@@ -182,6 +182,14 @@ def is_set_type(obj: Any, /) -> bool:
182
182
  ##
183
183
 
184
184
 
185
+ def is_tuple_type(obj: Any, /) -> bool:
186
+ """Check if an object is a tuple type annotation."""
187
+ return _is_annotation_of_type(obj, tuple)
188
+
189
+
190
+ ##
191
+
192
+
185
193
  def is_union_type(obj: Any, /) -> bool:
186
194
  """Check if an object is a union type annotation."""
187
195
  is_old_union = _is_annotation_of_type(obj, Union) # pyright: ignore[reportDeprecated]
@@ -212,5 +220,6 @@ __all__ = [
212
220
  "is_optional_type",
213
221
  "is_sequence_type",
214
222
  "is_set_type",
223
+ "is_tuple_type",
215
224
  "is_union_type",
216
225
  ]