kundali-chart-mcp 0.2.1
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.
- package/README.md +67 -0
- package/azure-function/function_app.py +93 -0
- package/azure-function/host.json +15 -0
- package/azure-function/kundali_bridge.py +952 -0
- package/azure-function/python/kundali_lib/__init__.py +1 -0
- package/azure-function/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/ephemeris.py +30 -0
- package/azure-function/python/kundali_lib/geocoder.py +82 -0
- package/azure-function/python/kundali_lib/vedic/__init__.py +1 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/arishta.py +465 -0
- package/azure-function/python/kundali_lib/vedic/ashtakavarga.py +213 -0
- package/azure-function/python/kundali_lib/vedic/avasthas.py +292 -0
- package/azure-function/python/kundali_lib/vedic/ayanamsa.py +106 -0
- package/azure-function/python/kundali_lib/vedic/bhava_chalit.py +137 -0
- package/azure-function/python/kundali_lib/vedic/char_dasha.py +308 -0
- package/azure-function/python/kundali_lib/vedic/chart.py +126 -0
- package/azure-function/python/kundali_lib/vedic/chart_types.py +338 -0
- package/azure-function/python/kundali_lib/vedic/compatibility.py +705 -0
- package/azure-function/python/kundali_lib/vedic/constants.py +108 -0
- package/azure-function/python/kundali_lib/vedic/dasha_extended.py +262 -0
- package/azure-function/python/kundali_lib/vedic/dasha_systems.py +439 -0
- package/azure-function/python/kundali_lib/vedic/doshas.py +453 -0
- package/azure-function/python/kundali_lib/vedic/gandanta.py +213 -0
- package/azure-function/python/kundali_lib/vedic/gochara.py +277 -0
- package/azure-function/python/kundali_lib/vedic/hora.py +263 -0
- package/azure-function/python/kundali_lib/vedic/houses.py +30 -0
- package/azure-function/python/kundali_lib/vedic/jaimini.py +361 -0
- package/azure-function/python/kundali_lib/vedic/kalachakra.py +226 -0
- package/azure-function/python/kundali_lib/vedic/kartari.py +243 -0
- package/azure-function/python/kundali_lib/vedic/kurmachakra.py +383 -0
- package/azure-function/python/kundali_lib/vedic/lunar_return.py +402 -0
- package/azure-function/python/kundali_lib/vedic/muhurta.py +414 -0
- package/azure-function/python/kundali_lib/vedic/nabhasha.py +349 -0
- package/azure-function/python/kundali_lib/vedic/nakshatra_details.py +945 -0
- package/azure-function/python/kundali_lib/vedic/panchanga.py +297 -0
- package/azure-function/python/kundali_lib/vedic/planets.py +55 -0
- package/azure-function/python/kundali_lib/vedic/shadbala.py +500 -0
- package/azure-function/python/kundali_lib/vedic/special_conditions.py +319 -0
- package/azure-function/python/kundali_lib/vedic/sudarshana.py +232 -0
- package/azure-function/python/kundali_lib/vedic/tajaka.py +482 -0
- package/azure-function/python/kundali_lib/vedic/upagrahas.py +229 -0
- package/azure-function/python/kundali_lib/vedic/varshaphal.py +185 -0
- package/azure-function/python/kundali_lib/vedic/yogas.py +935 -0
- package/azure-function/python/kundali_lib/vedic/zodiac.py +42 -0
- package/azure-function/python/kundali_lib/vedicastro_bridge.py +198 -0
- package/azure-function/requirements.txt +9 -0
- package/index.js +747 -0
- package/kundali-chart-mcp.js +159 -0
- package/kundali_bridge.py +952 -0
- package/package.json +41 -0
- package/python/kundali_lib/__init__.py +1 -0
- package/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
- package/python/kundali_lib/ephemeris.py +30 -0
- package/python/kundali_lib/geocoder.py +82 -0
- package/python/kundali_lib/vedic/__init__.py +1 -0
- package/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/arishta.py +465 -0
- package/python/kundali_lib/vedic/ashtakavarga.py +213 -0
- package/python/kundali_lib/vedic/avasthas.py +292 -0
- package/python/kundali_lib/vedic/ayanamsa.py +106 -0
- package/python/kundali_lib/vedic/bhava_chalit.py +137 -0
- package/python/kundali_lib/vedic/char_dasha.py +308 -0
- package/python/kundali_lib/vedic/chart.py +126 -0
- package/python/kundali_lib/vedic/chart_types.py +338 -0
- package/python/kundali_lib/vedic/compatibility.py +705 -0
- package/python/kundali_lib/vedic/constants.py +108 -0
- package/python/kundali_lib/vedic/dasha_extended.py +262 -0
- package/python/kundali_lib/vedic/dasha_systems.py +439 -0
- package/python/kundali_lib/vedic/doshas.py +453 -0
- package/python/kundali_lib/vedic/gandanta.py +213 -0
- package/python/kundali_lib/vedic/gochara.py +277 -0
- package/python/kundali_lib/vedic/hora.py +263 -0
- package/python/kundali_lib/vedic/houses.py +30 -0
- package/python/kundali_lib/vedic/jaimini.py +361 -0
- package/python/kundali_lib/vedic/kalachakra.py +226 -0
- package/python/kundali_lib/vedic/kartari.py +243 -0
- package/python/kundali_lib/vedic/kurmachakra.py +383 -0
- package/python/kundali_lib/vedic/lunar_return.py +402 -0
- package/python/kundali_lib/vedic/muhurta.py +414 -0
- package/python/kundali_lib/vedic/nabhasha.py +349 -0
- package/python/kundali_lib/vedic/nakshatra_details.py +945 -0
- package/python/kundali_lib/vedic/panchanga.py +297 -0
- package/python/kundali_lib/vedic/planets.py +55 -0
- package/python/kundali_lib/vedic/shadbala.py +500 -0
- package/python/kundali_lib/vedic/special_conditions.py +319 -0
- package/python/kundali_lib/vedic/sudarshana.py +232 -0
- package/python/kundali_lib/vedic/tajaka.py +482 -0
- package/python/kundali_lib/vedic/upagrahas.py +229 -0
- package/python/kundali_lib/vedic/varshaphal.py +185 -0
- package/python/kundali_lib/vedic/yogas.py +935 -0
- package/python/kundali_lib/vedic/zodiac.py +42 -0
- package/python/kundali_lib/vedicastro_bridge.py +198 -0
- package/remote-server.js +590 -0
- package/requirements.txt +8 -0
- package/setup.sh +218 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Zodiac helpers: rashi and nakshatra from longitude."""
|
|
2
|
+
|
|
3
|
+
from kundali_lib.vedic.constants import NAKSHATRA_LORDS, NAKSHATRAS, RASHI_LORDS, RASHIS
|
|
4
|
+
|
|
5
|
+
NAKSHATRA_SPAN = 360 / 27
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_rashi(longitude: float) -> str:
|
|
9
|
+
i = int(longitude / 30) % 12
|
|
10
|
+
return RASHIS[i]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_rashi_lord(longitude: float) -> str:
|
|
14
|
+
i = int(longitude / 30) % 12
|
|
15
|
+
return RASHI_LORDS[i]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_nakshatra(longitude: float) -> str:
|
|
19
|
+
i = int(longitude / NAKSHATRA_SPAN) % 27
|
|
20
|
+
return NAKSHATRAS[i]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_nakshatra_lord(longitude: float) -> str:
|
|
24
|
+
i = int(longitude / NAKSHATRA_SPAN) % 27
|
|
25
|
+
return NAKSHATRA_LORDS[i]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_pada(longitude: float) -> int:
|
|
29
|
+
within = longitude % NAKSHATRA_SPAN
|
|
30
|
+
return int(within / (NAKSHATRA_SPAN / 4)) + 1
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def position_dict(longitude: float) -> dict:
|
|
34
|
+
"""Build rashi/nakshatra dict for a longitude."""
|
|
35
|
+
return {
|
|
36
|
+
"rashi": get_rashi(longitude),
|
|
37
|
+
"rashi_lord": get_rashi_lord(longitude),
|
|
38
|
+
"degree": longitude % 30,
|
|
39
|
+
"nakshatra": get_nakshatra(longitude),
|
|
40
|
+
"nakshatra_lord": get_nakshatra_lord(longitude),
|
|
41
|
+
"pada": get_pada(longitude),
|
|
42
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"""Thin wrapper around vedicastro.VedicAstro for use in the MCP bridge.
|
|
2
|
+
|
|
3
|
+
vedicastro provides BPHS-grade features:
|
|
4
|
+
- Full planetary data with SubLord/SubSubLord (KP system)
|
|
5
|
+
- House cusps with Nakshatra/SubLord
|
|
6
|
+
- Vimshottari Dasha (mahadasha + antardasha)
|
|
7
|
+
- Planetary aspects
|
|
8
|
+
- Planet-wise and house-wise significators
|
|
9
|
+
|
|
10
|
+
Supported ayanamsas by vedicastro:
|
|
11
|
+
Lahiri, Lahiri_1940, Lahiri_VP285, Lahiri_ICRC, Raman,
|
|
12
|
+
Krishnamurti, Krishnamurti_Senthilathiban
|
|
13
|
+
|
|
14
|
+
Supported house systems by vedicastro:
|
|
15
|
+
Placidus, Equal, Equal 2, Whole Sign
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
# vedicastro.VedicAstro is imported lazily so the module can be imported
|
|
23
|
+
# even if vedicastro is not installed (our own pyswisseph-based path is the default).
|
|
24
|
+
_VEDICASTRO_AVAILABLE = False
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
from vedicastro.VedicAstro import VedicHoroscopeData as _VedicHoroscopeData
|
|
28
|
+
|
|
29
|
+
_VEDICASTRO_AVAILABLE = True
|
|
30
|
+
except ImportError:
|
|
31
|
+
_VedicHoroscopeData = None
|
|
32
|
+
|
|
33
|
+
SUPPORTED_AYANAMSAS = [
|
|
34
|
+
"Lahiri",
|
|
35
|
+
"Lahiri_1940",
|
|
36
|
+
"Lahiri_VP285",
|
|
37
|
+
"Lahiri_ICRC",
|
|
38
|
+
"Raman",
|
|
39
|
+
"Krishnamurti",
|
|
40
|
+
"Krishnamurti_Senthilathiban",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
SUPPORTED_HOUSE_SYSTEMS = ["Placidus", "Equal", "Equal 2", "Whole Sign"]
|
|
44
|
+
|
|
45
|
+
DEFAULT_AYANAMSA = "Lahiri"
|
|
46
|
+
DEFAULT_HOUSE_SYSTEM = "Placidus"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def is_available() -> bool:
|
|
50
|
+
return _VEDICASTRO_AVAILABLE
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _make_horoscope(payload: dict[str, Any]) -> "_VedicHoroscopeData": # type: ignore[name-defined]
|
|
54
|
+
if not _VEDICASTRO_AVAILABLE:
|
|
55
|
+
raise RuntimeError(
|
|
56
|
+
"vedicastro is not installed in this environment. "
|
|
57
|
+
"Run: pip install vedicastro flatlib --no-deps"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
year = int(payload["year"])
|
|
61
|
+
month = int(payload["month"])
|
|
62
|
+
day = int(payload["day"])
|
|
63
|
+
hour = int(payload["hour"])
|
|
64
|
+
minute = int(payload["minute"])
|
|
65
|
+
second = int(payload.get("second") or 0)
|
|
66
|
+
utc = str(payload["utc_offset"]) # e.g. "+05:30"
|
|
67
|
+
latitude = float(payload["latitude"])
|
|
68
|
+
longitude = float(payload["longitude"])
|
|
69
|
+
ayanamsa = str(payload.get("ayanamsa") or DEFAULT_AYANAMSA)
|
|
70
|
+
house_system = str(payload.get("house_system") or DEFAULT_HOUSE_SYSTEM)
|
|
71
|
+
|
|
72
|
+
return _VedicHoroscopeData(
|
|
73
|
+
year,
|
|
74
|
+
month,
|
|
75
|
+
day,
|
|
76
|
+
hour,
|
|
77
|
+
minute,
|
|
78
|
+
second,
|
|
79
|
+
utc,
|
|
80
|
+
latitude,
|
|
81
|
+
longitude,
|
|
82
|
+
ayanamsa=ayanamsa,
|
|
83
|
+
house_system=house_system,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _namedtuple_to_dict(obj: Any) -> Any:
|
|
88
|
+
"""Recursively convert namedtuples and lists to JSON-friendly dicts."""
|
|
89
|
+
if obj is None:
|
|
90
|
+
return None
|
|
91
|
+
if hasattr(obj, "_asdict"):
|
|
92
|
+
return {k: _namedtuple_to_dict(v) for k, v in obj._asdict().items()}
|
|
93
|
+
if isinstance(obj, list):
|
|
94
|
+
return [_namedtuple_to_dict(i) for i in obj]
|
|
95
|
+
if isinstance(obj, dict):
|
|
96
|
+
return {k: _namedtuple_to_dict(v) for k, v in obj.items()}
|
|
97
|
+
return obj
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def get_full_chart(payload: dict[str, Any]) -> dict[str, Any]:
|
|
101
|
+
"""Return planets + house cusps (full enhanced chart with SubLord/KP data)."""
|
|
102
|
+
h = _make_horoscope(payload)
|
|
103
|
+
chart = h.generate_chart()
|
|
104
|
+
planets = h.get_planets_data_from_chart(chart)
|
|
105
|
+
houses = h.get_houses_data_from_chart(chart)
|
|
106
|
+
return {
|
|
107
|
+
"ayanamsa": h.get_ayanamsa(),
|
|
108
|
+
"house_system": h.get_house_system(),
|
|
109
|
+
"planetary_positions": _namedtuple_to_dict(planets),
|
|
110
|
+
"house_cusps": _namedtuple_to_dict(houses),
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def get_vimshottari_dasha(payload: dict[str, Any]) -> dict[str, Any]:
|
|
115
|
+
"""Return full Vimshottari Dasha (mahadasha + antardasha) for the chart."""
|
|
116
|
+
h = _make_horoscope(payload)
|
|
117
|
+
chart = h.generate_chart()
|
|
118
|
+
dasha = h.compute_vimshottari_dasa(chart)
|
|
119
|
+
return {
|
|
120
|
+
"ayanamsa": h.get_ayanamsa(),
|
|
121
|
+
"house_system": h.get_house_system(),
|
|
122
|
+
"vimshottari_dasha": dasha,
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def get_planetary_aspects(payload: dict[str, Any]) -> dict[str, Any]:
|
|
127
|
+
"""Return all planetary aspects (conjunction, sextile, square, trine, opposition, etc.)."""
|
|
128
|
+
h = _make_horoscope(payload)
|
|
129
|
+
chart = h.generate_chart()
|
|
130
|
+
aspects = h.get_planetary_aspects(chart)
|
|
131
|
+
return {
|
|
132
|
+
"ayanamsa": h.get_ayanamsa(),
|
|
133
|
+
"house_system": h.get_house_system(),
|
|
134
|
+
"aspects": [
|
|
135
|
+
{k: v for k, v in a.items()}
|
|
136
|
+
if isinstance(a, dict)
|
|
137
|
+
else _namedtuple_to_dict(a)
|
|
138
|
+
for a in aspects
|
|
139
|
+
],
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def get_significators(payload: dict[str, Any]) -> dict[str, Any]:
|
|
144
|
+
"""Return planet-wise and house-wise significators (KP system)."""
|
|
145
|
+
h = _make_horoscope(payload)
|
|
146
|
+
chart = h.generate_chart()
|
|
147
|
+
# Use the helper methods to get properly formatted data
|
|
148
|
+
planets_data = h.get_planets_data_from_chart(chart)
|
|
149
|
+
houses_data = h.get_houses_data_from_chart(chart)
|
|
150
|
+
planet_sig = h.get_planet_wise_significators(planets_data, houses_data)
|
|
151
|
+
house_sig = h.get_house_wise_significators(planets_data, houses_data)
|
|
152
|
+
|
|
153
|
+
def _planet_sig_row(row: list) -> dict:
|
|
154
|
+
return {
|
|
155
|
+
"planet": row[0] if len(row) > 0 else None,
|
|
156
|
+
"rasi_lord_house": row[1] if len(row) > 1 else None,
|
|
157
|
+
"nakshatra_lord_house": row[2] if len(row) > 2 else None,
|
|
158
|
+
"houses_in_same_rasi": row[3] if len(row) > 3 else [],
|
|
159
|
+
"houses_lordship": row[4] if len(row) > 4 else [],
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
def _house_sig_row(row: list) -> dict:
|
|
163
|
+
return {
|
|
164
|
+
"house": row[0] if len(row) > 0 else None,
|
|
165
|
+
"planets_in_house": row[1] if len(row) > 1 else [],
|
|
166
|
+
"planets_aspecting_house": row[2] if len(row) > 2 else [],
|
|
167
|
+
"planets_whose_lord_is_here": row[3] if len(row) > 3 else [],
|
|
168
|
+
"rasi_lord": row[4] if len(row) > 4 else None,
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
"ayanamsa": h.get_ayanamsa(),
|
|
173
|
+
"house_system": h.get_house_system(),
|
|
174
|
+
"planet_wise_significators": [_planet_sig_row(r) for r in planet_sig],
|
|
175
|
+
"house_wise_significators": [_house_sig_row(r) for r in house_sig],
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def list_vedicastro_options(payload: dict[str, Any]) -> dict[str, Any]:
|
|
180
|
+
"""List supported ayanamsas and house systems for vedicastro-powered tools."""
|
|
181
|
+
return {
|
|
182
|
+
"available": _VEDICASTRO_AVAILABLE,
|
|
183
|
+
"supported_ayanamsas": SUPPORTED_AYANAMSAS,
|
|
184
|
+
"supported_house_systems": SUPPORTED_HOUSE_SYSTEMS,
|
|
185
|
+
"default_ayanamsa": DEFAULT_AYANAMSA,
|
|
186
|
+
"default_house_system": DEFAULT_HOUSE_SYSTEM,
|
|
187
|
+
"tools": [
|
|
188
|
+
"get_extended_chart",
|
|
189
|
+
"get_vimshottari_dasha",
|
|
190
|
+
"get_planetary_aspects",
|
|
191
|
+
"get_significators",
|
|
192
|
+
],
|
|
193
|
+
"note": (
|
|
194
|
+
"These tools use vedicastro (diliprk/VedicAstro) with flatlib. "
|
|
195
|
+
"They provide SubLord/KP data, Vimshottari Dasha, aspects, and significators. "
|
|
196
|
+
"generate_kundali uses a different engine (pyswisseph directly) and supports more ayanamsas and chart types."
|
|
197
|
+
),
|
|
198
|
+
}
|