88 lines
2.2 KiB
Python
88 lines
2.2 KiB
Python
"""Schema validation for Python data structures.
|
|
|
|
Given eg. a nested data structure like this:
|
|
|
|
{
|
|
'exclude': ['Users', 'Uptime'],
|
|
'include': [],
|
|
'set': {
|
|
'snmp_community': 'public',
|
|
'snmp_timeout': 15,
|
|
'snmp_version': '2c',
|
|
},
|
|
'targets': {
|
|
'localhost': {
|
|
'exclude': ['Uptime'],
|
|
'features': {
|
|
'Uptime': {
|
|
'retries': 3,
|
|
},
|
|
'Users': {
|
|
'snmp_community': 'monkey',
|
|
'snmp_port': 15,
|
|
},
|
|
},
|
|
'include': ['Users'],
|
|
'set': {
|
|
'snmp_community': 'monkeys',
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
A schema like this:
|
|
|
|
>>> settings = {
|
|
... 'snmp_community': str,
|
|
... 'retries': int,
|
|
... 'snmp_version': All(Coerce(str), Any('3', '2c', '1')),
|
|
... }
|
|
>>> features = ['Ping', 'Uptime', 'Http']
|
|
>>> schema = Schema({
|
|
... 'exclude': features,
|
|
... 'include': features,
|
|
... 'set': settings,
|
|
... 'targets': {
|
|
... 'exclude': features,
|
|
... 'include': features,
|
|
... 'features': {
|
|
... str: settings,
|
|
... },
|
|
... },
|
|
... })
|
|
|
|
Validate like so:
|
|
|
|
>>> schema({
|
|
... 'set': {
|
|
... 'snmp_community': 'public',
|
|
... 'snmp_version': '2c',
|
|
... },
|
|
... 'targets': {
|
|
... 'exclude': ['Ping'],
|
|
... 'features': {
|
|
... 'Uptime': {'retries': 3},
|
|
... 'Users': {'snmp_community': 'monkey'},
|
|
... },
|
|
... },
|
|
... }) == {
|
|
... 'set': {'snmp_version': '2c', 'snmp_community': 'public'},
|
|
... 'targets': {
|
|
... 'exclude': ['Ping'],
|
|
... 'features': {'Uptime': {'retries': 3},
|
|
... 'Users': {'snmp_community': 'monkey'}}}}
|
|
True
|
|
"""
|
|
|
|
# flake8: noqa
|
|
# fmt: off
|
|
from voluptuous.schema_builder import *
|
|
from voluptuous.util import *
|
|
from voluptuous.validators import *
|
|
|
|
from voluptuous.error import * # isort: skip
|
|
|
|
# fmt: on
|
|
|
|
__version__ = '0.15.2'
|
|
__author__ = 'alecthomas'
|