46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
|
"""Adopt environment section in pytest configuration files."""
|
||
|
|
||
|
import os
|
||
|
import pytest
|
||
|
|
||
|
|
||
|
def pytest_addoption(parser):
|
||
|
"""Add section to configuration files."""
|
||
|
help_msg = (
|
||
|
"a line separated list of environment variables "
|
||
|
"of the form NAME=VALUE."
|
||
|
)
|
||
|
|
||
|
parser.addini(
|
||
|
"env",
|
||
|
type="linelist",
|
||
|
help=help_msg,
|
||
|
default=[]
|
||
|
)
|
||
|
|
||
|
|
||
|
@pytest.hookimpl(tryfirst=True)
|
||
|
def pytest_load_initial_conftests(args, early_config, parser):
|
||
|
"""Load environment variables from configuration files."""
|
||
|
for e in early_config.getini("env"):
|
||
|
part = e.partition("=")
|
||
|
key = part[0].strip()
|
||
|
value = part[2].strip()
|
||
|
|
||
|
# Replace environment variables in value. for instance:
|
||
|
# TEST_DIR={USER}/repo_test_dir.
|
||
|
value = value.format(**os.environ)
|
||
|
|
||
|
# use D: as a way to designate a default value
|
||
|
# that will only override env variables if they
|
||
|
# do not exist already
|
||
|
dkey = key.split("D:")
|
||
|
default_val = False
|
||
|
|
||
|
if len(dkey) == 2:
|
||
|
key = dkey[1]
|
||
|
default_val = True
|
||
|
|
||
|
if not default_val or key not in os.environ:
|
||
|
os.environ[key] = value
|