lib-cli-exit-tools 2.1.0__tar.gz → 2.1.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.
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.github/workflows/ci.yml +43 -5
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.github/workflows/codeql.yml +1 -1
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.github/workflows/release.yml +13 -5
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.gitignore +1 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/CHANGELOG.md +15 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/Makefile +7 -1
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/PKG-INFO +14 -13
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/README.md +1 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/pyproject.toml +54 -14
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/_utils.py +310 -89
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/build.py +12 -0
- lib_cli_exit_tools-2.1.1/scripts/clean.py +75 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/cli.py +20 -1
- lib_cli_exit_tools-2.1.1/scripts/dependencies.py +590 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/menu.py +33 -19
- lib_cli_exit_tools-2.1.1/scripts/push.py +309 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/release.py +3 -1
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/target_metadata.py +32 -4
- lib_cli_exit_tools-2.1.1/scripts/test.py +1004 -0
- lib_cli_exit_tools-2.1.1/scripts/toml_config.py +455 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/__init__conf__.py +8 -1
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/application/runner.py +48 -8
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/cli.py +69 -15
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/core/configuration.py +43 -11
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/core/exit_codes.py +18 -1
- lib_cli_exit_tools-2.1.1/tests/conftest.py +110 -0
- lib_cli_exit_tools-2.1.1/tests/test_adapters_signals.py +198 -0
- lib_cli_exit_tools-2.1.1/tests/test_application_runner.py +476 -0
- lib_cli_exit_tools-2.1.1/tests/test_behaviors.py +226 -0
- lib_cli_exit_tools-2.1.1/tests/test_cli.py +307 -0
- lib_cli_exit_tools-2.1.1/tests/test_core_configuration.py +164 -0
- lib_cli_exit_tools-2.1.1/tests/test_core_exit_codes.py +358 -0
- lib_cli_exit_tools-2.1.1/tests/test_metadata.py +218 -0
- lib_cli_exit_tools-2.1.1/tests/test_module_entry.py +262 -0
- lib_cli_exit_tools-2.1.1/tests/test_signals_integration.py +219 -0
- lib_cli_exit_tools-2.1.0/scripts/clean.py +0 -48
- lib_cli_exit_tools-2.1.0/scripts/push.py +0 -77
- lib_cli_exit_tools-2.1.0/scripts/test.py +0 -535
- lib_cli_exit_tools-2.1.0/tests/conftest.py +0 -57
- lib_cli_exit_tools-2.1.0/tests/test_adapters_signals.py +0 -65
- lib_cli_exit_tools-2.1.0/tests/test_application_runner.py +0 -385
- lib_cli_exit_tools-2.1.0/tests/test_behaviors.py +0 -99
- lib_cli_exit_tools-2.1.0/tests/test_cli.py +0 -164
- lib_cli_exit_tools-2.1.0/tests/test_core_configuration.py +0 -47
- lib_cli_exit_tools-2.1.0/tests/test_core_exit_codes.py +0 -265
- lib_cli_exit_tools-2.1.0/tests/test_metadata.py +0 -47
- lib_cli_exit_tools-2.1.0/tests/test_module_entry.py +0 -137
- lib_cli_exit_tools-2.1.0/tests/test_signals_integration.py +0 -122
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.codacy/cli-config.yaml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.codacy/cli.sh +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.codacy/codacy.yaml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.codacy/tools-configs/lizard.yaml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.codacy/tools-configs/trivy.yaml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.devcontainer/devcontainer.json +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.devcontainer/settings.json +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.env.example +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.github/dependabot.yml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.qlty/qlty.toml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/.snyk +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/AGENTS.md +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/AGENTS_README.md +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/CONTRIBUTING.md +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/DEVELOPMENT.md +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/INSTALL.md +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/LICENSE +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/codecov.yml +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/docs/system-design/module_reference.md +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/notebooks/Quickstart.ipynb +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/__init__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/__main__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/bump.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/bump_major.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/bump_minor.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/bump_patch.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/bump_version.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/dev.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/help.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/install.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/run_cli.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/scripts/version_current.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/__init__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/__main__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/adapters/__init__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/adapters/signals.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/application/__init__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/core/__init__.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/lib_cli_exit_tools.py +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/src/lib_cli_exit_tools/py.typed +0 -0
- {lib_cli_exit_tools-2.1.0 → lib_cli_exit_tools-2.1.1}/tests/test_scripts.py +0 -0
|
@@ -5,6 +5,9 @@ on:
|
|
|
5
5
|
branches: [ main, master ]
|
|
6
6
|
pull_request:
|
|
7
7
|
branches: [ main, master ]
|
|
8
|
+
schedule:
|
|
9
|
+
# Run daily at 3:17 AM UTC (off-peak hours, odd minute to avoid congestion)
|
|
10
|
+
- cron: '17 3 * * *'
|
|
8
11
|
|
|
9
12
|
jobs:
|
|
10
13
|
test:
|
|
@@ -16,11 +19,20 @@ jobs:
|
|
|
16
19
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
17
20
|
# Test against Python 3.13 and the latest 3.x available on Actions runners
|
|
18
21
|
python: ["3.13", "3.x"]
|
|
22
|
+
env:
|
|
23
|
+
PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
|
|
24
|
+
PYTHONIOENCODING: "utf-8"
|
|
19
25
|
steps:
|
|
20
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v6
|
|
21
27
|
- uses: actions/setup-python@v6
|
|
22
28
|
with:
|
|
23
29
|
python-version: ${{ matrix.python }}
|
|
30
|
+
cache: 'pip'
|
|
31
|
+
cache-dependency-path: 'pyproject.toml'
|
|
32
|
+
- name: Install uv
|
|
33
|
+
uses: astral-sh/setup-uv@v7
|
|
34
|
+
with:
|
|
35
|
+
enable-cache: true
|
|
24
36
|
- name: Extract project metadata
|
|
25
37
|
shell: python
|
|
26
38
|
run: |
|
|
@@ -45,6 +57,13 @@ jobs:
|
|
|
45
57
|
run: |
|
|
46
58
|
choco install -y make
|
|
47
59
|
echo "C:\\ProgramData\\chocolatey\\bin" >> $env:GITHUB_PATH
|
|
60
|
+
- name: Install journald prerequisites
|
|
61
|
+
if: runner.os == 'Linux'
|
|
62
|
+
shell: bash
|
|
63
|
+
run: |
|
|
64
|
+
sudo apt-get update
|
|
65
|
+
sudo apt-get install -y python3-systemd
|
|
66
|
+
|
|
48
67
|
- name: Upgrade pip
|
|
49
68
|
shell: bash
|
|
50
69
|
run: python -m pip install --upgrade pip
|
|
@@ -52,13 +71,28 @@ jobs:
|
|
|
52
71
|
- name: Install dev deps
|
|
53
72
|
shell: bash
|
|
54
73
|
run: |
|
|
55
|
-
pip install -e .[dev]
|
|
74
|
+
uv pip install -e .[dev] --system
|
|
56
75
|
|
|
57
76
|
- name: Install Windows Event Log prerequisites
|
|
58
77
|
if: runner.os == 'Windows'
|
|
59
78
|
shell: bash
|
|
60
79
|
run: |
|
|
61
|
-
pip install pywin32
|
|
80
|
+
uv pip install pywin32 --system
|
|
81
|
+
- name: Cache ruff
|
|
82
|
+
uses: actions/cache@v4
|
|
83
|
+
with:
|
|
84
|
+
path: .ruff_cache
|
|
85
|
+
key: ruff-${{ runner.os }}-${{ github.sha }}
|
|
86
|
+
restore-keys: |
|
|
87
|
+
ruff-${{ runner.os }}-
|
|
88
|
+
- name: Cache pyright
|
|
89
|
+
uses: actions/cache@v4
|
|
90
|
+
with:
|
|
91
|
+
path: .pyright
|
|
92
|
+
key: pyright-${{ runner.os }}-py${{ matrix.python }}-${{ github.sha }}
|
|
93
|
+
restore-keys: |
|
|
94
|
+
pyright-${{ runner.os }}-py${{ matrix.python }}-
|
|
95
|
+
pyright-${{ runner.os }}-
|
|
62
96
|
- name: Run full test suite (lint, types, tests, coverage, codecov)
|
|
63
97
|
shell: bash
|
|
64
98
|
env:
|
|
@@ -79,10 +113,12 @@ jobs:
|
|
|
79
113
|
name: pipx/uv verification (ubuntu)
|
|
80
114
|
runs-on: ubuntu-latest
|
|
81
115
|
steps:
|
|
82
|
-
- uses: actions/checkout@
|
|
116
|
+
- uses: actions/checkout@v6
|
|
83
117
|
- uses: actions/setup-python@v6
|
|
84
118
|
with:
|
|
85
119
|
python-version: "3.13"
|
|
120
|
+
cache: 'pip'
|
|
121
|
+
cache-dependency-path: 'pyproject.toml'
|
|
86
122
|
- name: Extract project metadata
|
|
87
123
|
shell: python
|
|
88
124
|
run: |
|
|
@@ -123,10 +159,12 @@ jobs:
|
|
|
123
159
|
name: Execute notebooks (ubuntu, Python 3.13)
|
|
124
160
|
runs-on: ubuntu-latest
|
|
125
161
|
steps:
|
|
126
|
-
- uses: actions/checkout@
|
|
162
|
+
- uses: actions/checkout@v6
|
|
127
163
|
- uses: actions/setup-python@v6
|
|
128
164
|
with:
|
|
129
165
|
python-version: "3.13"
|
|
166
|
+
cache: 'pip'
|
|
167
|
+
cache-dependency-path: 'pyproject.toml'
|
|
130
168
|
- name: Install notebook runner deps
|
|
131
169
|
run: |
|
|
132
170
|
python -m pip install --upgrade pip
|
|
@@ -14,29 +14,37 @@ jobs:
|
|
|
14
14
|
permissions:
|
|
15
15
|
contents: read
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
18
|
- name: Verify PyPI token is set
|
|
19
19
|
run: |
|
|
20
20
|
if [ -z "${{ secrets.PYPI_API_TOKEN }}" ]; then
|
|
21
|
-
echo "::error title=Missing PyPI token::Set the PYPI_API_TOKEN secret in GitHub repository settings to enable PyPI publishing on releases."
|
|
22
|
-
echo "See: https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions"
|
|
21
|
+
echo "::error title=Missing PyPI token::Set the PYPI_API_TOKEN secret in GitHub repository settings to enable PyPI publishing on releases."
|
|
22
|
+
echo "See: https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions"
|
|
23
23
|
exit 1
|
|
24
24
|
fi
|
|
25
25
|
- uses: actions/setup-python@v6
|
|
26
26
|
with:
|
|
27
27
|
python-version: '3.13'
|
|
28
|
+
cache: 'pip'
|
|
29
|
+
cache-dependency-path: 'pyproject.toml'
|
|
30
|
+
- name: Install uv
|
|
31
|
+
uses: astral-sh/setup-uv@v7
|
|
32
|
+
with:
|
|
33
|
+
enable-cache: true
|
|
28
34
|
- name: Build artifacts
|
|
29
35
|
run: |
|
|
30
|
-
python -m pip install --upgrade pip
|
|
36
|
+
python -m pip install --upgrade pip
|
|
37
|
+
uv pip install build --system
|
|
31
38
|
python -m build
|
|
32
39
|
- name: Publish to PyPI
|
|
33
40
|
# Use the rolling major tag to get latest Twine/standards support (e.g., Core Metadata 2.4)
|
|
34
41
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
35
42
|
with:
|
|
36
43
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
44
|
+
attestations: false
|
|
37
45
|
skip-existing: true
|
|
38
46
|
- name: Upload artifacts
|
|
39
|
-
uses: actions/upload-artifact@
|
|
47
|
+
uses: actions/upload-artifact@v5
|
|
40
48
|
with:
|
|
41
49
|
name: dist
|
|
42
50
|
path: dist/*
|
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
## [2.1.1] - 2025-12-08
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- Enforced strict data architecture by introducing TypedDict classes (`RichClickSnapshot`, `CliContextState`, `ConfigSnapshot`, `SessionOverrides`) to eliminate raw dictionary access patterns.
|
|
10
|
+
- Added `_is_posix_platform()` helper function to centralise platform detection and avoid string literal comparisons.
|
|
11
|
+
- Replaced assert-based type guards with explicit conditional checks to satisfy Bandit security scanning.
|
|
12
|
+
|
|
13
|
+
### Refactored
|
|
14
|
+
- Comprehensive test suite refactoring following clean architecture principles:
|
|
15
|
+
- Each test now verifies exactly one behaviour with descriptive naming.
|
|
16
|
+
- Added OS-specific markers (`@pytest.mark.posix_only`, `@pytest.mark.windows_only`, `@pytest.mark.os_agnostic`) for platform-aware test execution.
|
|
17
|
+
- Centralised shared fixtures in `conftest.py` including `cli_runner`, `strip_ansi`, `reset_config`, and `sysexits_mode`.
|
|
18
|
+
- Prefer real behaviour tests over mocks where possible, particularly for signal handling.
|
|
19
|
+
- Organised tests into logical sections with clear header comments.
|
|
20
|
+
|
|
6
21
|
## [2.1.0] - 2025-10-13
|
|
7
22
|
|
|
8
23
|
### Changed
|
|
@@ -3,7 +3,7 @@ SHELL := /bin/bash
|
|
|
3
3
|
PYTHON ?= python3
|
|
4
4
|
SCRIPTS ?= $(PYTHON) -m scripts
|
|
5
5
|
|
|
6
|
-
.PHONY: help install dev test run clean build push release coverage version-current bump bump-patch bump-minor bump-major menu
|
|
6
|
+
.PHONY: help install dev test run clean build push release coverage version-current bump bump-patch bump-minor bump-major dependencies dependencies-update menu
|
|
7
7
|
|
|
8
8
|
help:
|
|
9
9
|
$(SCRIPTS) help
|
|
@@ -50,5 +50,11 @@ build:
|
|
|
50
50
|
release:
|
|
51
51
|
$(SCRIPTS) release
|
|
52
52
|
|
|
53
|
+
dependencies:
|
|
54
|
+
$(SCRIPTS) dependencies
|
|
55
|
+
|
|
56
|
+
dependencies-update:
|
|
57
|
+
$(SCRIPTS) dependencies-update
|
|
58
|
+
|
|
53
59
|
menu:
|
|
54
60
|
$(SCRIPTS) menu
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lib_cli_exit_tools
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: CLI exit handling helpers: clean signals, exit codes, and error printing
|
|
5
5
|
Project-URL: Homepage, https://github.com/bitranox/lib_cli_exit_tools
|
|
6
6
|
Project-URL: Repository, https://github.com/bitranox/lib_cli_exit_tools.git
|
|
@@ -16,21 +16,21 @@ Classifier: Programming Language :: Python :: 3
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
17
|
Classifier: Typing :: Typed
|
|
18
18
|
Requires-Python: >=3.13
|
|
19
|
-
Requires-Dist: rich-click>=1.9.
|
|
19
|
+
Requires-Dist: rich-click>=1.9.4
|
|
20
20
|
Provides-Extra: dev
|
|
21
|
-
Requires-Dist: bandit>=1.
|
|
21
|
+
Requires-Dist: bandit>=1.9.2; extra == 'dev'
|
|
22
22
|
Requires-Dist: build>=1.3.0; extra == 'dev'
|
|
23
|
-
Requires-Dist: codecov-cli>=11.2.
|
|
24
|
-
Requires-Dist: coverage[toml]>=7.
|
|
25
|
-
Requires-Dist: hypothesis>=6.
|
|
26
|
-
Requires-Dist: import-linter>=2.
|
|
27
|
-
Requires-Dist: pip-audit>=2.
|
|
28
|
-
Requires-Dist: pyright>=1.1.
|
|
29
|
-
Requires-Dist: pytest-asyncio>=1.
|
|
23
|
+
Requires-Dist: codecov-cli>=11.2.6; extra == 'dev'
|
|
24
|
+
Requires-Dist: coverage[toml]>=7.13.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: hypothesis>=6.148.7; extra == 'dev'
|
|
26
|
+
Requires-Dist: import-linter>=2.7; extra == 'dev'
|
|
27
|
+
Requires-Dist: pip-audit>=2.10.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: pyright>=1.1.407; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
|
|
30
30
|
Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
|
|
31
|
-
Requires-Dist: pytest>=
|
|
32
|
-
Requires-Dist: ruff>=0.14.
|
|
33
|
-
Requires-Dist: textual>=6.
|
|
31
|
+
Requires-Dist: pytest>=9.0.2; extra == 'dev'
|
|
32
|
+
Requires-Dist: ruff>=0.14.8; extra == 'dev'
|
|
33
|
+
Requires-Dist: textual>=6.8.0; extra == 'dev'
|
|
34
34
|
Requires-Dist: twine>=6.2.0; extra == 'dev'
|
|
35
35
|
Description-Content-Type: text/markdown
|
|
36
36
|
|
|
@@ -47,6 +47,7 @@ Description-Content-Type: text/markdown
|
|
|
47
47
|
[](https://codecov.io/gh/bitranox/lib_cli_exit_tools)
|
|
48
48
|
[](https://qlty.sh/gh/bitranox/projects/lib_cli_exit_tools)
|
|
49
49
|
[](https://snyk.io/test/github/bitranox/lib_cli_exit_tools)
|
|
50
|
+
[](https://github.com/PyCQA/bandit)
|
|
50
51
|
|
|
51
52
|
Small helpers for robust CLI exit handling:
|
|
52
53
|
- Portable signal handling (SIGINT, SIGTERM/SIGBREAK)
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
[](https://codecov.io/gh/bitranox/lib_cli_exit_tools)
|
|
12
12
|
[](https://qlty.sh/gh/bitranox/projects/lib_cli_exit_tools)
|
|
13
13
|
[](https://snyk.io/test/github/bitranox/lib_cli_exit_tools)
|
|
14
|
+
[](https://github.com/PyCQA/bandit)
|
|
14
15
|
|
|
15
16
|
Small helpers for robust CLI exit handling:
|
|
16
17
|
- Portable signal handling (SIGINT, SIGTERM/SIGBREAK)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "lib_cli_exit_tools"
|
|
3
|
-
version = "2.1.
|
|
3
|
+
version = "2.1.1"
|
|
4
4
|
description = "CLI exit handling helpers: clean signals, exit codes, and error printing"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.13"
|
|
7
|
-
dependencies = ["rich-click>=1.9.
|
|
7
|
+
dependencies = ["rich-click>=1.9.4"]
|
|
8
8
|
license = { text = "MIT" }
|
|
9
9
|
authors = [{ name = "bitranox", email = "bitranox@gmail.com" }]
|
|
10
10
|
keywords = ["cli", "exit", "signals", "errors", "click"]
|
|
@@ -25,18 +25,18 @@ Issues = "https://github.com/bitranox/lib_cli_exit_tools/issues"
|
|
|
25
25
|
[project.optional-dependencies]
|
|
26
26
|
dev = [
|
|
27
27
|
"build>=1.3.0",
|
|
28
|
-
"codecov-cli>=11.2.
|
|
29
|
-
"coverage[toml]>=7.
|
|
30
|
-
"hypothesis>=6.
|
|
31
|
-
"import-linter>=2.
|
|
32
|
-
"bandit>=1.
|
|
33
|
-
"pip-audit>=2.
|
|
34
|
-
"pyright>=1.1.
|
|
35
|
-
"pytest>=
|
|
36
|
-
"pytest-asyncio>=1.
|
|
28
|
+
"codecov-cli>=11.2.6",
|
|
29
|
+
"coverage[toml]>=7.13.0",
|
|
30
|
+
"hypothesis>=6.148.7",
|
|
31
|
+
"import-linter>=2.7",
|
|
32
|
+
"bandit>=1.9.2",
|
|
33
|
+
"pip-audit>=2.10.0",
|
|
34
|
+
"pyright>=1.1.407",
|
|
35
|
+
"pytest>=9.0.2",
|
|
36
|
+
"pytest-asyncio>=1.3.0",
|
|
37
37
|
"pytest-cov>=7.0.0",
|
|
38
|
-
"ruff>=0.14.
|
|
39
|
-
"textual>=6.
|
|
38
|
+
"ruff>=0.14.8",
|
|
39
|
+
"textual>=6.8.0",
|
|
40
40
|
"twine>=6.2.0"
|
|
41
41
|
]
|
|
42
42
|
|
|
@@ -47,7 +47,7 @@ cli-exit-tools = "lib_cli_exit_tools.cli:main"
|
|
|
47
47
|
lib-cli-exit-tools = "lib_cli_exit_tools.cli:main"
|
|
48
48
|
|
|
49
49
|
[build-system]
|
|
50
|
-
requires = ["hatchling>=1.
|
|
50
|
+
requires = ["hatchling>=1.28.0"]
|
|
51
51
|
build-backend = "hatchling.build"
|
|
52
52
|
|
|
53
53
|
[tool.hatch.build.targets.wheel]
|
|
@@ -70,6 +70,7 @@ exclude = [
|
|
|
70
70
|
|
|
71
71
|
[tool.pytest.ini_options]
|
|
72
72
|
addopts = ["--doctest-modules"]
|
|
73
|
+
pythonpath = ["src"]
|
|
73
74
|
doctest_optionflags = ["ELLIPSIS", "NORMALIZE_WHITESPACE"]
|
|
74
75
|
markers = [
|
|
75
76
|
"os_agnostic: test exercises behavior that is the same on every operating system",
|
|
@@ -91,6 +92,39 @@ omit = [
|
|
|
91
92
|
fail_under = 85
|
|
92
93
|
show_missing = true
|
|
93
94
|
|
|
95
|
+
[tool.clean]
|
|
96
|
+
# Patterns to remove when running `make clean` or `python -m scripts clean`
|
|
97
|
+
patterns = [
|
|
98
|
+
".hypothesis",
|
|
99
|
+
".import_linter_cache",
|
|
100
|
+
".pytest_cache",
|
|
101
|
+
".ruff_cache",
|
|
102
|
+
".pyright",
|
|
103
|
+
".mypy_cache",
|
|
104
|
+
".tox",
|
|
105
|
+
".nox",
|
|
106
|
+
".eggs",
|
|
107
|
+
"*.egg-info",
|
|
108
|
+
"build",
|
|
109
|
+
"dist",
|
|
110
|
+
"htmlcov",
|
|
111
|
+
".coverage",
|
|
112
|
+
"coverage.xml",
|
|
113
|
+
"codecov.sh",
|
|
114
|
+
".cache",
|
|
115
|
+
"result",
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
[tool.git]
|
|
119
|
+
# Default git remote for push/release commands
|
|
120
|
+
default-remote = "origin"
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
[tool.scripts.test]
|
|
124
|
+
# Configuration for scripts/test.py test runner
|
|
125
|
+
pytest-verbosity = "-vv"
|
|
126
|
+
coverage-report-file = "coverage.xml"
|
|
127
|
+
src-path = "src"
|
|
94
128
|
[tool.importlinter]
|
|
95
129
|
root_package = "lib_cli_exit_tools"
|
|
96
130
|
|
|
@@ -116,3 +150,9 @@ source_modules = [
|
|
|
116
150
|
forbidden_modules = [
|
|
117
151
|
"lib_cli_exit_tools.cli",
|
|
118
152
|
]
|
|
153
|
+
|
|
154
|
+
[tool.pip-audit]
|
|
155
|
+
# Known vulnerabilities to ignore (unfixable or accepted risk)
|
|
156
|
+
# GHSA-4xh5-x5gv-qwph: py library ReDoS (no fix available, low risk)
|
|
157
|
+
# PYSEC-2022-42969: same as above (alias)
|
|
158
|
+
ignore-vulns = ["GHSA-4xh5-x5gv-qwph", "PYSEC-2022-42969"]
|