dycw-utilities 0.129.10__py3-none-any.whl → 0.175.17__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 (103) hide show
  1. dycw_utilities-0.175.17.dist-info/METADATA +34 -0
  2. dycw_utilities-0.175.17.dist-info/RECORD +103 -0
  3. dycw_utilities-0.175.17.dist-info/WHEEL +4 -0
  4. dycw_utilities-0.175.17.dist-info/entry_points.txt +4 -0
  5. utilities/__init__.py +1 -1
  6. utilities/altair.py +14 -14
  7. utilities/asyncio.py +350 -819
  8. utilities/atomicwrites.py +18 -6
  9. utilities/atools.py +77 -22
  10. utilities/cachetools.py +24 -29
  11. utilities/click.py +393 -237
  12. utilities/concurrent.py +8 -11
  13. utilities/contextlib.py +216 -17
  14. utilities/contextvars.py +20 -1
  15. utilities/cryptography.py +3 -3
  16. utilities/dataclasses.py +83 -118
  17. utilities/docker.py +293 -0
  18. utilities/enum.py +26 -23
  19. utilities/errors.py +17 -3
  20. utilities/fastapi.py +29 -65
  21. utilities/fpdf2.py +3 -3
  22. utilities/functions.py +169 -416
  23. utilities/functools.py +18 -19
  24. utilities/git.py +9 -30
  25. utilities/grp.py +28 -0
  26. utilities/gzip.py +31 -0
  27. utilities/http.py +3 -2
  28. utilities/hypothesis.py +738 -589
  29. utilities/importlib.py +17 -1
  30. utilities/inflect.py +25 -0
  31. utilities/iterables.py +194 -262
  32. utilities/jinja2.py +148 -0
  33. utilities/json.py +70 -0
  34. utilities/libcst.py +38 -17
  35. utilities/lightweight_charts.py +5 -9
  36. utilities/logging.py +345 -543
  37. utilities/math.py +18 -13
  38. utilities/memory_profiler.py +11 -15
  39. utilities/more_itertools.py +200 -131
  40. utilities/operator.py +33 -29
  41. utilities/optuna.py +6 -6
  42. utilities/orjson.py +272 -137
  43. utilities/os.py +61 -4
  44. utilities/parse.py +59 -61
  45. utilities/pathlib.py +281 -40
  46. utilities/permissions.py +298 -0
  47. utilities/pickle.py +2 -2
  48. utilities/platform.py +24 -5
  49. utilities/polars.py +1214 -430
  50. utilities/polars_ols.py +1 -1
  51. utilities/postgres.py +408 -0
  52. utilities/pottery.py +113 -26
  53. utilities/pqdm.py +10 -11
  54. utilities/psutil.py +6 -57
  55. utilities/pwd.py +28 -0
  56. utilities/pydantic.py +4 -54
  57. utilities/pydantic_settings.py +240 -0
  58. utilities/pydantic_settings_sops.py +76 -0
  59. utilities/pyinstrument.py +8 -10
  60. utilities/pytest.py +227 -121
  61. utilities/pytest_plugins/__init__.py +1 -0
  62. utilities/pytest_plugins/pytest_randomly.py +23 -0
  63. utilities/pytest_plugins/pytest_regressions.py +56 -0
  64. utilities/pytest_regressions.py +26 -46
  65. utilities/random.py +13 -9
  66. utilities/re.py +58 -28
  67. utilities/redis.py +401 -550
  68. utilities/scipy.py +1 -1
  69. utilities/sentinel.py +10 -0
  70. utilities/shelve.py +4 -1
  71. utilities/shutil.py +25 -0
  72. utilities/slack_sdk.py +36 -106
  73. utilities/sqlalchemy.py +502 -473
  74. utilities/sqlalchemy_polars.py +38 -94
  75. utilities/string.py +2 -3
  76. utilities/subprocess.py +1572 -0
  77. utilities/tempfile.py +86 -4
  78. utilities/testbook.py +50 -0
  79. utilities/text.py +165 -42
  80. utilities/timer.py +37 -65
  81. utilities/traceback.py +158 -929
  82. utilities/types.py +146 -116
  83. utilities/typing.py +531 -71
  84. utilities/tzdata.py +1 -53
  85. utilities/tzlocal.py +6 -23
  86. utilities/uuid.py +43 -5
  87. utilities/version.py +27 -26
  88. utilities/whenever.py +1776 -386
  89. utilities/zoneinfo.py +84 -22
  90. dycw_utilities-0.129.10.dist-info/METADATA +0 -241
  91. dycw_utilities-0.129.10.dist-info/RECORD +0 -96
  92. dycw_utilities-0.129.10.dist-info/WHEEL +0 -4
  93. dycw_utilities-0.129.10.dist-info/licenses/LICENSE +0 -21
  94. utilities/datetime.py +0 -1409
  95. utilities/eventkit.py +0 -402
  96. utilities/loguru.py +0 -144
  97. utilities/luigi.py +0 -228
  98. utilities/period.py +0 -324
  99. utilities/pyrsistent.py +0 -89
  100. utilities/python_dotenv.py +0 -105
  101. utilities/streamlit.py +0 -105
  102. utilities/sys.py +0 -87
  103. utilities/tenacity.py +0 -145
utilities/zoneinfo.py CHANGED
@@ -5,6 +5,11 @@ from dataclasses import dataclass
5
5
  from typing import TYPE_CHECKING, assert_never, cast, override
6
6
  from zoneinfo import ZoneInfo
7
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
+
8
13
  if TYPE_CHECKING:
9
14
  from utilities.types import TimeZone, TimeZoneLike
10
15
 
@@ -15,57 +20,114 @@ UTC = ZoneInfo("UTC")
15
20
  ##
16
21
 
17
22
 
18
- def ensure_time_zone(obj: TimeZoneLike, /) -> ZoneInfo:
19
- """Ensure the object is a time zone."""
23
+ def to_zone_info(obj: TimeZoneLike, /) -> ZoneInfo:
24
+ """Convert to a time-zone."""
20
25
  match obj:
21
26
  case ZoneInfo() as zone_info:
22
27
  return zone_info
23
- case "local":
24
- from utilities.tzlocal import get_local_time_zone
25
-
26
- return get_local_time_zone()
28
+ case ZonedDateTime() as date_time:
29
+ return ZoneInfo(date_time.tz)
30
+ case "local" | "localtime":
31
+ return LOCAL_TIME_ZONE
27
32
  case str() as key:
28
33
  return ZoneInfo(key)
29
34
  case dt.tzinfo() as tzinfo:
30
35
  if tzinfo is dt.UTC:
31
36
  return UTC
32
- raise _EnsureTimeZoneInvalidTZInfoError(time_zone=obj)
33
- case dt.datetime() as datetime:
34
- if datetime.tzinfo is None:
35
- raise _EnsureTimeZonePlainDateTimeError(datetime=datetime)
36
- return ensure_time_zone(datetime.tzinfo)
37
- case _ as never:
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:
38
43
  assert_never(never)
39
44
 
40
45
 
41
46
  @dataclass(kw_only=True, slots=True)
42
- class EnsureTimeZoneError(Exception): ...
47
+ class ToTimeZoneError(Exception): ...
43
48
 
44
49
 
45
50
  @dataclass(kw_only=True, slots=True)
46
- class _EnsureTimeZoneInvalidTZInfoError(EnsureTimeZoneError):
51
+ class _ToZoneInfoInvalidTZInfoError(ToTimeZoneError):
47
52
  time_zone: dt.tzinfo
48
53
 
49
54
  @override
50
55
  def __str__(self) -> str:
51
- return f"Unsupported time zone: {self.time_zone}"
56
+ return f"Invalid time-zone: {self.time_zone}"
52
57
 
53
58
 
54
59
  @dataclass(kw_only=True, slots=True)
55
- class _EnsureTimeZonePlainDateTimeError(EnsureTimeZoneError):
56
- datetime: dt.datetime
60
+ class _ToZoneInfoPlainDateTimeError(ToTimeZoneError):
61
+ date_time: dt.datetime
57
62
 
58
63
  @override
59
64
  def __str__(self) -> str:
60
- return f"Plain datetime: {self.datetime}"
65
+ return f"Plain date-time: {self.date_time}"
61
66
 
62
67
 
63
68
  ##
64
69
 
65
70
 
66
- def get_time_zone_name(time_zone: TimeZoneLike, /) -> TimeZone:
67
- """Get the name of a time zone."""
68
- return cast("TimeZone", ensure_time_zone(time_zone).key)
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}"
69
125
 
70
126
 
71
- __all__ = ["UTC", "EnsureTimeZoneError", "ensure_time_zone", "get_time_zone_name"]
127
+ __all__ = [
128
+ "UTC",
129
+ "ToTimeZoneError",
130
+ "ToTimeZoneNameError",
131
+ "to_time_zone_name",
132
+ "to_zone_info",
133
+ ]
@@ -1,241 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: dycw-utilities
3
- Version: 0.129.10
4
- Author-email: Derek Wan <d.wan@icloud.com>
5
- License-File: LICENSE
6
- Requires-Python: >=3.12
7
- Requires-Dist: typing-extensions<4.15,>=4.14.0
8
- Provides-Extra: test
9
- Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
10
- Requires-Dist: hypothesis<6.136,>=6.135.0; extra == 'test'
11
- Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
12
- Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
13
- Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
14
- Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.4; extra == 'test'
15
- Requires-Dist: pytest-randomly<3.17,>=3.16.0; extra == 'test'
16
- Requires-Dist: pytest-regressions<2.9,>=2.8.0; extra == 'test'
17
- Requires-Dist: pytest-rerunfailures<16,>=15.1; extra == 'test'
18
- Requires-Dist: pytest-rng<1.1,>=1.0.0; extra == 'test'
19
- Requires-Dist: pytest-timeout<2.5,>=2.4.0; extra == 'test'
20
- Requires-Dist: pytest-xdist<3.8,>=3.7.0; extra == 'test'
21
- Requires-Dist: pytest<8.4,>=8.3.5; extra == 'test'
22
- Provides-Extra: zzz-test-altair
23
- Requires-Dist: altair<5.6,>=5.5.0; extra == 'zzz-test-altair'
24
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-altair'
25
- Requires-Dist: img2pdf<0.7,>=0.6.0; extra == 'zzz-test-altair'
26
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-altair'
27
- Requires-Dist: vl-convert-python<1.9,>=1.8.0; extra == 'zzz-test-altair'
28
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-altair'
29
- Provides-Extra: zzz-test-asyncio
30
- Provides-Extra: zzz-test-atomicwrites
31
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-atomicwrites'
32
- Provides-Extra: zzz-test-atools
33
- Requires-Dist: atools<0.15,>=0.14.2; extra == 'zzz-test-atools'
34
- Provides-Extra: zzz-test-cachetools
35
- Requires-Dist: cachetools<5.6,>=5.5.2; extra == 'zzz-test-cachetools'
36
- Provides-Extra: zzz-test-click
37
- Requires-Dist: click<8.3,>=8.2.1; extra == 'zzz-test-click'
38
- Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-click'
39
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-click'
40
- Provides-Extra: zzz-test-contextlib
41
- Provides-Extra: zzz-test-contextvars
42
- Provides-Extra: zzz-test-cryptography
43
- Requires-Dist: cryptography<45.1,>=45.0.3; extra == 'zzz-test-cryptography'
44
- Provides-Extra: zzz-test-cvxpy
45
- Requires-Dist: cvxpy<1.7,>=1.6.5; extra == 'zzz-test-cvxpy'
46
- Provides-Extra: zzz-test-dataclasses
47
- Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-dataclasses'
48
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-dataclasses'
49
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-dataclasses'
50
- Provides-Extra: zzz-test-datetime
51
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-datetime'
52
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-datetime'
53
- Provides-Extra: zzz-test-enum
54
- Provides-Extra: zzz-test-errors
55
- Provides-Extra: zzz-test-eventkit
56
- Requires-Dist: eventkit<1.1,>=1.0.3; extra == 'zzz-test-eventkit'
57
- Provides-Extra: zzz-test-fastapi
58
- Requires-Dist: fastapi<0.116,>=0.115.11; extra == 'zzz-test-fastapi'
59
- Requires-Dist: httpx<0.29,>=0.28.1; extra == 'zzz-test-fastapi'
60
- Requires-Dist: uvicorn<0.35,>=0.34.1; extra == 'zzz-test-fastapi'
61
- Provides-Extra: zzz-test-fpdf2
62
- Requires-Dist: fpdf2<2.9,>=2.8.3; extra == 'zzz-test-fpdf2'
63
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-fpdf2'
64
- Provides-Extra: zzz-test-functions
65
- Provides-Extra: zzz-test-functools
66
- Provides-Extra: zzz-test-getpass
67
- Provides-Extra: zzz-test-git
68
- Provides-Extra: zzz-test-hashlib
69
- Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-hashlib'
70
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-hashlib'
71
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-hashlib'
72
- Provides-Extra: zzz-test-http
73
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-http'
74
- Requires-Dist: orjson<3.11,>=3.10.18; extra == 'zzz-test-http'
75
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-http'
76
- Provides-Extra: zzz-test-hypothesis
77
- Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-hypothesis'
78
- Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-hypothesis'
79
- Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-hypothesis'
80
- Requires-Dist: hypothesis<6.136,>=6.135.0; extra == 'zzz-test-hypothesis'
81
- Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-hypothesis'
82
- Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-hypothesis'
83
- Requires-Dist: pathvalidate<3.3,>=3.2.3; extra == 'zzz-test-hypothesis'
84
- Requires-Dist: redis<6.3,>=6.2.0; extra == 'zzz-test-hypothesis'
85
- Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-hypothesis'
86
- Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-hypothesis'
87
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-hypothesis'
88
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-hypothesis'
89
- Provides-Extra: zzz-test-ipython
90
- Requires-Dist: ipython<9.1,>=9.0.1; extra == 'zzz-test-ipython'
91
- Provides-Extra: zzz-test-iterables
92
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-iterables'
93
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-iterables'
94
- Provides-Extra: zzz-test-jupyter
95
- Requires-Dist: jupyterlab<4.3,>=4.2.0; extra == 'zzz-test-jupyter'
96
- Requires-Dist: pandas<2.4,>=2.3.0; extra == 'zzz-test-jupyter'
97
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-jupyter'
98
- Provides-Extra: zzz-test-logging
99
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-logging'
100
- Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'zzz-test-logging'
101
- Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-logging'
102
- Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-logging'
103
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-logging'
104
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-logging'
105
- Provides-Extra: zzz-test-loguru
106
- Requires-Dist: loguru<0.8,>=0.7.3; extra == 'zzz-test-loguru'
107
- Provides-Extra: zzz-test-luigi
108
- Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-luigi'
109
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-luigi'
110
- Provides-Extra: zzz-test-math
111
- Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-math'
112
- Provides-Extra: zzz-test-memory-profiler
113
- Requires-Dist: memory-profiler<0.62,>=0.61.0; extra == 'zzz-test-memory-profiler'
114
- Provides-Extra: zzz-test-modules
115
- Provides-Extra: zzz-test-more-itertools
116
- Requires-Dist: more-itertools<10.8,>=10.7.0; extra == 'zzz-test-more-itertools'
117
- Provides-Extra: zzz-test-numpy
118
- Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-numpy'
119
- Provides-Extra: zzz-test-operator
120
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-operator'
121
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-operator'
122
- Provides-Extra: zzz-test-optuna
123
- Requires-Dist: optuna<4.4,>=4.3.0; extra == 'zzz-test-optuna'
124
- Provides-Extra: zzz-test-orjson
125
- Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-orjson'
126
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-orjson'
127
- Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-orjson'
128
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-orjson'
129
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-orjson'
130
- Provides-Extra: zzz-test-os
131
- Provides-Extra: zzz-test-pathlib
132
- Provides-Extra: zzz-test-pickle
133
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pickle'
134
- Provides-Extra: zzz-test-platform
135
- Provides-Extra: zzz-test-polars
136
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-polars'
137
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-polars'
138
- Provides-Extra: zzz-test-pqdm
139
- Requires-Dist: pqdm<0.3,>=0.2.0; extra == 'zzz-test-pqdm'
140
- Provides-Extra: zzz-test-pydantic
141
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pydantic'
142
- Requires-Dist: pydantic<2.12,>=2.11.4; extra == 'zzz-test-pydantic'
143
- Provides-Extra: zzz-test-pyinstrument
144
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pyinstrument'
145
- Requires-Dist: pyinstrument<5.1,>=5.0.2; extra == 'zzz-test-pyinstrument'
146
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-pyinstrument'
147
- Provides-Extra: zzz-test-pyrsistent
148
- Requires-Dist: pyrsistent<0.21,>=0.20.0; extra == 'zzz-test-pyrsistent'
149
- Provides-Extra: zzz-test-pytest
150
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-pytest'
151
- Requires-Dist: orjson<3.11,>=3.10.18; extra == 'zzz-test-pytest'
152
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-pytest'
153
- Provides-Extra: zzz-test-pytest-regressions
154
- Requires-Dist: pytest-regressions<2.9,>=2.8.0; extra == 'zzz-test-pytest-regressions'
155
- Provides-Extra: zzz-test-python-dotenv
156
- Requires-Dist: python-dotenv<1.2,>=1.1.0; extra == 'zzz-test-python-dotenv'
157
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-python-dotenv'
158
- Provides-Extra: zzz-test-random
159
- Provides-Extra: zzz-test-re
160
- Provides-Extra: zzz-test-redis
161
- Requires-Dist: orjson<3.11,>=3.10.15; extra == 'zzz-test-redis'
162
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-redis'
163
- Requires-Dist: redis<6.3,>=6.2.0; extra == 'zzz-test-redis'
164
- Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-redis'
165
- Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-redis'
166
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-redis'
167
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-redis'
168
- Provides-Extra: zzz-test-rich
169
- Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-rich'
170
- Provides-Extra: zzz-test-scipy
171
- Requires-Dist: scipy<1.16,>=1.15.3; extra == 'zzz-test-scipy'
172
- Provides-Extra: zzz-test-sentinel
173
- Provides-Extra: zzz-test-shelve
174
- Provides-Extra: zzz-test-slack-sdk
175
- Requires-Dist: aiohttp<3.12.10,>=3.12.9; extra == 'zzz-test-slack-sdk'
176
- Requires-Dist: slack-sdk<3.36,>=3.35.0; extra == 'zzz-test-slack-sdk'
177
- Provides-Extra: zzz-test-socket
178
- Provides-Extra: zzz-test-sqlalchemy
179
- Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-sqlalchemy'
180
- Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-sqlalchemy'
181
- Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-sqlalchemy'
182
- Requires-Dist: nest-asyncio<1.7,>=1.6.0; extra == 'zzz-test-sqlalchemy'
183
- Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-sqlalchemy'
184
- Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-sqlalchemy'
185
- Provides-Extra: zzz-test-sqlalchemy-polars
186
- Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-sqlalchemy-polars'
187
- Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-sqlalchemy-polars'
188
- Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-sqlalchemy-polars'
189
- Requires-Dist: nest-asyncio<1.7,>=1.6.0; extra == 'zzz-test-sqlalchemy-polars'
190
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-sqlalchemy-polars'
191
- Requires-Dist: sqlalchemy<2.1,>=2.0.41; extra == 'zzz-test-sqlalchemy-polars'
192
- Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-sqlalchemy-polars'
193
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-sqlalchemy-polars'
194
- Provides-Extra: zzz-test-streamlit
195
- Requires-Dist: streamlit<1.46,>=1.45.0; extra == 'zzz-test-streamlit'
196
- Provides-Extra: zzz-test-sys
197
- Requires-Dist: atomicwrites<1.5,>=1.4.1; extra == 'zzz-test-sys'
198
- Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-sys'
199
- Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-sys'
200
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-sys'
201
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-sys'
202
- Provides-Extra: zzz-test-tempfile
203
- Provides-Extra: zzz-test-tenacity
204
- Requires-Dist: tenacity<9.0,>=8.5.0; extra == 'zzz-test-tenacity'
205
- Provides-Extra: zzz-test-text
206
- Provides-Extra: zzz-test-threading
207
- Provides-Extra: zzz-test-timer
208
- Provides-Extra: zzz-test-traceback
209
- Requires-Dist: rich<14.1,>=14.0.0; extra == 'zzz-test-traceback'
210
- Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-traceback'
211
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-traceback'
212
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-traceback'
213
- Provides-Extra: zzz-test-types
214
- Provides-Extra: zzz-test-typing
215
- Requires-Dist: polars-lts-cpu<1.31,>=1.30.0; extra == 'zzz-test-typing'
216
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-typing'
217
- Provides-Extra: zzz-test-tzlocal
218
- Requires-Dist: tzlocal<5.4,>=5.3.1; extra == 'zzz-test-tzlocal'
219
- Provides-Extra: zzz-test-uuid
220
- Provides-Extra: zzz-test-version
221
- Requires-Dist: tomlkit<0.14,>=0.13.2; extra == 'zzz-test-version'
222
- Provides-Extra: zzz-test-warnings
223
- Provides-Extra: zzz-test-whenever
224
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-whenever'
225
- Provides-Extra: zzz-test-zipfile
226
- Provides-Extra: zzz-test-zoneinfo
227
- Requires-Dist: tzdata<2025.3,>=2025.2; extra == 'zzz-test-zoneinfo'
228
- Requires-Dist: whenever<0.9,>=0.8.4; extra == 'zzz-test-zoneinfo'
229
- Description-Content-Type: text/markdown
230
-
231
- [![PyPI version](https://badge.fury.io/py/dycw-utilities.svg)](https://badge.fury.io/py/dycw-utilities)
232
-
233
- # `dycw-utilities`
234
-
235
- [All the Python functions I don't want to write twice.](https://github.com/nvim-lua/plenary.nvim)
236
-
237
- ## Installation
238
-
239
- - `pip install dycw-utilities`
240
-
241
- or with [extras](https://github.com/dycw/python-utilities/blob/master/pyproject.toml).
@@ -1,96 +0,0 @@
1
- utilities/__init__.py,sha256=Ea2sLI04_oNAg8JArocs5IF0T0dgZO_dvaFh04klnq8,61
2
- utilities/altair.py,sha256=Gpja-flOo-Db0PIPJLJsgzAlXWoKUjPU1qY-DQ829ek,9156
3
- utilities/asyncio.py,sha256=3n5EIcSq2xtEF1i4oR0oY2JmBq3NyugeHKFK39Mt22s,37987
4
- utilities/atomicwrites.py,sha256=geFjn9Pwn-tTrtoGjDDxWli9NqbYfy3gGL6ZBctiqSo,5393
5
- utilities/atools.py,sha256=IYMuFSFGSKyuQmqD6v5IUtDlz8PPw0Sr87Cub_gRU3M,1168
6
- utilities/cachetools.py,sha256=C1zqOg7BYz0IfQFK8e3qaDDgEZxDpo47F15RTfJM37Q,2910
7
- utilities/click.py,sha256=CianelgUj_M2SBpuvhmRPKOGxuvLM04FHllUWtL7hok,14647
8
- utilities/concurrent.py,sha256=s2scTEd2AhXVTW4hpASU2qxV_DiVLALfms55cCQzCvM,2886
9
- utilities/contextlib.py,sha256=lpaLJBy3X0UGLWjM98jkQZZq8so4fRmoK-Bheq0uOW4,1027
10
- utilities/contextvars.py,sha256=RsSGGrbQqqZ67rOydnM7WWIsM2lIE31UHJLejnHJPWY,505
11
- utilities/cryptography.py,sha256=_CiK_K6c_-uQuUhsUNjNjTL-nqxAh4_1zTfS11Xe120,972
12
- utilities/cvxpy.py,sha256=Rv1-fD-XYerosCavRF8Pohop2DBkU3AlFaGTfD8AEAA,13776
13
- utilities/dataclasses.py,sha256=iiC1wpGXWhaocIikzwBt8bbLWyImoUlOlcDZJGejaIg,33011
14
- utilities/datetime.py,sha256=aiPh2OZK2g9gn4yEeSO0lODOmvx8U_rGn6XeSzyk4VY,38738
15
- utilities/enum.py,sha256=HoRwVCWzsnH0vpO9ZEcAAIZLMv0Sn2vJxxA4sYMQgDs,5793
16
- utilities/errors.py,sha256=nC7ZYtxxDBMfrTHtT_MByBfup_wfGQFRo3eDt-0ZPe8,1045
17
- utilities/eventkit.py,sha256=6M5Xu1SzN-juk9PqBHwy5dS-ta7T0qA6SMpDsakOJ0E,13039
18
- utilities/fastapi.py,sha256=gZrXYxKAc7ZEAL_tDmkcbqebkm-KfMCY0X8r-1HF5dI,2962
19
- utilities/fpdf2.py,sha256=y1NGXR5chWqLXWpewGV3hlRGMr_5yV1lVRkPBhPEgJI,1843
20
- utilities/functions.py,sha256=jgt592voaHNtX56qX0SRvFveVCRmSIxCZmqvpLZCnY8,27305
21
- utilities/functools.py,sha256=WrpHt7NLNWSUn9A1Q_ZIWlNaYZOEI4IFKyBG9HO3BC4,1643
22
- utilities/getpass.py,sha256=DfN5UgMAtFCqS3dSfFHUfqIMZX2shXvwphOz_6J6f6A,103
23
- utilities/git.py,sha256=oi7-_l5e9haSANSCvQw25ufYGoNahuUPHAZ6114s3JQ,1191
24
- utilities/hashlib.py,sha256=SVTgtguur0P4elppvzOBbLEjVM3Pea0eWB61yg2ilxo,309
25
- utilities/http.py,sha256=WcahTcKYRtZ04WXQoWt5EGCgFPcyHD3EJdlMfxvDt-0,946
26
- utilities/hypothesis.py,sha256=UnUMJmeqwJuK7uyUqw_i3opUYzVKud4RMG0RMOSRBQY,44463
27
- utilities/importlib.py,sha256=mV1xT_O_zt_GnZZ36tl3xOmMaN_3jErDWY54fX39F6Y,429
28
- utilities/ipython.py,sha256=V2oMYHvEKvlNBzxDXdLvKi48oUq2SclRg5xasjaXStw,763
29
- utilities/iterables.py,sha256=mDqw2_0MUVp-P8FklgcaVTi2TXduH0MxbhTDzzhSBho,44915
30
- utilities/jupyter.py,sha256=ft5JA7fBxXKzP-L9W8f2-wbF0QeYc_2uLQNFDVk4Z-M,2917
31
- utilities/libcst.py,sha256=Jto5ppzRzsxn4AD32IS8n0lbgLYXwsVJB6EY8giNZyY,4974
32
- utilities/lightweight_charts.py,sha256=0xNfcsrgFI0R9xL25LtSm-W5yhfBI93qQNT6HyaXAhg,2769
33
- utilities/logging.py,sha256=dA54i2gmULBLuEJ2roGYWt9pW2NvNBmx0YxlMns347M,26126
34
- utilities/loguru.py,sha256=MEMQVWrdECxk1e3FxGzmOf21vWT9j8CAir98SEXFKPA,3809
35
- utilities/luigi.py,sha256=fpH9MbxJDuo6-k9iCXRayFRtiVbUtibCJKugf7ygpv0,5988
36
- utilities/math.py,sha256=-mQgbah-dPJwOEWf3SonrFoVZ2AVxMgpeQ3dfVa-oJA,26764
37
- utilities/memory_profiler.py,sha256=tf2C51P2lCujPGvRt2Rfc7VEw5LDXmVPCG3z_AvBmbU,962
38
- utilities/modules.py,sha256=iuvLluJya-hvl1Q25-Jk3dLgx2Es3ck4SjJiEkAlVTs,3195
39
- utilities/more_itertools.py,sha256=tBbjjKx8_Uv_TCjxhPwrGfAx_jRHtvLIZqXVWAsjzqA,8842
40
- utilities/numpy.py,sha256=Xn23sA2ZbVNqwUYEgNJD3XBYH6IbCri_WkHSNhg3NkY,26122
41
- utilities/operator.py,sha256=0M2yZJ0PODH47ogFEnkGMBe_cfxwZR02T_92LZVZvHo,3715
42
- utilities/optuna.py,sha256=loyJGWTzljgdJaoLhP09PT8Jz6o_pwBOwehY33lHkhw,1923
43
- utilities/orjson.py,sha256=AvPFxzJdxC-3PBID3cqdiMyN8FeC7aW9QUgGwbvKuAM,36948
44
- utilities/os.py,sha256=D_FyyT-6TtqiN9KSS7c9g1fnUtgxmyMtzAjmYLkk46A,3587
45
- utilities/parse.py,sha256=vsZ2jf_ceSI_Kta9titixufysJaVXh0Whjz1T4awJZw,18938
46
- utilities/pathlib.py,sha256=0cQpqmZs-Pe2693xZwGFApq-B9mADqhX-pclf_5iLco,3041
47
- utilities/period.py,sha256=o4wXYEXVlFomop4-Ra4L0yRP4i99NZFjIe_fa7NdZck,11024
48
- utilities/pickle.py,sha256=Bhvd7cZl-zQKQDFjUerqGuSKlHvnW1K2QXeU5UZibtg,657
49
- utilities/platform.py,sha256=48IOKx1IC6ZJXWG-b56ZQptITcNFhWRjELW72o2dGTA,2398
50
- utilities/polars.py,sha256=QlmUpYTqHNkcLnWOQh1TW22W2QyLzvifCvBcbsqhpdE,63272
51
- utilities/polars_ols.py,sha256=Uc9V5kvlWZ5cU93lKZ-cfAKdVFFw81tqwLW9PxtUvMs,5618
52
- utilities/pottery.py,sha256=_PA24g2B23etpiF2awZ4oR7RciUgEHu_j7Ls3QKMkjY,1527
53
- utilities/pqdm.py,sha256=foRytQybmOQ05pjt5LF7ANyzrIa--4ScDE3T2wd31a4,3118
54
- utilities/psutil.py,sha256=RtbLKOoIJhqrJmEoHDBVeSD-KPzshtS0FtRXBP9_w2s,3751
55
- utilities/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- utilities/pydantic.py,sha256=f6qtR5mO2YMuyvNmbaEj5YeD9eGA4YYfb7Bjzh9jUs0,1845
57
- utilities/pyinstrument.py,sha256=O2dngLsmUUnpMtW1eN3OiM0rGQNBIlXSvZmym_jAsvU,904
58
- utilities/pyrsistent.py,sha256=wVOVIe_68AAaa-lUE9y-TEzDawVp1uEIc_zfoDgr5ww,2287
59
- utilities/pytest.py,sha256=KoHSwJbIY2CHtFUlUr_gnEk7z1DVTaldl8RDQ4tDkG4,7837
60
- utilities/pytest_regressions.py,sha256=YI55B7EtLjhz7zPJZ6NK9bWrxrKCKabWZJe1cwcbA5o,5082
61
- utilities/python_dotenv.py,sha256=edXsvHZhZnYeqfMfrsRRpj7_9eJI6uizh3xLx8Q9B3w,3228
62
- utilities/random.py,sha256=lYdjgxB7GCfU_fwFVl5U-BIM_HV3q6_urL9byjrwDM8,4157
63
- utilities/re.py,sha256=5J4d8VwIPFVrX2Eb8zfoxImDv7IwiN_U7mJ07wR2Wvs,3958
64
- utilities/redis.py,sha256=7Sc-G43VXVzFQU7MHKyI1y3u7My3oT1UoWXPGcKM_-0,36008
65
- utilities/reprlib.py,sha256=ssYTcBW-TeRh3fhCJv57sopTZHF5FrPyyUg9yp5XBlo,3953
66
- utilities/scipy.py,sha256=X6ROnHwiUhAmPhM0jkfEh0-Fd9iRvwiqtCQMOLmOQF8,945
67
- utilities/sentinel.py,sha256=3jIwgpMekWgDAxPDA_hXMP2St43cPhciKN3LWiZ7kv0,1248
68
- utilities/shelve.py,sha256=HZsMwK4tcIfg3sh0gApx4-yjQnrY4o3V3ZRimvRhoW0,738
69
- utilities/slack_sdk.py,sha256=ltmzv68aa73CJGqTDvt8L9vDm22YU9iOCo3NCiNd3vA,4347
70
- utilities/socket.py,sha256=K77vfREvzoVTrpYKo6MZakol0EYu2q1sWJnnZqL0So0,118
71
- utilities/sqlalchemy.py,sha256=I81qR7JtS-q1sLnw42p7L0FC0imT98gJHGte_KOjpAA,37890
72
- utilities/sqlalchemy_polars.py,sha256=s7hQNep2O5DTgIRXyN_JRQma7a4DAtNd25tshaZW8iw,15490
73
- utilities/statsmodels.py,sha256=koyiBHvpMcSiBfh99wFUfSggLNx7cuAw3rwyfAhoKpQ,3410
74
- utilities/streamlit.py,sha256=U9PJBaKP1IdSykKhPZhIzSPTZsmLsnwbEPZWzNhJPKk,2955
75
- utilities/string.py,sha256=XmU-s04qIV_tODnKl2pQiwmHaxzgOqRKU-RyzdrfvSE,620
76
- utilities/sys.py,sha256=h0Xr7Vj86wNalvwJVP1wj5Y0kD_VWm1vzuXZ_jw94mE,2743
77
- utilities/tempfile.py,sha256=VqmZJAhTJ1OaVywFzk5eqROV8iJbW9XQ_QYAV0bpdRo,1384
78
- utilities/tenacity.py,sha256=1PUvODiBVgeqIh7G5TRt5WWMSqjLYkEqP53itT97WQc,4914
79
- utilities/text.py,sha256=ymBFlP_cA8OgNnZRVNs7FAh7OG8HxE6YkiLEMZv5g_A,11297
80
- utilities/threading.py,sha256=GvBOp4CyhHfN90wGXZuA2VKe9fGzMaEa7oCl4f3nnPU,1009
81
- utilities/timer.py,sha256=Rkc49KSpHuC8s7vUxGO9DU55U9I6yDKnchsQqrUCVBs,4075
82
- utilities/traceback.py,sha256=EUm-5jhH1RICBmsG_H77-CXvD-IVErfkzGRSqnvR0dI,35782
83
- utilities/types.py,sha256=gP04CcCOyFrG7BgblVCsrrChiuO2x842NDVW-GF7odo,18370
84
- utilities/typing.py,sha256=H6ysJkI830aRwLsMKz0SZIw4cpcsm7d6KhQOwr-SDh0,13817
85
- utilities/tzdata.py,sha256=yCf70NICwAeazN3_JcXhWvRqCy06XJNQ42j7r6gw3HY,1217
86
- utilities/tzlocal.py,sha256=3upDNFBvGh1l9njmLR2z2S6K6VxQSb7QizYGUbAH3JU,960
87
- utilities/uuid.py,sha256=jJTFxz-CWgltqNuzmythB7iEQ-Q1mCwPevUfKthZT3c,611
88
- utilities/version.py,sha256=ufhJMmI6KPs1-3wBI71aj5wCukd3sP_m11usLe88DNA,5117
89
- utilities/warnings.py,sha256=un1LvHv70PU-LLv8RxPVmugTzDJkkGXRMZTE2-fTQHw,1771
90
- utilities/whenever.py,sha256=QbXgFAPuUL7PCp2hajmIP-FFIfIR1J6Y0TxJbeoj60I,18434
91
- utilities/zipfile.py,sha256=24lQc9ATcJxHXBPc_tBDiJk48pWyRrlxO2fIsFxU0A8,699
92
- utilities/zoneinfo.py,sha256=-5j7IQ9nb7gR43rdgA7ms05im-XuqhAk9EJnQBXxCoQ,1874
93
- dycw_utilities-0.129.10.dist-info/METADATA,sha256=w9VpvO8zhmLUxyrwfut-D_8nzKJc4mlol7xp_Li98G4,12724
94
- dycw_utilities-0.129.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
95
- dycw_utilities-0.129.10.dist-info/licenses/LICENSE,sha256=gppZp16M6nSVpBbUBrNL6JuYfvKwZiKgV7XoKKsHzqo,1066
96
- dycw_utilities-0.129.10.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Derek Wan
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.