Skip to content

Commit 95ae020

Browse files
feat: Add support for cookie parameters
1 parent af09640 commit 95ae020

File tree

5 files changed

+32
-4
lines changed

5 files changed

+32
-4
lines changed

openapi_python_client/parser/openapi.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class ParameterLocation(str, Enum):
1919
QUERY = "query"
2020
PATH = "path"
2121
HEADER = "header"
22+
COOKIE = "cookie"
2223

2324

2425
def import_string_from_reference(reference: Reference, prefix: str = "") -> str:
@@ -93,6 +94,7 @@ class Endpoint:
9394
query_parameters: List[Property] = field(default_factory=list)
9495
path_parameters: List[Property] = field(default_factory=list)
9596
header_parameters: List[Property] = field(default_factory=list)
97+
cookie_parameters: List[Property] = field(default_factory=list)
9698
responses: List[Response] = field(default_factory=list)
9799
form_body_reference: Optional[Reference] = None
98100
json_body: Optional[Property] = None
@@ -214,6 +216,8 @@ def _add_parameters(
214216
endpoint.path_parameters.append(prop)
215217
elif param.param_in == ParameterLocation.HEADER:
216218
endpoint.header_parameters.append(prop)
219+
elif param.param_in == ParameterLocation.COOKIE:
220+
endpoint.cookie_parameters.append(prop)
217221
else:
218222
return ParseError(data=param, detail="Parameter must be declared in path or query"), schemas
219223
return endpoint, schemas

openapi_python_client/templates/endpoint_macros.py.jinja

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,20 @@ if {{ parameter.python_name }} is not UNSET:
1111
{% endif %}
1212
{% endmacro %}
1313

14+
{% macro cookie_params(endpoint) %}
15+
{% if endpoint.cookie_parameters %}
16+
{% for parameter in endpoint.cookie_parameters %}
17+
{% if parameter.required %}
18+
cookies["{{ parameter.python_name | kebabcase}}"] = {{ parameter.python_name }}
19+
{% else %}
20+
if {{ parameter.python_name }} is not UNSET:
21+
cookies["{{ parameter.python_name | kebabcase}}"] = {{ parameter.python_name }}
22+
{% endif %}
23+
{% endfor %}
24+
{% endif %}
25+
{% endmacro %}
26+
27+
1428
{% macro query_params(endpoint) %}
1529
{% if endpoint.query_parameters %}
1630
{% for property in endpoint.query_parameters %}
@@ -101,6 +115,10 @@ json_body: {{ endpoint.json_body.get_type_string() }},
101115
{% for parameter in endpoint.header_parameters %}
102116
{{ parameter.to_string() }},
103117
{% endfor %}
118+
{# cookie parameters #}
119+
{% for parameter in endpoint.cookie_parameters %}
120+
{{ parameter.to_string() }},
121+
{% endfor %}
104122
{% endmacro %}
105123

106124
{# Just lists all kwargs to endpoints as name=name for passing to other functions #}

openapi_python_client/templates/endpoint_module.py.jinja

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ from ...types import Response
1010
{{ relative }}
1111
{% endfor %}
1212

13-
{% from "endpoint_macros.py.jinja" import header_params, query_params, json_body, return_type, arguments, client, kwargs, parse_response %}
13+
{% from "endpoint_macros.py.jinja" import header_params, cookie_params, query_params, json_body, return_type, arguments, client, kwargs, parse_response %}
1414

1515
{% set return_string = return_type(endpoint) %}
1616
{% set parsed_responses = (endpoint.responses | length > 0) and return_string != "None" %}
@@ -26,17 +26,20 @@ def _get_kwargs(
2626
)
2727

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

3031
{{ header_params(endpoint) | indent(4) }}
3132

33+
{{ cookie_params(endpoint) | indent(4) }}
34+
3235
{{ query_params(endpoint) | indent(4) }}
3336

3437
{{ json_body(endpoint) | indent(4) }}
3538

3639
return {
3740
"url": url,
3841
"headers": headers,
39-
"cookies": client.get_cookies(),
42+
"cookies": cookies,
4043
"timeout": client.get_timeout(),
4144
{% if endpoint.form_body_reference %}
4245
"data": asdict(form_data),

tests/test_parser/test_openapi.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,9 @@ def test__add_parameters_fail_loudly_when_location_not_supported(self, mocker):
444444
)
445445
parsed_schemas = mocker.MagicMock()
446446
mocker.patch(f"{MODULE_NAME}.property_from_data", return_value=(mocker.MagicMock(), parsed_schemas))
447-
param = oai.Parameter.construct(name="test", required=True, param_schema=mocker.MagicMock(), param_in="cookie")
447+
param = oai.Parameter.construct(
448+
name="test", required=True, param_schema=mocker.MagicMock(), param_in="error_location"
449+
)
448450
schemas = Schemas()
449451

450452
result = Endpoint._add_parameters(

tests/test_templates/endpoint_module.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ def _get_kwargs(
2020
url = "{}/post/".format(client.base_url)
2121

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

2425
return {
2526
"url": url,
2627
"headers": headers,
27-
"cookies": client.get_cookies(),
28+
"cookies": cookies,
2829
"timeout": client.get_timeout(),
2930
"data": asdict(form_data),
3031
"files": multipart_data.to_dict(),

0 commit comments

Comments
 (0)