python-harness 0.0.2__tar.gz → 0.0.5__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.
- {python_harness-0.0.2/python_harness.egg-info → python_harness-0.0.5}/PKG-INFO +1 -1
- {python_harness-0.0.2 → python_harness-0.0.5}/pyproject.toml +1 -1
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness/cli.py +21 -3
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness/hard_evaluator.py +16 -2
- {python_harness-0.0.2 → python_harness-0.0.5/python_harness.egg-info}/PKG-INFO +1 -1
- {python_harness-0.0.2 → python_harness-0.0.5}/LICENSE +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/README.md +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness/__init__.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness/evaluator.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness/qc_evaluator.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness/soft_evaluator.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness.egg-info/SOURCES.txt +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness.egg-info/dependency_links.txt +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness.egg-info/entry_points.txt +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness.egg-info/requires.txt +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/python_harness.egg-info/top_level.txt +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/setup.cfg +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/tests/test_cli.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/tests/test_evaluator.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/tests/test_hard_evaluator.py +0 -0
- {python_harness-0.0.2 → python_harness-0.0.5}/tests/test_soft_evaluator.py +0 -0
|
@@ -94,13 +94,31 @@ def measure(path: str = typer.Argument(".", help="The path to evaluate")) -> Non
|
|
|
94
94
|
if not hard_results["all_passed"]:
|
|
95
95
|
console.print("[bold red]Hard Evaluation Failed! Exiting.[/bold red]")
|
|
96
96
|
if hard_results["ruff"]["status"] != "success":
|
|
97
|
-
console.print("[red]Ruff issues found
|
|
97
|
+
console.print("[red]Ruff issues found:[/red]")
|
|
98
|
+
# Assuming ruff output is JSON as configured in HardEvaluator
|
|
99
|
+
for issue in hard_results["ruff"].get("issues", []):
|
|
100
|
+
file = issue.get("filename", "unknown")
|
|
101
|
+
line = issue.get("location", {}).get("row", "?")
|
|
102
|
+
msg = issue.get("message", "unknown issue")
|
|
103
|
+
console.print(f" - {file}:{line} {msg}")
|
|
98
104
|
if hard_results["mypy"]["status"] != "success":
|
|
99
105
|
output = hard_results["mypy"].get("output", "")
|
|
100
106
|
console.print(f"[red]Mypy issues found:[/red]\n{output}")
|
|
101
|
-
if hard_results["ty"]["status"]
|
|
107
|
+
if hard_results["ty"]["status"] not in ("success", "warning"):
|
|
102
108
|
output = hard_results["ty"].get("output", "")
|
|
103
|
-
|
|
109
|
+
# ty might print to stderr instead of stdout, or it might be missing
|
|
110
|
+
error_msg = hard_results["ty"].get("error_message", "")
|
|
111
|
+
if output:
|
|
112
|
+
console.print(f"[red]Ty issues found:[/red]\n{output}")
|
|
113
|
+
elif error_msg:
|
|
114
|
+
console.print(f"[red]Ty error:[/red]\n{error_msg}")
|
|
115
|
+
else:
|
|
116
|
+
console.print(
|
|
117
|
+
"[red]Ty failed, but no standard output was captured.[/red]"
|
|
118
|
+
)
|
|
119
|
+
elif hard_results["ty"]["status"] == "warning":
|
|
120
|
+
msg = hard_results["ty"].get("error_message", "ty not found")
|
|
121
|
+
console.print(f"[yellow]Ty warning:[/yellow] {msg}")
|
|
104
122
|
if hard_results["radon_cc"]["status"] != "success":
|
|
105
123
|
issues = hard_results["radon_cc"].get("issues", [])
|
|
106
124
|
console.print(
|
|
@@ -63,6 +63,7 @@ class HardEvaluator:
|
|
|
63
63
|
def run_ty(self) -> dict[str, Any]:
|
|
64
64
|
"""
|
|
65
65
|
Run ty language server checks.
|
|
66
|
+
If ty is not installed, fail gracefully rather than crashing.
|
|
66
67
|
"""
|
|
67
68
|
try:
|
|
68
69
|
result = subprocess.run(
|
|
@@ -72,12 +73,25 @@ class HardEvaluator:
|
|
|
72
73
|
check=False
|
|
73
74
|
)
|
|
74
75
|
status = "success" if result.returncode == 0 else "failed"
|
|
76
|
+
# ty might print to stderr
|
|
77
|
+
output = result.stdout if result.stdout else result.stderr
|
|
75
78
|
return {
|
|
76
79
|
"status": status,
|
|
77
|
-
"output":
|
|
80
|
+
"output": output,
|
|
78
81
|
"return_code": result.returncode,
|
|
79
82
|
}
|
|
83
|
+
except FileNotFoundError:
|
|
84
|
+
return {
|
|
85
|
+
"status": "warning",
|
|
86
|
+
"error_message": "ty executable not found. Skipping ty checks."
|
|
87
|
+
}
|
|
80
88
|
except Exception as e:
|
|
89
|
+
# Handle cases where ty is found but fails to run or throws other OS errors
|
|
90
|
+
if "No such file or directory: 'ty'" in str(e):
|
|
91
|
+
return {
|
|
92
|
+
"status": "warning",
|
|
93
|
+
"error_message": "ty executable not found. Skipping ty checks."
|
|
94
|
+
}
|
|
81
95
|
return {"status": "error", "error_message": str(e)}
|
|
82
96
|
|
|
83
97
|
def run_radon_cc(self) -> dict[str, Any]:
|
|
@@ -186,7 +200,7 @@ class HardEvaluator:
|
|
|
186
200
|
all_passed = (
|
|
187
201
|
ruff_res.get("status") == "success" and
|
|
188
202
|
mypy_res.get("status") == "success" and
|
|
189
|
-
ty_res.get("status")
|
|
203
|
+
ty_res.get("status") in ("success", "warning") and
|
|
190
204
|
radon_cc_res.get("status") == "success"
|
|
191
205
|
)
|
|
192
206
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|