Created
February 15, 2018 05:21
-
-
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/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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