-
-
Notifications
You must be signed in to change notification settings - Fork 464
Description
Describe the bug
TomlConfigParser fails to handle environment variables whose value is a JSON-encoded string.
To Reproduce
How can we reproduce the problem? Please be specific. Don't link to a failing CI job. Answer the questions below:
- What version of Python are you using?
3.10.2 - What version of coverage.py shows the problem? The output of
coverage debug sysis helpful.6.2 - What versions of what packages do you have installed? The output of
pip freezeis helpful.
tomli==2.0.0
pytest==6.2.5
pytest-cov==3.0.0
- What code shows the problem? Give us a specific commit of a specific repo that we can check out. If you've already worked around the problem, please provide a commit before that fix.
See https://github.com/stevenhoelscher/coveragepy-repro for reproduction of the bug.
- What commands did you run?
pytest
Expected behavior
When running pytest with pytest-cov (which relies on coveragepy under the hood), another tool's pyproject.toml should not affect coveragepy's ability to parse the configuration file.
Additional context
As you can see in this example, I try to add another tool's configuration to my pyproject.toml. But the substitute_variables function ends up interpolating the environment variable and invalidating the configuration prior to parsing:
'[[tool.docker.env_vars]]\nname = "foo"\nvalue = "\\"{"foo": "bar"}\\""\n\n[tool.pytest.ini_options]\ntestpaths = "src/tests"\naddopts = "--cov=src"\n\n[tool.coverage.run]\nomit = ["src/tests/*"]\n'
>>> import tomli
>>> s = '[[tool.docker.env_vars]]\nname = "foo"\nvalue = "\\"{"foo": "bar"}\\""\n\n[tool.pytest.ini_options]\ntestpaths = "src/tests"\naddopts = "--cov=src"\n\n[tool.coverage.run]\nomit = ["src/tests/*"]\n'
>>> tomli.loads(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/developer/code/coveragepy-repro/.venv/lib/python3.10/site-packages/tomli/_parser.py", line 116, in loads
raise suffixed_err(
tomli.TOMLDecodeError: Expected newline or end of document after a statement (at line 3, column 14)