94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
TRUE_VALUES = {"1", "true", "yes", "on"}
|
|
|
|
|
|
def _read_bool_env(name, default=False):
|
|
value = os.getenv(name)
|
|
if value is None:
|
|
return default
|
|
return str(value).strip().lower() in TRUE_VALUES
|
|
|
|
|
|
def apply_precise_orbit(date_text, slc_par_paths, work_dir=None, operation_tag="raw2slc"):
|
|
helper_path = str(os.getenv("PYINT_LT1_PRECISE_ORBIT_HELPER") or "").strip()
|
|
manifest_json = str(os.getenv("PYINT_LT1_PRECISE_ORBIT_MANIFEST") or "").strip()
|
|
enabled = _read_bool_env("PYINT_LT1_PRECISE_ORBIT_ENABLED", False)
|
|
strict = _read_bool_env("PYINT_LT1_PRECISE_ORBIT_STRICT", True)
|
|
|
|
result = {
|
|
"enabled": enabled,
|
|
"helper_path": helper_path,
|
|
"manifest_json": manifest_json,
|
|
"summary_json": "",
|
|
"returncode": 0,
|
|
"stdout": "",
|
|
"stderr": "",
|
|
"command": [],
|
|
"applied_files": [],
|
|
"status": "disabled",
|
|
}
|
|
if not enabled:
|
|
return result
|
|
if not helper_path or not os.path.isfile(helper_path):
|
|
message = "PYINT_LT1_PRECISE_ORBIT_HELPER is missing or does not exist."
|
|
result.update({"status": "missing_helper", "stderr": message})
|
|
if strict:
|
|
raise RuntimeError(message)
|
|
return result
|
|
if not manifest_json:
|
|
message = "PYINT_LT1_PRECISE_ORBIT_MANIFEST is empty."
|
|
result.update({"status": "missing_manifest", "stderr": message})
|
|
if strict:
|
|
raise RuntimeError(message)
|
|
return result
|
|
|
|
files = []
|
|
for path in slc_par_paths or []:
|
|
text = str(path or "").strip()
|
|
if text and os.path.isfile(text):
|
|
files.append(text)
|
|
result["applied_files"] = files
|
|
if not files:
|
|
result["status"] = "skipped"
|
|
return result
|
|
|
|
summary_json = os.path.join(str(work_dir or os.getcwd()), "orbit_bridge_summary.json")
|
|
command = [
|
|
sys.executable,
|
|
helper_path,
|
|
"--date",
|
|
str(date_text or "").strip(),
|
|
"--manifest-json",
|
|
manifest_json,
|
|
"--summary-json",
|
|
summary_json,
|
|
"--operation-tag",
|
|
str(operation_tag or "raw2slc"),
|
|
]
|
|
for path in files:
|
|
command.extend(["--slc-par", path])
|
|
result["summary_json"] = summary_json
|
|
result["command"] = command
|
|
|
|
proc = subprocess.run(
|
|
command,
|
|
text=True,
|
|
capture_output=True,
|
|
check=False,
|
|
)
|
|
result.update(
|
|
{
|
|
"returncode": int(proc.returncode),
|
|
"stdout": proc.stdout or "",
|
|
"stderr": proc.stderr or "",
|
|
"status": "applied" if proc.returncode == 0 else "failed",
|
|
}
|
|
)
|
|
if proc.returncode != 0 and strict:
|
|
raise RuntimeError(result["stderr"] or result["stdout"] or "Precise orbit bridge failed.")
|
|
return result
|