Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 3bec9dd

Browse files
authored
Fixes issue 45, form encoding (#48)
* Adds template updates and test update * Samples regenerated * Adds endpoint test
1 parent 4f97227 commit 3bec9dd

File tree

10 files changed

+73
-14
lines changed

10 files changed

+73
-14
lines changed

modules/openapi-json-schema-generator/src/main/resources/python/api_client.handlebars

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ class StyleFormSerializer(ParameterSerializerBase):
293293
prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None
294294
) -> str:
295295
if prefix_separator_iterator is None:
296-
prefix_separator_iterator = PrefixSeparatorIterator('?', '&')
296+
prefix_separator_iterator = PrefixSeparatorIterator('', '&')
297297
return self._ref6570_expansion(
298298
variable_name=name,
299299
in_data=in_data,
@@ -1472,7 +1472,7 @@ class RequestBody(StyleFormSerializer, JSONDetector):
14721472
raise ValueError(
14731473
f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data')
14741474
cast_in_data = self.__json_encoder.default(in_data)
1475-
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False)
1475+
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True)
14761476
return dict(body=value)
14771477

14781478
def serialize(

modules/openapi-json-schema-generator/src/main/resources/python/rest.handlebars

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class RESTClientObject(object):
139139
elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
140140
r = self.pool_manager.request(
141141
method, url,
142-
fields=fields,
142+
body=body,
143143
encode_multipart=False,
144144
preload_content=not stream,
145145
timeout=timeout,

samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/api_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def _serialize_form(
297297
prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None
298298
) -> str:
299299
if prefix_separator_iterator is None:
300-
prefix_separator_iterator = PrefixSeparatorIterator('?', '&')
300+
prefix_separator_iterator = PrefixSeparatorIterator('', '&')
301301
return self._ref6570_expansion(
302302
variable_name=name,
303303
in_data=in_data,
@@ -1462,7 +1462,7 @@ def __serialize_application_x_www_form_data(
14621462
raise ValueError(
14631463
f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data')
14641464
cast_in_data = self.__json_encoder.default(in_data)
1465-
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False)
1465+
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True)
14661466
return dict(body=value)
14671467

14681468
def serialize(

samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/rest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def request(
146146
elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
147147
r = self.pool_manager.request(
148148
method, url,
149-
fields=fields,
149+
body=body,
150150
encode_multipart=False,
151151
preload_content=not stream,
152152
timeout=timeout,

samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/api_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def _serialize_form(
297297
prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None
298298
) -> str:
299299
if prefix_separator_iterator is None:
300-
prefix_separator_iterator = PrefixSeparatorIterator('?', '&')
300+
prefix_separator_iterator = PrefixSeparatorIterator('', '&')
301301
return self._ref6570_expansion(
302302
variable_name=name,
303303
in_data=in_data,
@@ -1462,7 +1462,7 @@ def __serialize_application_x_www_form_data(
14621462
raise ValueError(
14631463
f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data')
14641464
cast_in_data = self.__json_encoder.default(in_data)
1465-
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False)
1465+
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True)
14661466
return dict(body=value)
14671467

14681468
def serialize(

samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/rest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def request(
146146
elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
147147
r = self.pool_manager.request(
148148
method, url,
149-
fields=fields,
149+
body=body,
150150
encode_multipart=False,
151151
preload_content=not stream,
152152
timeout=timeout,

samples/openapi3/client/petstore/python/petstore_api/api_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def _serialize_form(
297297
prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None
298298
) -> str:
299299
if prefix_separator_iterator is None:
300-
prefix_separator_iterator = PrefixSeparatorIterator('?', '&')
300+
prefix_separator_iterator = PrefixSeparatorIterator('', '&')
301301
return self._ref6570_expansion(
302302
variable_name=name,
303303
in_data=in_data,
@@ -1471,7 +1471,7 @@ def __serialize_application_x_www_form_data(
14711471
raise ValueError(
14721472
f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data')
14731473
cast_in_data = self.__json_encoder.default(in_data)
1474-
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False)
1474+
value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True)
14751475
return dict(body=value)
14761476

14771477
def serialize(

samples/openapi3/client/petstore/python/petstore_api/rest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def request(
146146
elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
147147
r = self.pool_manager.request(
148148
method, url,
149-
fields=fields,
149+
body=body,
150150
encode_multipart=False,
151151
preload_content=not stream,
152152
timeout=timeout,
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# coding: utf-8
2+
3+
"""
4+
5+
6+
Generated by: https://openapi-generator.tech
7+
"""
8+
9+
import unittest
10+
from unittest.mock import patch
11+
12+
import urllib3
13+
14+
import petstore_api
15+
from petstore_api.paths.pet_pet_id import post
16+
from petstore_api import configuration, schemas, api_client
17+
18+
from ... import ApiTestMixin
19+
20+
21+
class TestPetPetId(ApiTestMixin, unittest.TestCase):
22+
"""
23+
PetPetId unit test stubs
24+
Updates a pet in the store with form data # noqa: E501
25+
"""
26+
27+
def test_post(self):
28+
used_api_client = api_client.ApiClient()
29+
api = post.ApiForpost(api_client=used_api_client)
30+
31+
with patch.object(urllib3.PoolManager, 'request') as mock_request:
32+
path_params = {'petId': 2345}
33+
body = {
34+
'name': 'mister furball award',
35+
'status': 'happy, fuzzy, and bouncy'
36+
}
37+
mock_request.return_value = self.response("")
38+
39+
api_response = api.post(path_params=path_params, body=body)
40+
mock_request.assert_called_with(
41+
'POST',
42+
'http://petstore.swagger.io:80/v2/pet/2345',
43+
body='name=mister%20furball%20award&status=happy%2C%20fuzzy%2C%20and%20bouncy',
44+
encode_multipart=False,
45+
preload_content=True,
46+
timeout=None,
47+
headers={
48+
'User-Agent': self.user_agent,
49+
'Content-Type': 'application/x-www-form-urlencoded'
50+
}
51+
)
52+
assert isinstance(api_response.response, urllib3.HTTPResponse)
53+
assert isinstance(api_response.body, schemas.Unset)
54+
assert isinstance(api_response.headers, schemas.Unset)
55+
assert api_response.response.status == 200
56+
57+
58+
if __name__ == '__main__':
59+
unittest.main()

samples/openapi3/client/petstore/python/tests_manual/test_request_body.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def test_throws_error_for_not_implemented_content_type(self):
110110
def test_application_x_www_form_urlencoded_serialization(self):
111111
payload = dict(
112112
some_null=None,
113-
some_str='a',
113+
some_str='hi there',
114114
some_int=1,
115115
some_float=3.14,
116116
some_list=[],
@@ -123,7 +123,7 @@ def test_application_x_www_form_urlencoded_serialization(self):
123123
serialization = request_body.serialize(payload, content_type)
124124
self.assertEqual(
125125
serialization,
126-
dict(body='?some_str=a&some_int=1&some_float=3.14')
126+
dict(body='some_str=hi%20there&some_int=1&some_float=3.14')
127127
)
128128

129129
serialization = request_body.serialize({}, content_type)

0 commit comments

Comments
 (0)