Flask `before_request` контекстные функции в Google Cloud Functions - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь использовать Flask контекстные классы и функции в облачных функциях Google. Вот простой код того, что я пытаюсь сделать:

import time
from flask import request, jsonify, g

@app.before_request
def before_request():
    g.start = time.time()

@app.after_request
def after_request(response):
    if ((response.json) and (response.response) and (200 <= response.status_code < 300)):
        response.json['execution_time'] = time.time() - g.start
        response.set_data(bytes(json.dumps(response.json), 'utf-8'))
    return response

def hello_world(request):
    response = jsonify({"status": "success", "message": "Hello World!"})
    response.status_code = 200
    return response

Я пытался удалить app. и просто использовать @before_request, но, похоже, это не работает. Любая идея, если это поддерживается?

Кроме того, да, я знаю, что я мог бы просто добавить параметр execution_time к каждому из моих ответов, но а) было бы неплохо установить его глобально, и б) Существуют и другие варианты использования функций before_request и after_request.

Спасибо!

1 Ответ

1 голос
/ 27 марта 2020

В настоящее время невозможно работать вне контекста функции в облачных функциях. Облачные функции не имеют доступа к базовому app.

. Возможно, вы захотите использовать вместо этого Cloud Run , что позволит вам определить полный Flask app и использовать @app.before_request и @app.after_request.

...