Skip to content

Commit 3270d4d

Browse files
committed
fix(review-feedback-1741): limit raw parsing to CUSTOM WEBHOOK BODY TEMPLATE or re-apply the
1 parent ee3c7c4 commit 3270d4d

2 files changed

Lines changed: 48 additions & 2 deletions

File tree

src/core/config_manager.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,17 @@ def _read_config_map(self, *, normalize_values: bool) -> Dict[str, str]:
130130
if not self._env_path.exists():
131131
return {}
132132

133-
values = dotenv_values(self._env_path, interpolate=False)
133+
raw_values = dotenv_values(self._env_path, interpolate=False)
134+
if normalize_values:
135+
values = dotenv_values(self._env_path)
136+
for raw_key, raw_value in raw_values.items():
137+
if (
138+
raw_key is not None
139+
and str(raw_key).upper() in _COMPOSE_ESCAPED_ENV_VALUE_KEYS
140+
):
141+
values[raw_key] = raw_value
142+
else:
143+
values = raw_values
134144
config_map: Dict[str, str] = {}
135145
for key, value in values.items():
136146
if key is None:
@@ -191,7 +201,10 @@ def apply_updates(
191201
key_upper,
192202
value.replace("\n", ""),
193203
)
194-
if current_value == value and stored_value == canonical_stored_value:
204+
if current_value == value and (
205+
key_upper not in _COMPOSE_ESCAPED_ENV_VALUE_KEYS
206+
or stored_value == canonical_stored_value
207+
):
195208
continue
196209

197210
mutable_updates[key_upper] = value

tests/test_config_manager.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,39 @@ def test_custom_webhook_template_plain_json_is_not_changed(self) -> None:
178178
f"CUSTOM_WEBHOOK_BODY_TEMPLATE={template}\n",
179179
)
180180

181+
def test_non_template_settings_keep_dotenv_interpolation_semantics(self) -> None:
182+
self.env_path.write_text(
183+
"\n".join(
184+
[
185+
"API_PORT=8000",
186+
"WEBUI_PORT=${API_PORT}",
187+
'CUSTOM_WEBHOOK_BODY_TEMPLATE={"content":$${content_json}}',
188+
]
189+
)
190+
+ "\n",
191+
encoding="utf-8",
192+
)
193+
194+
config_map = self.manager.read_config_map()
195+
196+
self.assertEqual(config_map["API_PORT"], "8000")
197+
self.assertEqual(config_map["WEBUI_PORT"], "8000")
198+
self.assertEqual(
199+
config_map["CUSTOM_WEBHOOK_BODY_TEMPLATE"],
200+
'{"content":${content_json}}',
201+
)
202+
203+
self.manager.apply_updates(
204+
updates=[("WEBUI_PORT", config_map["WEBUI_PORT"])],
205+
sensitive_keys=set(),
206+
mask_token="******",
207+
)
208+
209+
self.assertIn(
210+
"WEBUI_PORT=${API_PORT}\n",
211+
self.env_path.read_text(encoding="utf-8"),
212+
)
213+
181214

182215
if __name__ == "__main__":
183216
unittest.main()

0 commit comments

Comments
 (0)