92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
"""Validate drawing quality — run after creating/editing a drawing.
|
|
|
|
Usage: python scripts/validate_drawing.py [drawing_path]
|
|
|
|
This script checks for common drawing issues:
|
|
- Empty layers (layers with no entities)
|
|
- Entities on layer "0" (should use named layers)
|
|
- Entity count summary
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
|
|
|
|
def validate_stats(stats: dict) -> list[str]:
|
|
"""Validate entity statistics. Pass the result of analysis_entity_stats()."""
|
|
issues = []
|
|
|
|
if stats.get("total", 0) == 0:
|
|
issues.append("WARNING: Drawing has no entities")
|
|
|
|
by_layer = stats.get("by_layer", {})
|
|
if "0" in by_layer and by_layer["0"] > 0:
|
|
issues.append(
|
|
f"INFO: {by_layer['0']} entities on default layer '0' "
|
|
"(consider moving to named layers)"
|
|
)
|
|
|
|
return issues
|
|
|
|
|
|
def validate_layers(layers: list[dict]) -> list[str]:
|
|
"""Validate layer configuration. Pass the result of layer_list()."""
|
|
issues = []
|
|
|
|
for layer in layers:
|
|
name = layer.get("name", "")
|
|
if name == "0":
|
|
continue
|
|
if layer.get("color", 7) == 7 and name != "0":
|
|
issues.append(
|
|
f"INFO: Layer '{name}' uses default color (white/7). "
|
|
"Consider assigning a distinct color."
|
|
)
|
|
|
|
return issues
|
|
|
|
|
|
def main():
|
|
print("Drawing Validation Tool")
|
|
print("=" * 40)
|
|
print()
|
|
print("This tool validates output from MCP analysis tools.")
|
|
print("Pipe JSON from analysis_entity_stats() or layer_list().")
|
|
print()
|
|
print("Usage with MCP:")
|
|
print(" 1. Call analysis_entity_stats() → copy JSON output")
|
|
print(" 2. Call layer_list() → copy JSON output")
|
|
print(" 3. Review results for issues")
|
|
print()
|
|
print("Checks performed:")
|
|
print(" - Empty drawing detection")
|
|
print(" - Entities on default layer '0'")
|
|
print(" - Layers with default color")
|
|
print()
|
|
|
|
if not sys.stdin.isatty():
|
|
try:
|
|
data = json.load(sys.stdin)
|
|
if "total" in data:
|
|
issues = validate_stats(data)
|
|
elif isinstance(data, list):
|
|
issues = validate_layers(data)
|
|
else:
|
|
issues = ["ERROR: Unrecognized input format"]
|
|
|
|
if issues:
|
|
for issue in issues:
|
|
print(f" {issue}")
|
|
else:
|
|
print(" OK — No issues found")
|
|
except json.JSONDecodeError:
|
|
print(" ERROR: Invalid JSON input")
|
|
else:
|
|
print("No stdin input. Run interactively or pipe JSON data.")
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|