I'd like to have default values in nested dicts with Cerberus normalize function. Unfortunately it's not working. I have code such as:
from yaml import load, Loader
from cerberus import Validator
text_schema = """
server:
type: dict
required: True
schema:
host:
required: True
type: string
api:
type: dict
required: True
schema:
enabled:
type: boolean
required: True
default: True
"""
testyaml = """
server:
host: hostname
"""
schema = load(text_schema, Loader=Loader)
doc = load(testyaml, Loader=Loader)
v = Validator(schema, purge_unknown=True)
print(v.normalized(doc))
I end up with:
{'server': {'host': 'hostname'}}
and I'd expect to have:
{'server': {'host': 'hostname', 'api': {'enabled': true}}}
Is this possible?
Not really sure if this is proper, but simply adding an empty default value to the api
key works.
text_schema = """
server:
type: dict
required: True
schema:
host:
required: True
type: string
api:
type: dict
required: True
default: {}
schema:
enabled:
type: boolean
required: True
default: True
"""
Using the above schema, I get:
{'server': {'host': 'hostname', 'api': {'enabled': True}}}