Change schema for one key based on value of another key
I would like to make some keys Optional based on the value of another key. For example:
some_things:
access: true
option1: "option"
option2: "other option"
If access = true option1 and option2 need to be there, if access is false those keys are optional. Actually they are useless, so not necessary. I guess it doesn't have to be optional perhaps I could use ignore_extra_keys if access is false.
Can this be done. I have tried a bunch of things and no luck yet.
Would the following fit your needs ?
from schema import Schema, Or
schema = Schema({'some_things': Or({'access': True,
'option1': str,
'option2': str,
},
{'access': False})})
schema.validate({'some_things': {'access': False}}) # OK
schema.validate({'some_things': {'access': True,
'option1': 'foo',
'option2': 'bar'}}) # OK
schema.validate({'some_things': {'access': False,
'option1': 'foo',
'option2': 'bar'}}) # SchemaError
Awesome thanks, this works great.
I would like to make some keys Optional based on the value of another key. For example:
some_things: access: true option1: "option" option2: "other option"If access = true option1 and option2 need to be there, if access is false those keys are optional. Actually they are useless, so not necessary. I guess it doesn't have to be optional perhaps I could use ignore_extra_keys if access is false.
Can this be done. I have tried a bunch of things and no luck yet.
Glad you found a way, but it sounds like you want the same thing that I wanted: https://github.com/keleshev/schema/issues/325