Co-authored-by: Quentin Torroba <quentin.torroba@mistral.ai> Co-authored-by: Michel Thomazo <michel.thomazo@mistral.ai> Co-authored-by: Clément Drouin <clement.drouin@mistral.ai> Co-authored-by: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-authored-by: Clément Siriex <clement.sirieix@mistral.ai> Co-authored-by: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai> Co-authored-by: Nicolas Karolak <nicolas@karolak.fr>
81 lines
2.1 KiB
Python
81 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from pathlib import Path
|
|
import threading
|
|
|
|
from vibe.core.config import load_dotenv_values
|
|
|
|
|
|
def _write_env_file(path: Path, content: str) -> None:
|
|
path.write_text(content, encoding="utf-8")
|
|
|
|
|
|
def test_skips_missing_file(tmp_path: Path) -> None:
|
|
environ = {"EXISTING": "1"}
|
|
missing_path = tmp_path / "missing.env"
|
|
|
|
load_dotenv_values(env_path=missing_path, environ=environ)
|
|
|
|
assert environ == {"EXISTING": "1"}
|
|
|
|
|
|
def test_sets_and_overrides_values(tmp_path: Path) -> None:
|
|
env_path = tmp_path / ".env"
|
|
_write_env_file(
|
|
env_path,
|
|
"\n".join([
|
|
"MISTRAL_API_KEY=new-key",
|
|
"HTTPS_PROXY=https://local-proxy:8080",
|
|
"OTHER=from-env",
|
|
"NEW_KEY=added",
|
|
"FOO=replace",
|
|
])
|
|
+ "\n",
|
|
)
|
|
environ = {
|
|
"MISTRAL_API_KEY": "old-key",
|
|
"HTTPS_PROXY": "old-https",
|
|
"OTHER": "keep",
|
|
"FOO": "keep",
|
|
}
|
|
|
|
load_dotenv_values(env_path=env_path, environ=environ)
|
|
|
|
assert environ["MISTRAL_API_KEY"] == "new-key"
|
|
assert environ["HTTPS_PROXY"] == "https://local-proxy:8080"
|
|
assert environ["OTHER"] == "from-env"
|
|
assert environ["NEW_KEY"] == "added"
|
|
assert environ["FOO"] == "replace"
|
|
|
|
|
|
def test_ignores_empty_values(tmp_path: Path) -> None:
|
|
env_path = tmp_path / ".env"
|
|
_write_env_file(
|
|
env_path, "\n".join(["EMPTY=", "MISTRAL_API_KEY=", "NO_VALUE"]) + "\n"
|
|
)
|
|
environ: dict[str, str] = {}
|
|
|
|
load_dotenv_values(env_path=env_path, environ=environ)
|
|
|
|
assert "EMPTY" not in environ
|
|
assert "MISTRAL_API_KEY" not in environ
|
|
assert "NO_VALUE" not in environ
|
|
|
|
|
|
def test_reads_from_fifo(tmp_path: Path) -> None:
|
|
fifo_path = tmp_path / ".env.fifo"
|
|
os.mkfifo(fifo_path)
|
|
environ: dict[str, str] = {}
|
|
|
|
def write_to_fifo() -> None:
|
|
with open(fifo_path, "w") as f:
|
|
f.write("FIFO_KEY=fifo-value\n")
|
|
|
|
writer = threading.Thread(target=write_to_fifo)
|
|
writer.start()
|
|
|
|
load_dotenv_values(env_path=fifo_path, environ=environ)
|
|
|
|
writer.join()
|
|
assert environ["FIFO_KEY"] == "fifo-value"
|