import fastjsonschema
spec = {
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "Validation schema for OpenAPI Specification 3.0.X.",
"type": "object",
"required": [
"openapi",
"info",
"paths"
],
"properties": {
"components": {
"$ref": "#/definitions/SchemaXORContent"
}
},
"patternProperties": {
"^x-": {
}
},
"additionalProperties": False,
"definitions": {
"SchemaXORContent": {
"description": "Schema and content are mutually exclusive, at least one is required",
"not": {
"required": [
"schema",
"content"
]
},
"oneOf": [
{
"required": [
"schema"
]
},
{
"required": [
"content"
],
"description": "Some properties are not allowed if content is present",
"allOf": [
{
"not": {
"required": [
"style"
]
}
},
{
"not": {
"required": [
"explode"
]
}
}
]
}
]
}
}
}
validate = fastjsonschema.compile(spec)
Traceback (most recent call last):
File "fast.py", line 64, in <module>
validate = fastjsonschema.compile(spec)
File "lib/python3.7/site-packages/fastjsonschema/__init__.py", line 167, in compile
exec(code_generator.func_code, global_state)
File "<string>", line 42
except JsonSchemaException: pass
^
IndentationError: unindent does not match any outer indentation level
def validate___definitions_schemaxorcontent(data):
data_one_of_count = 0
if data_one_of_count < 2:
try:
data_is_dict = isinstance(data, dict)
if data_is_dict:
data_len = len(data)
if not all(prop in data for prop in ['schema']):
raise JsonSchemaException("data must contain ['schema'] properties", value=data, name="data", definition={'required': ['schema']}, rule='required')
data_one_of_count += 1
except JsonSchemaException: pass
if data_one_of_count < 2:
try:
# try: should be here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
data_is_dict = isinstance(data, dict)
if data_is_dict:
data_len = len(data)
if not all(prop in data for prop in ['style']):
raise JsonSchemaException("data must contain ['style'] properties", value=data, name="data", definition={'required': ['style']}, rule='required')
except JsonSchemaException: pass
else:
raise JsonSchemaException("data must not be valid by not definition", value=data, name="data", definition={'not': {'required': ['style']}}, rule='not')
try:
data_is_dict = isinstance(data, dict)
if data_is_dict:
data_len = len(data)
if not all(prop in data for prop in ['explode']):
raise JsonSchemaException("data must contain ['explode'] properties", value=data, name="data", definition={'required': ['explode']}, rule='required')
except JsonSchemaException: pass
else:
raise JsonSchemaException("data must not be valid by not definition", value=data, name="data", definition={'not': {'required': ['explode']}}, rule='not')
data_is_dict = isinstance(data, dict)
if data_is_dict:
data_len = len(data)
if not all(prop in data for prop in ['content']):
raise JsonSchemaException("data must contain ['content'] properties", value=data, name="data", definition={'required': ['content'], 'description': 'Some properties are not allowed if content is present', 'allOf': [{'not': {'required': ['style']}}, {'not': {'required': ['explode']}}]}, rule='required')
data_one_of_count += 1
except JsonSchemaException: pass
if data_one_of_count != 1:
raise JsonSchemaException("data must be valid exactly by one of oneOf definition", value=data, name="data", definition={'description': 'Schema and content are mutually exclusive, at least one is required', 'not': {'required': ['schema', 'content']}, 'oneOf': [{'required': ['schema']}, {'required': ['content'], 'description': 'Some properties are not allowed if content is present', 'allOf': [{'not': {'required': ['style']}}, {'not': {'required': ['explode']}}]}]}, rule='oneOf')
try:
data_is_dict = isinstance(data, dict)
if data_is_dict:
data_len = len(data)
if not all(prop in data for prop in ['schema', 'content']):
raise JsonSchemaException("data must contain ['schema', 'content'] properties", value=data, name="data", definition={'required': ['schema', 'content']}, rule='required')
except JsonSchemaException: pass
else:
raise JsonSchemaException("data must not be valid by not definition", value=data, name="data", definition={'description': 'Schema and content are mutually exclusive, at least one is required', 'not': {'required': ['schema', 'content']}, 'oneOf': [{'required': ['schema']}, {'required': ['content'], 'description': 'Some properties are not allowed if content is present', 'allOf': [{'not': {'required': ['style']}}, {'not': {'required': ['explode']}}]}]}, rule='not')
return data