import importlib.util
import json
import os
import subprocess
import urllib.request
from pathlib import Path

os.umask(0o077)
R = Path(__file__).parent
REPO = Path('/workspace/contextra-analytics-runtime-lifecycle-refactor')
HEAD = 'cb2a990c844bd7e58d712ad79e4494792441db96'
OLD = Path('/tmp/codex/ltb1021/2026-09-14_contextra-rtsp-ready_r01')
spec = importlib.util.spec_from_file_location('old_preflight', OLD / 'preflight.py')
old = importlib.util.module_from_spec(spec)
spec.loader.exec_module(old)
g = old.g
C = Path('/workspace/contextra-runtime-config/metadata-active')
op = urllib.request.build_opener(urllib.request.ProxyHandler({}))
def api(path, method='GET', body=None):
    req = urllib.request.Request('http://127.0.0.1:35000'+path, method=method,
        data=None if body is None else json.dumps(body).encode(), headers={'Content-Type':'application/json'})
    with op.open(req, timeout=5) as response:
        return json.load(response)
def redis(role, *args):
    access = json.loads((C/'access.json').read_text())
    password = json.loads((C/'secrets.json').read_text())[role]
    p = subprocess.run(['redis-cli','--json','-h',access['host'],'-p',str(access['port']),
        '--user','contextra_'+role,*args],env=dict(os.environ,REDISCLI_AUTH=password),capture_output=True,text=True,timeout=5)
    assert p.returncode == 0, 'REDIS_COMMAND_FAILED'
    return json.loads(p.stdout)
def save(name, data):
    (R/name).write_text(json.dumps(data, indent=2, ensure_ascii=False))
