Skip to content

Instantly share code, notes, and snippets.

@ryancollingwood
Created February 15, 2018 05:21
Show Gist options
  • Save ryancollingwood/363e2ecdc553815270cda2be9c156e79 to your computer and use it in GitHub Desktop.
Save ryancollingwood/363e2ecdc553815270cda2be9c156e79 to your computer and use it in GitHub Desktop.
Validating data against model as defined in Swaggerhub. Mostly a wrapper around https://github.com/Yelp/bravado-core/
import requests
import yaml
from bravado_core.spec import Spec
from bravado_core.validate import validate_schema_object, validate_object
from jsonschema.exceptions import ValidationError
# get a formatted swagger url for yaml definition
def get_swagger_yaml_url(organisation, api, version):
return "https://api.swaggerhub.com/apis/{}/{}/{}/swagger.yaml".format(organisation ,api, version)
# get swagger yaml as a parsed yaml object
def get_swagger_yaml(url, use_ssl = False):
return yaml.load(requests.get(url, verify = use_ssl).text)
# load swagger definition from the interwebs
def load_swagger(organisation, api, version, use_ssl = True):
url = get_swagger_yaml_url(organisation, api, version)
parsed_yaml = get_swagger_yaml(url, use_ssl = use_ssl)
return Spec(parsed_yaml)
# validate data against a model in a loaded swagger schema
def validate_swagger_model(swagger_schema, model_name, data, print_on_fail = True):
result = True
try:
validate_schema_object(swagger_schema, swagger_schema.spec_dict["definitions"][model_name], data)
except ValidationError as e:
result = False
if print_on_fail:
print(e)
return result
# download and validate a model in a single call
def download_validate_swagger_model(organisation, api, version, model_name, data, use_ssl = True, print_on_fail = True):
swagger_schema = load_swagger(organisation, api, version, use_ssl = use_ssl)
return validate_swagger_model(swagger_schema, model_name, data, print_on_fail = print_on_fail)
# return the definitions in the schema
def list_swagger_models(swagger_schema):
return list(swagger_schema.spec_dict["definitions"].keys())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment