(medium) server.py/jk_full: import psycopg2 в проде (psycopg v3 only) → photos/sale_graph всегда пустые #1500

Closed
opened 2026-06-15 05:58:48 +00:00 by bot-backend · 1 comment
Collaborator

Severity: medium · Категория: data-integrity · Файл: site-finder/server.py:610-648

server.py:611-648 (jk_full, блок prod-extras). Код делает import psycopg2 (стр.612) и psycopg2.connect(...) для подгрузки domrf_kn_photos / sale_graph / sales_agg. По правилам проекта (gendesign/CLAUDE.md, п.4) прод-стек — psycopg v3, psycopg2 не установлен, значит import падает с ModuleNotFoundError. Широкий except Exception as e (стр.647) ловит её и кладёт в prod_extras.error, оставляя photos=[], sale_graph=[], sales_agg=[]. Импакт: /api/jk-full в проде всегда без фото и графика продаж, ошибка скрыта в поле error, явного сигнала нет; при локальном запуске (psycopg2 есть) баг не виден. Чинить: перейти на import psycopg (psycopg v3) и psycopg.connect, плейсхолдеры %s в psycopg3 поддерживаются; либо явно логировать/возвращать ошибку подключения вместо тихого проглатывания.

Почему баг: Стр.612 import psycopg2 + pg = psycopg2.connect(...). Документированный prod-стек — psycopg v3 (import psycopg2 → ModuleNotFoundError). except Exception на стр.647 проглатывает ImportError, ветка успешного заполнения photos/sale_graph/sales_agg никогда не выполняется в проде. (В локальном окружении psycopg2 импортируется, потому баг невидим при локальном запуске.)

Как чинить: Использовать psycopg (v3): import psycopg; psycopg.connect(...). Не глушить ImportError в общем except — логировать отдельно; кредиты БД вынести из кода (сейчас пароль захардкожен на стр.614).


deep-audit «армия ботов 2» · verify+harden, confidence 0.8 · unit U113

**Severity:** medium · **Категория:** data-integrity · **Файл:** `site-finder/server.py:610-648` server.py:611-648 (jk_full, блок prod-extras). Код делает `import psycopg2` (стр.612) и psycopg2.connect(...) для подгрузки domrf_kn_photos / sale_graph / sales_agg. По правилам проекта (gendesign/CLAUDE.md, п.4) прод-стек — psycopg v3, psycopg2 не установлен, значит import падает с ModuleNotFoundError. Широкий `except Exception as e` (стр.647) ловит её и кладёт в prod_extras.error, оставляя photos=[], sale_graph=[], sales_agg=[]. Импакт: /api/jk-full в проде всегда без фото и графика продаж, ошибка скрыта в поле error, явного сигнала нет; при локальном запуске (psycopg2 есть) баг не виден. Чинить: перейти на `import psycopg` (psycopg v3) и psycopg.connect, плейсхолдеры %s в psycopg3 поддерживаются; либо явно логировать/возвращать ошибку подключения вместо тихого проглатывания. **Почему баг:** Стр.612 import psycopg2 + pg = psycopg2.connect(...). Документированный prod-стек — psycopg v3 (import psycopg2 → ModuleNotFoundError). except Exception на стр.647 проглатывает ImportError, ветка успешного заполнения photos/sale_graph/sales_agg никогда не выполняется в проде. (В локальном окружении psycopg2 импортируется, потому баг невидим при локальном запуске.) **Как чинить:** Использовать psycopg (v3): import psycopg; psycopg.connect(...). Не глушить ImportError в общем except — логировать отдельно; кредиты БД вынести из кода (сейчас пароль захардкожен на стр.614). --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.8 · unit U113</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:48 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:14 +00:00
Owner

🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)

Текущее состояние кода: site-finder/server.py:610-648 (блок prod_extras в jk_full).

Корень: :612 import psycopg2, :613-615 psycopg2.connect(...). Документированный прод-стек — psycopg v3 (CLAUDE.md п.4), psycopg2 не установлен → import psycopg2 падает с ModuleNotFoundError. Широкий except Exception as e на :647-648 ловит её и кладёт в prod_extras["error"], оставляя photos=[], sale_graph=[], sales_agg=[] (инициализированы на :608). Ветка заполнения (:617-646) в проде никогда не выполняется. Локально (psycopg2 есть) баг невидим. Дополнительно: пароль БД захардкожен на :614.

Что править:

  • Перейти на psycopg v3: import psycopg + psycopg.connect(...). Плейсхолдеры %s (:619, :628, :639) в psycopg3 поддерживаются — SQL менять не нужно.
  • Не глушить ImportError/connection-ошибку в общем except — логировать отдельно, чтобы пустые photos/sale_graph не выглядели как «данных нет».
  • Вынести креды БД из кода (:614 hardcoded password) в env.

Что посмотреть:

  • Код: server.py:607-650; запросы к domrf_kn_photos / domrf_kn_sale_graph / domrf_kn_sales_agg.
  • Vault: релевантных заметок не найдено (общее правило — .claude/rules/backend.md: psycopg v3 only).
**🔍 week ревью 1 — верификация (ПОДТВЕРЖДЕНО)** **Текущее состояние кода:** `site-finder/server.py:610-648` (блок `prod_extras` в `jk_full`). **Корень:** `:612` `import psycopg2`, `:613-615` `psycopg2.connect(...)`. Документированный прод-стек — psycopg v3 (CLAUDE.md п.4), psycopg2 не установлен → `import psycopg2` падает с `ModuleNotFoundError`. Широкий `except Exception as e` на `:647-648` ловит её и кладёт в `prod_extras["error"]`, оставляя `photos=[]`, `sale_graph=[]`, `sales_agg=[]` (инициализированы на `:608`). Ветка заполнения (`:617-646`) в проде никогда не выполняется. Локально (psycopg2 есть) баг невидим. Дополнительно: пароль БД захардкожен на `:614`. **Что править:** - Перейти на psycopg v3: `import psycopg` + `psycopg.connect(...)`. Плейсхолдеры `%s` (`:619`, `:628`, `:639`) в psycopg3 поддерживаются — SQL менять не нужно. - Не глушить `ImportError`/connection-ошибку в общем `except` — логировать отдельно, чтобы пустые photos/sale_graph не выглядели как «данных нет». - Вынести креды БД из кода (`:614` hardcoded password) в env. **Что посмотреть:** - Код: `server.py:607-650`; запросы к `domrf_kn_photos` / `domrf_kn_sale_graph` / `domrf_kn_sales_agg`. - Vault: релевантных заметок не найдено (общее правило — `.claude/rules/backend.md`: psycopg v3 only).
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1500
No description provided.