Estoy usando YAML como formato de archivo de configuración para un proyecto de Python.¿Por qué no es este un esquema válido para Rx?
Recientemente encontré que Rx es el único validador de esquema disponible para Python y YAML. : -/Kwalify funciona con YAML, pero es solo para Ruby y Java. :(
He estado leyendo su documentación carece de todo el día y parece que no puede escribir un esquema válido para representar la estructura de mi archivo de ayuda
tengo el siguiente archivo YAML de configuración:.?
cmd:
exec: mycmd
aliases: [my, cmd]
filter:
sms: 'regex .*'
load:
exec: load
filter:
sms: 'load: .*$'
echo:
exec: echo %
Fallo al representar una estructura anidada Lo que quiero es que el elemento externo (cmd, carga y eco, en este caso) sea una cadena arbitraria que a su vez contenga otros elementos. 'Exec' es una cadena fija y un elemento requerido; los 'alias' y 'filtro' también son fijos, pero deben ser opcionales. El filtro a su vez tiene otro conjunto de elementos obligatorios y opcionales. ¿Cómo debería hacerlo? representar esto con Rx?
Hasta ahora tengo el siguiente esquema (en YAML), que Rx falla al compilar:
type: //rec
required:
type: //rec
required:
exec: //str
optional:
aliases:
type: //arr
contents: //str
length: {min: 1, max: 10}
filter:
type: //rec
optional:
sms: //str
email: //str
all: //str
Prueba esto en IPython me da esto:
/Rx.py in make_schema(self, schema)
68 raise Error('invalid schema argument to make_schema')
69
---> 70 uri = self.expand_uri(schema["type"])
71
72 if not self.type_registry.get(uri): raise "unknown type %s" % uri
KeyError: 'type'
que me lleva a creer que No estoy especificando "tipo" en alguna parte. : -S
¿Alguna idea?
Estoy bastante cansado de pelear con esto ... ¿Hay alguna otra forma en que pueda escribir un esquema y usarlo para validar mis archivos de configuración?
Gracias de antemano,
Ivan
¡Sí, eso funciona! Nunca pensé en usar // el mapa de esta manera; estaba demasiado centrado en el // tipo de rec. El autor de Rx, Ricardo Signes, amablemente también me ha enviado una respuesta útil, que pensé que compartiría con alguien que pudiera tener un problema similar en el futuro: http://pastebin.com/ f13421133. Espero que no le importe que lo haga. ¡Gracias por su respuesta, Daniel! ¡Salvaste mi día! : D – imiric
Estoy tratando de usar este módulo en mi proyecto, pero como @ymiric dijo, la documentación no es amigable. ¿Puedes compartir algún ejemplo de código python que use esto por favor? – NI6