121 lines
3.6 KiB
Python
121 lines
3.6 KiB
Python
"""Generate importable workspace hygiene policy cases."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SRC = ROOT / "src"
|
|
OUTPUT = SRC / "mais_humana" / "generated_workspace_hygiene_policy.py"
|
|
|
|
|
|
def ensure_import_path() -> None:
|
|
import sys
|
|
|
|
src = str(SRC)
|
|
if src not in sys.path:
|
|
sys.path.insert(0, src)
|
|
|
|
|
|
def q(value: object) -> str:
|
|
return repr(str(value))
|
|
|
|
|
|
def bool_literal(value: bool) -> str:
|
|
return "True" if value else "False"
|
|
|
|
|
|
def tuple_enum(values: object) -> str:
|
|
items = list(values)
|
|
if not items:
|
|
return "()"
|
|
lines = ["("]
|
|
for item in items:
|
|
lines.append(f" HygieneRemediationAction.{getattr(item, 'name')},")
|
|
lines.append(" )")
|
|
return "\n".join(lines)
|
|
|
|
|
|
def tuple_str(values: object) -> str:
|
|
items = [str(value) for value in values]
|
|
if not items:
|
|
return "()"
|
|
lines = ["("]
|
|
for item in items:
|
|
lines.append(f" {q(item)},")
|
|
lines.append(" )")
|
|
return "\n".join(lines)
|
|
|
|
|
|
def case_block(case: object) -> str:
|
|
return "\n".join(
|
|
[
|
|
" HygienePolicyCase(",
|
|
f" case_id={q(getattr(case, 'case_id'))},",
|
|
f" artifact_kind=HygieneArtifactKind.{getattr(case, 'artifact_kind').name},",
|
|
f" relative_path={q(getattr(case, 'relative_path'))},",
|
|
f" environment=HygieneEnvironment.{getattr(case, 'environment').name},",
|
|
f" execution_mode=HygieneExecutionMode.{getattr(case, 'execution_mode').name},",
|
|
f" error_kind=HygieneErrorKind.{getattr(case, 'error_kind').name},",
|
|
f" status=HygienePolicyStatus.{getattr(case, 'status').name},",
|
|
" remediation_actions=" + tuple_enum(getattr(case, "remediation_actions")) + ",",
|
|
" required_evidence=" + tuple_str(getattr(case, "required_evidence")) + ",",
|
|
f" mcp_transit_required={bool_literal(getattr(case, 'mcp_transit_required'))},",
|
|
f" direct_delete_allowed={bool_literal(getattr(case, 'direct_delete_allowed'))},",
|
|
f" reason={q(getattr(case, 'reason'))},",
|
|
f" next_action={q(getattr(case, 'next_action'))},",
|
|
" ),",
|
|
]
|
|
)
|
|
|
|
|
|
def main() -> int:
|
|
ensure_import_path()
|
|
from mais_humana.workspace_hygiene_policy import build_policy_cases
|
|
|
|
cases = build_policy_cases()
|
|
lines = [
|
|
'"""Generated workspace hygiene policy cases.',
|
|
"",
|
|
"Do not edit this file by hand. Regenerate with:",
|
|
"",
|
|
" python tools/generate_workspace_hygiene_policy.py",
|
|
'"""',
|
|
"",
|
|
"from __future__ import annotations",
|
|
"",
|
|
"from .workspace_hygiene_policy import (",
|
|
" HygieneArtifactKind,",
|
|
" HygieneEnvironment,",
|
|
" HygieneErrorKind,",
|
|
" HygieneExecutionMode,",
|
|
" HygienePolicyCase,",
|
|
" HygienePolicyStatus,",
|
|
" HygieneRemediationAction,",
|
|
")",
|
|
"",
|
|
f"GENERATED_POLICY_CASES_COUNT = {len(cases)}",
|
|
"",
|
|
"POLICY_CASES = (",
|
|
]
|
|
lines.extend(case_block(case) for case in cases)
|
|
lines.extend(
|
|
[
|
|
")",
|
|
"",
|
|
"",
|
|
"def iter_policy_cases():",
|
|
" return POLICY_CASES",
|
|
"",
|
|
]
|
|
)
|
|
OUTPUT.write_text("\n".join(lines), encoding="utf-8")
|
|
print(f"generated {OUTPUT} cases={len(cases)}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|
|
|