144 lines
3.8 KiB
Python
144 lines
3.8 KiB
Python
from flask import Flask, request, jsonify
|
|
from config import Config
|
|
from db import MedodsAPI, db, VkPost
|
|
from scheduler import start_scheduler
|
|
from token_utils import generate_token
|
|
from http_client import send_request
|
|
import logging
|
|
import os
|
|
|
|
app = Flask(__name__)
|
|
app.config.from_object(Config)
|
|
|
|
db.init_app(app)
|
|
|
|
os.makedirs("logs", exist_ok=True)
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s | %(levelname)s | %(name)s | %(message)s",
|
|
handlers=[
|
|
logging.FileHandler(Config.LOG_FILE, encoding="utf-8"),
|
|
logging.StreamHandler(),
|
|
],
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
from flask import render_template
|
|
|
|
|
|
@app.route("/")
|
|
def index():
|
|
return render_template("index.html")
|
|
|
|
|
|
@app.route("/medods")
|
|
def medods():
|
|
medods_api = MedodsAPI.query.first()
|
|
data = {"url": medods_api.url if medods_api else "none"}
|
|
return render_template("medods.html", data=data)
|
|
|
|
|
|
@app.route("/vk")
|
|
def vk():
|
|
return render_template("vk.html")
|
|
|
|
|
|
@app.route("/posts")
|
|
def posts():
|
|
return render_template("posts.html")
|
|
|
|
|
|
@app.before_request
|
|
def init():
|
|
db.create_all()
|
|
start_scheduler()
|
|
logger.info("Приложение запущено")
|
|
|
|
|
|
@app.route("/settings/medods_url", methods=["POST"])
|
|
def medods_url():
|
|
data = request.json
|
|
db.session.merge(MedodsAPI(url=data.get("url", "http://10.3.10.10/api/v2/")))
|
|
db.session.commit()
|
|
logger.info(data)
|
|
return jsonify({"status": "ok"})
|
|
|
|
|
|
@app.route("/settings/medods_apikey", methods=["POST"])
|
|
def medods_apikey():
|
|
data = request.json
|
|
logger.info(data)
|
|
return jsonify({"status": "ok"})
|
|
|
|
|
|
@app.route("/settings/requests", methods=["GET", "POST", "PATCH"])
|
|
def get_requests():
|
|
match request.method:
|
|
case "POST":
|
|
logger.info("Добавлен новый запрос")
|
|
logger.info(request.json)
|
|
return jsonify({"status": "ok"})
|
|
case "PATCH":
|
|
logger.info("Обновлен запрос")
|
|
logger.info(request.json)
|
|
return jsonify({"status": "ok"})
|
|
case "GET":
|
|
logger.info("Получен список запросов")
|
|
return jsonify(
|
|
[
|
|
{
|
|
"id": 1,
|
|
"method": "GET",
|
|
"title": "Получить список пользователей",
|
|
"url_path": "/users",
|
|
"payload": {},
|
|
"query": {"limit": 10, "offset": 0},
|
|
},
|
|
{
|
|
"id": 2,
|
|
"method": "POST",
|
|
"title": "Добавить пост в очередь",
|
|
"url_path": "/scheduler",
|
|
"payload": {
|
|
"text": "Текст поста",
|
|
"image": "path/to/image.jpg",
|
|
},
|
|
"query": {},
|
|
},
|
|
]
|
|
)
|
|
case _:
|
|
logger.error("Неверный метод запроса")
|
|
return jsonify({"status": "error"})
|
|
|
|
|
|
@app.route("/token", methods=["GET"])
|
|
def token():
|
|
return jsonify({"token": generate_token()})
|
|
|
|
|
|
@app.route("/request", methods=["POST"])
|
|
def make_request():
|
|
data = request.json
|
|
response = send_request(
|
|
data["method"], data["url"], data.get("payload"), data.get("headers")
|
|
)
|
|
return jsonify({"status": response.status_code})
|
|
|
|
|
|
@app.route("/vk/post", methods=["POST"])
|
|
def add_post():
|
|
data = request.json
|
|
post = VkPost(
|
|
text=data["text"], image_path=data.get("image"), publish_at=data["publish_at"]
|
|
)
|
|
db.session.add(post)
|
|
db.session.commit()
|
|
return jsonify({"status": "ok"})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(debug=True)
|