def test_resolve_file(): oat = yaml.safe_load(Path("tests/data/simple.yaml").read_text()) resolver = OpenapiResolver(oat) resolver.resolve() out = yaml.safe_load(resolver.dump()) Path("data/simple.out.yaml").write_text(resolver.dump()) assert "Problem" in out["components"]["schemas"]
def test_resolve_relative_2(): oat = {"citizen": {"$ref": REPO_URL + "/parameters/parameters.yaml#/citizen"}} resolver = OpenapiResolver(oat) resolver.resolve() assert "schemas" in resolver.yaml_components assert "Person" in resolver.yaml_components["schemas"] log.debug(resolver.dump())
def test_dump(): oat = { "openapi": "3.0.1", "x-commons": {}, "components": { "responses": { "400BadRequest": { "$ref": REPO_URL + "/responses/responses.yaml#/400BadRequest" } } }, } resolver = OpenapiResolver(oat) resolver.resolve() assert "400BadRequest:" in resolver.dump() assert "x-commons" not in resolver.dump()
def test_traverse(): oat = { "a": 1, "list_of_refs": [{"$ref": REPO_URL + "/parameters/parameters.yaml#/sort"}], "object": {"$ref": REPO_URL + "/parameters/parameters.yaml#/sort"}, } resolver = OpenapiResolver(oat) ret = resolver.resolve() assert ret == { "a": 1, "list_of_refs": [ { "name": "sort", "in": "query", "description": "Sorting order", "schema": {"type": "string", "example": "+name"}, } ], "object": { "name": "sort", "in": "query", "description": "Sorting order", "schema": {"type": "string", "example": "+name"}, }, } log.debug(resolver.dump())
def test_traverse_object(): oas = { "components": { "parameters": { "limit": { "$ref": REPO_URL + "/parameters/parameters.yaml#/limit" }, "sort": { "$ref": REPO_URL + "/parameters/parameters.yaml#/sort" }, }, "headers": { "X-RateLimit-Limit": { "$ref": REPO_URL + "/headers/headers.yaml#/X-RateLimit-Limit" }, "Retry-After": { "$ref": REPO_URL + "/headers/headers.yaml#/Retry-After" }, }, } } resolver = OpenapiResolver(oas) ret = resolver.resolve() log.debug(resolver.dump())
def test_resolve_local(): with open("testcase.yaml") as fh: oat = yaml.safe_load(fh.read()) resolver = OpenapiResolver(oat["test_resolve_local"]) resolver.resolve() out = yaml.safe_load(resolver.dump()) assert "Problem" in out["components"]["schemas"]
def test_validate_resolved(): simple_yaml = "tests/simple.yaml" oas = yaml_load_file(simple_yaml, cb=replace_branch_name) resolver = OpenapiResolver(oas) oas_resolved = resolver.dump_yaml() validate_spec(oas_resolved) Path("tests/out.simple.yaml").write_text(resolver.dump())
def test_nested_reference(): oat = { "400BadRequest": {"$ref": REPO_URL + "/responses/responses.yaml#/400BadRequest"} } resolver = OpenapiResolver(oat) resolver.resolve() assert "schemas" in resolver.yaml_components assert "Problem" in resolver.yaml_components["schemas"] log.debug(resolver.dump())
def test_resolve_relative(): oat = { "429TooManyRequests": { "$ref": REPO_URL + "/responses/responses.yaml#/429TooManyRequests" } } resolver = OpenapiResolver(oat) resolver.resolve() assert "schemas" in resolver.yaml_components assert "Problem" in resolver.yaml_components["schemas"] assert "headers" in resolver.yaml_components assert "Retry-After" in resolver.yaml_components["headers"] log.debug(resolver.dump())
def parseAPI(api_dir: str = "./datanator_rest_api/spec/", src_file: str = "root.yaml"): """ Takes the root open api yaml file and resolves the embedded refrences for local and remote yaml files. Generates a complete JSON specification of the API Args: api_dir (str): The directory storing the api definition src_file (str): The name of the root api file Returns: str : A string containing the parsed API """ abspath = os.path.abspath(__file__) dname = os.path.dirname(abspath) os.chdir(dname) with open(src_file) as api_src: ret = yaml.safe_load(api_src) resolver = OpenapiResolver(ret) resolver.resolve() res = resolver.dump() return res
def test_dump_noanchor(): oat = { "/organization_list": { "get": { "description": "List or search all datasets\n", "operationId": "listOrgs", "responses": { "200": {"$ref": "#/components/responses/CkanResponse"}, "400": {"$ref": "#/components/responses/400BadRequest"}, "429": {"$ref": "#/components/responses/429TooManyRequests"}, "503": {"$ref": "#/components/responses/503ServiceUnavailable"}, "default": {"$ref": "#/components/responses/default"}, }, "summary": "List all groups within given parameters", "tags": ["public"], } }, "/package_list": { "get": { "description": "List or search all datasets\n", "operationId": "listInventory", "responses": { "200": {"$ref": "#/components/responses/CkanResponse"}, "400": {"$ref": "#/components/responses/400BadRequest"}, "429": {"$ref": "#/components/responses/429TooManyRequests"}, "503": {"$ref": "#/components/responses/503ServiceUnavailable"}, "default": {"$ref": "#/components/responses/default"}, }, "summary": "List all datasets within given limit", "tags": ["public"], } }, "/package_search": { "get": { "description": "List or search all datasets\n", "operationId": "searchInventory", "responses": { "200": {"$ref": "#/components/responses/CkanResponse"}, "400": {"$ref": "#/components/responses/400BadRequest"}, "409": { "description": "Conflict (can result e.g. from incorrectly formatted solr query)" }, "429": {"$ref": "#/components/responses/429TooManyRequests"}, "503": {"$ref": "#/components/responses/503ServiceUnavailable"}, "default": {"$ref": "#/components/responses/default"}, }, "summary": "Search among all datasets", "tags": ["public"], } }, "/package_show": { "get": { "description": "List or search all datasets\n", "operationId": "showInventory", "responses": { "200": {"$ref": "#/components/responses/CkanResponse"}, "400": {"$ref": "#/components/responses/400BadRequest"}, "429": {"$ref": "#/components/responses/429TooManyRequests"}, "503": {"$ref": "#/components/responses/503ServiceUnavailable"}, "default": {"$ref": "#/components/responses/default"}, }, "summary": "Get details of one package", "tags": ["public"], } }, "/user_list": { "get": { "description": "List or search all datasets\n", "operationId": "listUsers", "responses": { 200: {"$ref": "#/components/responses/CkanResponse"}, "400": {"$ref": "#/components/responses/400BadRequest"}, "429": {"$ref": "#/components/responses/429TooManyRequests"}, "503": {"$ref": "#/components/responses/503ServiceUnavailable"}, "default": {"$ref": "#/components/responses/default"}, }, "summary": "List all groups within given parameters", "tags": ["consumers"], } }, } resolver = OpenapiResolver(oat) resolver.resolve() log.debug(resolver.dump()) assert "*id" not in resolver.dump()