lib-detect-testenv 3.0.0__tar.gz → 3.0.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 (67) hide show
  1. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.devcontainer/devcontainer.json +0 -0
  2. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.devcontainer/settings.json +0 -0
  3. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.env.example +0 -0
  4. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.github/dependabot.yml +0 -0
  5. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.github/workflows/ci.yml +12 -20
  6. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.github/workflows/codeql.yml +1 -1
  7. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.github/workflows/release.yml +2 -2
  8. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.gitignore +0 -0
  9. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.qlty/qlty.toml +0 -0
  10. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/.snyk +0 -0
  11. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/CHANGELOG.md +10 -0
  12. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/CLAUDE.md +42 -10
  13. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/CONTRIBUTING.md +0 -0
  14. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/DEVELOPMENT.md +0 -0
  15. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/INSTALL.md +0 -0
  16. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/LICENSE +0 -0
  17. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/Makefile +7 -1
  18. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/PKG-INFO +15 -10
  19. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/README.md +1 -0
  20. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/codecov.yml +0 -0
  21. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/concept.md +0 -0
  22. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/docs/systemdesign/module_reference.md +0 -0
  23. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/notebooks/Quickstart.ipynb +0 -0
  24. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/pyproject.toml +54 -11
  25. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/reset_git_history.sh +0 -0
  26. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/__init__.py +0 -0
  27. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/__main__.py +0 -0
  28. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/_utils.py +274 -97
  29. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/build.py +0 -0
  30. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/bump.py +0 -0
  31. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/bump_major.py +0 -0
  32. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/bump_minor.py +0 -0
  33. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/bump_patch.py +0 -0
  34. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/bump_version.py +0 -0
  35. lib_detect_testenv-3.0.1/scripts/clean.py +75 -0
  36. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/cli.py +20 -1
  37. lib_detect_testenv-3.0.1/scripts/dependencies.py +590 -0
  38. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/dev.py +0 -0
  39. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/help.py +0 -0
  40. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/install.py +0 -0
  41. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/menu.py +30 -16
  42. lib_detect_testenv-3.0.1/scripts/push.py +309 -0
  43. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/release.py +3 -1
  44. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/run_cli.py +0 -0
  45. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/target_metadata.py +30 -2
  46. lib_detect_testenv-3.0.1/scripts/test.py +1004 -0
  47. lib_detect_testenv-3.0.1/scripts/toml_config.py +433 -0
  48. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/scripts/version_current.py +0 -0
  49. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/__init__.py +0 -0
  50. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/__init__conf__.py +8 -1
  51. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/__main__.py +0 -0
  52. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/behaviors.py +0 -0
  53. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/cli.py +0 -0
  54. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/lib_detect_testenv.py +0 -0
  55. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/src/lib_detect_testenv/py.typed +0 -0
  56. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/conftest.py +0 -0
  57. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/test_behaviors.py +0 -0
  58. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/test_cli.py +0 -0
  59. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/test_lib_detect_testenv.py +0 -0
  60. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/test_metadata.py +0 -0
  61. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/test_module_entry.py +0 -0
  62. {lib_detect_testenv-3.0.0 → lib_detect_testenv-3.0.1}/tests/test_scripts.py +0 -0
  63. lib_detect_testenv-3.0.0/AGENTS.md +0 -104
  64. lib_detect_testenv-3.0.0/README.rst.bak +0 -480
  65. lib_detect_testenv-3.0.0/scripts/clean.py +0 -48
  66. lib_detect_testenv-3.0.0/scripts/push.py +0 -77
  67. lib_detect_testenv-3.0.0/scripts/test.py +0 -545
@@ -17,12 +17,13 @@ jobs:
17
17
  fail-fast: false
18
18
  matrix:
19
19
  os: [ubuntu-latest, macos-latest, windows-latest]
20
- # Test against Python 3.9+ as specified in requires-python
21
- python: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.x"]
20
+ # Test against Python 3.13 and the latest 3.x available on Actions runners
21
+ python: ["3.13", "3.x"]
22
22
  env:
23
23
  PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
24
+ PYTHONIOENCODING: "utf-8"
24
25
  steps:
25
- - uses: actions/checkout@v5
26
+ - uses: actions/checkout@v6
26
27
  - uses: actions/setup-python@v6
27
28
  with:
28
29
  python-version: ${{ matrix.python }}
@@ -32,17 +33,11 @@ jobs:
32
33
  uses: astral-sh/setup-uv@v7
33
34
  with:
34
35
  enable-cache: true
35
- - name: Install tomli for Python < 3.11
36
- if: matrix.python == '3.9' || matrix.python == '3.10'
37
- run: python -m pip install tomli
38
36
  - name: Extract project metadata
39
37
  shell: python
40
38
  run: |
41
39
  import os
42
- try:
43
- import tomllib
44
- except ModuleNotFoundError:
45
- import tomli as tomllib
40
+ import tomllib
46
41
  from pathlib import Path
47
42
 
48
43
  data = tomllib.loads(Path('pyproject.toml').read_text('utf-8'))
@@ -84,17 +79,17 @@ jobs:
84
79
  run: |
85
80
  uv pip install pywin32 --system
86
81
  - name: Cache ruff
87
- uses: actions/cache@v4
82
+ uses: actions/cache@v5
88
83
  with:
89
84
  path: .ruff_cache
90
- key: ruff-${{ runner.os }}-${{ hashFiles('**/*.py') }}
85
+ key: ruff-${{ runner.os }}-${{ github.sha }}
91
86
  restore-keys: |
92
87
  ruff-${{ runner.os }}-
93
88
  - name: Cache pyright
94
- uses: actions/cache@v4
89
+ uses: actions/cache@v5
95
90
  with:
96
91
  path: .pyright
97
- key: pyright-${{ runner.os }}-py${{ matrix.python }}-${{ hashFiles('**/*.py', 'pyproject.toml') }}
92
+ key: pyright-${{ runner.os }}-py${{ matrix.python }}-${{ github.sha }}
98
93
  restore-keys: |
99
94
  pyright-${{ runner.os }}-py${{ matrix.python }}-
100
95
  pyright-${{ runner.os }}-
@@ -118,7 +113,7 @@ jobs:
118
113
  name: pipx/uv verification (ubuntu)
119
114
  runs-on: ubuntu-latest
120
115
  steps:
121
- - uses: actions/checkout@v5
116
+ - uses: actions/checkout@v6
122
117
  - uses: actions/setup-python@v6
123
118
  with:
124
119
  python-version: "3.13"
@@ -128,10 +123,7 @@ jobs:
128
123
  shell: python
129
124
  run: |
130
125
  import os
131
- try:
132
- import tomllib
133
- except ModuleNotFoundError:
134
- import tomli as tomllib
126
+ import tomllib
135
127
  from pathlib import Path
136
128
 
137
129
  data = tomllib.loads(Path('pyproject.toml').read_text('utf-8'))
@@ -167,7 +159,7 @@ jobs:
167
159
  name: Execute notebooks (ubuntu, Python 3.13)
168
160
  runs-on: ubuntu-latest
169
161
  steps:
170
- - uses: actions/checkout@v5
162
+ - uses: actions/checkout@v6
171
163
  - uses: actions/setup-python@v6
172
164
  with:
173
165
  python-version: "3.13"
@@ -23,7 +23,7 @@ jobs:
23
23
 
24
24
  steps:
25
25
  - name: Checkout repository
26
- uses: actions/checkout@v5
26
+ uses: actions/checkout@v6
27
27
 
28
28
  - name: Initialize CodeQL
29
29
  uses: github/codeql-action/init@v4
@@ -14,7 +14,7 @@ jobs:
14
14
  permissions:
15
15
  contents: read
16
16
  steps:
17
- - uses: actions/checkout@v5
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
@@ -44,7 +44,7 @@ jobs:
44
44
  attestations: false
45
45
  skip-existing: true
46
46
  - name: Upload artifacts
47
- uses: actions/upload-artifact@v5
47
+ uses: actions/upload-artifact@v6
48
48
  with:
49
49
  name: dist
50
50
  path: dist/*
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.0.1] - 2025-12-15
9
+
10
+ ### Changed
11
+
12
+ - Replaced `tomllib`/`tomli` with `rtoml` for TOML parsing in scripts
13
+ - Updated GitHub Actions dependencies:
14
+ - `actions/cache` v4 → v5
15
+ - `actions/upload-artifact` v5 → v6
16
+ - Added `PYTHONIOENCODING: "utf-8"` environment variable to CI workflow for consistent encoding
17
+
8
18
  ## [3.0.0] - 2025-11-04
9
19
 
10
20
  ### Added
@@ -22,7 +22,7 @@ When working with Python code:
22
22
  - `python_clean_code.md`
23
23
  - `python_small_functions_style.md`
24
24
  - `python_libraries_to_use.md`
25
- - `python_lib_structure_template.md`
25
+ - `python_structure_template.md`
26
26
 
27
27
  ### Additional Guidelines
28
28
  - `self_documenting.md`
@@ -42,28 +42,50 @@ lib_detect_testenv/
42
42
  ├── notebooks/ # Jupyter notebooks for experiments
43
43
  ├── scripts/ # Build and automation scripts
44
44
  │ ├── build.py # Build wheel/sdist
45
- │ ├── bump*.py # Version bump scripts
45
+ │ ├── bump.py # Version bump (generic)
46
+ │ ├── bump_major.py # Bump major version
47
+ │ ├── bump_minor.py # Bump minor version
48
+ │ ├── bump_patch.py # Bump patch version
49
+ │ ├── bump_version.py # Version bump utilities
46
50
  │ ├── clean.py # Clean build artifacts
47
- │ ├── test.py # Run tests with coverage
48
- │ ├── push.py # Git push with monitoring
49
- │ ├── release.py # Create releases
51
+ │ ├── cli.py # CLI for scripts
52
+ │ ├── dependencies.py # Dependency management
53
+ │ ├── dev.py # Development install
54
+ │ ├── help.py # Show help
55
+ │ ├── install.py # Install package
50
56
  │ ├── menu.py # Interactive TUI menu
57
+ │ ├── push.py # Git push
58
+ │ ├── release.py # Create releases
59
+ │ ├── run_cli.py # Run CLI
60
+ │ ├── target_metadata.py # Metadata generation
61
+ │ ├── test.py # Run tests with coverage
62
+ │ ├── toml_config.py # TOML configuration utilities
63
+ │ ├── version_current.py # Print current version
51
64
  │ └── _utils.py # Shared utilities
52
65
  ├── src/
53
- │ └── lib_detect_testenv/ # Main Python package
54
- │ ├── __init__.py # Package initialization
55
- │ ├── __init__conf__.py # Configuration loader
66
+ │ └── lib_detect_testenv/ # Main Python package
67
+ │ ├── __init__.py # Package initialization & public API
68
+ │ ├── __init__conf__.py # Configuration constants
56
69
  │ ├── __main__.py # CLI entry point
70
+ │ ├── behaviors.py # Domain behaviors (greeting, failure hooks)
57
71
  │ ├── cli.py # CLI implementation
58
- │ ├── behaviors.py # Core behaviors/business logic
72
+ │ ├── lib_detect_testenv.py # Core detection functions
59
73
  │ └── py.typed # PEP 561 marker
60
74
  ├── tests/ # Test suite
75
+ │ ├── conftest.py # Pytest fixtures
76
+ │ ├── test_behaviors.py # Behavior tests
77
+ │ ├── test_cli.py # CLI tests
78
+ │ ├── test_lib_detect_testenv.py # Core library tests
79
+ │ ├── test_metadata.py # Metadata tests
80
+ │ ├── test_module_entry.py # Module entry tests
81
+ │ └── test_scripts.py # Script tests
61
82
  ├── .env.example # Example environment variables
62
83
  ├── CLAUDE.md # Claude Code guidelines (this file)
63
84
  ├── CHANGELOG.md # Version history
64
85
  ├── CONTRIBUTING.md # Contribution guidelines
65
86
  ├── DEVELOPMENT.md # Development setup guide
66
87
  ├── INSTALL.md # Installation instructions
88
+ ├── LICENSE # MIT License
67
89
  ├── Makefile # Make targets for common tasks
68
90
  ├── pyproject.toml # Project metadata & dependencies
69
91
  ├── codecov.yml # Codecov configuration
@@ -73,7 +95,7 @@ lib_detect_testenv/
73
95
  ## Versioning & Releases
74
96
 
75
97
  - **Single Source of Truth**: Package version is in `pyproject.toml` (`[project].version`)
76
- - **Version Bumps**: update `pyproject.toml` , `CHANGELOG.md` and update the constants in `src/../__init__conf__.py` according to `pyproject.toml`
98
+ - **Version Bumps**: update `pyproject.toml`, `CHANGELOG.md` and update the constants in `src/lib_detect_testenv/__init__conf__.py` according to `pyproject.toml`
77
99
  - Automation rewrites `src/lib_detect_testenv/__init__conf__.py` from `pyproject.toml`, so runtime code imports generated constants instead of querying `importlib.metadata`.
78
100
  - After updating project metadata (version, summary, URLs, authors) run `make test` (or `python -m scripts.test`) to regenerate the metadata module before committing.
79
101
  - **Release Tags**: Format is `vX.Y.Z` (push tags for CI to build and publish)
@@ -104,6 +126,16 @@ Follow the guidelines in `python_clean_code.md` for all Python code.
104
126
 
105
127
  ## Architecture Overview
106
128
 
129
+ This library provides test environment detection with a simple layered structure:
130
+
131
+ - **lib_detect_testenv.py**: Core detection functions (`is_testenv_active`, `is_pytest_active`, `is_doctest_active`, etc.)
132
+ - **behaviors.py**: Domain behaviors (greeting, failure hooks for CLI testing)
133
+ - **cli.py**: CLI interface using rich-click
134
+
135
+ Import rules (enforced by import-linter):
136
+ - `cli` depends on `lib_detect_testenv` and `behaviors`
137
+ - Core detection functions have no internal dependencies
138
+
107
139
  Apply principles from `python_clean_architecture.md` when designing and implementing features.
108
140
 
109
141
  ## Security & Configuration
@@ -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_detect_testenv
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Detect test environment - pytest, doctest, unittest, or regular execution
5
5
  Project-URL: Homepage, https://github.com/bitranox/lib_detect_testenv
6
6
  Project-URL: Repository, https://github.com/bitranox/lib_detect_testenv.git
@@ -23,17 +23,21 @@ Classifier: Typing :: Typed
23
23
  Requires-Python: >=3.9
24
24
  Requires-Dist: rich-click>=1.9.4
25
25
  Provides-Extra: dev
26
- Requires-Dist: bandit>=1.8.6; extra == 'dev'
26
+ Requires-Dist: bandit<1.9,>=1.8.6; (python_version < '3.10') and extra == 'dev'
27
+ Requires-Dist: bandit>=1.9.2; (python_version >= '3.10') and extra == 'dev'
27
28
  Requires-Dist: build>=1.3.0; extra == 'dev'
28
- Requires-Dist: codecov-cli>=11.2.3; extra == 'dev'
29
- Requires-Dist: import-linter>=2.5.2; extra == 'dev'
30
- Requires-Dist: pip-audit>=2.9.0; extra == 'dev'
31
- Requires-Dist: pyright>=1.1.406; extra == 'dev'
29
+ Requires-Dist: codecov-cli>=11.2.6; extra == 'dev'
30
+ Requires-Dist: import-linter<2.6,>=2.5.2; (python_version < '3.10') and extra == 'dev'
31
+ Requires-Dist: import-linter>=2.9; (python_version >= '3.10') and extra == 'dev'
32
+ Requires-Dist: pip-audit>=2.10.0; extra == 'dev'
33
+ Requires-Dist: pyright>=1.1.407; extra == 'dev'
32
34
  Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
33
- Requires-Dist: pytest>=8.4.2; extra == 'dev'
34
- Requires-Dist: rich-click>=1.9.4; extra == 'dev'
35
- Requires-Dist: ruff>=0.14.3; extra == 'dev'
36
- Requires-Dist: textual>=6.3.0; extra == 'dev'
35
+ Requires-Dist: pytest<9,>=8.4.2; (python_version < '3.10') and extra == 'dev'
36
+ Requires-Dist: pytest>=9.0.2; (python_version >= '3.10') and extra == 'dev'
37
+ Requires-Dist: rtoml>=0.13.0; extra == 'dev'
38
+ Requires-Dist: ruff>=0.14.9; extra == 'dev'
39
+ Requires-Dist: setuptools>=80.9.0; extra == 'dev'
40
+ Requires-Dist: textual>=6.9.0; extra == 'dev'
37
41
  Requires-Dist: twine>=6.2.0; extra == 'dev'
38
42
  Description-Content-Type: text/markdown
39
43
 
@@ -50,6 +54,7 @@ Description-Content-Type: text/markdown
50
54
  [![codecov](https://codecov.io/gh/bitranox/lib_detect_testenv/graph/badge.svg?token=UFBaUDIgRk)](https://codecov.io/gh/bitranox/lib_detect_testenv)
51
55
  [![Maintainability](https://qlty.sh/badges/041ba2c1-37d6-40bb-85a0-ec5a8a0aca0c/maintainability.svg)](https://qlty.sh/gh/bitranox/projects/lib_detect_testenv)
52
56
  [![Known Vulnerabilities](https://snyk.io/test/github/bitranox/lib_detect_testenv/badge.svg)](https://snyk.io/test/github/bitranox/lib_detect_testenv)
57
+ [![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
53
58
 
54
59
  **Detect test environments: pytest, doctest, and setup.py test**
55
60
 
@@ -11,6 +11,7 @@
11
11
  [![codecov](https://codecov.io/gh/bitranox/lib_detect_testenv/graph/badge.svg?token=UFBaUDIgRk)](https://codecov.io/gh/bitranox/lib_detect_testenv)
12
12
  [![Maintainability](https://qlty.sh/badges/041ba2c1-37d6-40bb-85a0-ec5a8a0aca0c/maintainability.svg)](https://qlty.sh/gh/bitranox/projects/lib_detect_testenv)
13
13
  [![Known Vulnerabilities](https://snyk.io/test/github/bitranox/lib_detect_testenv/badge.svg)](https://snyk.io/test/github/bitranox/lib_detect_testenv)
14
+ [![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
14
15
 
15
16
  **Detect test environments: pytest, doctest, and setup.py test**
16
17
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lib_detect_testenv"
3
- version = "3.0.0"
3
+ version = "3.0.1"
4
4
  description = "Detect test environment - pytest, doctest, unittest, or regular execution"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -31,25 +31,29 @@ Issues = "https://github.com/bitranox/lib_detect_testenv/issues"
31
31
 
32
32
  [project.optional-dependencies]
33
33
  dev = [
34
- "pytest>=8.4.2",
34
+ "pytest>=8.4.2,<9; python_version<'3.10'",
35
+ "pytest>=9.0.2; python_version>='3.10'",
35
36
  "pytest-cov>=7.0.0",
36
- "ruff>=0.14.3",
37
- "pyright>=1.1.406",
38
- "bandit>=1.8.6",
37
+ "ruff>=0.14.9",
38
+ "pyright>=1.1.407",
39
+ "bandit>=1.8.6,<1.9; python_version<'3.10'",
40
+ "bandit>=1.9.2; python_version>='3.10'",
39
41
  "build>=1.3.0",
40
42
  "twine>=6.2.0",
41
- "codecov-cli>=11.2.3",
42
- "pip-audit>=2.9.0",
43
- "textual>=6.3.0",
44
- "import-linter>=2.5.2",
45
- "rich-click>=1.9.4", # Needed for CLI tests
43
+ "codecov-cli>=11.2.6",
44
+ "pip-audit>=2.10.0",
45
+ "textual>=6.9.0",
46
+ "import-linter>=2.5.2,<2.6; python_version<'3.10'",
47
+ "import-linter>=2.9; python_version>='3.10'",
48
+ "setuptools>=80.9.0",
49
+ "rtoml>=0.13.0",
46
50
  ]
47
51
 
48
52
  [project.scripts]
49
53
  lib_detect_testenv = "lib_detect_testenv.cli:main"
50
54
 
51
55
  [build-system]
52
- requires = ["hatchling>=1.27.0"]
56
+ requires = ["hatchling>=1.27.0,<1.28"]
53
57
  build-backend = "hatchling.build"
54
58
 
55
59
 
@@ -104,6 +108,39 @@ omit = [
104
108
  fail_under = 85
105
109
  show_missing = true
106
110
 
111
+ [tool.clean]
112
+ # Patterns to remove when running `make clean` or `python -m scripts clean`
113
+ patterns = [
114
+ ".hypothesis",
115
+ ".import_linter_cache",
116
+ ".pytest_cache",
117
+ ".ruff_cache",
118
+ ".pyright",
119
+ ".mypy_cache",
120
+ ".tox",
121
+ ".nox",
122
+ ".eggs",
123
+ "*.egg-info",
124
+ "build",
125
+ "dist",
126
+ "htmlcov",
127
+ ".coverage",
128
+ "coverage.xml",
129
+ "codecov.sh",
130
+ ".cache",
131
+ "result",
132
+ ]
133
+
134
+ [tool.git]
135
+ # Default git remote for push/release commands
136
+ default-remote = "origin"
137
+
138
+
139
+ [tool.scripts.test]
140
+ # Configuration for scripts/test.py test runner
141
+ pytest-verbosity = "-vv"
142
+ coverage-report-file = "coverage.xml"
143
+ src-path = "src"
107
144
  [tool.importlinter]
108
145
  root_package = "lib_detect_testenv"
109
146
 
@@ -115,3 +152,9 @@ layers = [
115
152
  "lib_detect_testenv.lib_detect_testenv",
116
153
  "lib_detect_testenv.behaviors",
117
154
  ]
155
+
156
+ [tool.pip-audit]
157
+ # Known vulnerabilities to ignore (unfixable or accepted risk)
158
+ # GHSA-4xh5-x5gv-qwph: py library ReDoS (no fix available, low risk)
159
+ # PYSEC-2022-42969: same as above (alias)
160
+ ignore-vulns = ["GHSA-4xh5-x5gv-qwph", "PYSEC-2022-42969"]