Я создал 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 правильно отображает модель?