Files
vesti/openspec/changes/archive/2026-09-13-fix-approve-dirn/proposal.md
T

26 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
Пользователь не может заапрувить новость: POST /posts/{id}/approve → 500 Internal Server Error.
В логах веба (journalctl -u vesti-web):
File "/opt/vesti/web/app.py", line 180, in approve
dirs_selected = [r["direction"] for r in cls] if cls else [dirn]
UnboundLocalError: cannot access local variable 'dirn' where it is not associated with a value
Причина: на строке 180 используется переменная `dirn` (направление поста), но она
определяется позже (строка 185: `dirn = post.get("direction") or "linux"`). При approve
поста без явно выбранных направлений (пустая форма) всегда падает UnboundLocalError.
## What Changes
- В `web/app.py` (функция `approve`) перед строкой с `dirs_selected` определить:
`dirn = post.get("direction") or "linux"` (и `lang = post.get("lang") or "ru"` — тоже
используется ниже), чтобы порядок соответствовал использованию.
- Либо заменить `[dirn]` на `[post.get("direction") or "linux"]` — минимальная правка.
- Зависимость от `lang` — тоже проверяется до использования (строка 186).
## Why Not
- Альтернатива — вынести `dirn/lang` в начало функции (до `dirs_selected`). Это чище:
переменные определяются один раз и используются ниже без дублирования.
- Проверяется на живом approve поста без направлений (пустая форма).