shellscripts 0.24.0__tar.gz → 0.24.1__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 (63) hide show
  1. {shellscripts-0.24.0 → shellscripts-0.24.1}/PKG-INFO +2 -2
  2. {shellscripts-0.24.0 → shellscripts-0.24.1}/README.md +1 -1
  3. {shellscripts-0.24.0 → shellscripts-0.24.1}/pyproject.toml +1 -1
  4. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/__init__.py +1 -1
  5. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/version_check.py +6 -5
  6. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shellscripts.egg-info/PKG-INFO +2 -2
  7. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_014_pypi_version_source.py +49 -5
  8. {shellscripts-0.24.0 → shellscripts-0.24.1}/LICENSE +0 -0
  9. {shellscripts-0.24.0 → shellscripts-0.24.1}/setup.cfg +0 -0
  10. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/__main__.py +0 -0
  11. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/__init__.py +0 -0
  12. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/_dc_common.py +0 -0
  13. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/ai_install.py +0 -0
  14. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/bin_links.py +0 -0
  15. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/claude.py +0 -0
  16. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/clean.py +0 -0
  17. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/codex.py +0 -0
  18. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/copilot.py +0 -0
  19. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/dicom2jpg.py +0 -0
  20. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/dicomviewer.py +0 -0
  21. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/diff_cmd.py +0 -0
  22. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/doxygen_cmd.py +0 -0
  23. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/edit_cmd.py +0 -0
  24. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/gemini.py +0 -0
  25. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/kiro.py +0 -0
  26. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/opencode.py +0 -0
  27. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_crop.py +0 -0
  28. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_merge.py +0 -0
  29. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_split_by_format.py +0 -0
  30. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_split_by_toc.py +0 -0
  31. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_tiler_090.py +0 -0
  32. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_tiler_100.py +0 -0
  33. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pdf_toc_clean.py +0 -0
  34. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/pi.py +0 -0
  35. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/req_cmd.py +0 -0
  36. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/tests_cmd.py +0 -0
  37. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/ubuntu_dark_theme.py +0 -0
  38. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/venv_cmd.py +0 -0
  39. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/video2h264.py +0 -0
  40. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/video2h265.py +0 -0
  41. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/view_cmd.py +0 -0
  42. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/vscode_cmd.py +0 -0
  43. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/commands/vsinsider_cmd.py +0 -0
  44. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/config.py +0 -0
  45. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/core.py +0 -0
  46. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shell_scripts/utils.py +0 -0
  47. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shellscripts.egg-info/SOURCES.txt +0 -0
  48. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shellscripts.egg-info/dependency_links.txt +0 -0
  49. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shellscripts.egg-info/entry_points.txt +0 -0
  50. {shellscripts-0.24.0 → shellscripts-0.24.1}/src/shellscripts.egg-info/top_level.txt +0 -0
  51. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_001_002_core.py +0 -0
  52. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_003_ai_install.py +0 -0
  53. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_004_bin_links_clean.py +0 -0
  54. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_005_cli_launchers.py +0 -0
  55. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_006_dc_common.py +0 -0
  56. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_007_pdf_commands.py +0 -0
  57. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_008_env_commands.py +0 -0
  58. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_010_req_cmd.py +0 -0
  59. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_011_video_commands.py +0 -0
  60. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_012_workflow_runtime.py +0 -0
  61. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_013_release_pypi_gating.py +0 -0
  62. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_015_pre_release_check.py +0 -0
  63. {shellscripts-0.24.0 → shellscripts-0.24.1}/tests/test_tst_016_release_precheck_gating.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shellscripts
3
- Version: 0.24.0
3
+ Version: 0.24.1
4
4
  Summary: Execute useful shell scripts via an uvx-compatible CLI interface.
5
5
  Author: Francesco Rolando
6
6
  License-Expression: GPL-3.0-only
@@ -31,7 +31,7 @@ Dynamic: license-file
31
31
  > * **No Support or Feature Requests:** Please **do not** open issues, bug reports, or feature requests. They will not be addressed or accepted at this stage of development.
32
32
  > * **No Warranty:** This software is provided **"AS IS"**, without warranty of any kind, express or implied. You may use it strictly for **testing and evaluation purposes** at your own sole risk.
33
33
 
34
- # s/shellScripts (0.24.0)
34
+ # s/shellScripts (0.24.1)
35
35
 
36
36
  <p align="center">
37
37
  <img src="https://img.shields.io/badge/python-3.11%2B-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
@@ -10,7 +10,7 @@
10
10
  > * **No Support or Feature Requests:** Please **do not** open issues, bug reports, or feature requests. They will not be addressed or accepted at this stage of development.
11
11
  > * **No Warranty:** This software is provided **"AS IS"**, without warranty of any kind, express or implied. You may use it strictly for **testing and evaluation purposes** at your own sole risk.
12
12
 
13
- # s/shellScripts (0.24.0)
13
+ # s/shellScripts (0.24.1)
14
14
 
15
15
  <p align="center">
16
16
  <img src="https://img.shields.io/badge/python-3.11%2B-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "shellscripts"
7
- version = "0.24.0"
7
+ version = "0.24.1"
8
8
  description = "Execute useful shell scripts via an uvx-compatible CLI interface."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,4 +1,4 @@
1
- __version__ = "0.24.0"
1
+ __version__ = "0.24.1"
2
2
 
3
3
  from .core import main # noqa: F401
4
4
 
@@ -263,11 +263,12 @@ def print_remote_latest_versions(current_version: str) -> None:
263
263
 
264
264
  @details Emits one `<source> latest: <version>` line per remote source in
265
265
  fixed order (PyPI, GitHub). A failed source lookup prints one bright-red
266
- error line instead of its version line, and the remaining source is still
267
- processed. Complexity O(1) excluding network latency.
266
+ `<source> latest: unknown (<reason>)` line where `<reason>` is the
267
+ `_format_request_error` descriptor of the actual failure, and the remaining
268
+ source is still processed. Complexity O(1) excluding network latency.
268
269
  @param current_version {str} Installed package version used in User-Agent.
269
270
  @return {None} Writes two report or error lines to stdout.
270
- @satisfies REQ-003, REQ-075, DES-020
271
+ @satisfies REQ-003, REQ-075, REQ-084, DES-020
271
272
  """
272
273
 
273
274
  for source_label, fetch_version in (
@@ -278,8 +279,8 @@ def print_remote_latest_versions(current_version: str) -> None:
278
279
  latest_version = fetch_version(current_version).lstrip("v")
279
280
  except Exception as error:
280
281
  print(
281
- f"{BRIGHT_RED}{source_label} latest check failed: "
282
- f"{_format_request_error(error)}.{RESET}"
282
+ f"{BRIGHT_RED}{source_label} latest: unknown "
283
+ f"({_format_request_error(error)}){RESET}"
283
284
  )
284
285
  continue
285
286
  print(f"{source_label} latest: {latest_version}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shellscripts
3
- Version: 0.24.0
3
+ Version: 0.24.1
4
4
  Summary: Execute useful shell scripts via an uvx-compatible CLI interface.
5
5
  Author: Francesco Rolando
6
6
  License-Expression: GPL-3.0-only
@@ -31,7 +31,7 @@ Dynamic: license-file
31
31
  > * **No Support or Feature Requests:** Please **do not** open issues, bug reports, or feature requests. They will not be addressed or accepted at this stage of development.
32
32
  > * **No Warranty:** This software is provided **"AS IS"**, without warranty of any kind, express or implied. You may use it strictly for **testing and evaluation purposes** at your own sole risk.
33
33
 
34
- # s/shellScripts (0.24.0)
34
+ # s/shellScripts (0.24.1)
35
35
 
36
36
  <p align="center">
37
37
  <img src="https://img.shields.io/badge/python-3.11%2B-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
@@ -15,6 +15,7 @@
15
15
  import json
16
16
  import types
17
17
  import urllib.error
18
+ from email.message import Message
18
19
 
19
20
  import shell_scripts.core as core
20
21
  from shell_scripts.config import get_default_runtime_config
@@ -204,12 +205,12 @@ def test_print_remote_latest_versions_reports_failed_source_and_continues(
204
205
  """
205
206
  @brief Validate per-source error reporting during version report.
206
207
  @details Forces the PyPI lookup to raise a non-HTTP exception and asserts
207
- one bright-red failure line for PyPI while the GitHub line is still
208
- emitted.
208
+ the bright-red `PyPI latest: unknown (<reason>)` failure line while the
209
+ GitHub line is still emitted.
209
210
  @param monkeypatch {pytest.MonkeyPatch} Runtime patch helper.
210
211
  @param capsys {pytest.CaptureFixture[str]} Stdout/stderr capture helper.
211
212
  @return {None} Assertions only.
212
- @satisfies TST-014, DES-020
213
+ @satisfies TST-014, REQ-084, DES-020
213
214
  """
214
215
 
215
216
  def _raise_url_error(_version):
@@ -229,11 +230,54 @@ def test_print_remote_latest_versions_reports_failed_source_and_continues(
229
230
  version_check.print_remote_latest_versions("0.1.0")
230
231
  captured = capsys.readouterr()
231
232
 
232
- assert "PyPI latest check failed" in captured.out
233
- assert "PyPI latest:" not in captured.out
233
+ expected_output = "PyPI latest: unknown (URLError: <urlopen error pypi unreachable>)"
234
+ assert expected_output in captured.out
235
+ assert "PyPI latest check failed" not in captured.out
234
236
  assert "GitHub latest: 0.1.0" in captured.out
235
237
 
236
238
 
239
+ def test_print_remote_latest_versions_reports_github_http_404(
240
+ monkeypatch,
241
+ capsys,
242
+ ):
243
+ """
244
+ @brief Validate GitHub HTTP failure rendering during version report.
245
+ @details Forces the GitHub lookup to raise an HTTP 404 error and asserts
246
+ the bright-red `GitHub latest: unknown (HTTP 404)` failure line while
247
+ the PyPI line is still emitted.
248
+ @param monkeypatch {pytest.MonkeyPatch} Runtime patch helper.
249
+ @param capsys {pytest.CaptureFixture[str]} Stdout/stderr capture helper.
250
+ @return {None} Assertions only.
251
+ @satisfies TST-014, REQ-084, DES-020
252
+ """
253
+
254
+ def _raise_http_404(_version):
255
+ """
256
+ @brief Simulate GitHub API HTTP 404 failure.
257
+ @param _version {str} Unused installed version.
258
+ @return {None} Always raises.
259
+ @throws {urllib.error.HTTPError} Deterministic HTTP failure.
260
+ """
261
+ raise urllib.error.HTTPError(
262
+ version_check.GITHUB_API_URL, 404, "Not Found", Message(), None
263
+ )
264
+
265
+ monkeypatch.setattr(
266
+ version_check, "fetch_pypi_latest_version", lambda _version: "0.1.0"
267
+ )
268
+ monkeypatch.setattr(
269
+ version_check, "fetch_github_latest_release", _raise_http_404
270
+ )
271
+
272
+ version_check.print_remote_latest_versions("0.1.0")
273
+ captured = capsys.readouterr()
274
+
275
+ expected_output = "GitHub latest: unknown (HTTP 404)"
276
+ assert expected_output in captured.out
277
+ assert "GitHub latest check failed" not in captured.out
278
+ assert "PyPI latest: 0.1.0" in captured.out
279
+
280
+
237
281
  def test_main_version_prints_installed_pypi_and_github_lines(
238
282
  monkeypatch,
239
283
  capsys,
File without changes
File without changes