From b6efb9af5e149af951b5b7cf69a45505ae669bb0 Mon Sep 17 00:00:00 2001
From: Viktor Danyliuk <viktor.danyliuk@arachnys.com>
Date: Tue, 27 Nov 2018 19:27:01 +0200
Subject: [PATCH 1/4] surround response content decoding with try-except

---
 .../src/main/resources/python/asyncio/rest.mustache       | 8 +++++++-
 .../src/main/resources/python/rest.mustache               | 7 +++++--
 .../src/main/resources/python/tornado/rest.mustache       | 6 +++++-
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache b/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache
index 9c1a0cc81db..ac896c308fc 100644
--- a/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache
+++ b/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache
@@ -160,7 +160,13 @@ class RESTClientObject(object):
         r = await self.pool_manager.request(**args)
         if _preload_content:
 
-            data = await r.text()
+            data = await r.read()
+            try
+                # binary -> string
+                data = data.decode('utf-8')
+            except UnicodeDecodeError:
+                # probably data is a binary content itself
+                pass
             r = RESTResponse(r, data)
 
             # log response body
diff --git a/modules/openapi-generator/src/main/resources/python/rest.mustache b/modules/openapi-generator/src/main/resources/python/rest.mustache
index 8418ec2a0fd..3221e63c405 100644
--- a/modules/openapi-generator/src/main/resources/python/rest.mustache
+++ b/modules/openapi-generator/src/main/resources/python/rest.mustache
@@ -210,8 +210,11 @@ class RESTClientObject(object):
             # In the python 3, the response.data is bytes.
             # we need to decode it to string.
             if six.PY3:
-                r.data = r.data.decode('utf8')
-
+                try
+                    r.data = r.data.decode('utf-8')
+                except UnicodeDecodeError:
+                    # probably data is a binary content itself
+                    pass
             # log response body
             logger.debug("response body: %s", r.data)
 
diff --git a/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache b/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache
index bc74fbc295b..853beff8bdc 100644
--- a/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache
+++ b/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache
@@ -28,7 +28,11 @@ class RESTResponse(io.IOBase):
         if resp.body:
             # In Python 3, the response body is utf-8 encoded bytes.
             if six.PY3:
-                self.data = resp.body.decode('utf-8')
+                try
+                    self.data = resp.body.decode('utf-8')
+                except UnicodeDecodeError:
+                    # probably data is a binary content itself
+                    self.data = resp.body
             else:
                 self.data = resp.body
         else:
-- 
GitLab


From 3d0be6ef59f3871e193c698af4b65009752b2e04 Mon Sep 17 00:00:00 2001
From: Viktor Danyliuk <viktor.danyliuk@arachnys.com>
Date: Fri, 7 Dec 2018 14:30:01 +0200
Subject: [PATCH 2/4] Keep response body in bytes until we really want it to be
 a string.

---
 .../src/main/resources/python/api_client.mustache  | 10 ++++++++--
 .../main/resources/python/asyncio/rest.mustache    |  6 ------
 .../src/main/resources/python/rest.mustache        |  8 --------
 .../main/resources/python/tornado/rest.mustache    | 14 +-------------
 4 files changed, 9 insertions(+), 29 deletions(-)

diff --git a/modules/openapi-generator/src/main/resources/python/api_client.mustache b/modules/openapi-generator/src/main/resources/python/api_client.mustache
index b89911d51d2..9040dce9fee 100644
--- a/modules/openapi-generator/src/main/resources/python/api_client.mustache
+++ b/modules/openapi-generator/src/main/resources/python/api_client.mustache
@@ -244,11 +244,17 @@ class ApiClient(object):
         if response_type == "file":
             return self.__deserialize_file(response)
 
+        try
+            data = response.data.decode('utf-8')
+        except UnicodeDecodeError:
+            # probably data is a binary content itself
+            data = response.data
+
         # fetch data from response object
         try:
-            data = json.loads(response.data)
+            data = json.loads(data)
         except ValueError:
-            data = response.data
+            pass
 
         return self.__deserialize(data, response_type)
 
diff --git a/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache b/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache
index ac896c308fc..a18de9712fe 100644
--- a/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache
+++ b/modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache
@@ -161,12 +161,6 @@ class RESTClientObject(object):
         if _preload_content:
 
             data = await r.read()
-            try
-                # binary -> string
-                data = data.decode('utf-8')
-            except UnicodeDecodeError:
-                # probably data is a binary content itself
-                pass
             r = RESTResponse(r, data)
 
             # log response body
diff --git a/modules/openapi-generator/src/main/resources/python/rest.mustache b/modules/openapi-generator/src/main/resources/python/rest.mustache
index 3221e63c405..100cc0f27a3 100644
--- a/modules/openapi-generator/src/main/resources/python/rest.mustache
+++ b/modules/openapi-generator/src/main/resources/python/rest.mustache
@@ -207,14 +207,6 @@ class RESTClientObject(object):
         if _preload_content:
             r = RESTResponse(r)
 
-            # In the python 3, the response.data is bytes.
-            # we need to decode it to string.
-            if six.PY3:
-                try
-                    r.data = r.data.decode('utf-8')
-                except UnicodeDecodeError:
-                    # probably data is a binary content itself
-                    pass
             # log response body
             logger.debug("response body: %s", r.data)
 
diff --git a/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache b/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache
index 853beff8bdc..e6e77b53295 100644
--- a/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache
+++ b/modules/openapi-generator/src/main/resources/python/tornado/rest.mustache
@@ -24,19 +24,7 @@ class RESTResponse(io.IOBase):
         self.tornado_response = resp
         self.status = resp.code
         self.reason = resp.reason
-
-        if resp.body:
-            # In Python 3, the response body is utf-8 encoded bytes.
-            if six.PY3:
-                try
-                    self.data = resp.body.decode('utf-8')
-                except UnicodeDecodeError:
-                    # probably data is a binary content itself
-                    self.data = resp.body
-            else:
-                self.data = resp.body
-        else:
-            self.data = None
+        self.data = resp.body
 
     def getheaders(self):
         """Returns a CIMultiDictProxy of the response headers."""
-- 
GitLab


From f1814966831957aafac7bab6ac1b1bb41ba50180 Mon Sep 17 00:00:00 2001
From: Viktor Danyliuk <viktor.danyliuk@arachnys.com>
Date: Fri, 7 Dec 2018 14:34:41 +0200
Subject: [PATCH 3/4] Merge try-except statements.

---
 .../src/main/resources/python/api_client.mustache          | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/modules/openapi-generator/src/main/resources/python/api_client.mustache b/modules/openapi-generator/src/main/resources/python/api_client.mustache
index 9040dce9fee..68a3b5568ad 100644
--- a/modules/openapi-generator/src/main/resources/python/api_client.mustache
+++ b/modules/openapi-generator/src/main/resources/python/api_client.mustache
@@ -246,14 +246,13 @@ class ApiClient(object):
 
         try
             data = response.data.decode('utf-8')
+            # fetch data from response object
+            data = json.loads(data)
         except UnicodeDecodeError:
             # probably data is a binary content itself
             data = response.data
-
-        # fetch data from response object
-        try:
-            data = json.loads(data)
         except ValueError:
+            # failed to fetch data from response object
             pass
 
         return self.__deserialize(data, response_type)
-- 
GitLab


From d9105bb552521b9353d344e06cde22c6315c03ab Mon Sep 17 00:00:00 2001
From: William Cheng <wing328hk@gmail.com>
Date: Mon, 25 Mar 2019 21:36:50 +0800
Subject: [PATCH 4/4] update python samples

---
 .../python-asyncio/.openapi-generator/VERSION |  2 +-
 .../client/petstore/python-asyncio/README.md  |  2 -
 .../petstore/python-asyncio/docs/FakeApi.md   | 10 ++++-
 .../python-asyncio/petstore_api/__init__.py   |  2 -
 .../petstore_api/api/fake_api.py              | 38 +++++++++++++++----
 .../python-asyncio/petstore_api/api_client.py | 13 +++++--
 .../petstore_api/models/__init__.py           |  2 -
 .../python-asyncio/petstore_api/rest.py       |  2 +-
 .../python-tornado/.openapi-generator/VERSION |  2 +-
 .../client/petstore/python-tornado/README.md  |  2 -
 .../petstore/python-tornado/docs/FakeApi.md   | 10 ++++-
 .../python-tornado/petstore_api/__init__.py   |  2 -
 .../petstore_api/api/fake_api.py              | 38 +++++++++++++++----
 .../python-tornado/petstore_api/api_client.py | 13 +++++--
 .../petstore_api/models/__init__.py           |  2 -
 .../python-tornado/petstore_api/rest.py       | 10 +----
 .../python/.openapi-generator/VERSION         |  2 +-
 samples/client/petstore/python/README.md      |  2 -
 .../client/petstore/python/docs/FakeApi.md    | 10 ++++-
 .../petstore/python/petstore_api/__init__.py  |  2 -
 .../python/petstore_api/api/fake_api.py       | 38 +++++++++++++++----
 .../python/petstore_api/api_client.py         | 13 +++++--
 .../python/petstore_api/models/__init__.py    |  2 -
 .../petstore/python/petstore_api/rest.py      |  5 ---
 24 files changed, 149 insertions(+), 75 deletions(-)

diff --git a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION
index e24c1f857e0..d077ffb477a 100644
--- a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION
+++ b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION
@@ -1 +1 @@
-3.3.3-SNAPSHOT
\ No newline at end of file
+3.3.4-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python-asyncio/README.md b/samples/client/petstore/python-asyncio/README.md
index 486a96573d6..05c64828c81 100644
--- a/samples/client/petstore/python-asyncio/README.md
+++ b/samples/client/petstore/python-asyncio/README.md
@@ -111,7 +111,6 @@ Class | Method | HTTP request | Description
 
  - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md)
  - [Animal](docs/Animal.md)
- - [AnimalFarm](docs/AnimalFarm.md)
  - [ApiResponse](docs/ApiResponse.md)
  - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
  - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
@@ -142,7 +141,6 @@ Class | Method | HTTP request | Description
  - [Pet](docs/Pet.md)
  - [ReadOnlyFirst](docs/ReadOnlyFirst.md)
  - [SpecialModelName](docs/SpecialModelName.md)
- - [StringBooleanMap](docs/StringBooleanMap.md)
  - [Tag](docs/Tag.md)
  - [User](docs/User.md)
 
diff --git a/samples/client/petstore/python-asyncio/docs/FakeApi.md b/samples/client/petstore/python-asyncio/docs/FakeApi.md
index 3d24cab0d3f..97dc3c892e0 100644
--- a/samples/client/petstore/python-asyncio/docs/FakeApi.md
+++ b/samples/client/petstore/python-asyncio/docs/FakeApi.md
@@ -488,7 +488,7 @@ No authorization required
 [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 
 # **test_group_parameters**
-> test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+> test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
 
 Fake endpoint to test group parameters (optional)
 
@@ -504,13 +504,16 @@ from pprint import pprint
 
 # create an instance of the API class
 api_instance = petstore_api.FakeApi()
+required_string_group = 56 # int | Required String in group parameters
+required_boolean_group = True # bool | Required Boolean in group parameters
+required_int64_group = 56 # int | Required Integer in group parameters
 string_group = 56 # int | String in group parameters (optional)
 boolean_group = True # bool | Boolean in group parameters (optional)
 int64_group = 56 # int | Integer in group parameters (optional)
 
 try:
     # Fake endpoint to test group parameters (optional)
-    api_instance.test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+    api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
 except ApiException as e:
     print("Exception when calling FakeApi->test_group_parameters: %s\n" % e)
 ```
@@ -519,6 +522,9 @@ except ApiException as e:
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
+ **required_string_group** | **int**| Required String in group parameters | 
+ **required_boolean_group** | **bool**| Required Boolean in group parameters | 
+ **required_int64_group** | **int**| Required Integer in group parameters | 
  **string_group** | **int**| String in group parameters | [optional] 
  **boolean_group** | **bool**| Boolean in group parameters | [optional] 
  **int64_group** | **int**| Integer in group parameters | [optional] 
diff --git a/samples/client/petstore/python-asyncio/petstore_api/__init__.py b/samples/client/petstore/python-asyncio/petstore_api/__init__.py
index f54256a687c..88ac77881e3 100644
--- a/samples/client/petstore/python-asyncio/petstore_api/__init__.py
+++ b/samples/client/petstore/python-asyncio/petstore_api/__init__.py
@@ -30,7 +30,6 @@ from petstore_api.configuration import Configuration
 # import models into sdk package
 from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
 from petstore_api.models.animal import Animal
-from petstore_api.models.animal_farm import AnimalFarm
 from petstore_api.models.api_response import ApiResponse
 from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
 from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
@@ -61,6 +60,5 @@ from petstore_api.models.outer_enum import OuterEnum
 from petstore_api.models.pet import Pet
 from petstore_api.models.read_only_first import ReadOnlyFirst
 from petstore_api.models.special_model_name import SpecialModelName
-from petstore_api.models.string_boolean_map import StringBooleanMap
 from petstore_api.models.tag import Tag
 from petstore_api.models.user import User
diff --git a/samples/client/petstore/python-asyncio/petstore_api/api/fake_api.py b/samples/client/petstore/python-asyncio/petstore_api/api/fake_api.py
index 7d40ece7a24..1647628c407 100644
--- a/samples/client/petstore/python-asyncio/petstore_api/api/fake_api.py
+++ b/samples/client/petstore/python-asyncio/petstore_api/api/fake_api.py
@@ -1009,16 +1009,19 @@ class FakeApi(object):
             _request_timeout=local_var_params.get('_request_timeout'),
             collection_formats=collection_formats)
 
-    def test_group_parameters(self, **kwargs):  # noqa: E501
+    def test_group_parameters(self, required_string_group, required_boolean_group, required_int64_group, **kwargs):  # noqa: E501
         """Fake endpoint to test group parameters (optional)  # noqa: E501
 
         Fake endpoint to test group parameters (optional)  # noqa: E501
         This method makes a synchronous HTTP request by default. To make an
         asynchronous HTTP request, please pass async_req=True
-        >>> thread = api.test_group_parameters(async_req=True)
+        >>> thread = api.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, async_req=True)
         >>> result = thread.get()
 
         :param async_req bool
+        :param int required_string_group: Required String in group parameters (required)
+        :param bool required_boolean_group: Required Boolean in group parameters (required)
+        :param int required_int64_group: Required Integer in group parameters (required)
         :param int string_group: String in group parameters
         :param bool boolean_group: Boolean in group parameters
         :param int int64_group: Integer in group parameters
@@ -1028,21 +1031,24 @@ class FakeApi(object):
         """
         kwargs['_return_http_data_only'] = True
         if kwargs.get('async_req'):
-            return self.test_group_parameters_with_http_info(**kwargs)  # noqa: E501
+            return self.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, **kwargs)  # noqa: E501
         else:
-            (data) = self.test_group_parameters_with_http_info(**kwargs)  # noqa: E501
+            (data) = self.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, **kwargs)  # noqa: E501
             return data
 
-    def test_group_parameters_with_http_info(self, **kwargs):  # noqa: E501
+    def test_group_parameters_with_http_info(self, required_string_group, required_boolean_group, required_int64_group, **kwargs):  # noqa: E501
         """Fake endpoint to test group parameters (optional)  # noqa: E501
 
         Fake endpoint to test group parameters (optional)  # noqa: E501
         This method makes a synchronous HTTP request by default. To make an
         asynchronous HTTP request, please pass async_req=True
-        >>> thread = api.test_group_parameters_with_http_info(async_req=True)
+        >>> thread = api.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, async_req=True)
         >>> result = thread.get()
 
         :param async_req bool
+        :param int required_string_group: Required String in group parameters (required)
+        :param bool required_boolean_group: Required Boolean in group parameters (required)
+        :param int required_int64_group: Required Integer in group parameters (required)
         :param int string_group: String in group parameters
         :param bool boolean_group: Boolean in group parameters
         :param int int64_group: Integer in group parameters
@@ -1053,7 +1059,7 @@ class FakeApi(object):
 
         local_var_params = locals()
 
-        all_params = ['string_group', 'boolean_group', 'int64_group']  # noqa: E501
+        all_params = ['required_string_group', 'required_boolean_group', 'required_int64_group', 'string_group', 'boolean_group', 'int64_group']  # noqa: E501
         all_params.append('async_req')
         all_params.append('_return_http_data_only')
         all_params.append('_preload_content')
@@ -1067,18 +1073,36 @@ class FakeApi(object):
                 )
             local_var_params[key] = val
         del local_var_params['kwargs']
+        # verify the required parameter 'required_string_group' is set
+        if ('required_string_group' not in local_var_params or
+                local_var_params['required_string_group'] is None):
+            raise ValueError("Missing the required parameter `required_string_group` when calling `test_group_parameters`")  # noqa: E501
+        # verify the required parameter 'required_boolean_group' is set
+        if ('required_boolean_group' not in local_var_params or
+                local_var_params['required_boolean_group'] is None):
+            raise ValueError("Missing the required parameter `required_boolean_group` when calling `test_group_parameters`")  # noqa: E501
+        # verify the required parameter 'required_int64_group' is set
+        if ('required_int64_group' not in local_var_params or
+                local_var_params['required_int64_group'] is None):
+            raise ValueError("Missing the required parameter `required_int64_group` when calling `test_group_parameters`")  # noqa: E501
 
         collection_formats = {}
 
         path_params = {}
 
         query_params = []
+        if 'required_string_group' in local_var_params:
+            query_params.append(('required_string_group', local_var_params['required_string_group']))  # noqa: E501
+        if 'required_int64_group' in local_var_params:
+            query_params.append(('required_int64_group', local_var_params['required_int64_group']))  # noqa: E501
         if 'string_group' in local_var_params:
             query_params.append(('string_group', local_var_params['string_group']))  # noqa: E501
         if 'int64_group' in local_var_params:
             query_params.append(('int64_group', local_var_params['int64_group']))  # noqa: E501
 
         header_params = {}
+        if 'required_boolean_group' in local_var_params:
+            header_params['required_boolean_group'] = local_var_params['required_boolean_group']  # noqa: E501
         if 'boolean_group' in local_var_params:
             header_params['boolean_group'] = local_var_params['boolean_group']  # noqa: E501
 
diff --git a/samples/client/petstore/python-asyncio/petstore_api/api_client.py b/samples/client/petstore/python-asyncio/petstore_api/api_client.py
index 132179b9b9c..2ae3369f9ed 100644
--- a/samples/client/petstore/python-asyncio/petstore_api/api_client.py
+++ b/samples/client/petstore/python-asyncio/petstore_api/api_client.py
@@ -237,11 +237,16 @@ class ApiClient(object):
         if response_type == "file":
             return self.__deserialize_file(response)
 
-        # fetch data from response object
-        try:
-            data = json.loads(response.data)
-        except ValueError:
+        try
+            data = response.data.decode('utf-8')
+            # fetch data from response object
+            data = json.loads(data)
+        except UnicodeDecodeError:
+            # probably data is a binary content itself
             data = response.data
+        except ValueError:
+            # failed to fetch data from response object
+            pass
 
         return self.__deserialize(data, response_type)
 
diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/__init__.py b/samples/client/petstore/python-asyncio/petstore_api/models/__init__.py
index 2450cb334f7..393dec06333 100644
--- a/samples/client/petstore/python-asyncio/petstore_api/models/__init__.py
+++ b/samples/client/petstore/python-asyncio/petstore_api/models/__init__.py
@@ -16,7 +16,6 @@ from __future__ import absolute_import
 # import models into model package
 from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
 from petstore_api.models.animal import Animal
-from petstore_api.models.animal_farm import AnimalFarm
 from petstore_api.models.api_response import ApiResponse
 from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
 from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
@@ -47,6 +46,5 @@ from petstore_api.models.outer_enum import OuterEnum
 from petstore_api.models.pet import Pet
 from petstore_api.models.read_only_first import ReadOnlyFirst
 from petstore_api.models.special_model_name import SpecialModelName
-from petstore_api.models.string_boolean_map import StringBooleanMap
 from petstore_api.models.tag import Tag
 from petstore_api.models.user import User
diff --git a/samples/client/petstore/python-asyncio/petstore_api/rest.py b/samples/client/petstore/python-asyncio/petstore_api/rest.py
index 471ea8417e5..7183b97c384 100644
--- a/samples/client/petstore/python-asyncio/petstore_api/rest.py
+++ b/samples/client/petstore/python-asyncio/petstore_api/rest.py
@@ -168,7 +168,7 @@ class RESTClientObject(object):
         r = await self.pool_manager.request(**args)
         if _preload_content:
 
-            data = await r.text()
+            data = await r.read()
             r = RESTResponse(r, data)
 
             # log response body
diff --git a/samples/client/petstore/python-tornado/.openapi-generator/VERSION b/samples/client/petstore/python-tornado/.openapi-generator/VERSION
index e24c1f857e0..d077ffb477a 100644
--- a/samples/client/petstore/python-tornado/.openapi-generator/VERSION
+++ b/samples/client/petstore/python-tornado/.openapi-generator/VERSION
@@ -1 +1 @@
-3.3.3-SNAPSHOT
\ No newline at end of file
+3.3.4-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python-tornado/README.md b/samples/client/petstore/python-tornado/README.md
index 486a96573d6..05c64828c81 100644
--- a/samples/client/petstore/python-tornado/README.md
+++ b/samples/client/petstore/python-tornado/README.md
@@ -111,7 +111,6 @@ Class | Method | HTTP request | Description
 
  - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md)
  - [Animal](docs/Animal.md)
- - [AnimalFarm](docs/AnimalFarm.md)
  - [ApiResponse](docs/ApiResponse.md)
  - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
  - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
@@ -142,7 +141,6 @@ Class | Method | HTTP request | Description
  - [Pet](docs/Pet.md)
  - [ReadOnlyFirst](docs/ReadOnlyFirst.md)
  - [SpecialModelName](docs/SpecialModelName.md)
- - [StringBooleanMap](docs/StringBooleanMap.md)
  - [Tag](docs/Tag.md)
  - [User](docs/User.md)
 
diff --git a/samples/client/petstore/python-tornado/docs/FakeApi.md b/samples/client/petstore/python-tornado/docs/FakeApi.md
index 3d24cab0d3f..97dc3c892e0 100644
--- a/samples/client/petstore/python-tornado/docs/FakeApi.md
+++ b/samples/client/petstore/python-tornado/docs/FakeApi.md
@@ -488,7 +488,7 @@ No authorization required
 [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 
 # **test_group_parameters**
-> test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+> test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
 
 Fake endpoint to test group parameters (optional)
 
@@ -504,13 +504,16 @@ from pprint import pprint
 
 # create an instance of the API class
 api_instance = petstore_api.FakeApi()
+required_string_group = 56 # int | Required String in group parameters
+required_boolean_group = True # bool | Required Boolean in group parameters
+required_int64_group = 56 # int | Required Integer in group parameters
 string_group = 56 # int | String in group parameters (optional)
 boolean_group = True # bool | Boolean in group parameters (optional)
 int64_group = 56 # int | Integer in group parameters (optional)
 
 try:
     # Fake endpoint to test group parameters (optional)
-    api_instance.test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+    api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
 except ApiException as e:
     print("Exception when calling FakeApi->test_group_parameters: %s\n" % e)
 ```
@@ -519,6 +522,9 @@ except ApiException as e:
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
+ **required_string_group** | **int**| Required String in group parameters | 
+ **required_boolean_group** | **bool**| Required Boolean in group parameters | 
+ **required_int64_group** | **int**| Required Integer in group parameters | 
  **string_group** | **int**| String in group parameters | [optional] 
  **boolean_group** | **bool**| Boolean in group parameters | [optional] 
  **int64_group** | **int**| Integer in group parameters | [optional] 
diff --git a/samples/client/petstore/python-tornado/petstore_api/__init__.py b/samples/client/petstore/python-tornado/petstore_api/__init__.py
index f54256a687c..88ac77881e3 100644
--- a/samples/client/petstore/python-tornado/petstore_api/__init__.py
+++ b/samples/client/petstore/python-tornado/petstore_api/__init__.py
@@ -30,7 +30,6 @@ from petstore_api.configuration import Configuration
 # import models into sdk package
 from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
 from petstore_api.models.animal import Animal
-from petstore_api.models.animal_farm import AnimalFarm
 from petstore_api.models.api_response import ApiResponse
 from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
 from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
@@ -61,6 +60,5 @@ from petstore_api.models.outer_enum import OuterEnum
 from petstore_api.models.pet import Pet
 from petstore_api.models.read_only_first import ReadOnlyFirst
 from petstore_api.models.special_model_name import SpecialModelName
-from petstore_api.models.string_boolean_map import StringBooleanMap
 from petstore_api.models.tag import Tag
 from petstore_api.models.user import User
diff --git a/samples/client/petstore/python-tornado/petstore_api/api/fake_api.py b/samples/client/petstore/python-tornado/petstore_api/api/fake_api.py
index 7d40ece7a24..1647628c407 100644
--- a/samples/client/petstore/python-tornado/petstore_api/api/fake_api.py
+++ b/samples/client/petstore/python-tornado/petstore_api/api/fake_api.py
@@ -1009,16 +1009,19 @@ class FakeApi(object):
             _request_timeout=local_var_params.get('_request_timeout'),
             collection_formats=collection_formats)
 
-    def test_group_parameters(self, **kwargs):  # noqa: E501
+    def test_group_parameters(self, required_string_group, required_boolean_group, required_int64_group, **kwargs):  # noqa: E501
         """Fake endpoint to test group parameters (optional)  # noqa: E501
 
         Fake endpoint to test group parameters (optional)  # noqa: E501
         This method makes a synchronous HTTP request by default. To make an
         asynchronous HTTP request, please pass async_req=True
-        >>> thread = api.test_group_parameters(async_req=True)
+        >>> thread = api.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, async_req=True)
         >>> result = thread.get()
 
         :param async_req bool
+        :param int required_string_group: Required String in group parameters (required)
+        :param bool required_boolean_group: Required Boolean in group parameters (required)
+        :param int required_int64_group: Required Integer in group parameters (required)
         :param int string_group: String in group parameters
         :param bool boolean_group: Boolean in group parameters
         :param int int64_group: Integer in group parameters
@@ -1028,21 +1031,24 @@ class FakeApi(object):
         """
         kwargs['_return_http_data_only'] = True
         if kwargs.get('async_req'):
-            return self.test_group_parameters_with_http_info(**kwargs)  # noqa: E501
+            return self.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, **kwargs)  # noqa: E501
         else:
-            (data) = self.test_group_parameters_with_http_info(**kwargs)  # noqa: E501
+            (data) = self.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, **kwargs)  # noqa: E501
             return data
 
-    def test_group_parameters_with_http_info(self, **kwargs):  # noqa: E501
+    def test_group_parameters_with_http_info(self, required_string_group, required_boolean_group, required_int64_group, **kwargs):  # noqa: E501
         """Fake endpoint to test group parameters (optional)  # noqa: E501
 
         Fake endpoint to test group parameters (optional)  # noqa: E501
         This method makes a synchronous HTTP request by default. To make an
         asynchronous HTTP request, please pass async_req=True
-        >>> thread = api.test_group_parameters_with_http_info(async_req=True)
+        >>> thread = api.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, async_req=True)
         >>> result = thread.get()
 
         :param async_req bool
+        :param int required_string_group: Required String in group parameters (required)
+        :param bool required_boolean_group: Required Boolean in group parameters (required)
+        :param int required_int64_group: Required Integer in group parameters (required)
         :param int string_group: String in group parameters
         :param bool boolean_group: Boolean in group parameters
         :param int int64_group: Integer in group parameters
@@ -1053,7 +1059,7 @@ class FakeApi(object):
 
         local_var_params = locals()
 
-        all_params = ['string_group', 'boolean_group', 'int64_group']  # noqa: E501
+        all_params = ['required_string_group', 'required_boolean_group', 'required_int64_group', 'string_group', 'boolean_group', 'int64_group']  # noqa: E501
         all_params.append('async_req')
         all_params.append('_return_http_data_only')
         all_params.append('_preload_content')
@@ -1067,18 +1073,36 @@ class FakeApi(object):
                 )
             local_var_params[key] = val
         del local_var_params['kwargs']
+        # verify the required parameter 'required_string_group' is set
+        if ('required_string_group' not in local_var_params or
+                local_var_params['required_string_group'] is None):
+            raise ValueError("Missing the required parameter `required_string_group` when calling `test_group_parameters`")  # noqa: E501
+        # verify the required parameter 'required_boolean_group' is set
+        if ('required_boolean_group' not in local_var_params or
+                local_var_params['required_boolean_group'] is None):
+            raise ValueError("Missing the required parameter `required_boolean_group` when calling `test_group_parameters`")  # noqa: E501
+        # verify the required parameter 'required_int64_group' is set
+        if ('required_int64_group' not in local_var_params or
+                local_var_params['required_int64_group'] is None):
+            raise ValueError("Missing the required parameter `required_int64_group` when calling `test_group_parameters`")  # noqa: E501
 
         collection_formats = {}
 
         path_params = {}
 
         query_params = []
+        if 'required_string_group' in local_var_params:
+            query_params.append(('required_string_group', local_var_params['required_string_group']))  # noqa: E501
+        if 'required_int64_group' in local_var_params:
+            query_params.append(('required_int64_group', local_var_params['required_int64_group']))  # noqa: E501
         if 'string_group' in local_var_params:
             query_params.append(('string_group', local_var_params['string_group']))  # noqa: E501
         if 'int64_group' in local_var_params:
             query_params.append(('int64_group', local_var_params['int64_group']))  # noqa: E501
 
         header_params = {}
+        if 'required_boolean_group' in local_var_params:
+            header_params['required_boolean_group'] = local_var_params['required_boolean_group']  # noqa: E501
         if 'boolean_group' in local_var_params:
             header_params['boolean_group'] = local_var_params['boolean_group']  # noqa: E501
 
diff --git a/samples/client/petstore/python-tornado/petstore_api/api_client.py b/samples/client/petstore/python-tornado/petstore_api/api_client.py
index fe0c3948a4d..ffbec16b2aa 100644
--- a/samples/client/petstore/python-tornado/petstore_api/api_client.py
+++ b/samples/client/petstore/python-tornado/petstore_api/api_client.py
@@ -239,11 +239,16 @@ class ApiClient(object):
         if response_type == "file":
             return self.__deserialize_file(response)
 
-        # fetch data from response object
-        try:
-            data = json.loads(response.data)
-        except ValueError:
+        try
+            data = response.data.decode('utf-8')
+            # fetch data from response object
+            data = json.loads(data)
+        except UnicodeDecodeError:
+            # probably data is a binary content itself
             data = response.data
+        except ValueError:
+            # failed to fetch data from response object
+            pass
 
         return self.__deserialize(data, response_type)
 
diff --git a/samples/client/petstore/python-tornado/petstore_api/models/__init__.py b/samples/client/petstore/python-tornado/petstore_api/models/__init__.py
index 2450cb334f7..393dec06333 100644
--- a/samples/client/petstore/python-tornado/petstore_api/models/__init__.py
+++ b/samples/client/petstore/python-tornado/petstore_api/models/__init__.py
@@ -16,7 +16,6 @@ from __future__ import absolute_import
 # import models into model package
 from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
 from petstore_api.models.animal import Animal
-from petstore_api.models.animal_farm import AnimalFarm
 from petstore_api.models.api_response import ApiResponse
 from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
 from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
@@ -47,6 +46,5 @@ from petstore_api.models.outer_enum import OuterEnum
 from petstore_api.models.pet import Pet
 from petstore_api.models.read_only_first import ReadOnlyFirst
 from petstore_api.models.special_model_name import SpecialModelName
-from petstore_api.models.string_boolean_map import StringBooleanMap
 from petstore_api.models.tag import Tag
 from petstore_api.models.user import User
diff --git a/samples/client/petstore/python-tornado/petstore_api/rest.py b/samples/client/petstore/python-tornado/petstore_api/rest.py
index e65cc9975e3..afd7af278b7 100644
--- a/samples/client/petstore/python-tornado/petstore_api/rest.py
+++ b/samples/client/petstore/python-tornado/petstore_api/rest.py
@@ -32,15 +32,7 @@ class RESTResponse(io.IOBase):
         self.tornado_response = resp
         self.status = resp.code
         self.reason = resp.reason
-
-        if resp.body:
-            # In Python 3, the response body is utf-8 encoded bytes.
-            if six.PY3:
-                self.data = resp.body.decode('utf-8')
-            else:
-                self.data = resp.body
-        else:
-            self.data = None
+        self.data = resp.body
 
     def getheaders(self):
         """Returns a CIMultiDictProxy of the response headers."""
diff --git a/samples/client/petstore/python/.openapi-generator/VERSION b/samples/client/petstore/python/.openapi-generator/VERSION
index e24c1f857e0..d077ffb477a 100644
--- a/samples/client/petstore/python/.openapi-generator/VERSION
+++ b/samples/client/petstore/python/.openapi-generator/VERSION
@@ -1 +1 @@
-3.3.3-SNAPSHOT
\ No newline at end of file
+3.3.4-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python/README.md b/samples/client/petstore/python/README.md
index 486a96573d6..05c64828c81 100644
--- a/samples/client/petstore/python/README.md
+++ b/samples/client/petstore/python/README.md
@@ -111,7 +111,6 @@ Class | Method | HTTP request | Description
 
  - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md)
  - [Animal](docs/Animal.md)
- - [AnimalFarm](docs/AnimalFarm.md)
  - [ApiResponse](docs/ApiResponse.md)
  - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
  - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
@@ -142,7 +141,6 @@ Class | Method | HTTP request | Description
  - [Pet](docs/Pet.md)
  - [ReadOnlyFirst](docs/ReadOnlyFirst.md)
  - [SpecialModelName](docs/SpecialModelName.md)
- - [StringBooleanMap](docs/StringBooleanMap.md)
  - [Tag](docs/Tag.md)
  - [User](docs/User.md)
 
diff --git a/samples/client/petstore/python/docs/FakeApi.md b/samples/client/petstore/python/docs/FakeApi.md
index 3d24cab0d3f..97dc3c892e0 100644
--- a/samples/client/petstore/python/docs/FakeApi.md
+++ b/samples/client/petstore/python/docs/FakeApi.md
@@ -488,7 +488,7 @@ No authorization required
 [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 
 # **test_group_parameters**
-> test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+> test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
 
 Fake endpoint to test group parameters (optional)
 
@@ -504,13 +504,16 @@ from pprint import pprint
 
 # create an instance of the API class
 api_instance = petstore_api.FakeApi()
+required_string_group = 56 # int | Required String in group parameters
+required_boolean_group = True # bool | Required Boolean in group parameters
+required_int64_group = 56 # int | Required Integer in group parameters
 string_group = 56 # int | String in group parameters (optional)
 boolean_group = True # bool | Boolean in group parameters (optional)
 int64_group = 56 # int | Integer in group parameters (optional)
 
 try:
     # Fake endpoint to test group parameters (optional)
-    api_instance.test_group_parameters(string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
+    api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group)
 except ApiException as e:
     print("Exception when calling FakeApi->test_group_parameters: %s\n" % e)
 ```
@@ -519,6 +522,9 @@ except ApiException as e:
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
+ **required_string_group** | **int**| Required String in group parameters | 
+ **required_boolean_group** | **bool**| Required Boolean in group parameters | 
+ **required_int64_group** | **int**| Required Integer in group parameters | 
  **string_group** | **int**| String in group parameters | [optional] 
  **boolean_group** | **bool**| Boolean in group parameters | [optional] 
  **int64_group** | **int**| Integer in group parameters | [optional] 
diff --git a/samples/client/petstore/python/petstore_api/__init__.py b/samples/client/petstore/python/petstore_api/__init__.py
index f54256a687c..88ac77881e3 100644
--- a/samples/client/petstore/python/petstore_api/__init__.py
+++ b/samples/client/petstore/python/petstore_api/__init__.py
@@ -30,7 +30,6 @@ from petstore_api.configuration import Configuration
 # import models into sdk package
 from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
 from petstore_api.models.animal import Animal
-from petstore_api.models.animal_farm import AnimalFarm
 from petstore_api.models.api_response import ApiResponse
 from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
 from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
@@ -61,6 +60,5 @@ from petstore_api.models.outer_enum import OuterEnum
 from petstore_api.models.pet import Pet
 from petstore_api.models.read_only_first import ReadOnlyFirst
 from petstore_api.models.special_model_name import SpecialModelName
-from petstore_api.models.string_boolean_map import StringBooleanMap
 from petstore_api.models.tag import Tag
 from petstore_api.models.user import User
diff --git a/samples/client/petstore/python/petstore_api/api/fake_api.py b/samples/client/petstore/python/petstore_api/api/fake_api.py
index 7d40ece7a24..1647628c407 100644
--- a/samples/client/petstore/python/petstore_api/api/fake_api.py
+++ b/samples/client/petstore/python/petstore_api/api/fake_api.py
@@ -1009,16 +1009,19 @@ class FakeApi(object):
             _request_timeout=local_var_params.get('_request_timeout'),
             collection_formats=collection_formats)
 
-    def test_group_parameters(self, **kwargs):  # noqa: E501
+    def test_group_parameters(self, required_string_group, required_boolean_group, required_int64_group, **kwargs):  # noqa: E501
         """Fake endpoint to test group parameters (optional)  # noqa: E501
 
         Fake endpoint to test group parameters (optional)  # noqa: E501
         This method makes a synchronous HTTP request by default. To make an
         asynchronous HTTP request, please pass async_req=True
-        >>> thread = api.test_group_parameters(async_req=True)
+        >>> thread = api.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, async_req=True)
         >>> result = thread.get()
 
         :param async_req bool
+        :param int required_string_group: Required String in group parameters (required)
+        :param bool required_boolean_group: Required Boolean in group parameters (required)
+        :param int required_int64_group: Required Integer in group parameters (required)
         :param int string_group: String in group parameters
         :param bool boolean_group: Boolean in group parameters
         :param int int64_group: Integer in group parameters
@@ -1028,21 +1031,24 @@ class FakeApi(object):
         """
         kwargs['_return_http_data_only'] = True
         if kwargs.get('async_req'):
-            return self.test_group_parameters_with_http_info(**kwargs)  # noqa: E501
+            return self.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, **kwargs)  # noqa: E501
         else:
-            (data) = self.test_group_parameters_with_http_info(**kwargs)  # noqa: E501
+            (data) = self.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, **kwargs)  # noqa: E501
             return data
 
-    def test_group_parameters_with_http_info(self, **kwargs):  # noqa: E501
+    def test_group_parameters_with_http_info(self, required_string_group, required_boolean_group, required_int64_group, **kwargs):  # noqa: E501
         """Fake endpoint to test group parameters (optional)  # noqa: E501
 
         Fake endpoint to test group parameters (optional)  # noqa: E501
         This method makes a synchronous HTTP request by default. To make an
         asynchronous HTTP request, please pass async_req=True
-        >>> thread = api.test_group_parameters_with_http_info(async_req=True)
+        >>> thread = api.test_group_parameters_with_http_info(required_string_group, required_boolean_group, required_int64_group, async_req=True)
         >>> result = thread.get()
 
         :param async_req bool
+        :param int required_string_group: Required String in group parameters (required)
+        :param bool required_boolean_group: Required Boolean in group parameters (required)
+        :param int required_int64_group: Required Integer in group parameters (required)
         :param int string_group: String in group parameters
         :param bool boolean_group: Boolean in group parameters
         :param int int64_group: Integer in group parameters
@@ -1053,7 +1059,7 @@ class FakeApi(object):
 
         local_var_params = locals()
 
-        all_params = ['string_group', 'boolean_group', 'int64_group']  # noqa: E501
+        all_params = ['required_string_group', 'required_boolean_group', 'required_int64_group', 'string_group', 'boolean_group', 'int64_group']  # noqa: E501
         all_params.append('async_req')
         all_params.append('_return_http_data_only')
         all_params.append('_preload_content')
@@ -1067,18 +1073,36 @@ class FakeApi(object):
                 )
             local_var_params[key] = val
         del local_var_params['kwargs']
+        # verify the required parameter 'required_string_group' is set
+        if ('required_string_group' not in local_var_params or
+                local_var_params['required_string_group'] is None):
+            raise ValueError("Missing the required parameter `required_string_group` when calling `test_group_parameters`")  # noqa: E501
+        # verify the required parameter 'required_boolean_group' is set
+        if ('required_boolean_group' not in local_var_params or
+                local_var_params['required_boolean_group'] is None):
+            raise ValueError("Missing the required parameter `required_boolean_group` when calling `test_group_parameters`")  # noqa: E501
+        # verify the required parameter 'required_int64_group' is set
+        if ('required_int64_group' not in local_var_params or
+                local_var_params['required_int64_group'] is None):
+            raise ValueError("Missing the required parameter `required_int64_group` when calling `test_group_parameters`")  # noqa: E501
 
         collection_formats = {}
 
         path_params = {}
 
         query_params = []
+        if 'required_string_group' in local_var_params:
+            query_params.append(('required_string_group', local_var_params['required_string_group']))  # noqa: E501
+        if 'required_int64_group' in local_var_params:
+            query_params.append(('required_int64_group', local_var_params['required_int64_group']))  # noqa: E501
         if 'string_group' in local_var_params:
             query_params.append(('string_group', local_var_params['string_group']))  # noqa: E501
         if 'int64_group' in local_var_params:
             query_params.append(('int64_group', local_var_params['int64_group']))  # noqa: E501
 
         header_params = {}
+        if 'required_boolean_group' in local_var_params:
+            header_params['required_boolean_group'] = local_var_params['required_boolean_group']  # noqa: E501
         if 'boolean_group' in local_var_params:
             header_params['boolean_group'] = local_var_params['boolean_group']  # noqa: E501
 
diff --git a/samples/client/petstore/python/petstore_api/api_client.py b/samples/client/petstore/python/petstore_api/api_client.py
index a8acb32cf22..558fa997cb6 100644
--- a/samples/client/petstore/python/petstore_api/api_client.py
+++ b/samples/client/petstore/python/petstore_api/api_client.py
@@ -237,11 +237,16 @@ class ApiClient(object):
         if response_type == "file":
             return self.__deserialize_file(response)
 
-        # fetch data from response object
-        try:
-            data = json.loads(response.data)
-        except ValueError:
+        try
+            data = response.data.decode('utf-8')
+            # fetch data from response object
+            data = json.loads(data)
+        except UnicodeDecodeError:
+            # probably data is a binary content itself
             data = response.data
+        except ValueError:
+            # failed to fetch data from response object
+            pass
 
         return self.__deserialize(data, response_type)
 
diff --git a/samples/client/petstore/python/petstore_api/models/__init__.py b/samples/client/petstore/python/petstore_api/models/__init__.py
index 2450cb334f7..393dec06333 100644
--- a/samples/client/petstore/python/petstore_api/models/__init__.py
+++ b/samples/client/petstore/python/petstore_api/models/__init__.py
@@ -16,7 +16,6 @@ from __future__ import absolute_import
 # import models into model package
 from petstore_api.models.additional_properties_class import AdditionalPropertiesClass
 from petstore_api.models.animal import Animal
-from petstore_api.models.animal_farm import AnimalFarm
 from petstore_api.models.api_response import ApiResponse
 from petstore_api.models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
 from petstore_api.models.array_of_number_only import ArrayOfNumberOnly
@@ -47,6 +46,5 @@ from petstore_api.models.outer_enum import OuterEnum
 from petstore_api.models.pet import Pet
 from petstore_api.models.read_only_first import ReadOnlyFirst
 from petstore_api.models.special_model_name import SpecialModelName
-from petstore_api.models.string_boolean_map import StringBooleanMap
 from petstore_api.models.tag import Tag
 from petstore_api.models.user import User
diff --git a/samples/client/petstore/python/petstore_api/rest.py b/samples/client/petstore/python/petstore_api/rest.py
index 30ba5fb8d3f..47030ebbc7e 100644
--- a/samples/client/petstore/python/petstore_api/rest.py
+++ b/samples/client/petstore/python/petstore_api/rest.py
@@ -215,11 +215,6 @@ class RESTClientObject(object):
         if _preload_content:
             r = RESTResponse(r)
 
-            # In the python 3, the response.data is bytes.
-            # we need to decode it to string.
-            if six.PY3:
-                r.data = r.data.decode('utf8')
-
             # log response body
             logger.debug("response body: %s", r.data)
 
-- 
GitLab