Необходимо запустить часть кода после ответа отправить в Slack

Написал приложение фляги, которое выполняет некоторую работу (может длиться до 3 часов), а затем отправляет ответ слабину через слабый входящий webhook. Приложение вызывается с помощью команды slack slash, на которую я должен ответить в течение 3000 мсек, в противном случае выдается ошибка тайм-аута. Использовал webhooks для отправки ответа после выполненной работы, так как я не могу отправить ответ на response_url После 30 минут. ( Команды Slack Slash)

from flask import Flask, request, Response, jsonify
import webbrowser
import os
import time
import json
import requests
...
some functions here
...
app = Flask(__name__)

@app.route('/tests', methods=['POST'])
def test(): 
    if "text" in request.form:
        if not request.form["text"]:
            return slackCommandResponse("No parameters provided. Please run /run-tests <url> <test_ID>")
        else:
            params = request.form["text"]
            user_id = request.form["user_id"]
            payload = {'token': ''+token+'', 'user': user_id }
            user_req = requests.get('https://slack.com/api/users.info', params=payload)
            user_data = user_req.json()
            real_name = user_data['user']['real_name']
            user_email = user_data['user']['profile']['email']
            if len(params.split()) > 2:
                return slackCommandResponse("More parameters are provided than needed. Please run /run-tests <url> <test_ID>")
            else:
                baseUrl = params.split(" ")[0]
                if not len(params.split()) > 1:
# here is the response need to be send
                    return slackCommandResponse("No test ID provided. Running all tests. You will be notified upon progress.")
# code part starting from here need to be executed after response above
                    for file in files(path):
                        file_full_path = os.path.join(path, file)
                        ID = file[:-4]
                        url=baseUrl+"&respondentid="+ID
                        apiUrl=apibase+"&respondentid="+ID
                        test_answer = 5
                        webbrowser.get(chrome_path).open(url)
                        openFile(file_full_path)
                        time.sleep(5)
                        checkAppIsRunning("AmcEngine.exe")
                        responseContent = requests.get(apiUrl)
                        respjson = responseContent.json()
                        test_result = (respjson["questions"][0]["qResponseData"]["basketContent"][0]["quantity"])
                        if test_result == test_answer:
                            slackResponse("Test "+ID+" passed")
                        else:
                            slackResponse("Test "+ID+" failed")
                else:

                    return slackCommandResponse("Cannot run single test yet")


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

Основная проблема заключается в том, что когда я отправляю ответ 200 в течение 3000 мс, остальная часть моего кода не работает. Пытался использовать это, но это не работает. Не уверен, что проблема в этом, так как я пытался сделать это впервые. Любая помощь приветствуется.

1 ответ

Использовал этот комментарий для моей задачи, и это сработало. Может быть, это сэкономит время для кого-то. Ура!

Другие вопросы по тегам