Проверка корневых ключей в Cerberus

У меня есть структура данных, которая выглядит так: name — это произвольная строка, которая не может быть определенными значениями (src)

 {
  'name' : 'stringvalue',
  'src'  : 'who cares this is wrong'
 }

Я бы хотел, чтобы cerberus проверял, что ключи — это что угодно, кроме src или alsoBad, но все примеры схемы, которые я вижу, требуют, чтобы я указывал формат для данного имени.

Я пробовал это:

 def check_data(type_data):
    val = cerberus.Validator()
    val.allow_unknown={'forbidden' : ['src','alsoBad']}

    val.validate(type_data,{})

С мыслью, что пустая схема заставит allow_unknown работать. Но это не находит проблему.

Затем я попробовал:

 def check_data(type_data):
    val = cerberus.Validator()
    val.allow_unknown=

    val.validate(type_data,{'any_field':{'forbidden' : ['src','alsoBad']}})

Но это также не удалось поймать проблему.

Как проверить ключи первого уровня в словаре, когда они могут быть чем угодно?


person Ray Salemi    schedule 04.04.2018    source источник
comment
Ясно, что второй проверяет, что данные в неизвестных полях не являются src или alsoBad, но все еще не видит, как проверить сами имена полей.   -  person Ray Salemi    schedule 04.04.2018
comment
Вы должны предоставить по крайней мере один действительный и один недействительный пример документа, а также схему, которую вы получили до сих пор. У меня сложилось впечатление, что вы слишком усложняете свою задачу.   -  person funky-future    schedule 09.04.2018


Ответы (1)


Я сделал это и просто сделал это с кодом:

def check_data(type_data):
     bad_field=set(['src','alsoBad']) & set(type_data.keys())
     if bad_field:
          raise ValueError(f'Cannot have field {bad_field}'
person Ray Salemi    schedule 04.04.2018