dycw-utilities 0.176.5__py3-none-any.whl → 0.176.6__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.3
2
2
  Name: dycw-utilities
3
- Version: 0.176.5
3
+ Version: 0.176.6
4
4
  Summary: Miscellaneous Python utilities
5
5
  Author: Derek Wan
6
6
  Author-email: Derek Wan <d.wan@icloud.com>
@@ -1,4 +1,4 @@
1
- utilities/__init__.py,sha256=chOgc1NV48pH7zK_NN0RHPlWQSfdIFGjwBbOXK_Es2A,60
1
+ utilities/__init__.py,sha256=30qJasMvZPS_VQwLBhylCmlhjcGr2IwhMF8Ehsdi7-M,60
2
2
  utilities/altair.py,sha256=TLfRFbG9HwG7SLXoJ-v0r-t49ZaGgTQZD82cpjVi4vs,9085
3
3
  utilities/asyncio.py,sha256=aJySVxBY0gqsIYnoNmH7-1r8djKuf4vSsU69VCD08t8,16772
4
4
  utilities/atomicwrites.py,sha256=tPo6r-Rypd9u99u66B9z86YBPpnLrlHtwox_8Z7T34Y,5790
@@ -44,7 +44,7 @@ utilities/operator.py,sha256=C3NylZWGTVWRpwYHOPVhaLgRhw0DfpS4_XQ8KfPhBLQ,3613
44
44
  utilities/optuna.py,sha256=C-fhWYiXHVPo1l8QctYkFJ4DyhbSrGorzP1dJb_qvd8,1933
45
45
  utilities/orjson.py,sha256=T_0SlK811ysg46d3orvIPY3JpBa4FRMpP2wlPQo7-gU,41854
46
46
  utilities/os.py,sha256=kjKKSQfnRqFTTZ315iavaaGd3gGuYNoSWlxVLCJjyQs,4852
47
- utilities/packaging.py,sha256=kuGenKbyAwxZWL_mbkMzkNXKjhyi9a9tfZQwitrYYlM,2401
47
+ utilities/packaging.py,sha256=UGD2O2kW8fRYCPpwrBS2qq1j-3f1WsYDkyvaP2bxg3s,3096
48
48
  utilities/parse.py,sha256=g7Qm9eBOIeDId2tGA021CIaeF6jp1TI8rx4srdvlyoo,17937
49
49
  utilities/pathlib.py,sha256=N4Ip8R9eCM-6GfvxUJ3T9oQIle2C2P52F-13BCFRdTg,9345
50
50
  utilities/permissions.py,sha256=vLXlWztSVYffbrxptne7ksj6dU1HLekm4fEvS4ny_4Q,8944
@@ -98,7 +98,7 @@ utilities/warnings.py,sha256=un1LvHv70PU-LLv8RxPVmugTzDJkkGXRMZTE2-fTQHw,1771
98
98
  utilities/whenever.py,sha256=F4ek0-OBWxHYrZdmoZt76N2RnNyKY5KrEHt7rqO4AQE,60183
99
99
  utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
100
100
  utilities/zoneinfo.py,sha256=tdIScrTB2-B-LH0ukb1HUXKooLknOfJNwHk10MuMYvA,3619
101
- dycw_utilities-0.176.5.dist-info/WHEEL,sha256=KSLUh82mDPEPk0Bx0ScXlWL64bc8KmzIPNcpQZFV-6E,79
102
- dycw_utilities-0.176.5.dist-info/entry_points.txt,sha256=cOGtKeJI0KXLSV7MJ8Dhc2G8jPgDcBDm53MVNJU4ycI,136
103
- dycw_utilities-0.176.5.dist-info/METADATA,sha256=g6FzLC0r4g8uwbM_zouJhCaaHM0IsQ1q33xQyS5tZp0,1398
104
- dycw_utilities-0.176.5.dist-info/RECORD,,
101
+ dycw_utilities-0.176.6.dist-info/WHEEL,sha256=KSLUh82mDPEPk0Bx0ScXlWL64bc8KmzIPNcpQZFV-6E,79
102
+ dycw_utilities-0.176.6.dist-info/entry_points.txt,sha256=cOGtKeJI0KXLSV7MJ8Dhc2G8jPgDcBDm53MVNJU4ycI,136
103
+ dycw_utilities-0.176.6.dist-info/METADATA,sha256=2x7y41YJEnsO9-W1RdfA0Ndxo7GSBDyS_Ip3uz4NazY,1398
104
+ dycw_utilities-0.176.6.dist-info/RECORD,,
utilities/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.176.5"
3
+ __version__ = "0.176.6"
utilities/packaging.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import TYPE_CHECKING, Self, override
4
+ from typing import TYPE_CHECKING, Self, overload, override
5
5
 
6
6
  import packaging._parser
7
7
  import packaging.requirements
@@ -20,8 +20,8 @@ class Requirement:
20
20
  _parsed_req: packaging._parser.ParsedRequirement
21
21
  _custom_req: _CustomRequirement
22
22
 
23
- def __getitem__(self, key: str, /) -> str:
24
- return self.specifier_set[key]
23
+ def __getitem__(self, operator: str, /) -> str:
24
+ return self.specifier_set[operator]
25
25
 
26
26
  @override
27
27
  def __str__(self) -> str:
@@ -39,6 +39,13 @@ class Requirement:
39
39
  def extras(self) -> list[str]:
40
40
  return self._parsed_req.extras
41
41
 
42
+ @overload
43
+ def get(self, operator: str, default: str, /) -> str: ...
44
+ @overload
45
+ def get(self, operator: str, default: None = None, /) -> str | None: ...
46
+ def get(self, operator: str, default: str | None = None, /) -> str | None:
47
+ return self.specifier_set.get(operator, default)
48
+
42
49
  @property
43
50
  def marker(self) -> MarkerList | None:
44
51
  return self._parsed_req.marker
@@ -69,18 +76,28 @@ class _CustomRequirement(packaging.requirements.Requirement):
69
76
 
70
77
 
71
78
  class _CustomSpecifierSet(SpecifierSet):
72
- def __getitem__(self, key: str, /) -> str:
79
+ def __getitem__(self, operator: str, /) -> str:
73
80
  try:
74
- return one(s.version for s in self if s.operator == key)
81
+ return one(s.version for s in self if s.operator == operator)
75
82
  except OneEmptyError:
76
- raise KeyError(key) from None
83
+ raise KeyError(operator) from None
77
84
 
78
85
  @override
79
86
  def __str__(self) -> str:
80
- specs = sorted(self._specs, key=self._key)
87
+ specs = sorted(self._specs, key=self._sort_key)
81
88
  return ", ".join(map(str, specs))
82
89
 
83
- def _key(self, spec: Specifier, /) -> int:
90
+ @overload
91
+ def get(self, operator: str, default: str, /) -> str: ...
92
+ @overload
93
+ def get(self, operator: str, default: None = None, /) -> str | None: ...
94
+ def get(self, operator: str, default: str | None = None, /) -> str | None:
95
+ try:
96
+ return self[operator]
97
+ except KeyError:
98
+ return default
99
+
100
+ def _sort_key(self, spec: Specifier, /) -> int:
84
101
  return [">=", "<"].index(spec.operator)
85
102
 
86
103