dycw-utilities 0.174.18__tar.gz → 0.174.20__tar.gz
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.174.18 → dycw_utilities-0.174.20}/PKG-INFO +1 -1
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/pyproject.toml +2 -2
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/platform.py +1 -1
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/polars.py +2 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/subprocess.py +35 -11
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/README.md +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/click.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/docker.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/git.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/grp.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/http.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/jinja2.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/json.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/math.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/os.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/permissions.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pwd.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pydantic_settings.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/random.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/re.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/shutil.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/string.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/text.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/types.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/version.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/zoneinfo.py +0 -0
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
name = "dycw-utilities"
|
|
102
102
|
readme = "README.md"
|
|
103
103
|
requires-python = ">= 3.12"
|
|
104
|
-
version = "0.174.
|
|
104
|
+
version = "0.174.20"
|
|
105
105
|
|
|
106
106
|
[project.entry-points.pytest11]
|
|
107
107
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
# bump-my-version
|
|
136
136
|
[tool.bumpversion]
|
|
137
137
|
allow_dirty = true
|
|
138
|
-
current_version = "0.174.
|
|
138
|
+
current_version = "0.174.20"
|
|
139
139
|
|
|
140
140
|
[[tool.bumpversion.files]]
|
|
141
141
|
filename = "src/utilities/__init__.py"
|
|
@@ -16,7 +16,7 @@ System = Literal["windows", "mac", "linux"]
|
|
|
16
16
|
def get_system() -> System:
|
|
17
17
|
"""Get the system/OS name."""
|
|
18
18
|
sys = system()
|
|
19
|
-
if sys == "Windows": # skipif-
|
|
19
|
+
if sys == "Windows": # skipif-not-windows
|
|
20
20
|
return "windows"
|
|
21
21
|
if sys == "Darwin": # skipif-not-macos
|
|
22
22
|
return "mac"
|
|
@@ -40,6 +40,7 @@ _HOST_KEY_ALGORITHMS = ["ssh-ed25519"]
|
|
|
40
40
|
APT_UPDATE = ["apt", "update", "-y"]
|
|
41
41
|
BASH_LC = ["bash", "-lc"]
|
|
42
42
|
BASH_LS = ["bash", "-ls"]
|
|
43
|
+
GIT_BRANCH_SHOW_CURRENT = ["git", "branch", "--show-current"]
|
|
43
44
|
MKTEMP_DIR_CMD = ["mktemp", "-d"]
|
|
44
45
|
RESTART_SSHD = ["systemctl", "restart", "sshd"]
|
|
45
46
|
UPDATE_CA_CERTIFICATES: str = "update-ca-certificates"
|
|
@@ -48,6 +49,13 @@ UPDATE_CA_CERTIFICATES: str = "update-ca-certificates"
|
|
|
48
49
|
##
|
|
49
50
|
|
|
50
51
|
|
|
52
|
+
def apt_install(package: str, /, *, update: bool = False, sudo: bool = False) -> None:
|
|
53
|
+
"""Install a package."""
|
|
54
|
+
if update: # pragma: no cover
|
|
55
|
+
run(*maybe_sudo_cmd(*APT_UPDATE, sudo=sudo))
|
|
56
|
+
run(*maybe_sudo_cmd(*apt_install_cmd(package), sudo=sudo))
|
|
57
|
+
|
|
58
|
+
|
|
51
59
|
def apt_install_cmd(package: str, /) -> list[str]:
|
|
52
60
|
"""Command to use 'apt' to install a package."""
|
|
53
61
|
return ["apt", "install", "-y", package]
|
|
@@ -221,6 +229,27 @@ def expand_path(
|
|
|
221
229
|
##
|
|
222
230
|
|
|
223
231
|
|
|
232
|
+
def git_branch_current(path: PathLike, /) -> str:
|
|
233
|
+
"""Show the current a branch."""
|
|
234
|
+
return run(*GIT_BRANCH_SHOW_CURRENT, cwd=path, return_=True)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
##
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def git_checkout(branch: str, path: PathLike, /) -> None:
|
|
241
|
+
"""Switch a branch."""
|
|
242
|
+
run(*git_checkout_cmd(branch), cwd=path)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def git_checkout_cmd(branch: str, /) -> list[str]:
|
|
246
|
+
"""Command to use 'git checkout' to switch a branch."""
|
|
247
|
+
return ["git", "checkout", branch]
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
##
|
|
251
|
+
|
|
252
|
+
|
|
224
253
|
def git_clone(
|
|
225
254
|
url: str, path: PathLike, /, *, sudo: bool = False, branch: str | None = None
|
|
226
255
|
) -> None:
|
|
@@ -228,7 +257,7 @@ def git_clone(
|
|
|
228
257
|
rm(path, sudo=sudo)
|
|
229
258
|
run(*maybe_sudo_cmd(*git_clone_cmd(url, path), sudo=sudo))
|
|
230
259
|
if branch is not None:
|
|
231
|
-
|
|
260
|
+
git_checkout(branch, path)
|
|
232
261
|
|
|
233
262
|
|
|
234
263
|
def git_clone_cmd(url: str, path: PathLike, /) -> list[str]:
|
|
@@ -239,15 +268,6 @@ def git_clone_cmd(url: str, path: PathLike, /) -> list[str]:
|
|
|
239
268
|
##
|
|
240
269
|
|
|
241
270
|
|
|
242
|
-
def git_hard_reset_cmd(*, branch: str | None = None) -> list[str]:
|
|
243
|
-
"""Command to use 'git hard-reset' to hard reset a repository."""
|
|
244
|
-
branch_use = "master" if branch is None else branch
|
|
245
|
-
return ["git", "hard-reset", branch_use]
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
##
|
|
249
|
-
|
|
250
|
-
|
|
251
271
|
def maybe_parent(path: PathLike, /, *, parent: bool = False) -> Path:
|
|
252
272
|
"""Get the parent of a path, if required."""
|
|
253
273
|
path = Path(path)
|
|
@@ -1175,6 +1195,7 @@ __all__ = [
|
|
|
1175
1195
|
"APT_UPDATE",
|
|
1176
1196
|
"BASH_LC",
|
|
1177
1197
|
"BASH_LS",
|
|
1198
|
+
"GIT_BRANCH_SHOW_CURRENT",
|
|
1178
1199
|
"MKTEMP_DIR_CMD",
|
|
1179
1200
|
"RESTART_SSHD",
|
|
1180
1201
|
"UPDATE_CA_CERTIFICATES",
|
|
@@ -1184,6 +1205,7 @@ __all__ = [
|
|
|
1184
1205
|
"RsyncCmdError",
|
|
1185
1206
|
"RsyncCmdNoSourcesError",
|
|
1186
1207
|
"RsyncCmdSourcesNotFoundError",
|
|
1208
|
+
"apt_install",
|
|
1187
1209
|
"apt_install_cmd",
|
|
1188
1210
|
"cd_cmd",
|
|
1189
1211
|
"chmod",
|
|
@@ -1194,9 +1216,11 @@ __all__ = [
|
|
|
1194
1216
|
"cp_cmd",
|
|
1195
1217
|
"echo_cmd",
|
|
1196
1218
|
"expand_path",
|
|
1219
|
+
"git_branch_current",
|
|
1220
|
+
"git_checkout",
|
|
1221
|
+
"git_checkout_cmd",
|
|
1197
1222
|
"git_clone",
|
|
1198
1223
|
"git_clone_cmd",
|
|
1199
|
-
"git_hard_reset_cmd",
|
|
1200
1224
|
"maybe_parent",
|
|
1201
1225
|
"maybe_sudo_cmd",
|
|
1202
1226
|
"mkdir",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|