73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
"""app.py — Точка входа. Только Flask + регистрация маршрутов."""
|
|
|
|
from dotenv import load_dotenv
|
|
from flask import Flask
|
|
|
|
# Слои
|
|
import schema
|
|
from test_routes import test_bp
|
|
from upload import upload_bp
|
|
from api import api_bp
|
|
|
|
# Маршруты (разделены по файлам)
|
|
from routes.main import index
|
|
from routes.parse import parse
|
|
from routes.misc import health, logs
|
|
from routes.llm import process as llm_process, chat as llm_chat, save_prompt, get_prompt
|
|
|
|
load_dotenv()
|
|
|
|
|
|
class ContractsApp:
|
|
"""
|
|
Главный класс приложения.
|
|
|
|
Собирает Flask, регистрирует маршруты и blueprint'ы.
|
|
Запуск: ContractsApp().run() — dev-сервер
|
|
gunicorn app:application — production
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.app = Flask(__name__)
|
|
|
|
# Создать таблицы в БД (IF NOT EXISTS — безопасно)
|
|
schema.ensure_schema()
|
|
|
|
# Зарегистрировать маршруты
|
|
self._add_routes()
|
|
|
|
def _add_routes(self):
|
|
"""Подключить все URL к обработчикам."""
|
|
# Главные: загрузка, просмотр
|
|
self.app.add_url_rule("/", "index", index, methods=["GET", "POST"])
|
|
|
|
# Парсинг: SSE-поток
|
|
self.app.add_url_rule("/parse/<cid>", "parse", parse)
|
|
|
|
# LLM: страница + SSE-извлечение
|
|
self.app.add_url_rule("/llm", "llm_page", lambda: __import__('flask').render_template('llm.html'))
|
|
self.app.add_url_rule("/llm/process/<cid>", "llm_process", llm_process)
|
|
self.app.add_url_rule("/llm/chat/<cid>", "llm_chat", llm_chat, methods=["POST"])
|
|
self.app.add_url_rule("/llm/prompt/<cid>", "llm_prompt_get", get_prompt)
|
|
self.app.add_url_rule("/llm/prompt/<cid>", "llm_prompt_save", save_prompt, methods=["POST"])
|
|
|
|
# Служебные
|
|
self.app.add_url_rule("/health", "health", health)
|
|
self.app.add_url_rule("/logs", "logs", logs)
|
|
|
|
# Blueprint'ы
|
|
self.app.register_blueprint(test_bp)
|
|
self.app.register_blueprint(upload_bp)
|
|
self.app.register_blueprint(api_bp)
|
|
|
|
def run(self):
|
|
"""Dev-сервер на порту 5000."""
|
|
self.app.run(host="0.0.0.0", port=5000)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
ContractsApp().run()
|
|
|
|
# Для gunicorn: gunicorn app:application
|
|
application = ContractsApp().app
|