Flask, Marshmallow 3 и webargs use_args не могут проанализировать аргументы - PullRequest
1 голос
/ 20 июня 2020

С Flask 1.1.2, marshmallow 3.6.1 и webargs 6.1.0 все мои аргументы всегда missing.

Схема:

class ExportSearchSchema(Schema):
    limit = fields.Integer(required=False, allow_none=False, default=10, missing=10)
    offset = fields.Integer(required=False, allow_none=False, default=0, missing=0)
    status = fields.Str(required=False)

    class Meta:
        unknown = RAISE

    @validates('status')
    def validate_status(self, value):
        if value and value not in ['complete', 'pending', 'failed']:
            raise ValidationError('Invalid status: {}'.format(value))

    @validates('limit')
    def validate_limit(self, value):
        if value > 100:
            raise ValidationError('Max limit is 100')
        if value < 1:
            raise ValidationError('Limit must be a positive number and less than 100')

    @validates('offset')
    def validate_offset(self, value):
        if value < 0:
            raise ValidationError('Offset must be equal to, or greater than 0')

blueprint.py :

from flask import jsonify, Response
from flask import Blueprint
from marshmallow import Schema, fields, validates, ValidationError, RAISE
from webargs.flaskparser import use_args

exports = Blueprint('exports', __name__)

@exports.route('exports/',
               methods=['GET'], strict_slashes=False)
@use_args(ExportSearchSchema(unknown=RAISE))
def get_export_list(qparams):
  log.info("qparams {}".format(qparams)
  response = jsonify({'data': 'export_list'})
  response.mimetype = 'application/json'
  return response

Когда я скручиваю любое значение для limit или offset, всегда используется значение default.

curl http://localhost:8000/exports?limit=5930

log: "qparams {'limit': 10, 'offset': 0}"}

Я ожидаю, что ValidationError будет повышено, потому что предел должен быть> 100.

Когда я скручиваю неизвестный параметр, я ожидаю, что ValidationError будет повышено, потому что это неизвестный параметр. Это также не работает должным образом.

curl http://localhost:8000/exports?lkfjdskl=fkjdsl

возвращает 200 и не имеет qparams.

Что я здесь делаю не так при объединении webargs , Flask и marshmallow?

1 Ответ

1 голос
/ 21 июня 2020

logi c изменено в веб-конференции 6.

Перед веб-таблицей 6 синтаксический анализатор будет перебирать поля схемы и, по умолчанию, искать значение в нескольких местах.

В веб-конференции 6 парсер просто передает данные из одного места в схему. Местоположение по умолчанию "json".

Поскольку вы используете аргументы запроса, вам необходимо указать его явно:

@use_args(ExportSearchSchema(unknown=RAISE), location="query")

Поскольку вы не указываете местоположение, json предполагается body, ничего не найдено и используются значения по умолчанию.

Это задокументировано в документации по веб-сайтам: "обновление до 6.0" .

...