53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""CLI wrapper for functional benefic/malefic classification."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from typing import Any
|
|
|
|
from functional_benefics import PLANETS, derive_functional_benefic_malefic
|
|
|
|
|
|
def _render_text(report: dict[str, Any]) -> str:
|
|
lines = [
|
|
"=== Oracle stdout ===",
|
|
f"Ascendant: {report.get('ascendant')}",
|
|
"--------------------------------------------------",
|
|
]
|
|
owned_houses = report.get("owned_houses", {})
|
|
benefics = set(report.get("functional_benefics", []))
|
|
malefics = set(report.get("functional_malefics", []))
|
|
yogakarakas = set(report.get("yogakarakas", []))
|
|
for planet in PLANETS:
|
|
owned = owned_houses.get(planet, [])
|
|
houses = " & ".join(map(str, owned)) if owned else "-"
|
|
if planet in yogakarakas:
|
|
lines.append(f"{planet}: Yogakaraka (Lord of {houses}) -> Highly Auspicious")
|
|
elif planet in benefics:
|
|
lines.append(f"{planet}: Functional Benefic (Lord of {houses}) -> Auspicious")
|
|
elif planet in malefics:
|
|
lines.append(f"{planet}: Functional Malefic (Lord of {houses}) -> Destructive / Obstacle")
|
|
else:
|
|
lines.append(f"{planet}: Neutral / Mixed (Lord of {houses}) -> Depends on placement")
|
|
return "\n".join(lines)
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Oracle CLI: Functional Benefic/Malefic Determiner")
|
|
parser.add_argument("--ascendant", required=True, type=str, help="The ascendant sign, e.g. Leo")
|
|
parser.add_argument("--format", choices=["text", "json"], default="text")
|
|
args = parser.parse_args()
|
|
|
|
report = derive_functional_benefic_malefic(args.ascendant)
|
|
if args.format == "json":
|
|
print(json.dumps(report, ensure_ascii=False, indent=2))
|
|
else:
|
|
print(_render_text(report))
|
|
return 0 if report.get("status") == "used" else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|