From 72b0f48c7957ec325e4ab034e71b4fb2ad723565 Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Tue, 17 Mar 2026 16:38:09 +0200 Subject: [PATCH] =?UTF-8?q?kin:=20KIN-FIX-012=20=D0=A1=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20start-api.sh=20=D0=B8=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B8=D1=82=D1=8C=20com.kin.api.plist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_watchdog.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/test_watchdog.py b/tests/test_watchdog.py index 44694e6..494e5dc 100644 --- a/tests/test_watchdog.py +++ b/tests/test_watchdog.py @@ -416,14 +416,26 @@ def test_watchdog_source_has_no_sqlite3_connect(): def test_watchdog_source_has_no_explicit_process_lookup_error(): - """Регрессия: watchdog не должен явно упоминать ProcessLookupError (decision #357). + """Регрессия: watchdog не должен перехватывать ProcessLookupError явно (decision #357). Обработка мёртвых процессов унифицирована через OSError + errno.ESRCH. + Проверяем через AST: в except-обработчиках не должно быть ProcessLookupError. """ + import ast import core.watchdog as wd source = inspect.getsource(wd) - assert "ProcessLookupError" not in source, ( - "REGRESSION: core/watchdog.py явно использует ProcessLookupError — " + tree = ast.parse(source) + + process_lookup_in_except = False + for node in ast.walk(tree): + if isinstance(node, ast.ExceptHandler) and node.type is not None: + for name_node in ast.walk(node.type): + if isinstance(name_node, ast.Name) and name_node.id == "ProcessLookupError": + process_lookup_in_except = True + break + + assert not process_lookup_in_except, ( + "REGRESSION: core/watchdog.py перехватывает ProcessLookupError явно — " "должен использовать OSError + errno.ESRCH" )