dycw-utilities 0.152.0__py3-none-any.whl → 0.153.1__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.
- {dycw_utilities-0.152.0.dist-info → dycw_utilities-0.153.1.dist-info}/METADATA +1 -1
- {dycw_utilities-0.152.0.dist-info → dycw_utilities-0.153.1.dist-info}/RECORD +26 -27
- utilities/__init__.py +1 -1
- utilities/asyncio.py +12 -11
- utilities/cryptography.py +3 -3
- utilities/eventkit.py +8 -8
- utilities/functions.py +1 -33
- utilities/logging.py +23 -24
- utilities/pathlib.py +34 -34
- utilities/postgres.py +12 -12
- utilities/pottery.py +5 -5
- utilities/pyinstrument.py +3 -3
- utilities/pytest.py +8 -8
- utilities/pytest_plugins/pytest_randomly.py +1 -1
- utilities/pytest_plugins/pytest_regressions.py +1 -1
- utilities/random.py +8 -6
- utilities/text.py +58 -2
- utilities/traceback.py +15 -18
- utilities/typed_settings.py +3 -3
- utilities/types.py +24 -14
- utilities/uuid.py +42 -5
- utilities/version.py +27 -26
- utilities/whenever.py +431 -37
- utilities/period.py +0 -370
- {dycw_utilities-0.152.0.dist-info → dycw_utilities-0.153.1.dist-info}/WHEEL +0 -0
- {dycw_utilities-0.152.0.dist-info → dycw_utilities-0.153.1.dist-info}/entry_points.txt +0 -0
- {dycw_utilities-0.152.0.dist-info → dycw_utilities-0.153.1.dist-info}/licenses/LICENSE +0 -0
utilities/uuid.py
CHANGED
@@ -1,24 +1,61 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from
|
3
|
+
from collections.abc import Callable
|
4
|
+
from random import Random
|
5
|
+
from typing import TYPE_CHECKING, assert_never, overload
|
4
6
|
from uuid import UUID, uuid4
|
5
7
|
|
6
8
|
from utilities.random import get_state
|
9
|
+
from utilities.sentinel import Sentinel
|
7
10
|
|
8
11
|
if TYPE_CHECKING:
|
9
|
-
from utilities.types import Seed
|
12
|
+
from utilities.types import MaybeCallableUUIDLike, Seed
|
10
13
|
|
11
14
|
|
12
15
|
UUID_PATTERN = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
|
13
16
|
UUID_EXACT_PATTERN = f"^{UUID_PATTERN}$"
|
14
17
|
|
15
18
|
|
16
|
-
|
19
|
+
##
|
20
|
+
|
21
|
+
|
22
|
+
def get_uuid(seed: Seed | None = None, /) -> UUID:
|
17
23
|
"""Generate a UUID, possibly with a seed."""
|
18
24
|
if seed is None:
|
19
25
|
return uuid4()
|
20
|
-
state = get_state(seed
|
26
|
+
state = get_state(seed)
|
21
27
|
return UUID(int=state.getrandbits(128), version=4)
|
22
28
|
|
23
29
|
|
24
|
-
|
30
|
+
##
|
31
|
+
|
32
|
+
|
33
|
+
@overload
|
34
|
+
def to_uuid(uuid: Sentinel, /, *, seed: Seed | None = None) -> Sentinel: ...
|
35
|
+
@overload
|
36
|
+
def to_uuid(
|
37
|
+
uuid: MaybeCallableUUIDLike | None = get_uuid, /, *, seed: Seed | None = None
|
38
|
+
) -> UUID: ...
|
39
|
+
def to_uuid(
|
40
|
+
uuid: MaybeCallableUUIDLike | None | Sentinel = get_uuid,
|
41
|
+
/,
|
42
|
+
*,
|
43
|
+
seed: Seed | None = None,
|
44
|
+
) -> UUID | Sentinel:
|
45
|
+
"""Convert to a UUID."""
|
46
|
+
match uuid:
|
47
|
+
case UUID() | Sentinel():
|
48
|
+
return uuid
|
49
|
+
case None:
|
50
|
+
return get_uuid(seed)
|
51
|
+
case str():
|
52
|
+
return UUID(uuid)
|
53
|
+
case int() | float() | bytes() | bytearray() | Random() as seed:
|
54
|
+
return get_uuid(seed)
|
55
|
+
case Callable() as func:
|
56
|
+
return to_uuid(func(), seed=seed)
|
57
|
+
case never:
|
58
|
+
assert_never(never)
|
59
|
+
|
60
|
+
|
61
|
+
__all__ = ["UUID_EXACT_PATTERN", "UUID_PATTERN", "get_uuid", "to_uuid"]
|
utilities/version.py
CHANGED
@@ -6,7 +6,7 @@ from dataclasses import dataclass, field, replace
|
|
6
6
|
from functools import total_ordering
|
7
7
|
from typing import Any, Self, assert_never, overload, override
|
8
8
|
|
9
|
-
from utilities.sentinel import Sentinel
|
9
|
+
from utilities.sentinel import Sentinel
|
10
10
|
from utilities.types import MaybeCallable, MaybeStr
|
11
11
|
|
12
12
|
type VersionLike = MaybeStr[Version]
|
@@ -131,30 +131,6 @@ class _VersionEmptySuffixError(VersionError):
|
|
131
131
|
##
|
132
132
|
|
133
133
|
|
134
|
-
@overload
|
135
|
-
def get_version(*, version: MaybeCallableVersionLike) -> Version: ...
|
136
|
-
@overload
|
137
|
-
def get_version(*, version: None) -> None: ...
|
138
|
-
@overload
|
139
|
-
def get_version(*, version: Sentinel) -> Sentinel: ...
|
140
|
-
def get_version(
|
141
|
-
*, version: MaybeCallableVersionLike | None | Sentinel = sentinel
|
142
|
-
) -> Version | None | Sentinel:
|
143
|
-
"""Get the version."""
|
144
|
-
match version:
|
145
|
-
case Version() | None | Sentinel():
|
146
|
-
return version
|
147
|
-
case str():
|
148
|
-
return parse_version(version)
|
149
|
-
case Callable() as func:
|
150
|
-
return get_version(version=func())
|
151
|
-
case never:
|
152
|
-
assert_never(never)
|
153
|
-
|
154
|
-
|
155
|
-
##
|
156
|
-
|
157
|
-
|
158
134
|
def parse_version(version: str, /) -> Version:
|
159
135
|
"""Parse a string into a version object."""
|
160
136
|
try:
|
@@ -178,12 +154,37 @@ class ParseVersionError(Exception):
|
|
178
154
|
return f"Invalid version string: {self.version!r}"
|
179
155
|
|
180
156
|
|
157
|
+
##
|
158
|
+
|
159
|
+
|
160
|
+
@overload
|
161
|
+
def to_version(version: MaybeCallableVersionLike, /) -> Version: ...
|
162
|
+
@overload
|
163
|
+
def to_version(version: None, /) -> None: ...
|
164
|
+
@overload
|
165
|
+
def to_version(version: Sentinel, /) -> Sentinel: ...
|
166
|
+
def to_version(
|
167
|
+
version: MaybeCallableVersionLike | None | Sentinel, /
|
168
|
+
) -> Version | None | Sentinel:
|
169
|
+
"""Convert to a version."""
|
170
|
+
match version:
|
171
|
+
case Version() | None | Sentinel():
|
172
|
+
return version
|
173
|
+
case str():
|
174
|
+
return parse_version(version)
|
175
|
+
case Callable() as func:
|
176
|
+
return to_version(func())
|
177
|
+
case never:
|
178
|
+
assert_never(never)
|
179
|
+
|
180
|
+
|
181
|
+
##
|
181
182
|
__all__ = [
|
182
183
|
"MaybeCallableVersionLike",
|
183
184
|
"ParseVersionError",
|
184
185
|
"Version",
|
185
186
|
"VersionError",
|
186
187
|
"VersionLike",
|
187
|
-
"get_version",
|
188
188
|
"parse_version",
|
189
|
+
"to_version",
|
189
190
|
]
|