Моя цель - изменить схему на основе существования свойства.
Это мои схемы:
sample = {
"type": "object",
"properties": {
"description": {"type": "string", "minLength": 1, "pattern": "^.*\w+.*$"},
"owner_id": {"type": "string"},
"privacy_setting": {"type": "string", "enum": ["private","group","account","public"]},
"iam": iam,
"timestamp": {"type": "integer", "minimum": 1000000000000, "maximum": 9999999999999},
"protocols": {"type": "array", "items": protocol},
"measurements": {"type": "array", "items": measurement}
},
"required": ["description","owner_id"],
"additionalProperties": False
}
existing_sample = {
"type": "object",
"properties": {
"id": {"type": "string"},
"protocols": {"type": "array", "items": protocol},
"measurements": {"type": "array", "items": measurement}
},
"required": ["id"],
"additionalProperties": False
}
# final schema
final = {
"type": "object",
"patternProperties": {
"^.+$": {
"if": {
"properties": {
"id": {"type": "string"}
}
},
"then": existing_sample,
"else": sample
}
},
"additionalProperties": False
}
Идея состоит в том, чтобы следовать схеме «isting_sample »в случае, если свойство« id »существует и следуйте "примерной" схеме, если она отсутствует.
Это работает, как и ожидалось, когда существует "id", что означает, что если появляется неуказанное свойство, оно вызовет исключение:
Дополнительные свойства не допускаются
но если свойство "id" отсутствует, оно выдаст исключение:
'id' является обязательным свойством
, как будто оно все еще следует за Схема «существующего_ образца».
есть идеи?