Files
contracts-app/site/app.py
T

65 lines
1.9 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
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)
# Служебные
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