crackerjack 0.18.7__tar.gz → 0.18.9__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 (72) hide show
  1. {crackerjack-0.18.7 → crackerjack-0.18.9}/PKG-INFO +8 -7
  2. {crackerjack-0.18.7 → crackerjack-0.18.9}/README.md +1 -1
  3. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pre-commit-config.yaml +3 -3
  4. crackerjack-0.18.9/crackerjack/.ruff_cache/0.11.11/18187162184424859798 +0 -0
  5. crackerjack-0.18.9/crackerjack/.ruff_cache/0.11.12/16869036553936192448 +0 -0
  6. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/pyproject.toml +9 -7
  7. {crackerjack-0.18.7 → crackerjack-0.18.9}/pyproject.toml +9 -7
  8. crackerjack-0.18.9/tests/conftest.py +28 -0
  9. crackerjack-0.18.9/tests/test_pytest_features.py +41 -0
  10. crackerjack-0.18.7/crackerjack/.ruff_cache/0.11.11/18187162184424859798 +0 -0
  11. {crackerjack-0.18.7 → crackerjack-0.18.9}/LICENSE +0 -0
  12. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.gitignore +0 -0
  13. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.libcst.codemod.yaml +0 -0
  14. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pdm.toml +0 -0
  15. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pytest_cache/.gitignore +0 -0
  16. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pytest_cache/CACHEDIR.TAG +0 -0
  17. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pytest_cache/README.md +0 -0
  18. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pytest_cache/v/cache/nodeids +0 -0
  19. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.pytest_cache/v/cache/stepwise +0 -0
  20. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/.gitignore +0 -0
  21. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.1.11/3256171999636029978 +0 -0
  22. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.1.14/602324811142551221 +0 -0
  23. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.1.4/10355199064880463147 +0 -0
  24. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.1.6/15140459877605758699 +0 -0
  25. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.1.7/1790508110482614856 +0 -0
  26. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.1.9/17041001205004563469 +0 -0
  27. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.2/4070660268492669020 +0 -0
  28. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.3/9818742842212983150 +0 -0
  29. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.4/9818742842212983150 +0 -0
  30. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.6/3557596832929915217 +0 -0
  31. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.7/10386934055395314831 +0 -0
  32. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.7/3557596832929915217 +0 -0
  33. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.11.8/530407680854991027 +0 -0
  34. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.2.0/10047773857155985907 +0 -0
  35. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.2.1/8522267973936635051 +0 -0
  36. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.2.2/18053836298936336950 +0 -0
  37. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.3.0/12548816621480535786 +0 -0
  38. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.3.3/11081883392474770722 +0 -0
  39. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.3.4/676973378459347183 +0 -0
  40. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.3.5/16311176246009842383 +0 -0
  41. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.5.7/1493622539551733492 +0 -0
  42. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.5.7/6231957614044513175 +0 -0
  43. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.5.7/9932762556785938009 +0 -0
  44. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.0/11982804814124138945 +0 -0
  45. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.0/12055761203849489982 +0 -0
  46. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.2/1206147804896221174 +0 -0
  47. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.4/1206147804896221174 +0 -0
  48. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.5/1206147804896221174 +0 -0
  49. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.7/3657366982708166874 +0 -0
  50. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.6.9/285614542852677309 +0 -0
  51. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.7.1/1024065805990144819 +0 -0
  52. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.7.1/285614542852677309 +0 -0
  53. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.7.3/16061516852537040135 +0 -0
  54. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.8.4/16354268377385700367 +0 -0
  55. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.9.10/12813592349865671909 +0 -0
  56. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.9.10/923908772239632759 +0 -0
  57. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.9.3/13948373885254993391 +0 -0
  58. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.9.9/12813592349865671909 +0 -0
  59. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/0.9.9/8843823720003377982 +0 -0
  60. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/.ruff_cache/CACHEDIR.TAG +0 -0
  61. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/__init__.py +0 -0
  62. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/__main__.py +0 -0
  63. {crackerjack-0.18.7 → crackerjack-0.18.9}/crackerjack/crackerjack.py +0 -0
  64. /crackerjack-0.18.7/tests/README.md → /crackerjack-0.18.9/tests/TESTING.md +0 -0
  65. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/__init__.py +0 -0
  66. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/data/comments_sample.txt +0 -0
  67. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/data/docstrings_sample.txt +0 -0
  68. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/data/expected_comments_sample.txt +0 -0
  69. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/data/init.py +0 -0
  70. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/test_crackerjack.py +0 -0
  71. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/test_crackerjack_runner.py +0 -0
  72. {crackerjack-0.18.7 → crackerjack-0.18.9}/tests/test_main.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: crackerjack
3
- Version: 0.18.7
3
+ Version: 0.18.9
4
4
  Summary: Default template for PDM package
5
5
  Keywords: black,ruff,mypy,creosote,refurb,pyright,bandit,pytest
6
6
  Author-Email: lesleslie <les@wedgwoodwebworks.com>
@@ -27,15 +27,16 @@ Requires-Dist: pre-commit>=4.2.0
27
27
  Requires-Dist: pytest>=8.3.5
28
28
  Requires-Dist: pydantic>=2.11.5
29
29
  Requires-Dist: pdm-bump>=0.9.12
30
- Requires-Dist: pdm>=2.24.1
31
- Requires-Dist: uv>=0.7.7
30
+ Requires-Dist: pdm>=2.24.2
31
+ Requires-Dist: uv>=0.7.9
32
32
  Requires-Dist: pytest-cov>=6.1.1
33
- Requires-Dist: pytest-mock>=3.14.0
33
+ Requires-Dist: pytest-mock>=3.14.1
34
34
  Requires-Dist: tomli-w>=1.2.0
35
- Requires-Dist: pytest-asyncio>=0.26.0
35
+ Requires-Dist: pytest-asyncio>=1.0.0
36
36
  Requires-Dist: rich>=14.0.0
37
- Requires-Dist: typer>=0.15.4
37
+ Requires-Dist: typer>=0.16.0
38
38
  Requires-Dist: pytest-timeout>=2.4.0
39
+ Requires-Dist: pytest-xdist>=3.7.0
39
40
  Description-Content-Type: text/markdown
40
41
 
41
42
  # Crackerjack: Elevate Your Python Development
@@ -136,7 +137,7 @@ Crackerjack is built on the following core principles:
136
137
  ### Developer Experience
137
138
  - **Command-Line Interface:** Simple, intuitive CLI with comprehensive options
138
139
  - **Programmatic API:** Can be integrated into your own Python scripts and workflows
139
- - **AI Agent Integration:** Structured output format for integration with AI assistants
140
+ - **AI Agent Integration:** Structured output format for integration with AI assistants, with complete style rules available in [RULES.md](RULES.md) for AI tool customization
140
141
  - **Verbose Mode:** Detailed output for debugging and understanding what's happening
141
142
 
142
143
  ## Pre-commit Hooks
@@ -96,7 +96,7 @@ Crackerjack is built on the following core principles:
96
96
  ### Developer Experience
97
97
  - **Command-Line Interface:** Simple, intuitive CLI with comprehensive options
98
98
  - **Programmatic API:** Can be integrated into your own Python scripts and workflows
99
- - **AI Agent Integration:** Structured output format for integration with AI assistants
99
+ - **AI Agent Integration:** Structured output format for integration with AI assistants, with complete style rules available in [RULES.md](RULES.md) for AI tool customization
100
100
  - **Verbose Mode:** Detailed output for debugging and understanding what's happening
101
101
 
102
102
  ## Pre-commit Hooks
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/pdm-project/pdm
3
- rev: 2.24.1 # a PDM release exposing the hook
3
+ rev: 2.24.2 # a PDM release exposing the hook
4
4
  hooks:
5
5
  - id: pdm-lock-check
6
6
  # - id: pdm-export
@@ -23,7 +23,7 @@ repos:
23
23
  - id: check-added-large-files
24
24
  name: check-added-large-files
25
25
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: v0.11.11
26
+ rev: v0.11.12
27
27
  hooks:
28
28
  - id: ruff-format
29
29
  - id: ruff-check
@@ -75,7 +75,7 @@ repos:
75
75
  hooks:
76
76
  - id: pyright
77
77
  - repo: https://github.com/astral-sh/ruff-pre-commit
78
- rev: v0.11.11
78
+ rev: v0.11.12
79
79
  hooks:
80
80
  - id: ruff-check
81
81
  - id: ruff-format
@@ -1,5 +1,5 @@
1
1
  [tool.pytest.ini_options]
2
- addopts = "--cov=crackerjack --cov-report=term"
2
+ addopts = "--cov=crackerjack --cov-report=term --timeout=120 --timeout-method=thread -n auto"
3
3
  asyncio_default_fixture_loop_scope = "function"
4
4
  python_files = ["test_*.py", "*_test.py"]
5
5
  asyncio_mode = "auto"
@@ -99,6 +99,7 @@ exclude-deps = [
99
99
  "pytest-asyncio",
100
100
  "pytest-cov",
101
101
  "pytest-mock",
102
+ "pytest-xdist",
102
103
  "pdm",
103
104
  "pyfiglet",
104
105
  "pyyaml",
@@ -154,7 +155,7 @@ pythonPlatform = "Darwin"
154
155
 
155
156
  [project]
156
157
  name = "crackerjack"
157
- version = "0.18.6"
158
+ version = "0.18.8"
158
159
  description = "Default template for PDM package"
159
160
  requires-python = ">=3.13"
160
161
  readme = "README.md"
@@ -188,15 +189,16 @@ dependencies = [
188
189
  "pytest>=8.3.5",
189
190
  "pydantic>=2.11.5",
190
191
  "pdm-bump>=0.9.12",
191
- "pdm>=2.24.1",
192
- "uv>=0.7.7",
192
+ "pdm>=2.24.2",
193
+ "uv>=0.7.9",
193
194
  "pytest-cov>=6.1.1",
194
- "pytest-mock>=3.14.0",
195
+ "pytest-mock>=3.14.1",
195
196
  "tomli-w>=1.2.0",
196
- "pytest-asyncio>=0.26.0",
197
+ "pytest-asyncio>=1.0.0",
197
198
  "rich>=14.0.0",
198
- "typer>=0.15.4",
199
+ "typer>=0.16.0",
199
200
  "pytest-timeout>=2.4.0",
201
+ "pytest-xdist>=3.7.0",
200
202
  ]
201
203
  authors = [
202
204
  { name = "lesleslie", email = "les@wedgwoodwebworks.com" },
@@ -1,5 +1,5 @@
1
1
  [tool.pytest.ini_options]
2
- addopts = "--cov=crackerjack --cov-report=term"
2
+ addopts = "--cov=crackerjack --cov-report=term --timeout=120 --timeout-method=thread -n auto"
3
3
  asyncio_default_fixture_loop_scope = "function"
4
4
  python_files = [
5
5
  "test_*.py",
@@ -120,6 +120,7 @@ exclude-deps = [
120
120
  "pytest-asyncio",
121
121
  "pytest-cov",
122
122
  "pytest-mock",
123
+ "pytest-xdist",
123
124
  "pdm",
124
125
  "pyfiglet",
125
126
  "pyyaml",
@@ -175,7 +176,7 @@ pythonPlatform = "Darwin"
175
176
 
176
177
  [project]
177
178
  name = "crackerjack"
178
- version = "0.18.7"
179
+ version = "0.18.9"
179
180
  description = "Default template for PDM package"
180
181
  requires-python = ">=3.13"
181
182
  readme = "README.md"
@@ -209,15 +210,16 @@ dependencies = [
209
210
  "pytest>=8.3.5",
210
211
  "pydantic>=2.11.5",
211
212
  "pdm-bump>=0.9.12",
212
- "pdm>=2.24.1",
213
- "uv>=0.7.7",
213
+ "pdm>=2.24.2",
214
+ "uv>=0.7.9",
214
215
  "pytest-cov>=6.1.1",
215
- "pytest-mock>=3.14.0",
216
+ "pytest-mock>=3.14.1",
216
217
  "tomli-w>=1.2.0",
217
- "pytest-asyncio>=0.26.0",
218
+ "pytest-asyncio>=1.0.0",
218
219
  "rich>=14.0.0",
219
- "typer>=0.15.4",
220
+ "typer>=0.16.0",
220
221
  "pytest-timeout>=2.4.0",
222
+ "pytest-xdist>=3.7.0",
221
223
  ]
222
224
  authors = [
223
225
  { name = "lesleslie", email = "les@wedgwoodwebworks.com" },
@@ -0,0 +1,28 @@
1
+ """Pytest configuration file with hooks for detecting slow and hanging tests."""
2
+
3
+ import time
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+ import pytest
8
+
9
+
10
+ @pytest.hookimpl(trylast=True)
11
+ def pytest_runtest_setup(item: Any) -> None:
12
+ item._start_time = time.time()
13
+ print(f"Starting test: {item.name}")
14
+
15
+
16
+ @pytest.hookimpl(trylast=True)
17
+ def pytest_runtest_teardown(item: Any) -> None:
18
+ if hasattr(item, "_start_time"):
19
+ duration = time.time() - item._start_time
20
+ if duration > 10:
21
+ print(f"SLOW TEST: {item.name} took {duration:.2f}s")
22
+ else:
23
+ print(f"Test completed: {item.name} in {duration:.2f}s")
24
+
25
+
26
+ @pytest.hookimpl(trylast=True)
27
+ def pytest_runtest_protocol(item: Any) -> None:
28
+ Path(".current_test").write_text(f"Current test: {item.name}")
@@ -0,0 +1,41 @@
1
+ """Tests for pytest timeout and parallel execution features."""
2
+
3
+ import time
4
+
5
+ import pytest
6
+
7
+
8
+ def test_normal_execution() -> None:
9
+ assert True
10
+
11
+
12
+ @pytest.mark.timeout(2)
13
+ def test_timeout_feature() -> None:
14
+ time.sleep(1)
15
+ assert True
16
+
17
+
18
+ @pytest.mark.xdist_group("group1")
19
+ def test_xdist_group1() -> None:
20
+ assert True
21
+
22
+
23
+ @pytest.mark.xdist_group("group1")
24
+ def test_xdist_group1_second() -> None:
25
+ assert True
26
+
27
+
28
+ @pytest.mark.xdist_group("group2")
29
+ def test_xdist_group2() -> None:
30
+ assert True
31
+
32
+
33
+ def test_slow_but_not_hanging() -> None:
34
+ time.sleep(12)
35
+ assert True
36
+
37
+
38
+ @pytest.mark.skip(reason="This test intentionally hangs to test timeout feature")
39
+ def test_hanging() -> None:
40
+ while True:
41
+ time.sleep(1)
File without changes