Правильный способ указать тип Flask current_app.response_class в сигнатуре функции - PullRequest
1 голос
/ 04 июля 2019

Моя проблема:

У меня проблемы с приложением Flask, когда дело доходит до указания типа возврата функции, которая вызывает jsonify() в возвращении. jsonify от Flask в конечном итоге возвращает current_app.response_class. Однако, указав этот тип возврата в подписи, я получаю сообщение об ошибке.

Ошибка:

Traceback (most recent call last):
  File "wsgi.py", line 1, in <module>
    from app import app as application
  File "./app.py", line 94, in <module>
    def handle_msg_request() -> current_app.response_class:
  File "/usr/local/lib/python3.7/site-packages/werkzeug/local.py", line 348, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/usr/local/lib/python3.7/site-packages/werkzeug/local.py", line 307, in _get_current_object
    return self.__local()
  File "/usr/local/lib/python3.7/site-packages/flask/globals.py", line 51, in _find_app
    raise RuntimeError(_app_ctx_err_msg)
RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that needed
to interface with the current application object in some way. To solve
this, set up an application context with app.app_context().  See the
documentation for more information.

Код обидчика:

from flask import Flask, render_template, request, jsonify, send_from_directory, current_app

@app.route("/requestmessages", methods=['POST'])
def handle_msg_request() -> current_app.response_class:
    last_id = int(request.form['lastId'])
    data = get_all_chat_dict(min=last_id)
    if len(data) == 0:
        return jsonify(hasNewData=False)
    return jsonify(hasNewData=True, dataRows=data)

Похожие / похожие проблемы:

Я видел, как этот вопрос был решен с помощью with для контекста, но я не совсем уверен, как бы я применил это здесь, так как я просто пытаюсь указать тип возврата для функции.

Как я могу указать тип возвращаемого значения в моей подписи, когда этот тип переплетается с контекстом приложения?

...