Source code for experimental_lowqa.env
"""
A module for working with environment variables.
"""
# built-in
from json import loads
import os
from pathlib import Path
from subprocess import run
from sys import executable
from typing import Iterable, Iterator
[docs]
def source_file(path: Path) -> None:
"""Attempt to source a file."""
# A simple script to dump environment contents to JSON.
script = "import os,json;print(json.dumps(dict(os.environ)))"
os.environ = loads(
run(
f'. {path} && {executable} -c "{script}"',
shell=True,
check=True,
capture_output=True,
).stdout.decode()
)
[docs]
def try_source(path: Path) -> None:
"""Attempt to source a file if it exists."""
if path.is_file():
source_file(path)
[docs]
def real_sources(
root: Path, candidates: Iterable[tuple[str | Path, ...]]
) -> Iterator[Path]:
"""Add extra source directories that may be used."""
for candidate in candidates:
full = Path(*candidate)
if not full.is_absolute():
full = root.joinpath(full)
if full.is_dir():
yield full