fix: _build_default_json→json.dumps + 409 repeat run + MOCK_AUTH_TOKEN

This commit is contained in:
2026-07-31 23:00:06 +04:00
parent 1fa2d9a7bc
commit 9b8d90218c
4 changed files with 41 additions and 19 deletions
+15 -13
View File
@@ -243,8 +243,12 @@ def convert_service_from_dict(raw):
def _build_default_json(sub_params):
"""Строит JSON-строку из defaults sub_params."""
parts = []
"""Строит JSON-строку из defaults sub_params через json.dumps.
Раньше использовался ручной string-concat с replace('"', '\\"') —
не экранировал \n, \r, \t, \\, что ломало JSON при спецсимволах в defaults.
Теперь строим dict и отдаём json.dumps() — все спецсимволы экранированы."""
obj = {}
for sp in sub_params:
code = sp["code"]
default = _ue(str(sp.get("default", "")))
@@ -252,23 +256,21 @@ def _build_default_json(sub_params):
subsub = sp.get("sub_params")
if subsub:
val = _build_default_json(subsub)
# Рекурсия: вложенные sub_params → вложенный объект
import json
obj[code] = json.loads(_build_default_json(subsub))
elif "bool" in dt:
val = default.lower() if default.lower() in ("true", "false") else "false"
obj[code] = default.lower() == "true"
elif "int" in dt or "integer" in dt:
try:
int(default)
val = default
obj[code] = int(default)
except (ValueError, TypeError):
val = "0"
obj[code] = 0
else:
# string — quoted
escaped = default.replace('"', '\\"')
val = f'"{escaped}"'
obj[code] = default
parts.append(f'"{code}": {val}')
return "{" + ", ".join(parts) + "}"
import json
return json.dumps(obj, ensure_ascii=False)
# ---------------------------------------------------------------------------