fix(config-ini): strip inline # and ; comments from values
The module docstring teaches inline comments — `mode = master # or
"agent"` is the canonical example for the [decnet] section. Python's
configparser ignores those by default unless inline_comment_prefixes
is set explicitly, so the comment became part of the value and
downstream validators rejected it ("mode must be 'agent' or 'master',
got 'master # or \"agent\"'").
Hit live on first VPS deploy: every CLI invocation crashed at import
time with a stack trace that didn't make it obvious the docstring's
example was the trigger. Now the parser does what the docs promise.
This commit is contained in:
@@ -27,6 +27,24 @@ def test_missing_file_is_noop(monkeypatch, tmp_path):
|
||||
assert "DECNET_AGENT_PORT" not in os.environ
|
||||
|
||||
|
||||
def test_inline_comments_stripped_from_values(monkeypatch, tmp_path):
|
||||
"""The module docstring teaches inline ``#`` comments — the parser
|
||||
must accept them. Hit live on the first VPS deploy 2026-04-28: a
|
||||
``mode = master # or "agent"`` line caused the value to be parsed
|
||||
as ``master # or "agent"`` and downstream
|
||||
validators rejected it."""
|
||||
_scrub(monkeypatch, "DECNET_MODE", "DECNET_API_PORT")
|
||||
ini = _write_ini(tmp_path, """
|
||||
[decnet]
|
||||
mode = master # inline hash comment
|
||||
[master]
|
||||
api-port = 8000 ; inline semi comment
|
||||
""")
|
||||
load_ini_config(ini)
|
||||
assert os.environ["DECNET_MODE"] == "master"
|
||||
assert os.environ["DECNET_API_PORT"] == "8000"
|
||||
|
||||
|
||||
def test_agent_section_only_loaded_when_mode_agent(monkeypatch, tmp_path):
|
||||
_scrub(
|
||||
monkeypatch,
|
||||
|
||||
Reference in New Issue
Block a user