Este tutorial ha sido analizado por especialistas así garantizamos la exactitud de nuestra esta reseña.
Solución:
Puedes utilizar schema
(Enlace PyPi)
esquema es una biblioteca para validar estructuras de datos de Python, como las obtenidas de archivos de configuración, formularios, servicios externos o análisis de línea de comandos, convertidas de JSON/YAML (o algo más) a tipos de datos de Python.
from schema import Schema, And, Use, Optional, SchemaError
def check(conf_schema, conf):
try:
conf_schema.validate(conf)
return True
except SchemaError:
return False
conf_schema = Schema(
'version': And(Use(int)),
'info':
'conf_one': And(Use(float)),
'conf_two': And(Use(str)),
'conf_three': And(Use(bool)),
Optional('optional_conf'): And(Use(str))
)
conf =
'version': 1,
'info':
'conf_one': 2.5,
'conf_two': 'foo',
'conf_three': False,
'optional_conf': 'bar'
print(check(conf_schema, conf))
Sin usar bibliotecas, también podría definir una función recursiva simple como esta:
def check_structure(struct, conf):
if isinstance(struct, dict) and isinstance(conf, dict):
# struct is a dict of types or other dicts
return all(k in conf and check_structure(struct[k], conf[k]) for k in struct)
if isinstance(struct, list) and isinstance(conf, list):
# struct is list in the form [type or dict]
return all(check_structure(struct[0], c) for c in conf)
elif isinstance(struct, type):
# struct is the type of conf
return isinstance(conf, struct)
else:
# struct is neither a dict, nor list, not type
return False
Esto supone que la configuración puede tener keys que no están en tu estructura, como en tu ejemplo.
Actualización: la nueva versión también admite listas, por ejemplo, como 'foo': ['bar': int]
valoraciones y reseñas
Recuerda que tienes el privilegio parafrasear si te fue útil.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)