Разрешить только ожидаемые поля?

Моя модель ожидает два поля, и я проверяю свою конечную точку с помощью этой модели:

config_model = api.model('Configuration', {
    'cuvettes_count': fields.Integer,
    'pipettes_count': fields.Integer
})

# later
class ConfigEndpoint(Resource):
    @config_endpoint.expect(config_model, validate=True)
    def put(self):

Как мне:

  1. Вызвать ошибку проверки, если присутствует ключ, кроме двух указанных
  2. Вызвать ошибку проверки, если ни один из ключей отсутствует, а требуется только по одному за раз

1 ответ

Решение

Вызвать ошибку проверки, если присутствует ключ, кроме двух указанных

В настоящее время flask-restx не позволяет использовать это прямо из коробки. Следующий PR должен добавить эту особенность. Вы можете попробовать внедрить PR в свой код даже сейчас, создав собственный класс Model с предлагаемыми изменениями.

Вызвать ошибку проверки, если ни один из ключей отсутствует, а требуется только по одному за раз

Я думаю, самый простой способ - напрямую использовать jsonschema, то есть что-то вроде ниже

config_model = api.schema_model('Configuration', {
    'type': 'object',
    'properties': {
        'cuvettes_count': {'type': 'integer'},
        'pipettes_count': {'type': 'integer'}
    },
    'anyOf': [{'required': ['cuvettes_count']}, {'required': ['pipettes_count']}]
})

К сожалению, это будет работать только для проверки входных данных и не будет работать для маршалинга ответов.

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