@KitCat12

Как правильно вынести функции с декораторами в отдельные файлы и потом загрузить в основной?

Есть такой код в корне директории
import config
from bot.handlers import Handler
from utils.api_vk import VkApi

from flask import Flask, request

app = Flask(__name__)
handler = Handler()
bot = VkApi(token=config.bot_token, version=config.api_version)


@handler.on_message(command="1")
def a(event):
    try:
        return bot.send_message(peer_id=event["message"]["peer_id"], message="1")
    except Exception as error:
        print(repr(error))


@app.route("/", methods=["GET", "POST"])
def route_events():
    try:

        data = request.get_json(force=True, silent=True)

        if not data or "type" not in data:
            return "not ok"

        if data["type"] == "confirmation":
            return config.confirmation_token

        elif data["type"] == "message_new":
            handler.handle(data["object"])

        return "ok"

    except Exception as error:
        return "ok"


app.run(host="localhost", port=80)


Как вынести этот кусок в отдельный файл в директории modules (директория тоже в корне) и потом в основном файле загрузить перед запуском сервера?
,
@handler.on_message(command="1")
def a(event):
    try:
        return bot.send_message(peer_id=event["message"]["peer_id"], message="1")
    except Exception as error:
        print(repr(error))
  • Вопрос задан
  • 375 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Завернуть во внешнюю функцию и передать нужные объекты как параметры.
def setup(handler, bot, app):
    @handler.on_message()
    def do_stuff(event):
        pass

    @app.route('/stuff')
    def route_stuff():
        return "stuff"

Тогда в основном коде делаешь просто
import my_module
my_module.setup(handler, bot, app)

Только нужно гарантировать, что setup() будет вызван строго однажды.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы