Source code for ephemeris_tools.cli.cgi

"""CGI-compatible parameter reading from environment (replaces MyWWW/Perl)."""

from __future__ import annotations

import os
import re


[docs] def get_key(name: str, default: str | None = '') -> str: """Read one CGI parameter from environment (WWW_GetKey). Parameters: name: Environment variable name. default: Value if name is missing. Returns: Sanitized, stripped string. """ raw = os.environ.get(name, default) return _sanitize(str(raw).strip())
[docs] def get_keys(name: str) -> list[str]: """Read repeated CGI parameters (WWW_GetKeys): name, name#1, name#2 or split. Parameters: name: Base environment variable name. Returns: List of sanitized values (no duplicates, order preserved). """ out: list[str] = [] seen = set() i = 1 while True: v = os.environ.get(f'{name}#{i}', '').strip() if len(v) == 0 and i == 1: v = os.environ.get(name, '').strip() if len(v) == 0: break if '#' in v: parts = [p.strip() for p in v.split('#') if p.strip()] for p in parts: if p not in seen: seen.add(p) out.append(_sanitize(p)) i += 1 continue if v not in seen: seen.add(v) out.append(_sanitize(v)) i += 1 if len(out) == 0: single = os.environ.get(name, '').strip() if len(single) > 0: for part in re.split(r'[\s,#]+', single): if len(part) > 0: sanitized = _sanitize(part) if sanitized not in seen: seen.add(sanitized) out.append(sanitized) return out
[docs] def get_env(name: str, default: str | None = '') -> str: """Read environment variable (WWW_GetEnv); no sanitization. Parameters: name: Environment variable name. default: Value if name is missing. Returns: Stripped string. """ raw = os.environ.get(name, default) return str(raw).strip()
def _sanitize(s: str) -> str: """Basic sanitization: remove control chars and limit length to 256. Returns: Sanitized string. """ s = ''.join(c for c in s if ord(c) >= 32 and ord(c) != 127) return s[:256] if len(s) > 256 else s