Тип настраиваемого поля в API-интерфейсе flask-restplus ограничен одним типом - PullRequest
0 голосов
/ 04 июля 2019

Я создал API, используя Flask-RESTPlus. Я попытался настроить поле, которое имеет пользовательский тип (требуется для одного из устройств, с которыми я взаимодействую). Тип должен быть «string или int». Это работает, однако, когда я просматриваю вывод Swagger, модель для Channel Parameter содержит только «имя», а не запись «значение»:

{
  "name": "string"
}

Я попытался установить __schema_type__ = 'string', который показывает модель почти правильно (она должна сказать "строка или целое число"):

{
  "name": "string",
  "value": "string"
}

однако, тогда проверка завершится неудачей, если я предоставлю целое число в качестве ввода для value.

API довольно велик, но вот соответствующие части кода:

from flask_restplus import fields

# ... api (namespace) is declared here
# ... ccreate, Initializer are imported

class StringOrInt(fields.Raw):
    __schema_type__ = None
    def format(self, value):
        return value
    def validate(self, value):
        return isinstance(value, int) or isinstance(value, str)

channel_param_model = ns.model('Channel Parameter', {
    'name': fields.String('Parameter name', required=True),
    'value': StringOrInt('Parameter value (string or integer)'),
})

# ... more code here ...

@api.route('/endpoint')
class SomeClass(Initializer):
    @api.expect(channel_param_model, validate=True)
    def post(self):
        """Create a new channel"""
        channel_creation_response = ccreate(ns.payload)
        return channel_creation_response

Как я могу убедиться, что валидация работает (позволяет вводить строковые и целые числа) и что вывод Swagger правильно отображает модель?

...