fix(ayanamsa): keep a caller-selected mode across import and transit paths (BUG-1269, upstream 23be1807)

This commit is contained in:
jesse-ux
2026-10-07 17:05:18 +08:00
parent 4b9c019814
commit 4e134b9b9f
6 changed files with 183 additions and 24 deletions
+18 -8
View File
@@ -473,9 +473,12 @@ def cmd_bhava_chalit(args):
if not HAS_SWE:
return {"error": "swisseph 未安装, 无法计算"}
second = int(getattr(args, 'second', 0) or 0)
chart, asc_idx, jd, ayanamsa = compute_chart_data(
args.year, args.month, args.day, args.hour, args.minute,
args.lat, args.lon, args.tz, getattr(args, 'node_mode', 'mean'))
args.lat, args.lon, args.tz, getattr(args, 'node_mode', 'mean'),
second=second,
ayanamsa_name=getattr(args, 'ayanamsa', None))
if chart is None:
return {"error": "星盘计算失败"}
@@ -490,7 +493,7 @@ def cmd_bhava_chalit(args):
asc_lon = chart['ascendant']['degree_raw']
# MC: 从 swisseph 重新获取
import swisseph as swe
hour_decimal = args.hour + args.minute / 60.0 - args.tz
hour_decimal = args.hour + args.minute / 60.0 + second / 3600.0 - args.tz
jd_val = swe.julday(args.year, args.month, args.day, hour_decimal)
cusps_raw, ascmc = swe.houses(jd_val, args.lat, args.lon, b'A')
mc_tropical = ascmc[1] # MC
@@ -500,15 +503,22 @@ def cmd_bhava_chalit(args):
calc = BhavaChalitCalculator()
mode = getattr(args, 'mode', 'compare')
applied_ayanamsa = (chart.get('birth_info') or {}).get('ayanamsa_name')
def _stamp(payload):
if isinstance(payload, dict):
payload['requested_ayanamsa'] = getattr(args, 'ayanamsa', None)
payload['applied_ayanamsa'] = applied_ayanamsa
return payload
if mode == 'boundaries':
return calc.calculate_bhava_boundaries(
asc_lon, mc_lon, house_system, jd_val, args.lat, args.lon)
return _stamp(calc.calculate_bhava_boundaries(
asc_lon, mc_lon, house_system, jd_val, args.lat, args.lon))
elif mode == 'chart':
return calc.get_bhava_chalit_chart(
return _stamp(calc.get_bhava_chalit_chart(
planet_lons, asc_lon, mc_lon, house_system,
jd_val, args.lat, args.lon)
jd_val, args.lat, args.lon))
else: # compare
return calc.compare_rashi_vs_bhava(
return _stamp(calc.compare_rashi_vs_bhava(
planet_lons, asc_lon, mc_lon, house_system,
jd_val, args.lat, args.lon)
jd_val, args.lat, args.lon))