Мне нужно проверить файл YAML, используя Python3.7.Я пытаюсь Цербер выполнить проверку контента.Что касается проверки значений, это работает просто отлично, но для имен ключей я не могу найти способ успешно проверить их достоверность в контексте файла YAML.
Имя словаря является адресом электронной почты и должно быть уникальным для каждой записи в файле YAML и должно быть проверено.Несколько имен ключей чувствительны к регистру и должны быть проверены как точные.
Я тоже новичок в Python, поэтому есть большая вероятность, что это просто невежество новичков.Возможно, мне нужно искать что-то еще, кроме Цербера, но я не нашел надежного валидатора YAML.Предложения очень приветствуются.
Я создал schema.py и validationScript.py в соответствии с документацией Cerberus.Я пытался выставить ключи ключей, но на этом уровне, похоже, нет проверки anyof.Кажется, правила ключей применяются ко всем ключам в словаре в моем тестировании.Если я использую правила ключей, я могу проверить один ключ, но другие не получаются.Я пробовал множество правил, я пробовал anyof и anyof_regex, но не смог заставить их успешно просматривать все имена ключей и проверять их.
Я не могу найти способ проверить имя словаря.Я знаю, что могу проверить его, если я жестко закодирую действительное электронное письмо, которое существует в YAML.
#! python
from cerberus import Validator
import yaml
def __val_users():
with open("yamlfile.yaml", 'r') as stream:
try:
return yaml.safe_load(stream)
except yaml.YAMLError as exception:
print(exception)
schema = eval(open('C:/path/to/schema.py', 'r').read())
v = Validator(schema)
document = __val_users()
print(v.validate(document, schema))
print(v.errors)
И schema.py выглядит так:
{
'guest@hotpop.com': {
'type': 'dict',
},
'varOn': {
'required': True,
'type': 'string',
'regex': '/^\S*$/;'
},
'varOff': {
'required': True,
'type': 'string',
'regex': '/^\S*$/;'
},
'access': {
'required': True,
'type': 'list',
'allowed': ['h1', 'h2', 'h3', 'oper1', 'oper2', 'oper3', 'drive1', 'drive2', 'drive3']
},
'hub': {
'required': True,
'type': 'list'
}
}
yaml:
me@mydomain.com:
varOn: Single
varOff: Word
access:
- h1
- drive2
- oper3
hub:
- onehub
Я ожидаю, что есть код, который может проверять правила, ноЯ получаю синтаксические ошибки при использовании anyof: Файл "", строка 5 'anyof': ^ SyntaxError: неверный синтаксис
В результате получаю ошибки схемы при использовании keysrules
File "C:\Python37\lib\site-packages\cerberus\schema.py", line 275, in _validate
raise SchemaError(self.schema_validator.errors)
cerberus.schema.SchemaError: `{'me@mydomain.com': [{'keysrules': ["must be of ['dict', 'string'] type"]}]}`
спроверка всего контента работает, в итоге я получаю имена словарей (адреса электронной почты), возвращая False с указанием {'my@mydomain.com': ['unknown field'], 'stack@exchange.com': ['unknown field']}