dycw-utilities 0.166.30__py3-none-any.whl → 0.185.8__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.
Files changed (96) hide show
  1. dycw_utilities-0.185.8.dist-info/METADATA +33 -0
  2. dycw_utilities-0.185.8.dist-info/RECORD +90 -0
  3. {dycw_utilities-0.166.30.dist-info → dycw_utilities-0.185.8.dist-info}/WHEEL +1 -1
  4. {dycw_utilities-0.166.30.dist-info → dycw_utilities-0.185.8.dist-info}/entry_points.txt +1 -0
  5. utilities/__init__.py +1 -1
  6. utilities/altair.py +17 -10
  7. utilities/asyncio.py +50 -72
  8. utilities/atools.py +9 -11
  9. utilities/cachetools.py +16 -11
  10. utilities/click.py +76 -19
  11. utilities/concurrent.py +1 -1
  12. utilities/constants.py +492 -0
  13. utilities/contextlib.py +23 -30
  14. utilities/contextvars.py +1 -23
  15. utilities/core.py +2581 -0
  16. utilities/dataclasses.py +16 -119
  17. utilities/docker.py +387 -0
  18. utilities/enum.py +1 -1
  19. utilities/errors.py +2 -16
  20. utilities/fastapi.py +5 -5
  21. utilities/fpdf2.py +2 -1
  22. utilities/functions.py +34 -265
  23. utilities/http.py +2 -3
  24. utilities/hypothesis.py +84 -29
  25. utilities/importlib.py +17 -1
  26. utilities/iterables.py +39 -575
  27. utilities/jinja2.py +145 -0
  28. utilities/jupyter.py +5 -3
  29. utilities/libcst.py +1 -1
  30. utilities/lightweight_charts.py +4 -6
  31. utilities/logging.py +24 -24
  32. utilities/math.py +1 -36
  33. utilities/more_itertools.py +4 -6
  34. utilities/numpy.py +2 -1
  35. utilities/operator.py +2 -2
  36. utilities/orjson.py +42 -43
  37. utilities/os.py +4 -147
  38. utilities/packaging.py +129 -0
  39. utilities/parse.py +35 -15
  40. utilities/pathlib.py +3 -120
  41. utilities/platform.py +8 -90
  42. utilities/polars.py +38 -32
  43. utilities/postgres.py +37 -33
  44. utilities/pottery.py +20 -18
  45. utilities/pqdm.py +3 -4
  46. utilities/psutil.py +2 -3
  47. utilities/pydantic.py +25 -0
  48. utilities/pydantic_settings.py +87 -16
  49. utilities/pydantic_settings_sops.py +16 -3
  50. utilities/pyinstrument.py +4 -4
  51. utilities/pytest.py +96 -125
  52. utilities/pytest_plugins/pytest_regressions.py +2 -2
  53. utilities/pytest_regressions.py +32 -11
  54. utilities/random.py +2 -8
  55. utilities/redis.py +98 -94
  56. utilities/reprlib.py +11 -118
  57. utilities/shellingham.py +66 -0
  58. utilities/shutil.py +25 -0
  59. utilities/slack_sdk.py +13 -12
  60. utilities/sqlalchemy.py +57 -30
  61. utilities/sqlalchemy_polars.py +16 -25
  62. utilities/subprocess.py +2590 -0
  63. utilities/tabulate.py +32 -0
  64. utilities/testbook.py +8 -8
  65. utilities/text.py +24 -99
  66. utilities/throttle.py +159 -0
  67. utilities/time.py +18 -0
  68. utilities/timer.py +31 -14
  69. utilities/traceback.py +16 -23
  70. utilities/types.py +42 -2
  71. utilities/typing.py +26 -14
  72. utilities/uuid.py +1 -1
  73. utilities/version.py +202 -45
  74. utilities/whenever.py +53 -150
  75. dycw_utilities-0.166.30.dist-info/METADATA +0 -41
  76. dycw_utilities-0.166.30.dist-info/RECORD +0 -98
  77. dycw_utilities-0.166.30.dist-info/licenses/LICENSE +0 -21
  78. utilities/aeventkit.py +0 -388
  79. utilities/atomicwrites.py +0 -182
  80. utilities/cryptography.py +0 -41
  81. utilities/getpass.py +0 -8
  82. utilities/git.py +0 -19
  83. utilities/gzip.py +0 -31
  84. utilities/json.py +0 -70
  85. utilities/pickle.py +0 -25
  86. utilities/re.py +0 -156
  87. utilities/sentinel.py +0 -73
  88. utilities/socket.py +0 -8
  89. utilities/string.py +0 -20
  90. utilities/tempfile.py +0 -77
  91. utilities/typed_settings.py +0 -152
  92. utilities/tzdata.py +0 -11
  93. utilities/tzlocal.py +0 -28
  94. utilities/warnings.py +0 -65
  95. utilities/zipfile.py +0 -25
  96. utilities/zoneinfo.py +0 -133
utilities/zipfile.py DELETED
@@ -1,25 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from contextlib import contextmanager
4
- from typing import TYPE_CHECKING
5
- from zipfile import ZipFile
6
-
7
- from utilities.tempfile import TemporaryDirectory
8
-
9
- if TYPE_CHECKING:
10
- from collections.abc import Iterator
11
- from pathlib import Path
12
-
13
- from utilities.types import PathLike
14
-
15
-
16
- @contextmanager
17
- def yield_zip_file_contents(path: PathLike, /) -> Iterator[list[Path]]:
18
- """Yield the contents of a zipfile in a temporary directory."""
19
- with ZipFile(path) as zf, TemporaryDirectory() as temp:
20
- zf.extractall(path=temp)
21
- yield list(temp.iterdir())
22
- _ = zf # make coverage understand this is returned
23
-
24
-
25
- __all__ = ["yield_zip_file_contents"]
utilities/zoneinfo.py DELETED
@@ -1,133 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import datetime as dt
4
- from dataclasses import dataclass
5
- from typing import TYPE_CHECKING, assert_never, cast, override
6
- from zoneinfo import ZoneInfo
7
-
8
- from whenever import ZonedDateTime
9
-
10
- from utilities.types import TIME_ZONES
11
- from utilities.tzlocal import LOCAL_TIME_ZONE, LOCAL_TIME_ZONE_NAME
12
-
13
- if TYPE_CHECKING:
14
- from utilities.types import TimeZone, TimeZoneLike
15
-
16
-
17
- UTC = ZoneInfo("UTC")
18
-
19
-
20
- ##
21
-
22
-
23
- def to_zone_info(obj: TimeZoneLike, /) -> ZoneInfo:
24
- """Convert to a time-zone."""
25
- match obj:
26
- case ZoneInfo() as zone_info:
27
- return zone_info
28
- case ZonedDateTime() as date_time:
29
- return ZoneInfo(date_time.tz)
30
- case "local" | "localtime":
31
- return LOCAL_TIME_ZONE
32
- case str() as key:
33
- return ZoneInfo(key)
34
- case dt.tzinfo() as tzinfo:
35
- if tzinfo is dt.UTC:
36
- return UTC
37
- raise _ToZoneInfoInvalidTZInfoError(time_zone=obj)
38
- case dt.datetime() as date_time:
39
- if date_time.tzinfo is None:
40
- raise _ToZoneInfoPlainDateTimeError(date_time=date_time)
41
- return to_zone_info(date_time.tzinfo)
42
- case never:
43
- assert_never(never)
44
-
45
-
46
- @dataclass(kw_only=True, slots=True)
47
- class ToTimeZoneError(Exception): ...
48
-
49
-
50
- @dataclass(kw_only=True, slots=True)
51
- class _ToZoneInfoInvalidTZInfoError(ToTimeZoneError):
52
- time_zone: dt.tzinfo
53
-
54
- @override
55
- def __str__(self) -> str:
56
- return f"Invalid time-zone: {self.time_zone}"
57
-
58
-
59
- @dataclass(kw_only=True, slots=True)
60
- class _ToZoneInfoPlainDateTimeError(ToTimeZoneError):
61
- date_time: dt.datetime
62
-
63
- @override
64
- def __str__(self) -> str:
65
- return f"Plain date-time: {self.date_time}"
66
-
67
-
68
- ##
69
-
70
-
71
- def to_time_zone_name(obj: TimeZoneLike, /) -> TimeZone:
72
- """Convert to a time zone name."""
73
- match obj:
74
- case ZoneInfo() as zone_info:
75
- return cast("TimeZone", zone_info.key)
76
- case ZonedDateTime() as date_time:
77
- return cast("TimeZone", date_time.tz)
78
- case "local" | "localtime":
79
- return LOCAL_TIME_ZONE_NAME
80
- case str() as time_zone:
81
- if time_zone in TIME_ZONES:
82
- return time_zone
83
- raise _ToTimeZoneNameInvalidKeyError(time_zone=time_zone)
84
- case dt.tzinfo() as tzinfo:
85
- if tzinfo is dt.UTC:
86
- return cast("TimeZone", UTC.key)
87
- raise _ToTimeZoneNameInvalidTZInfoError(time_zone=obj)
88
- case dt.datetime() as date_time:
89
- if date_time.tzinfo is None:
90
- raise _ToTimeZoneNamePlainDateTimeError(date_time=date_time)
91
- return to_time_zone_name(date_time.tzinfo)
92
- case never:
93
- assert_never(never)
94
-
95
-
96
- @dataclass(kw_only=True, slots=True)
97
- class ToTimeZoneNameError(Exception): ...
98
-
99
-
100
- @dataclass(kw_only=True, slots=True)
101
- class _ToTimeZoneNameInvalidKeyError(ToTimeZoneNameError):
102
- time_zone: str
103
-
104
- @override
105
- def __str__(self) -> str:
106
- return f"Invalid time-zone: {self.time_zone!r}"
107
-
108
-
109
- @dataclass(kw_only=True, slots=True)
110
- class _ToTimeZoneNameInvalidTZInfoError(ToTimeZoneNameError):
111
- time_zone: dt.tzinfo
112
-
113
- @override
114
- def __str__(self) -> str:
115
- return f"Invalid time-zone: {self.time_zone}"
116
-
117
-
118
- @dataclass(kw_only=True, slots=True)
119
- class _ToTimeZoneNamePlainDateTimeError(ToTimeZoneNameError):
120
- date_time: dt.datetime
121
-
122
- @override
123
- def __str__(self) -> str:
124
- return f"Plain date-time: {self.date_time}"
125
-
126
-
127
- __all__ = [
128
- "UTC",
129
- "ToTimeZoneError",
130
- "ToTimeZoneNameError",
131
- "to_time_zone_name",
132
- "to_zone_info",
133
- ]