mirror of
https://github.com/wasrusgen/zov-tech.git
synced 2026-06-03 15:44:47 +00:00
PROXY POOL (app/proxy_pool.py): - Loads active proxies from Proxy6.net API every 10 min - Random rotation per request via proxied_client(timeout, headers) - Graceful fallback to direct HTTP if PROXY6_TOKEN not set - Config: PROXY6_TOKEN env var PARSERS (app/parsers/): - dns.py — refactored to use proxy_pool with retry+rotation on Qrator block - wb.py — Wildberries JSON API (search.wb.ru), retries on 429 - ozon.py — OZON composer-api JSON (widgetStates extraction) - yamarket.py — Я.Маркет HTML + embedded JSON parser - __init__.py — enrich_one() fans out to all sources, aggregates min/max prices, max rating, sum reviews - enrich_models() — batch enrich for AI by_category output NEW DIAGNOSTIC ENDPOINTS (main.py): - GET /api/parse_wb?q=...&limit=N - GET /api/parse_ozon?q=...&limit=N - GET /api/parse_yamarket?q=...&limit=N - GET /api/parse_all?q=... — fan-out + aggregate - GET /api/proxy_status — pool diagnostics (count, token configured, age) PODBOR (main.py): - _enrich_ai_with_dns -> _enrich_ai_marketplaces (uses all sources) DEPLOY: needs PROXY6_TOKEN in /opt/zov-tech/deploy/.env on VPS, then docker compose build + up -d backend
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""Конфиг бэкенда — читается из переменных окружения."""
|
|
from __future__ import annotations
|
|
import os
|
|
from dataclasses import dataclass
|
|
from functools import lru_cache
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Config:
|
|
bot_token: str
|
|
admin_tg_id: int
|
|
sheet_id: str
|
|
google_credentials_path: str
|
|
|
|
gigachat_auth_key: str
|
|
gigachat_model: str
|
|
gigachat_scope: str
|
|
|
|
active_period_days: int
|
|
grace_period_days: int
|
|
|
|
proxy6_token: str # пусто = без прокси (прямой HTTP)
|
|
|
|
|
|
def _required(name: str) -> str:
|
|
val = os.getenv(name)
|
|
if not val:
|
|
raise RuntimeError(f"Missing required env var: {name}")
|
|
return val
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_config() -> Config:
|
|
return Config(
|
|
bot_token=_required("BOT_TOKEN"),
|
|
admin_tg_id=int(os.getenv("ADMIN_TG_ID", "0")),
|
|
sheet_id=_required("SHEET_ID"),
|
|
google_credentials_path=os.getenv("GOOGLE_CREDENTIALS_PATH", "/app/credentials.json"),
|
|
gigachat_auth_key=_required("GIGACHAT_AUTH_KEY"),
|
|
gigachat_model=os.getenv("GIGACHAT_MODEL", "GigaChat-Pro"),
|
|
gigachat_scope=os.getenv("GIGACHAT_SCOPE", "GIGACHAT_API_PERS"),
|
|
active_period_days=int(os.getenv("ACTIVE_PERIOD_DAYS", "90")),
|
|
grace_period_days=int(os.getenv("GRACE_PERIOD_DAYS", "14")),
|
|
proxy6_token=os.getenv("PROXY6_TOKEN", ""),
|
|
)
|