[python] fix content_type deserialize (#19317)

* [Python] fix: #19285

* [python] update sample

* [python] add test

* [python] remove test
This commit is contained in:
ふぁ 2024-08-25 00:40:15 +09:00 committed by GitHub
parent 7a7c8c19ab
commit 69cce249f6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 42 additions and 10 deletions

View File

@ -412,12 +412,12 @@ class ApiClient:
data = json.loads(response_text)
except ValueError:
data = response_text
elif content_type.startswith("application/json"):
elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
if response_text == "":
data = ""
else:
data = json.loads(response_text)
elif content_type.startswith("text/plain"):
elif re.match(r'^text/plain\s*(;|$)', content_type, re.IGNORECASE):
data = response_text
else:
raise ApiException(

View File

@ -405,12 +405,12 @@ class ApiClient:
data = json.loads(response_text)
except ValueError:
data = response_text
elif content_type.startswith("application/json"):
elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
if response_text == "":
data = ""
else:
data = json.loads(response_text)
elif content_type.startswith("text/plain"):
elif re.match(r'^text/plain\s*(;|$)', content_type, re.IGNORECASE):
data = response_text
else:
raise ApiException(

View File

@ -405,12 +405,12 @@ class ApiClient:
data = json.loads(response_text)
except ValueError:
data = response_text
elif content_type.startswith("application/json"):
elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
if response_text == "":
data = ""
else:
data = json.loads(response_text)
elif content_type.startswith("text/plain"):
elif re.match(r'^text/plain\s*(;|$)', content_type, re.IGNORECASE):
data = response_text
else:
raise ApiException(

View File

@ -407,12 +407,12 @@ class ApiClient:
data = json.loads(response_text)
except ValueError:
data = response_text
elif content_type.startswith("application/json"):
elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
if response_text == "":
data = ""
else:
data = json.loads(response_text)
elif content_type.startswith("text/plain"):
elif re.match(r'^text/plain\s*(;|$)', content_type, re.IGNORECASE):
data = response_text
else:
raise ApiException(

View File

@ -404,12 +404,12 @@ class ApiClient:
data = json.loads(response_text)
except ValueError:
data = response_text
elif content_type.startswith("application/json"):
elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
if response_text == "":
data = ""
else:
data = json.loads(response_text)
elif content_type.startswith("text/plain"):
elif re.match(r'^text/plain\s*(;|$)', content_type, re.IGNORECASE):
data = response_text
else:
raise ApiException(

View File

@ -301,3 +301,35 @@ class DeserializationTests(unittest.TestCase):
self.assertEqual(deserialized.class_name, "Cat")
self.assertEqual(deserialized.declawed, True)
self.assertEqual(deserialized.to_json(), '{"className": "Cat", "color": "red", "declawed": true}')
def test_deserialize_content_type(self):
response = json.dumps({"a": "a"})
deserialized = self.deserialize(response, "Dict[str, str]", 'application/json')
self.assertTrue(isinstance(deserialized, dict))
deserialized = self.deserialize(response, "Dict[str, str]", 'application/vnd.api+json')
self.assertTrue(isinstance(deserialized, dict))
deserialized = self.deserialize(response, "Dict[str, str]", 'application/json; charset=utf-8')
self.assertTrue(isinstance(deserialized, dict))
deserialized = self.deserialize(response, "Dict[str, str]", 'application/vnd.api+json; charset=utf-8')
self.assertTrue(isinstance(deserialized, dict))
deserialized = self.deserialize(response, "str", 'text/plain')
self.assertTrue(isinstance(deserialized, str))
deserialized = self.deserialize(response, "Dict[str, str]", 'APPLICATION/JSON')
self.assertTrue(isinstance(deserialized, dict))
with self.assertRaises(petstore_api.ApiException) as cm:
deserialized = self.deserialize(response, "str", 'text/html')
with self.assertRaises(petstore_api.ApiException) as cm:
deserialized = self.deserialize(response, "Dict[str, str]", 'application/jsonnnnn')