Files
omni-parse/omni/config.py
ENI 2d7d509434 tg-сессия в комбайне + панель: ключи/сессия в шапке + фикс пустого radar_sources
- omni/config.py: tg_cfg() читает data/tg.json (вне git), env приоритетнее
- omni/tgsess.py: enabled()/fetch() подтягивают креды из config
- tools/tg_pick.py: перебор пула сессий, проверка is_user_authorized, личные аккаунты исключены
- omni claw pump: 2 канала -> 27 постов через сессию (проверено)
- omni/serve.py: /api/stats += keys{totals}, tg{enabled}
- web/index.html: строка статуса в шапке (ключей / сервисов / TG сессия)
- omni/cli.py radar --apply: пишет полный набор, а не только новые (повторный прогон обнулял файл)
- omni/cli.py radar --import-posts: --since-days + скип известных url до simhash
2026-10-27 00:15:06 +03:00

134 lines
4.6 KiB
Python
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.

"""Конфиг: пути, лимиты, ключи из env/.env. Никаких секретов в коде."""
import json
import os
import pathlib
ROOT = pathlib.Path(__file__).resolve().parent.parent
DATA = pathlib.Path(os.environ.get("OMNI_DATA") or (ROOT / "data"))
DB = pathlib.Path(os.environ.get("OMNI_DB") or (DATA / "omni.sqlite3"))
THEMES = ROOT / "themes.txt"
DEFAULTS = {
"timeout": 25,
"retries": 2,
"per_host_delay": 0.6,
"max_bytes": 4_000_000,
"limit": 20,
"lang": "ru",
"ua": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36"),
"proxy_mode": "off", # off | list | env
"proxies": [],
"cookies": {}, # host -> "a=b; c=d" (свои сессии к закрытым площадкам)
}
KEYS = {} # имя -> значение
CONFIG = {} # прочие настройки
def cookies_for(host):
"""Cookie-строка под хост: точное совпадение или суффикс (example.com -> www.example.com)."""
ck = CONFIG.get("cookies") or {}
if not ck:
return ""
host = (host or "").lower().split(":")[0]
if host in ck:
return ck[host]
for k, v in ck.items():
k = k.lower().lstrip(".")
if host == k or host.endswith("." + k):
return v
return ""
def _load_env_file(path):
p = pathlib.Path(path)
if not p.exists():
return {}
out = {}
for line in p.read_text(encoding="utf-8", errors="ignore").splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
k, v = line.split("=", 1)
out[k.strip()] = v.strip().strip('"').strip("'")
return out
def load():
"""Читает .env рядом с проектом и config.json (если есть), собирает ключи."""
global KEYS, CONFIG
envf = _load_env_file(ROOT / ".env")
for k, v in envf.items():
os.environ.setdefault(k, v)
cfg = dict(DEFAULTS)
cf = ROOT / "config.json"
if cf.exists():
try:
cfg.update(json.loads(cf.read_text(encoding="utf-8")))
except Exception:
pass
# cookies, снятые браузером (tools/cf_cookies.py) — файл вне git
ck_file = DATA / "cookies.json"
if ck_file.exists():
try:
extra = json.loads(ck_file.read_text(encoding="utf-8"))
if isinstance(extra, dict):
cfg["cookies"] = {**extra, **(cfg.get("cookies") or {})}
except Exception:
pass
raw = os.environ.get("OMNI_COOKIES") or ""
if raw:
try:
extra = json.loads(raw)
if isinstance(extra, dict):
cfg["cookies"] = {**(cfg.get("cookies") or {}), **extra}
except Exception:
pass
for name in ("TAVILY_API_KEY", "EXA_API_KEY", "YOU_API_KEY", "FIRECRAWL_API_KEY",
"JINA_API_KEY", "SERPER_API_KEY", "BRAVE_API_KEY", "X_BEARER",
"REDDIT_CLIENT_ID", "REDDIT_SECRET", "TREG_TOKEN", "GITHUB_TOKEN"):
v = os.environ.get(name)
if v:
KEYS[name] = v
DATA.mkdir(parents=True, exist_ok=True)
CONFIG = cfg
return cfg
def tg_cfg():
"""Креды Telegram-сессии: data/tg.json (вне git) или env. Возвращает dict.
Ключи: session (путь к .session без расширения), api_id, api_hash, limit.
env всегда приоритетнее файла.
"""
import os
out = {"session": "", "api_id": "", "api_hash": "", "limit": "100"}
f = DATA / "tg.json"
if f.exists():
try:
d = json.loads(f.read_text(encoding="utf-8"))
for k in out:
if d.get(k):
out[k] = str(d[k])
except Exception:
pass
for env, key in (("OMNI_TG_SESSION", "session"), ("OMNI_TG_API_ID", "api_id"),
("OMNI_TG_API_HASH", "api_hash"), ("OMNI_TG_LIMIT", "limit")):
if os.environ.get(env):
out[key] = os.environ[env]
for env, key in (("OMNI_TG_SESSION", "session"), ("OMNI_TG_API_ID", "api_id"),
("OMNI_TG_API_HASH", "api_hash"), ("OMNI_TG_LIMIT", "limit")):
if out[key]:
os.environ.setdefault(env, out[key])
return out
def proxies():
mode = CONFIG.get("proxy_mode", "off")
if mode == "env":
v = os.environ.get("OMNI_PROXIES", "")
return [x.strip() for x in v.split(",") if x.strip()]
if mode == "list":
return list(CONFIG.get("proxies") or [])
return []