from __future__ import annotations
import os
import shutil
import sys
CANDIDATES = ("python3.14", "python3.13", "python3.12", "python3.11")
def ensure_tomllib() -> None:
try:
import tomllib except ModuleNotFoundError:
pass
else:
return
if os.environ.get("_KRAFKA_XTASK_REEXEC"):
_die("re-executed interpreter still has no `tomllib`")
for name in CANDIDATES:
found = shutil.which(name)
if not found:
continue
env = dict(os.environ, _KRAFKA_XTASK_REEXEC="1")
os.execve(found, [found, *sys.argv], env)
_die(f"no interpreter with `tomllib` found (tried: {', '.join(CANDIDATES)})")
def _die(detail: str) -> None:
print(
f"{sys.argv[0]}: {detail}.\n"
f" This check parses TOML, which needs Python 3.11+ "
f"(running {sys.version.split()[0]}).\n"
f" Install a newer Python, or run it directly: "
f"python3.13 {sys.argv[0]}",
file=sys.stderr,
)
raise SystemExit(2)