dycw-utilities 0.152.0__py3-none-any.whl → 0.153.0__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.
utilities/uuid.py CHANGED
@@ -1,24 +1,61 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING
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
- def get_uuid(*, seed: Seed | None = None) -> UUID:
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=seed)
26
+ state = get_state(seed)
21
27
  return UUID(int=state.getrandbits(128), version=4)
22
28
 
23
29
 
24
- __all__ = ["UUID_EXACT_PATTERN", "UUID_PATTERN", "get_uuid"]
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, 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
  ]