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.
Files changed (103) hide show
  1. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/PKG-INFO +1 -1
  2. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/pyproject.toml +2 -2
  3. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/__init__.py +1 -1
  4. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/platform.py +1 -1
  5. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/polars.py +2 -0
  6. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/subprocess.py +35 -11
  7. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/README.md +0 -0
  8. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/aeventkit.py +0 -0
  9. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/altair.py +0 -0
  10. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/asyncio.py +0 -0
  11. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/atomicwrites.py +0 -0
  12. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/atools.py +0 -0
  13. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/cachetools.py +0 -0
  14. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/click.py +0 -0
  15. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/concurrent.py +0 -0
  16. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/contextlib.py +0 -0
  17. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/contextvars.py +0 -0
  18. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/cryptography.py +0 -0
  19. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/cvxpy.py +0 -0
  20. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/dataclasses.py +0 -0
  21. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/docker.py +0 -0
  22. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/enum.py +0 -0
  23. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/errors.py +0 -0
  24. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/fastapi.py +0 -0
  25. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/fpdf2.py +0 -0
  26. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/functions.py +0 -0
  27. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/functools.py +0 -0
  28. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/getpass.py +0 -0
  29. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/git.py +0 -0
  30. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/grp.py +0 -0
  31. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/gzip.py +0 -0
  32. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/hashlib.py +0 -0
  33. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/http.py +0 -0
  34. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/hypothesis.py +0 -0
  35. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/importlib.py +0 -0
  36. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/inflect.py +0 -0
  37. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/ipython.py +0 -0
  38. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/iterables.py +0 -0
  39. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/jinja2.py +0 -0
  40. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/json.py +0 -0
  41. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/jupyter.py +0 -0
  42. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/libcst.py +0 -0
  43. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/lightweight_charts.py +0 -0
  44. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/logging.py +0 -0
  45. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/math.py +0 -0
  46. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/memory_profiler.py +0 -0
  47. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/modules.py +0 -0
  48. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/more_itertools.py +0 -0
  49. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/numpy.py +0 -0
  50. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/operator.py +0 -0
  51. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/optuna.py +0 -0
  52. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/orjson.py +0 -0
  53. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/os.py +0 -0
  54. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/parse.py +0 -0
  55. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pathlib.py +0 -0
  56. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/permissions.py +0 -0
  57. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pickle.py +0 -0
  58. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/polars_ols.py +0 -0
  59. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/postgres.py +0 -0
  60. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pottery.py +0 -0
  61. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pqdm.py +0 -0
  62. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/psutil.py +0 -0
  63. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pwd.py +0 -0
  64. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/py.typed +0 -0
  65. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pydantic.py +0 -0
  66. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pydantic_settings.py +0 -0
  67. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pydantic_settings_sops.py +0 -0
  68. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pyinstrument.py +0 -0
  69. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest.py +0 -0
  70. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/__init__.py +0 -0
  71. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  72. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  73. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/pytest_regressions.py +0 -0
  74. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/random.py +0 -0
  75. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/re.py +0 -0
  76. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/redis.py +0 -0
  77. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/reprlib.py +0 -0
  78. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/scipy.py +0 -0
  79. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/sentinel.py +0 -0
  80. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/shelve.py +0 -0
  81. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/shutil.py +0 -0
  82. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/slack_sdk.py +0 -0
  83. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/socket.py +0 -0
  84. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/sqlalchemy.py +0 -0
  85. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/sqlalchemy_polars.py +0 -0
  86. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/statsmodels.py +0 -0
  87. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/string.py +0 -0
  88. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/tempfile.py +0 -0
  89. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/testbook.py +0 -0
  90. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/text.py +0 -0
  91. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/threading.py +0 -0
  92. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/timer.py +0 -0
  93. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/traceback.py +0 -0
  94. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/types.py +0 -0
  95. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/typing.py +0 -0
  96. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/tzdata.py +0 -0
  97. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/tzlocal.py +0 -0
  98. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/uuid.py +0 -0
  99. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/version.py +0 -0
  100. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/warnings.py +0 -0
  101. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/whenever.py +0 -0
  102. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/zipfile.py +0 -0
  103. {dycw_utilities-0.174.18 → dycw_utilities-0.174.20}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dycw-utilities
3
- Version: 0.174.18
3
+ Version: 0.174.20
4
4
  Author: Derek Wan
5
5
  Author-email: Derek Wan <d.wan@icloud.com>
6
6
  Requires-Dist: atomicwrites>=1.4.1,<1.5
@@ -101,7 +101,7 @@
101
101
  name = "dycw-utilities"
102
102
  readme = "README.md"
103
103
  requires-python = ">= 3.12"
104
- version = "0.174.18"
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.18"
138
+ current_version = "0.174.20"
139
139
 
140
140
  [[tool.bumpversion.files]]
141
141
  filename = "src/utilities/__init__.py"
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.174.18"
3
+ __version__ = "0.174.20"
@@ -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-ci
19
+ if sys == "Windows": # skipif-not-windows
20
20
  return "windows"
21
21
  if sys == "Darwin": # skipif-not-macos
22
22
  return "mac"
@@ -2639,6 +2639,8 @@ def search_period(
2639
2639
  return None
2640
2640
  item: dt.datetime = series[index]["start"]
2641
2641
  return index if py_date_time > item else None
2642
+ case never:
2643
+ assert_never(never)
2642
2644
 
2643
2645
 
2644
2646
  ##
@@ -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
- run(*maybe_sudo_cmd(*git_hard_reset_cmd(branch=branch), sudo=sudo), cwd=path)
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",