Example #1
0
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"]
Example #2
0
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())
Example #3
0
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()
Example #4
0
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())
Example #6
0
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"]
Example #7
0
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())
Example #8
0
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())
Example #9
0
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())
Example #10
0
    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
Example #11
0
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()