Skip to content

feat: support #/components/parameters references. #653

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Aug 13, 2022
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from .default import DefaultEndpoints
from .location import LocationEndpoints
from .parameter_references import ParameterReferencesEndpoints
from .parameters import ParametersEndpoints
from .responses import ResponsesEndpoints
from .tag1 import Tag1Endpoints
Expand Down Expand Up @@ -39,3 +40,7 @@ def location(cls) -> Type[LocationEndpoints]:
@classmethod
def true_(cls) -> Type[True_Endpoints]:
return True_Endpoints

@classmethod
def parameter_references(cls) -> Type[ParameterReferencesEndpoints]:
return ParameterReferencesEndpoints
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
""" Contains methods for accessing the API Endpoints """

import types

from . import get_parameter_references_path_param


class ParameterReferencesEndpoints:
@classmethod
def get_parameter_references_path_param(cls) -> types.ModuleType:
"""
Test different types of parameter references
"""
return get_parameter_references_path_param
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
from typing import Any, Dict

import httpx

from ...client import Client
from ...types import UNSET, Response


def _get_kwargs(
path_param: str,
*,
client: Client,
string_param: str,
integer_param: int = 0,
header_param: str,
cookie_param: str,
) -> Dict[str, Any]:
url = "{}/parameter-references/{path_param}".format(client.base_url, path_param=path_param)

headers: Dict[str, str] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()

headers["header param"] = header_param

cookies["cookie param"] = cookie_param

params: Dict[str, Any] = {}
params["string param"] = string_param

params["integer param"] = integer_param

params = {k: v for k, v in params.items() if v is not UNSET and v is not None}

return {
"method": "get",
"url": url,
"headers": headers,
"cookies": cookies,
"timeout": client.get_timeout(),
"params": params,
}


def _build_response(*, response: httpx.Response) -> Response[Any]:
return Response(
status_code=response.status_code,
content=response.content,
headers=response.headers,
parsed=None,
)


def sync_detailed(
path_param: str,
*,
client: Client,
string_param: str,
integer_param: int = 0,
header_param: str,
cookie_param: str,
) -> Response[Any]:
"""Test different types of parameter references

Args:
path_param (str):
string_param (str):
integer_param (int):
header_param (str):
cookie_param (str):

Returns:
Response[Any]
"""

kwargs = _get_kwargs(
path_param=path_param,
client=client,
string_param=string_param,
integer_param=integer_param,
header_param=header_param,
cookie_param=cookie_param,
)

response = httpx.request(
verify=client.verify_ssl,
**kwargs,
)

return _build_response(response=response)


async def asyncio_detailed(
path_param: str,
*,
client: Client,
string_param: str,
integer_param: int = 0,
header_param: str,
cookie_param: str,
) -> Response[Any]:
"""Test different types of parameter references

Args:
path_param (str):
string_param (str):
integer_param (int):
header_param (str):
cookie_param (str):

Returns:
Response[Any]
"""

kwargs = _get_kwargs(
path_param=path_param,
client=client,
string_param=string_param,
integer_param=integer_param,
header_param=header_param,
cookie_param=cookie_param,
)

async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
response = await _client.request(**kwargs)

return _build_response(response=response)
88 changes: 88 additions & 0 deletions end_to_end_tests/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -1082,6 +1082,30 @@
}
}
}
},
"/parameter-references/{path_param}": {
"get": {
"tags": [
"parameter-references"
],
"summary": "Test different types of parameter references",
"parameters": [
{
"$ref": "#/components/parameters/string-param"
},
{
"$ref": "#/components/parameters/integer-param"
},
{"$ref": "#/components/parameters/header-param"},
{"$ref": "#/components/parameters/cookie-param"},
{"$ref": "#/components/parameters/path-param"}
],
"responses": {
"200": {
"description": "Successful response"
}
}
}
}
},
"components": {
Expand Down Expand Up @@ -1956,6 +1980,70 @@
"type": "object",
"description": "A Model with periods in its reference"
}
},
"parameters": {
"integer-param": {
"name": "integer param",
"in": "query",
"required": false,
"style": "form",
"explode": true,
"schema": {
"type": "integer",
"default": 0
}
},
"string-param": {
"name": "string param",
"in": "query",
"required": false,
"style": "form",
"explode": true,
"schema": {
"type": "string"
}
},
"object-param": {
"name": "object param",
"in": "query",
"required": false,
"schema": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"number": {
"type": "number"
}
}
}
},
"header-param": {
"name": "header param",
"in": "header",
"required": false,
"schema": {
"type": "string"
}
},
"cookie-param": {
"name": "cookie param",
"in": "cookie",
"required": false,
"schema": {
"type": "string"
}
},
"path-param": {
"name": "path_param",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
}
}
}
9 changes: 8 additions & 1 deletion openapi_python_client/parser/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from enum import Enum
from typing import Optional

__all__ = ["ErrorLevel", "GeneratorError", "ParseError", "PropertyError", "ValidationError"]
__all__ = ["ErrorLevel", "GeneratorError", "ParseError", "PropertyError", "ValidationError", "ParameterError"]

from pydantic import BaseModel

Expand Down Expand Up @@ -39,5 +39,12 @@ class PropertyError(ParseError):
header = "Problem creating a Property: "


@dataclass
class ParameterError(ParseError):
"""Error raised when there's a problem creating a Parameter."""

header = "Problem creating a Parameter: "


class ValidationError(Exception):
"""Used internally to exit quickly from property parsing due to some internal exception."""
Loading