crackerjack 0.26.0__py3-none-any.whl → 0.27.1__py3-none-any.whl
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.
Potentially problematic release.
This version of crackerjack might be problematic. Click here for more details.
- crackerjack/.gitignore +11 -0
- crackerjack/.pre-commit-config-ai.yaml +54 -34
- crackerjack/.pre-commit-config.yaml +11 -4
- crackerjack/__main__.py +25 -3
- crackerjack/crackerjack.py +1523 -46
- crackerjack/interactive.py +1 -1
- crackerjack/py313.py +2 -2
- crackerjack/pyproject.toml +52 -32
- {crackerjack-0.26.0.dist-info → crackerjack-0.27.1.dist-info}/METADATA +2 -1
- crackerjack-0.27.1.dist-info/RECORD +16 -0
- crackerjack-0.26.0.dist-info/RECORD +0 -16
- {crackerjack-0.26.0.dist-info → crackerjack-0.27.1.dist-info}/WHEEL +0 -0
- {crackerjack-0.26.0.dist-info → crackerjack-0.27.1.dist-info}/licenses/LICENSE +0 -0
crackerjack/interactive.py
CHANGED
|
@@ -85,7 +85,7 @@ class WorkflowManager:
|
|
|
85
85
|
def add_task(
|
|
86
86
|
self, name: str, description: str, dependencies: list[str] | None = None
|
|
87
87
|
) -> Task:
|
|
88
|
-
dep_tasks = []
|
|
88
|
+
dep_tasks: list[Task] = []
|
|
89
89
|
if dependencies:
|
|
90
90
|
for dep_name in dependencies:
|
|
91
91
|
if dep_name not in self.tasks:
|
crackerjack/py313.py
CHANGED
|
@@ -109,7 +109,7 @@ def process_hook_results[T, R](
|
|
|
109
109
|
success_handler: typing.Callable[[T], R],
|
|
110
110
|
failure_handler: typing.Callable[[T], R],
|
|
111
111
|
) -> list[R]:
|
|
112
|
-
processed_results = []
|
|
112
|
+
processed_results: list[R] = []
|
|
113
113
|
for result in results:
|
|
114
114
|
if isinstance(result, dict) and result.get("status") == HookStatus.SUCCESS:
|
|
115
115
|
processed_results.append(success_handler(result))
|
|
@@ -156,7 +156,7 @@ class EnhancedCommandRunner:
|
|
|
156
156
|
|
|
157
157
|
def clean_python_code(code: str) -> str:
|
|
158
158
|
lines = code.splitlines()
|
|
159
|
-
cleaned_lines = []
|
|
159
|
+
cleaned_lines: list[str] = []
|
|
160
160
|
for line in lines:
|
|
161
161
|
match line.strip():
|
|
162
162
|
case "":
|
crackerjack/pyproject.toml
CHANGED
|
@@ -4,7 +4,7 @@ requires = [ "hatchling" ]
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "crackerjack"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.27.0"
|
|
8
8
|
description = "Crackerjack: code quality toolkit"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
keywords = [
|
|
@@ -41,6 +41,7 @@ classifiers = [
|
|
|
41
41
|
"Typing :: Typed",
|
|
42
42
|
]
|
|
43
43
|
dependencies = [
|
|
44
|
+
"aiofiles>=24.1",
|
|
44
45
|
"autotyping>=24.9",
|
|
45
46
|
"hatchling>=1.25",
|
|
46
47
|
"keyring>=25.6",
|
|
@@ -80,23 +81,13 @@ output-format = "full"
|
|
|
80
81
|
format.docstring-code-format = true
|
|
81
82
|
lint.extend-select = [
|
|
82
83
|
"C901",
|
|
83
|
-
"D",
|
|
84
84
|
"F", # pyflakes
|
|
85
85
|
"I",
|
|
86
86
|
"UP", # pyupgrade (includes F-string conversion)
|
|
87
87
|
]
|
|
88
88
|
lint.ignore = [
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"D102",
|
|
92
|
-
"D103",
|
|
93
|
-
"D104",
|
|
94
|
-
"D105",
|
|
95
|
-
"D106",
|
|
96
|
-
"D107",
|
|
97
|
-
"E402",
|
|
98
|
-
"F821",
|
|
99
|
-
"UP040",
|
|
89
|
+
"E402", # Module level import not at top - sometimes necessary
|
|
90
|
+
"F821", # Undefined name - can be resolved with proper imports
|
|
100
91
|
]
|
|
101
92
|
lint.fixable = [ "ALL" ]
|
|
102
93
|
lint.unfixable = [ ]
|
|
@@ -104,7 +95,6 @@ lint.isort.no-lines-before = [
|
|
|
104
95
|
"first-party",
|
|
105
96
|
]
|
|
106
97
|
lint.mccabe.max-complexity = 13
|
|
107
|
-
lint.pydocstyle.convention = "google"
|
|
108
98
|
|
|
109
99
|
[tool.codespell]
|
|
110
100
|
skip = "*/data/*"
|
|
@@ -185,24 +175,32 @@ ignore_errors = false
|
|
|
185
175
|
verboseOutput = true
|
|
186
176
|
include = [
|
|
187
177
|
"crackerjack",
|
|
178
|
+
"tests",
|
|
188
179
|
]
|
|
189
180
|
exclude = [
|
|
190
181
|
"scratch",
|
|
182
|
+
".venv",
|
|
183
|
+
"build",
|
|
184
|
+
"dist",
|
|
191
185
|
]
|
|
192
186
|
extraPaths = [
|
|
193
187
|
".venv/lib/python3.13/site-packages/",
|
|
194
188
|
]
|
|
195
189
|
typeCheckingMode = "strict"
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
190
|
+
# Enhanced strictness - only disable what's absolutely necessary
|
|
191
|
+
reportMissingTypeStubs = false # Third-party libraries often lack stubs
|
|
192
|
+
reportOptionalMemberAccess = "warning" # Upgrade from false to warning
|
|
193
|
+
reportOptionalCall = "warning" # Upgrade from false to warning
|
|
194
|
+
reportUnknownMemberType = "warning" # Upgrade from false to warning
|
|
195
|
+
reportUnknownVariableType = false # Too noisy for dynamic code
|
|
196
|
+
reportUnknownArgumentType = "warning" # Upgrade from false to warning
|
|
197
|
+
reportInvalidTypeForm = "warning" # Upgrade from false to warning
|
|
198
|
+
reportUnknownLambdaType = "warning" # Upgrade from false to warning
|
|
204
199
|
reportUnknownParameterType = "warning"
|
|
205
|
-
reportPrivateUsage = false
|
|
200
|
+
reportPrivateUsage = "warning" # Upgrade from false to warning
|
|
201
|
+
reportUnnecessaryTypeIgnoreComment = "warning" # New - catch unused ignores
|
|
202
|
+
reportUnnecessaryComparison = "warning" # New - catch unnecessary comparisons
|
|
203
|
+
reportConstantRedefinition = "warning" # New - catch constant redefinitions
|
|
206
204
|
pythonVersion = "3.13"
|
|
207
205
|
|
|
208
206
|
[tool.uv]
|
|
@@ -245,19 +243,41 @@ exclude-deps = [
|
|
|
245
243
|
[tool.refurb]
|
|
246
244
|
enable_all = true
|
|
247
245
|
quiet = true
|
|
246
|
+
# Enable Python 3.13+ specific modernizations
|
|
247
|
+
python_version = "3.13"
|
|
248
248
|
|
|
249
249
|
[tool.bandit]
|
|
250
250
|
target = [
|
|
251
251
|
"crackerjack",
|
|
252
|
+
"tests", # Include tests for security analysis
|
|
252
253
|
]
|
|
254
|
+
# Minimal skips - only skip what's absolutely necessary for this codebase
|
|
253
255
|
skips = [
|
|
254
|
-
"B101",
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"B403",
|
|
258
|
-
"B404",
|
|
259
|
-
"B602",
|
|
260
|
-
"B603",
|
|
261
|
-
"B607",
|
|
262
|
-
"B704",
|
|
256
|
+
"B101", # assert_used - tests legitimately use assert
|
|
257
|
+
"B603", # subprocess_without_shell_equals_true - we use shell=False safely
|
|
258
|
+
"B607", # start_process_with_partial_path - controlled subprocess calls
|
|
263
259
|
]
|
|
260
|
+
# Enhanced security scanning
|
|
261
|
+
exclude_dirs = [
|
|
262
|
+
"tests/data", # Test data might contain examples
|
|
263
|
+
]
|
|
264
|
+
|
|
265
|
+
# Autotyping optimization
|
|
266
|
+
|
|
267
|
+
[tool.autotyping]
|
|
268
|
+
exclude = [
|
|
269
|
+
"tests/data/*",
|
|
270
|
+
"*/conftest.py",
|
|
271
|
+
]
|
|
272
|
+
safe = true
|
|
273
|
+
aggressive = true
|
|
274
|
+
|
|
275
|
+
# Code complexity monitoring
|
|
276
|
+
|
|
277
|
+
[tool.complexipy]
|
|
278
|
+
default_pattern = "**/*.py"
|
|
279
|
+
exclude_patterns = [
|
|
280
|
+
"**/tests/**",
|
|
281
|
+
"**/test_*.py",
|
|
282
|
+
]
|
|
283
|
+
max_complexity = 13
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.1
|
|
4
4
|
Summary: Crackerjack: code quality toolkit
|
|
5
5
|
Project-URL: documentation, https://github.com/lesleslie/crackerjack
|
|
6
6
|
Project-URL: homepage, https://github.com/lesleslie/crackerjack
|
|
@@ -23,6 +23,7 @@ Classifier: Topic :: Software Development :: Testing
|
|
|
23
23
|
Classifier: Topic :: Utilities
|
|
24
24
|
Classifier: Typing :: Typed
|
|
25
25
|
Requires-Python: >=3.13
|
|
26
|
+
Requires-Dist: aiofiles>=24.1
|
|
26
27
|
Requires-Dist: autotyping>=24.9
|
|
27
28
|
Requires-Dist: hatchling>=1.25
|
|
28
29
|
Requires-Dist: keyring>=25.6
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
crackerjack/.gitignore,sha256=_d0WeGfNZQeCgzJXmjL9LKf-6jjytBulH-ZfWiIOZWI,453
|
|
2
|
+
crackerjack/.libcst.codemod.yaml,sha256=a8DlErRAIPV1nE6QlyXPAzTOgkB24_spl2E9hphuf5s,772
|
|
3
|
+
crackerjack/.pdm.toml,sha256=dZe44HRcuxxCFESGG8SZIjmc-cGzSoyK3Hs6t4NYA8w,23
|
|
4
|
+
crackerjack/.pre-commit-config-ai.yaml,sha256=-8WIT-6l6crGnQBlX-z3G6-3mKUsBWsURRyeti1ySmI,4267
|
|
5
|
+
crackerjack/.pre-commit-config.yaml,sha256=UgPPAC7O_npBLGJkC_v_2YQUSEIOgsBOXzZjyW2hNvs,2987
|
|
6
|
+
crackerjack/__init__.py,sha256=8tBSPAru_YDuPpjz05cL7pNbZjYFoRT_agGd_FWa3gY,839
|
|
7
|
+
crackerjack/__main__.py,sha256=p7S0GftrU9BHtyqT8q931UtEBoz3n8vPcT1R0OJnS1A,7073
|
|
8
|
+
crackerjack/crackerjack.py,sha256=R_fL_XItW_NNxEH3tj9buAmAPJ1CsdFNZd4KD7LJsS4,108843
|
|
9
|
+
crackerjack/errors.py,sha256=Wcv0rXfzV9pHOoXYrhQEjyJd4kUUBbdiY-5M9nI8pDw,4050
|
|
10
|
+
crackerjack/interactive.py,sha256=jnf3klyYFvuQ3u_iVVPshPW1LISfU1VXTOiczTWLxys,16138
|
|
11
|
+
crackerjack/py313.py,sha256=LCWcFNhF6QvPksobyUtxbnmlKosM03xDMb55yTlz6Ow,5910
|
|
12
|
+
crackerjack/pyproject.toml,sha256=0DKrCSAADU23POMqkig80AJKzxnZXleZbLZ2EiTzPHg,6870
|
|
13
|
+
crackerjack-0.27.1.dist-info/METADATA,sha256=29r5DGft8pRQP0QauVaNlbwhKxDYdHiFJnO6IpgL2Vw,28788
|
|
14
|
+
crackerjack-0.27.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
15
|
+
crackerjack-0.27.1.dist-info/licenses/LICENSE,sha256=fDt371P6_6sCu7RyqiZH_AhT1LdN3sN1zjBtqEhDYCk,1531
|
|
16
|
+
crackerjack-0.27.1.dist-info/RECORD,,
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
crackerjack/.gitignore,sha256=n8cD6U16L3XZn__PvhYm_F7-YeFHFucHCyxWj2NZCGs,259
|
|
2
|
-
crackerjack/.libcst.codemod.yaml,sha256=a8DlErRAIPV1nE6QlyXPAzTOgkB24_spl2E9hphuf5s,772
|
|
3
|
-
crackerjack/.pdm.toml,sha256=dZe44HRcuxxCFESGG8SZIjmc-cGzSoyK3Hs6t4NYA8w,23
|
|
4
|
-
crackerjack/.pre-commit-config-ai.yaml,sha256=0TDQp0HIiRiy5q09H0ytJk3M6l3rLOdJNWHgkHIRCGA,3274
|
|
5
|
-
crackerjack/.pre-commit-config.yaml,sha256=gXFolNsl6aBeyAefmJ6igmwaNtUHjyfziocBDiulRwU,2642
|
|
6
|
-
crackerjack/__init__.py,sha256=8tBSPAru_YDuPpjz05cL7pNbZjYFoRT_agGd_FWa3gY,839
|
|
7
|
-
crackerjack/__main__.py,sha256=-h6Au8CGHS9QdzzbDMGzKHAlNEx7cYmzCrV4g4vV19k,6407
|
|
8
|
-
crackerjack/crackerjack.py,sha256=iYzhBdEvhCdyrqv-t0jQ862JNn3rwV15P2beaOzu3zs,49463
|
|
9
|
-
crackerjack/errors.py,sha256=Wcv0rXfzV9pHOoXYrhQEjyJd4kUUBbdiY-5M9nI8pDw,4050
|
|
10
|
-
crackerjack/interactive.py,sha256=pFItgRUyjOakABLCRz6nIp6_Ycx2LBSeojpYNiTelv0,16126
|
|
11
|
-
crackerjack/py313.py,sha256=buYE7LO11Q64ffowEhTZRFQoAGj_8sg3DTlZuv8M9eo,5890
|
|
12
|
-
crackerjack/pyproject.toml,sha256=twaeui2pJCQnpe92JN1ACxUEHJrGb4T6F6m2Jazc4JI,5401
|
|
13
|
-
crackerjack-0.26.0.dist-info/METADATA,sha256=m2Xb72Fq2Py8_QE_Lu61MccpxVMYZtspu75sZ4M7l00,28758
|
|
14
|
-
crackerjack-0.26.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
15
|
-
crackerjack-0.26.0.dist-info/licenses/LICENSE,sha256=fDt371P6_6sCu7RyqiZH_AhT1LdN3sN1zjBtqEhDYCk,1531
|
|
16
|
-
crackerjack-0.26.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|