/
pozzi88
/
sqlpy-diplom
Обзор
Документация
Войти
/
pozzi88
/
sqlpy-diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.py
86 строк
3 KB
pozzi88
initial
13 июл 2025, 13:42
13 июл 2025, 13:42
1981fb0
Код
Авторство
О чём код?
import configparser import sys from pathlib import Path from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from telebot import TeleBot from telebot.storage import StateMemoryStorage import data.create_model as cm import data.load_fixtures as lf ROOT = Path(__file__).resolve().parent CFG_FILE = ROOT / "cfg" / "config.ini" def ensure_cfg() -> configparser.ConfigParser: cfg = configparser.ConfigParser() cfg.read(CFG_FILE) cfg.setdefault("database", dict(name="", user="", password="", host="", port="")) cfg.setdefault("api", dict(tg_api_key="")) missing = [(s, k) for s in cfg for k in cfg[s] if not cfg[s][k]] if missing: print("Заполним недостающие параметры:") for sec, key in missing: cfg[sec][key] = input(f"[{sec}] {key}: ").strip() CFG_FILE.parent.mkdir(exist_ok=True) with CFG_FILE.open("w", encoding="utf-8") as fp: cfg.write(fp) print("✅ config.ini сохранён.\n") return cfg CFG = ensure_cfg() url = ( "postgresql+psycopg2://" f"{CFG['database']['user']}:{CFG['database']['password']}" f"@{CFG['database']['host']}:{CFG['database']['port']}/{CFG['database']['name']}" ) ENGINE = create_engine(url, future=True, pool_pre_ping=True) SessionLocal = sessionmaker(ENGINE, autoflush=False, expire_on_commit=False) def ask_yes(q: str) -> bool: return input(q).strip().lower() == "y" def pipeline() -> None: """Интерактивный цикл: create_model → load_fixtures → запуск бота/выход.""" while True: print("\n=== Управление моделью данных ===") cm.main() if ask_yes("\nЗагрузить тестовые данные? (Y/N): "): lf.main() if ask_yes("Запустить бота? (Y/N): "): break if not ask_yes("Вернуться к управлению схемой? (Y/N): "): sys.exit("Выход без запуска бота.\n") token = CFG["api"]["tg_api_key"] if not token: sys.exit("Нет tg_api_key в cfg/config.ini") bot = TeleBot(token, state_storage=StateMemoryStorage()) from bot.bot_handlers import register_handlers register_handlers(bot, SessionLocal) print("\n▶ Telegram-бот запущен (Ctrl+C — выход)\n") bot.infinity_polling(skip_pending=True) if __name__ == "__main__": try: pipeline() finally: ENGINE.dispose()