Обработчик ошибок Flask не может обработать ошибку подтверждения

Я использую Flask-RESTful для создания REST API и Webargs для анализа.

При определении ресурса я хочу, чтобы аргумент присутствовал, поэтому я написал required = True

Например:

class Name(Resource):
"""Retrieve ids corresponding to given names
Input entries: String
"""
args = {
'entries' : fields.Str(required=True),
}
@use_kwargs(args)
def get(self, entries):
    # HTTP method GET
    result = object.find_id(entries)
    return jsonify(result)

сейчас,

При выполнении юнит-тестирования для API, явно не указывая записи, он возвращает ошибку подтверждения

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 271, in error_router
return original_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 268, in error_router
return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 271, in error_router
return original_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1363, in handle_user_exception
assert exc_value is e
AssertionError

Когда я проверил, exc_value

TypeError("ValidationError({'entries': [u'Missing data for required field.']}, status_code=422, headers={}) is not JSON serializable",) 

и это

<UnprocessableEntity '422: Unprocessable Entity'>

Сейчас,

У меня есть эти способы для обработки этого исключения @ app.errorhandler (500)

@ App.errorhandler (ValidationError)

@ App.errorhandler (TypeError)

@ App.errorhandler (UnprocessableEntity)

@ App.errorhandler (422)

@ App.errorhandler (Exception)

Я не знаю, почему даже это не работает

@ App.errorhandler (AssertionError)

Ссылался на это: ссылка, но не смог решить

Я использую Flask(0.10.1) Flask-Restful(0.3.5) webargs(1.2.0)

1 ответ

Я затронул эту проблему только сегодня (хотя я использую Flask-RESTplus уже почти год), и это стало странным открытием. Я вижу эту проблему только в Python 2.7, в то время как Python 3.3, 3.4, 3.5 работают нормально.

Таким образом, я думаю, что это следует рассматривать как ошибку совместимости в Webargs или Flask, я еще не уверен.

ОБНОВЛЕНИЕ: после некоторого углубления в проблему, я попал в webargs и подал проблему с моим устранением неполадок там: https://github.com/sloria/webargs/issues/122

ОБНОВЛЕНИЕ 2: Вот мой PR, решающий эту проблему: https://github.com/sloria/webargs/pull/123

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