forked from loafle/openapi-generator-original
[Python] Fix Python UTF-8 Encoding Issue (#5679)
* Try decoding but don't bail on error * Switch binary and ByteArray to bytes * Read content type and parse appropriately * Remove response parsing * Remove response parsing and just return the data * Update petshop examples w/ new generator code * Fix copy/paste error with naming * Update petstore examples * Move response decoding to inside _preload_content block * Update the clients again * Use a raw string for the regex pattern * Regenerate petstore clients * Add bytes to python primitives as it's supported in 2.7 and 3 * Add bytes to the exports from model_utils * Import bytes from model_utils * Add conditional typing for regex pattern to match variable type * Regenerate petstore clients * Use read() instead of text() for asyncio * Regenerate petstore clients * Remove unused six import * Regenerate petstore clients * Add newline to kick Circle to re-run * Remove whitespace from tox.ini * Update more examples after ensure_updated * Add sample updates that didn't run with the --batch flag * Remove extra bracket in regex to remove warning * Stop printing debug messages * Add bytes examples to python doc generators * Update generated FakeApi docs * Regenerate api_client.py * Remove print statements from generated clients * Update bytes example in FakeApi.md. Again. I swear. * Add yet another seemingly missing doc update * Catch the error, decode the body, and re-throw * Remove the updates now that the change is non-breaking * Regenerate client * Add bytes deserialization test * Update exception parsing * Add exception parsing for python-experimental * Regenerate client with minor changes * Revert test changes * Regenerate model_utils.py * Update confusing test name * Remove bytes from mapping and examples * Add back in the old binary/ByteArray to str mapping * Update docs and api_client template * Add experimental api_client changes * Regenerate samples again * Add Tornado handling to early return * Try fixing Tornado python returns * More documentation changes * Re-generate the client code * Remove bytes from test_format_test * Remove more leftover bytes usages * Switch bytes validation back to string * Fix format_test template and regenerate * Remove unused bytes var * Remove bytes import from models and regenerate * Remove bytes import from test_deserialization * Reduce nested ifs * Remove byte logic for now * Regenerate client after latest changes * Remove another bytes usage * Regenerate after removing dangling byte string usage * Reduce the scope of the try/catch in api_client * Regenerate after try/catch cleanup * Swap catch for except * Regenerate Python client after api_client change * Fix lint error on the generated api_client * Add binary format test back in w/ string * Add decoding to python-experimental and regenerate * Import re into python-experimental api_client * Ensure file upload json response is utf-8 encoded bytes
This commit is contained in:
@@ -10,6 +10,7 @@ $ nosetests -v
|
||||
"""
|
||||
|
||||
import os
|
||||
import six
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
|
||||
@@ -377,6 +377,36 @@ class DeserializationTests(unittest.TestCase):
|
||||
finally:
|
||||
os.unlink(file_path)
|
||||
|
||||
def test_deserialize_binary_to_str(self):
|
||||
"""Ensures that bytes deserialization works"""
|
||||
response_types_mixed = (str,)
|
||||
|
||||
# sample from http://www.jtricks.com/download-text
|
||||
HTTPResponse = namedtuple(
|
||||
'urllib3_response_HTTPResponse',
|
||||
['status', 'reason', 'data', 'getheaders', 'getheader']
|
||||
)
|
||||
headers = {}
|
||||
def get_headers():
|
||||
return headers
|
||||
def get_header(name, default=None):
|
||||
return headers.get(name, default)
|
||||
data = "str"
|
||||
|
||||
http_response = HTTPResponse(
|
||||
status=200,
|
||||
reason='OK',
|
||||
data=json.dumps(data).encode("utf-8") if six.PY3 else json.dumps(data),
|
||||
getheaders=get_headers,
|
||||
getheader=get_header
|
||||
)
|
||||
|
||||
mock_response = RESTResponse(http_response)
|
||||
|
||||
result = self.deserialize(mock_response, response_types_mixed, True)
|
||||
self.assertEqual(isinstance(result, str), True)
|
||||
self.assertEqual(result, data)
|
||||
|
||||
def test_deserialize_string_boolean_map(self):
|
||||
"""
|
||||
Ensures that string boolean (additional properties)
|
||||
|
||||
@@ -329,7 +329,7 @@ class PetApiTests(unittest.TestCase):
|
||||
http_response = HTTPResponse(
|
||||
status=200,
|
||||
reason='OK',
|
||||
data=json.dumps(api_respponse),
|
||||
data=json.dumps(api_respponse).encode('utf-8'),
|
||||
getheaders=get_headers,
|
||||
getheader=get_header
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user