diff --git a/modules/openapi-json-schema-generator/src/main/resources/python/api_client.handlebars b/modules/openapi-json-schema-generator/src/main/resources/python/api_client.handlebars index bdcd4519ff4..81426853056 100644 --- a/modules/openapi-json-schema-generator/src/main/resources/python/api_client.handlebars +++ b/modules/openapi-json-schema-generator/src/main/resources/python/api_client.handlebars @@ -293,7 +293,7 @@ class StyleFormSerializer(ParameterSerializerBase): prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None ) -> str: if prefix_separator_iterator is None: - prefix_separator_iterator = PrefixSeparatorIterator('?', '&') + prefix_separator_iterator = PrefixSeparatorIterator('', '&') return self._ref6570_expansion( variable_name=name, in_data=in_data, @@ -1472,7 +1472,7 @@ class RequestBody(StyleFormSerializer, JSONDetector): raise ValueError( f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data') cast_in_data = self.__json_encoder.default(in_data) - value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False) + value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True) return dict(body=value) def serialize( diff --git a/modules/openapi-json-schema-generator/src/main/resources/python/rest.handlebars b/modules/openapi-json-schema-generator/src/main/resources/python/rest.handlebars index b1811396168..d9fcc233391 100644 --- a/modules/openapi-json-schema-generator/src/main/resources/python/rest.handlebars +++ b/modules/openapi-json-schema-generator/src/main/resources/python/rest.handlebars @@ -139,7 +139,7 @@ class RESTClientObject(object): elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 r = self.pool_manager.request( method, url, - fields=fields, + body=body, encode_multipart=False, preload_content=not stream, timeout=timeout, diff --git a/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/api_client.py b/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/api_client.py index dfbf6822aa2..6fa884fc7d8 100644 --- a/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/api_client.py +++ b/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/api_client.py @@ -297,7 +297,7 @@ def _serialize_form( prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None ) -> str: if prefix_separator_iterator is None: - prefix_separator_iterator = PrefixSeparatorIterator('?', '&') + prefix_separator_iterator = PrefixSeparatorIterator('', '&') return self._ref6570_expansion( variable_name=name, in_data=in_data, @@ -1462,7 +1462,7 @@ def __serialize_application_x_www_form_data( raise ValueError( f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data') cast_in_data = self.__json_encoder.default(in_data) - value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False) + value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True) return dict(body=value) def serialize( diff --git a/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/rest.py b/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/rest.py index 75a309eed90..6fa80d8b304 100644 --- a/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/rest.py +++ b/samples/openapi3/client/3_0_3_unit_test/python/unit_test_api/rest.py @@ -146,7 +146,7 @@ def request( elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 r = self.pool_manager.request( method, url, - fields=fields, + body=body, encode_multipart=False, preload_content=not stream, timeout=timeout, diff --git a/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/api_client.py b/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/api_client.py index 385e43821b8..048ae4ed1ba 100644 --- a/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/api_client.py +++ b/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/api_client.py @@ -297,7 +297,7 @@ def _serialize_form( prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None ) -> str: if prefix_separator_iterator is None: - prefix_separator_iterator = PrefixSeparatorIterator('?', '&') + prefix_separator_iterator = PrefixSeparatorIterator('', '&') return self._ref6570_expansion( variable_name=name, in_data=in_data, @@ -1462,7 +1462,7 @@ def __serialize_application_x_www_form_data( raise ValueError( f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data') cast_in_data = self.__json_encoder.default(in_data) - value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False) + value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True) return dict(body=value) def serialize( diff --git a/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/rest.py b/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/rest.py index 406b68271ab..4064705e2ff 100644 --- a/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/rest.py +++ b/samples/openapi3/client/features/nonCompliantUseDiscriminatorIfCompositionFails/python/this_package/rest.py @@ -146,7 +146,7 @@ def request( elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 r = self.pool_manager.request( method, url, - fields=fields, + body=body, encode_multipart=False, preload_content=not stream, timeout=timeout, diff --git a/samples/openapi3/client/petstore/python/petstore_api/api_client.py b/samples/openapi3/client/petstore/python/petstore_api/api_client.py index d1b93ab5a68..9ee9ff13f68 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/api_client.py +++ b/samples/openapi3/client/petstore/python/petstore_api/api_client.py @@ -297,7 +297,7 @@ def _serialize_form( prefix_separator_iterator: typing.Optional[PrefixSeparatorIterator] = None ) -> str: if prefix_separator_iterator is None: - prefix_separator_iterator = PrefixSeparatorIterator('?', '&') + prefix_separator_iterator = PrefixSeparatorIterator('', '&') return self._ref6570_expansion( variable_name=name, in_data=in_data, @@ -1471,7 +1471,7 @@ def __serialize_application_x_www_form_data( raise ValueError( f'Unable to serialize {in_data} to application/x-www-form-urlencoded because it is not a dict of data') cast_in_data = self.__json_encoder.default(in_data) - value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=False) + value = self._serialize_form(cast_in_data, name='', explode=True, percent_encode=True) return dict(body=value) def serialize( diff --git a/samples/openapi3/client/petstore/python/petstore_api/rest.py b/samples/openapi3/client/petstore/python/petstore_api/rest.py index 40e35989f9a..6c12a23c4a6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/rest.py +++ b/samples/openapi3/client/petstore/python/petstore_api/rest.py @@ -146,7 +146,7 @@ def request( elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 r = self.pool_manager.request( method, url, - fields=fields, + body=body, encode_multipart=False, preload_content=not stream, timeout=timeout, diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_paths/test_pet_pet_id/test_post.py b/samples/openapi3/client/petstore/python/tests_manual/test_paths/test_pet_pet_id/test_post.py new file mode 100644 index 00000000000..dbfb77891de --- /dev/null +++ b/samples/openapi3/client/petstore/python/tests_manual/test_paths/test_pet_pet_id/test_post.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +import unittest +from unittest.mock import patch + +import urllib3 + +import petstore_api +from petstore_api.paths.pet_pet_id import post +from petstore_api import configuration, schemas, api_client + +from ... import ApiTestMixin + + +class TestPetPetId(ApiTestMixin, unittest.TestCase): + """ + PetPetId unit test stubs + Updates a pet in the store with form data # noqa: E501 + """ + + def test_post(self): + used_api_client = api_client.ApiClient() + api = post.ApiForpost(api_client=used_api_client) + + with patch.object(urllib3.PoolManager, 'request') as mock_request: + path_params = {'petId': 2345} + body = { + 'name': 'mister furball award', + 'status': 'happy, fuzzy, and bouncy' + } + mock_request.return_value = self.response("") + + api_response = api.post(path_params=path_params, body=body) + mock_request.assert_called_with( + 'POST', + 'http://petstore.swagger.io:80/v2/pet/2345', + body='name=mister%20furball%20award&status=happy%2C%20fuzzy%2C%20and%20bouncy', + encode_multipart=False, + preload_content=True, + timeout=None, + headers={ + 'User-Agent': self.user_agent, + 'Content-Type': 'application/x-www-form-urlencoded' + } + ) + assert isinstance(api_response.response, urllib3.HTTPResponse) + assert isinstance(api_response.body, schemas.Unset) + assert isinstance(api_response.headers, schemas.Unset) + assert api_response.response.status == 200 + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_request_body.py b/samples/openapi3/client/petstore/python/tests_manual/test_request_body.py index cbfb167754e..000e04f90a1 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_request_body.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_request_body.py @@ -110,7 +110,7 @@ def test_throws_error_for_not_implemented_content_type(self): def test_application_x_www_form_urlencoded_serialization(self): payload = dict( some_null=None, - some_str='a', + some_str='hi there', some_int=1, some_float=3.14, some_list=[], @@ -123,7 +123,7 @@ def test_application_x_www_form_urlencoded_serialization(self): serialization = request_body.serialize(payload, content_type) self.assertEqual( serialization, - dict(body='?some_str=a&some_int=1&some_float=3.14') + dict(body='some_str=hi%20there&some_int=1&some_float=3.14') ) serialization = request_body.serialize({}, content_type)