50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""elmAI — точка входа Flask-приложения.
|
|
|
|
Запуск через gunicorn:
|
|
gunicorn -w 4 -b 127.0.0.1:8000 web.app:app
|
|
|
|
Структура модулей:
|
|
api/ — REST-эндпоинты, БД, скрипты
|
|
brain/ — LLM-клиент, промпты
|
|
obd/ — ELM327-протокол (AndrOBD)
|
|
"""
|
|
|
|
import sys
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
# Добавляем корень проекта в PYTHONPATH для импорта api/, brain/, obd/
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
|
|
from flask import Flask, jsonify, redirect, render_template, request, send_from_directory
|
|
|
|
from api.config import load
|
|
from api.routes import register as register_api
|
|
from api.dtc import register as register_dtc
|
|
from api.ping import register as register_ping
|
|
|
|
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(name)s] %(message)s")
|
|
|
|
app = Flask(__name__)
|
|
config = load()
|
|
register_api(app)
|
|
register_dtc(app)
|
|
register_ping(app)
|
|
|
|
|
|
@app.route("/")
|
|
def index():
|
|
"""Главная страница."""
|
|
return render_template("index.html")
|
|
|
|
|
|
@app.route("/elmer.apk")
|
|
def download_apk():
|
|
"""Прямая ссылка на APK."""
|
|
return send_from_directory("static", "app-debug.apk", as_attachment=True, download_name="elmer.apk")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(f"🌐 elmAI Web: http://localhost:5005")
|
|
app.run(host="0.0.0.0", port=5005, debug=False)
|