fix(qizheng): pin vendor bytes to local a911c890 checkout
Re-copy LICENSE/README/package.json/cli.cjs from the local yinduzhanxing snapshot. Drop dist/index.cjs that was assembled from npm. Do not include 6c27aab6 or 8bba9cb5.
This commit is contained in:
@@ -20,7 +20,6 @@ from typing import Any
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
VENDORED_CLI = REPO_ROOT / "vendor" / "stem-branch" / "dist" / "cli.cjs"
|
||||
VENDORED_LIB = REPO_ROOT / "vendor" / "stem-branch" / "dist" / "index.cjs"
|
||||
DEFAULT_TIMEOUT_SECONDS = 20
|
||||
COORDINATE_SYSTEM = "qizheng_mansion_degrees_from_jiao"
|
||||
DEFAULT_KETU_MODE = "apogee"
|
||||
@@ -48,17 +47,6 @@ BOUNDARY = (
|
||||
"庙旺判定未闭合(十一体×十二宫共 132 格仅 9 格有直接证据,"
|
||||
"runtime_promotable_count = 0),不得进入解读、报告或咨询结论。"
|
||||
)
|
||||
_NODE_EVAL = (
|
||||
"const fs=require('fs');"
|
||||
"const payload=JSON.parse(fs.readFileSync(0,'utf8'));"
|
||||
"const lib=require(payload.library);"
|
||||
"const chart=lib.getSevenGovernorsChart("
|
||||
"new Date(payload.iso),"
|
||||
"{lat:payload.lat,lon:payload.lon},"
|
||||
"{ketuMode:payload.ketuMode,siderealMode:payload.siderealMode}"
|
||||
");"
|
||||
"process.stdout.write(JSON.stringify({sevenGovernors:chart}));"
|
||||
)
|
||||
|
||||
|
||||
class QizhengChartError(ValueError):
|
||||
@@ -196,33 +184,10 @@ def _run_cli(iso: str, lat: float, lon: float, timeout_seconds: int) -> dict[str
|
||||
]
|
||||
if FORBIDDEN_CLI_FLAGS.intersection(command):
|
||||
raise QizhengChartError("forbidden engine subcommand blocked", error_code="ERR_QIZHENG_ENGINE")
|
||||
return _run_node(command, timeout_seconds=timeout_seconds)
|
||||
|
||||
|
||||
def _run_library(iso: str, lat: float, lon: float, ketu_mode: str, sidereal_mode: dict[str, Any], timeout_seconds: int) -> dict[str, Any]:
|
||||
if not VENDORED_LIB.is_file():
|
||||
raise QizhengChartError("vendored 七政四余 library is unavailable", error_code="ERR_QIZHENG_CLI_MISSING")
|
||||
payload = {
|
||||
"library": os.fspath(VENDORED_LIB),
|
||||
"iso": iso,
|
||||
"lat": lat,
|
||||
"lon": lon,
|
||||
"ketuMode": ketu_mode,
|
||||
"siderealMode": sidereal_mode,
|
||||
}
|
||||
return _run_node(
|
||||
[_node_bin(), "-e", _NODE_EVAL],
|
||||
timeout_seconds=timeout_seconds,
|
||||
stdin=json.dumps(payload, ensure_ascii=False),
|
||||
)
|
||||
|
||||
|
||||
def _run_node(command: list[str], *, timeout_seconds: int, stdin: str | None = None) -> dict[str, Any]:
|
||||
try:
|
||||
completed = subprocess.run(
|
||||
command,
|
||||
cwd=str(REPO_ROOT),
|
||||
input=stdin,
|
||||
check=False,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
@@ -320,11 +285,7 @@ def calculate_qizheng_chart(body: dict[str, Any], *, timeout_seconds: int = DEFA
|
||||
iso = _iso_local(body)
|
||||
ketu_mode = _ketu_mode(body)
|
||||
sidereal_mode = _sidereal_mode(body)
|
||||
uses_defaults = ketu_mode == DEFAULT_KETU_MODE and sidereal_mode == DEFAULT_SIDEREAL_MODE
|
||||
if uses_defaults:
|
||||
raw = _run_cli(iso, lat, lon, timeout_seconds)
|
||||
else:
|
||||
raw = _run_library(iso, lat, lon, ketu_mode, sidereal_mode, timeout_seconds)
|
||||
raw = _run_cli(iso, lat, lon, timeout_seconds)
|
||||
return _normalize(raw, {**body, "lat": lat, "lon": lon}, ketu_mode=ketu_mode, sidereal_mode=sidereal_mode, iso=iso)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user