Skip to content

Commit

Permalink
test: openapi assert version
Browse files Browse the repository at this point in the history
  • Loading branch information
Damilola Adeyemi authored and bogdanp05 committed May 5, 2023
1 parent 15acb41 commit 87a3486
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
8 changes: 3 additions & 5 deletions python_client_generator/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@

from pathlib import Path

from python_client_generator.utils import dereference_swagger
from python_client_generator.utils import dereference_swagger, assert_openapi_version

from .exceptions import UnsupportedOpenAPISpec
from .generate_apis import generate_apis
from .generate_base_client import generate_base_client
from .generate_models import generate_models
Expand All @@ -31,10 +30,9 @@ def main() -> None:

with open(args.open_api, "r") as f:
swagger = json.load(f)
dereferenced_swagger = dereference_swagger(swagger, swagger)

if not dereferenced_swagger.get("components"):
raise UnsupportedOpenAPISpec("OpenAPI file provided is not version 3.x")
assert_openapi_version(swagger)
dereferenced_swagger = dereference_swagger(swagger, swagger)

# Create root directory
path = Path(args.outdir)
Expand Down
9 changes: 9 additions & 0 deletions python_client_generator/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

from typing import Any, Dict, List

import semver

from python_client_generator.exceptions import UnsupportedOpenAPISpec


def lookup_by_ref_parts(obj: Dict[str, Any], ref_parts: List[str]) -> Dict[str, Any]:
child = obj[ref_parts[0]]
Expand Down Expand Up @@ -96,3 +100,8 @@ def resolve_type(schema: Dict[str, Any], depth: int = 0, use_literals: bool = Fa
return "List[" + resolve_type(schema["items"], depth + 1) + "]"

raise Exception("property: ", schema)


def assert_openapi_version(schema: Dict[str, Any]) -> None:
if not schema.get("openapi") or semver.Version.parse(schema.get("openapi")).major != 3:
raise UnsupportedOpenAPISpec("OpenAPI file provided is not version 3.x")
13 changes: 12 additions & 1 deletion tests/test_generator.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import filecmp
import os
from copy import deepcopy

from pathlib import Path
from typing import Any, Dict

import pytest

from python_client_generator.exceptions import UnsupportedOpenAPISpec
from python_client_generator.generate_apis import generate_apis
from python_client_generator.generate_base_client import generate_base_client
from python_client_generator.generate_models import generate_models
from python_client_generator.generate_pyproject import generate_pyproject

from python_client_generator.utils import assert_openapi_version

EXPECTED_PATH = Path(os.path.dirname(os.path.realpath(__file__))) / "expected"

Expand Down Expand Up @@ -37,3 +41,10 @@ def test_pyproject(openapi: Dict[str, Any], tmp_path: Path) -> None:
filecmp.cmp(EXPECTED_PATH / "pyproject.toml", tmp_path / "pyproject.toml", shallow=False)
is True
)


def test_assert_openapi_version(openapi: Dict[str, Any]) -> None:
openapi_copy = deepcopy(openapi)
openapi_copy["openapi"] = "2.0.0"
with pytest.raises(UnsupportedOpenAPISpec):
assert_openapi_version(openapi_copy)

0 comments on commit 87a3486

Please sign in to comment.