Check the request example JSON matches the schema

pull/977/head
Mark Haines 9 years ago
parent ca9f30a7fd
commit f34722485f

@ -29,6 +29,33 @@ except ImportError as e:
raise raise
def check_parameter(filepath, request, parameter):
schema = parameter.get("schema")
example = None
try:
example_json = schema.get('example')
if example_json:
example = json.loads(example_json)
except Exception as e:
raise ValueError("Error parsing JSON example request for %r" % (
request
), e)
fileurl = "file://" + os.path.abspath(filepath)
if example and schema:
try:
print ("Checking request schema for: %r %r" % (
filepath, request
))
# Setting the 'id' tells jsonschema where the file is so that it
# can correctly resolve relative $ref references in the schema
schema['id'] = fileurl
jsonschema.validate(example, schema)
except Exception as e:
raise ValueError("Error validating JSON schema for %r %r" % (
request, code
), e)
def check_response(filepath, request, code, response): def check_response(filepath, request, code, response):
example = None example = None
try: try:
@ -43,7 +70,9 @@ def check_response(filepath, request, code, response):
fileurl = "file://" + os.path.abspath(filepath) fileurl = "file://" + os.path.abspath(filepath)
if example and schema: if example and schema:
try: try:
print ("Checking schema for: %r %r %r" % (filepath, request, code)) print ("Checking response schema for: %r %r %r" % (
filepath, request, code
))
# Setting the 'id' tells jsonschema where the file is so that it # Setting the 'id' tells jsonschema where the file is so that it
# can correctly resolve relative $ref references in the schema # can correctly resolve relative $ref references in the schema
schema['id'] = fileurl schema['id'] = fileurl
@ -59,8 +88,13 @@ def check_swagger_file(filepath):
swagger = yaml.load(f) swagger = yaml.load(f)
for path, path_api in swagger.get('paths', {}).items(): for path, path_api in swagger.get('paths', {}).items():
for method, request_api in path_api.items(): for method, request_api in path_api.items():
request = "%s %s" % (method.upper(), path) request = "%s %s" % (method.upper(), path)
for parameter in request_api.get('parameters', ()):
if parameter['in'] == 'body':
check_parameter(filepath, request, parameter)
try: try:
responses = request_api['responses'] responses = request_api['responses']
except KeyError: except KeyError:

Loading…
Cancel
Save