forked from loafle/openapi-generator-original
[python-experimental] adds and uses regex patterns for json + filename detection (#13357)
* Unit test sample regenerated * Reverts version files
This commit is contained in:
parent
cb8d9d5bfe
commit
f139c090e5
@ -21,7 +21,7 @@ Python {{generatorLanguageVersion}}
|
||||
v3.9 is needed so one can combine classmethod and property decorators to define
|
||||
object schema properties as classes
|
||||
|
||||
## Migration from other generators like python and python-experimental
|
||||
## Migration from other generators like python and python-legacy
|
||||
|
||||
### Changes
|
||||
1. This generator uses spec case for all (object) property names and parameter names.
|
||||
|
@ -796,24 +796,25 @@ class ApiResponseWithoutDeserialization(ApiResponse):
|
||||
|
||||
|
||||
class JSONDetector:
|
||||
@staticmethod
|
||||
def _content_type_is_json(content_type: str) -> bool:
|
||||
content_type_piece = content_type
|
||||
if ';' in content_type:
|
||||
# application/json; charset=UTF-8
|
||||
content_type_piece = content_type.split(';')[0]
|
||||
elif '-' in content_type:
|
||||
"""
|
||||
application/json-patch+json
|
||||
application/json-seq
|
||||
"""
|
||||
content_type_piece = content_type.split('-')[0]
|
||||
if content_type_piece == 'application/json':
|
||||
"""
|
||||
Works for:
|
||||
application/json
|
||||
application/json; charset=UTF-8
|
||||
application/json-patch+json
|
||||
application/geo+json
|
||||
"""
|
||||
__json_content_type_pattern = re.compile("application/[^+]*[+]?(json);?.*")
|
||||
|
||||
@classmethod
|
||||
def _content_type_is_json(cls, content_type: str) -> bool:
|
||||
if cls.__json_content_type_pattern.match(content_type):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class OpenApiResponse(JSONDetector):
|
||||
__filename_content_disposition_pattern = re.compile('filename="(.+?)"')
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
response_cls: typing.Type[ApiResponse] = ApiResponse,
|
||||
@ -831,11 +832,11 @@ class OpenApiResponse(JSONDetector):
|
||||
# python must be >= 3.9 so we can pass in bytes into json.loads
|
||||
return json.loads(response.data)
|
||||
|
||||
@staticmethod
|
||||
def __file_name_from_content_disposition(content_disposition: typing.Optional[str]) -> typing.Optional[str]:
|
||||
@classmethod
|
||||
def __file_name_from_content_disposition(cls, content_disposition: typing.Optional[str]) -> typing.Optional[str]:
|
||||
if content_disposition is None:
|
||||
return None
|
||||
match = re.search('filename="(.+?)"', content_disposition)
|
||||
match = cls.__filename_content_disposition_pattern.search(content_disposition)
|
||||
if not match:
|
||||
return None
|
||||
return match.group(1)
|
||||
|
@ -13,7 +13,7 @@ Python >=3.9
|
||||
v3.9 is needed so one can combine classmethod and property decorators to define
|
||||
object schema properties as classes
|
||||
|
||||
## Migration from other generators like python and python-experimental
|
||||
## Migration from other generators like python and python-legacy
|
||||
|
||||
### Changes
|
||||
1. This generator uses spec case for all (object) property names and parameter names.
|
||||
|
@ -800,24 +800,25 @@ class ApiResponseWithoutDeserialization(ApiResponse):
|
||||
|
||||
|
||||
class JSONDetector:
|
||||
@staticmethod
|
||||
def _content_type_is_json(content_type: str) -> bool:
|
||||
content_type_piece = content_type
|
||||
if ';' in content_type:
|
||||
# application/json; charset=UTF-8
|
||||
content_type_piece = content_type.split(';')[0]
|
||||
elif '-' in content_type:
|
||||
"""
|
||||
application/json-patch+json
|
||||
application/json-seq
|
||||
"""
|
||||
content_type_piece = content_type.split('-')[0]
|
||||
if content_type_piece == 'application/json':
|
||||
"""
|
||||
Works for:
|
||||
application/json
|
||||
application/json; charset=UTF-8
|
||||
application/json-patch+json
|
||||
application/geo+json
|
||||
"""
|
||||
__json_content_type_pattern = re.compile("application/[^+]*[+]?(json);?.*")
|
||||
|
||||
@classmethod
|
||||
def _content_type_is_json(cls, content_type: str) -> bool:
|
||||
if cls.__json_content_type_pattern.match(content_type):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class OpenApiResponse(JSONDetector):
|
||||
__filename_content_disposition_pattern = re.compile('filename="(.+?)"')
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
response_cls: typing.Type[ApiResponse] = ApiResponse,
|
||||
@ -835,11 +836,11 @@ class OpenApiResponse(JSONDetector):
|
||||
# python must be >= 3.9 so we can pass in bytes into json.loads
|
||||
return json.loads(response.data)
|
||||
|
||||
@staticmethod
|
||||
def __file_name_from_content_disposition(content_disposition: typing.Optional[str]) -> typing.Optional[str]:
|
||||
@classmethod
|
||||
def __file_name_from_content_disposition(cls, content_disposition: typing.Optional[str]) -> typing.Optional[str]:
|
||||
if content_disposition is None:
|
||||
return None
|
||||
match = re.search('filename="(.+?)"', content_disposition)
|
||||
match = cls.__filename_content_disposition_pattern.search(content_disposition)
|
||||
if not match:
|
||||
return None
|
||||
return match.group(1)
|
||||
|
@ -13,7 +13,7 @@ Python >=3.9
|
||||
v3.9 is needed so one can combine classmethod and property decorators to define
|
||||
object schema properties as classes
|
||||
|
||||
## Migration from other generators like python and python-experimental
|
||||
## Migration from other generators like python and python-legacy
|
||||
|
||||
### Changes
|
||||
1. This generator uses spec case for all (object) property names and parameter names.
|
||||
|
@ -800,24 +800,25 @@ class ApiResponseWithoutDeserialization(ApiResponse):
|
||||
|
||||
|
||||
class JSONDetector:
|
||||
@staticmethod
|
||||
def _content_type_is_json(content_type: str) -> bool:
|
||||
content_type_piece = content_type
|
||||
if ';' in content_type:
|
||||
# application/json; charset=UTF-8
|
||||
content_type_piece = content_type.split(';')[0]
|
||||
elif '-' in content_type:
|
||||
"""
|
||||
application/json-patch+json
|
||||
application/json-seq
|
||||
"""
|
||||
content_type_piece = content_type.split('-')[0]
|
||||
if content_type_piece == 'application/json':
|
||||
"""
|
||||
Works for:
|
||||
application/json
|
||||
application/json; charset=UTF-8
|
||||
application/json-patch+json
|
||||
application/geo+json
|
||||
"""
|
||||
__json_content_type_pattern = re.compile("application/[^+]*[+]?(json);?.*")
|
||||
|
||||
@classmethod
|
||||
def _content_type_is_json(cls, content_type: str) -> bool:
|
||||
if cls.__json_content_type_pattern.match(content_type):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class OpenApiResponse(JSONDetector):
|
||||
__filename_content_disposition_pattern = re.compile('filename="(.+?)"')
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
response_cls: typing.Type[ApiResponse] = ApiResponse,
|
||||
@ -835,11 +836,11 @@ class OpenApiResponse(JSONDetector):
|
||||
# python must be >= 3.9 so we can pass in bytes into json.loads
|
||||
return json.loads(response.data)
|
||||
|
||||
@staticmethod
|
||||
def __file_name_from_content_disposition(content_disposition: typing.Optional[str]) -> typing.Optional[str]:
|
||||
@classmethod
|
||||
def __file_name_from_content_disposition(cls, content_disposition: typing.Optional[str]) -> typing.Optional[str]:
|
||||
if content_disposition is None:
|
||||
return None
|
||||
match = re.search('filename="(.+?)"', content_disposition)
|
||||
match = cls.__filename_content_disposition_pattern.search(content_disposition)
|
||||
if not match:
|
||||
return None
|
||||
return match.group(1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user