mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-05-13 05:00:50 +00:00
Adding decimal support for python client generation (#19203)
* Adding decimal to template for Python generator * Rerunning the build steps * Add tests for decimal serialization and deserialization. * Move test to python not legacy pydantic sample * readd old imports --------- Co-authored-by: Adam <abolfik@pollyex.com>
This commit is contained in:
parent
fef84d956e
commit
6ad5864d28
@ -5,6 +5,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
import decimal
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
@ -59,6 +60,7 @@ class ApiClient:
|
|||||||
'bool': bool,
|
'bool': bool,
|
||||||
'date': datetime.date,
|
'date': datetime.date,
|
||||||
'datetime': datetime.datetime,
|
'datetime': datetime.datetime,
|
||||||
|
'decimal': decimal.Decimal,
|
||||||
'object': object,
|
'object': object,
|
||||||
}
|
}
|
||||||
_pool = None
|
_pool = None
|
||||||
@ -346,6 +348,7 @@ class ApiClient:
|
|||||||
If obj is str, int, long, float, bool, return directly.
|
If obj is str, int, long, float, bool, return directly.
|
||||||
If obj is datetime.datetime, datetime.date
|
If obj is datetime.datetime, datetime.date
|
||||||
convert to string in iso8601 format.
|
convert to string in iso8601 format.
|
||||||
|
If obj is decimal.Decimal return string representation.
|
||||||
If obj is list, sanitize each element in the list.
|
If obj is list, sanitize each element in the list.
|
||||||
If obj is dict, return the dict.
|
If obj is dict, return the dict.
|
||||||
If obj is OpenAPI model, return the properties dict.
|
If obj is OpenAPI model, return the properties dict.
|
||||||
@ -371,6 +374,8 @@ class ApiClient:
|
|||||||
)
|
)
|
||||||
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
|
elif isinstance(obj, decimal.Decimal):
|
||||||
|
return str(obj)
|
||||||
|
|
||||||
elif isinstance(obj, dict):
|
elif isinstance(obj, dict):
|
||||||
obj_dict = obj
|
obj_dict = obj
|
||||||
@ -462,6 +467,8 @@ class ApiClient:
|
|||||||
return self.__deserialize_date(data)
|
return self.__deserialize_date(data)
|
||||||
elif klass == datetime.datetime:
|
elif klass == datetime.datetime:
|
||||||
return self.__deserialize_datetime(data)
|
return self.__deserialize_datetime(data)
|
||||||
|
elif klass == decimal.Decimal:
|
||||||
|
return decimal.Decimal(data)
|
||||||
elif issubclass(klass, Enum):
|
elif issubclass(klass, Enum):
|
||||||
return self.__deserialize_enum(data, klass)
|
return self.__deserialize_enum(data, klass)
|
||||||
else:
|
else:
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
import decimal
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
@ -67,6 +68,7 @@ class ApiClient:
|
|||||||
'bool': bool,
|
'bool': bool,
|
||||||
'date': datetime.date,
|
'date': datetime.date,
|
||||||
'datetime': datetime.datetime,
|
'datetime': datetime.datetime,
|
||||||
|
'decimal': decimal.Decimal,
|
||||||
'object': object,
|
'object': object,
|
||||||
}
|
}
|
||||||
_pool = None
|
_pool = None
|
||||||
@ -339,6 +341,7 @@ class ApiClient:
|
|||||||
If obj is str, int, long, float, bool, return directly.
|
If obj is str, int, long, float, bool, return directly.
|
||||||
If obj is datetime.datetime, datetime.date
|
If obj is datetime.datetime, datetime.date
|
||||||
convert to string in iso8601 format.
|
convert to string in iso8601 format.
|
||||||
|
If obj is decimal.Decimal return string representation.
|
||||||
If obj is list, sanitize each element in the list.
|
If obj is list, sanitize each element in the list.
|
||||||
If obj is dict, return the dict.
|
If obj is dict, return the dict.
|
||||||
If obj is OpenAPI model, return the properties dict.
|
If obj is OpenAPI model, return the properties dict.
|
||||||
@ -364,6 +367,8 @@ class ApiClient:
|
|||||||
)
|
)
|
||||||
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
|
elif isinstance(obj, decimal.Decimal):
|
||||||
|
return str(obj)
|
||||||
|
|
||||||
elif isinstance(obj, dict):
|
elif isinstance(obj, dict):
|
||||||
obj_dict = obj
|
obj_dict = obj
|
||||||
@ -455,6 +460,8 @@ class ApiClient:
|
|||||||
return self.__deserialize_date(data)
|
return self.__deserialize_date(data)
|
||||||
elif klass == datetime.datetime:
|
elif klass == datetime.datetime:
|
||||||
return self.__deserialize_datetime(data)
|
return self.__deserialize_datetime(data)
|
||||||
|
elif klass == decimal.Decimal:
|
||||||
|
return decimal.Decimal(data)
|
||||||
elif issubclass(klass, Enum):
|
elif issubclass(klass, Enum):
|
||||||
return self.__deserialize_enum(data, klass)
|
return self.__deserialize_enum(data, klass)
|
||||||
else:
|
else:
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
import decimal
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
@ -67,6 +68,7 @@ class ApiClient:
|
|||||||
'bool': bool,
|
'bool': bool,
|
||||||
'date': datetime.date,
|
'date': datetime.date,
|
||||||
'datetime': datetime.datetime,
|
'datetime': datetime.datetime,
|
||||||
|
'decimal': decimal.Decimal,
|
||||||
'object': object,
|
'object': object,
|
||||||
}
|
}
|
||||||
_pool = None
|
_pool = None
|
||||||
@ -339,6 +341,7 @@ class ApiClient:
|
|||||||
If obj is str, int, long, float, bool, return directly.
|
If obj is str, int, long, float, bool, return directly.
|
||||||
If obj is datetime.datetime, datetime.date
|
If obj is datetime.datetime, datetime.date
|
||||||
convert to string in iso8601 format.
|
convert to string in iso8601 format.
|
||||||
|
If obj is decimal.Decimal return string representation.
|
||||||
If obj is list, sanitize each element in the list.
|
If obj is list, sanitize each element in the list.
|
||||||
If obj is dict, return the dict.
|
If obj is dict, return the dict.
|
||||||
If obj is OpenAPI model, return the properties dict.
|
If obj is OpenAPI model, return the properties dict.
|
||||||
@ -364,6 +367,8 @@ class ApiClient:
|
|||||||
)
|
)
|
||||||
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
|
elif isinstance(obj, decimal.Decimal):
|
||||||
|
return str(obj)
|
||||||
|
|
||||||
elif isinstance(obj, dict):
|
elif isinstance(obj, dict):
|
||||||
obj_dict = obj
|
obj_dict = obj
|
||||||
@ -455,6 +460,8 @@ class ApiClient:
|
|||||||
return self.__deserialize_date(data)
|
return self.__deserialize_date(data)
|
||||||
elif klass == datetime.datetime:
|
elif klass == datetime.datetime:
|
||||||
return self.__deserialize_datetime(data)
|
return self.__deserialize_datetime(data)
|
||||||
|
elif klass == decimal.Decimal:
|
||||||
|
return decimal.Decimal(data)
|
||||||
elif issubclass(klass, Enum):
|
elif issubclass(klass, Enum):
|
||||||
return self.__deserialize_enum(data, klass)
|
return self.__deserialize_enum(data, klass)
|
||||||
else:
|
else:
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
import decimal
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
@ -66,6 +67,7 @@ class ApiClient:
|
|||||||
'bool': bool,
|
'bool': bool,
|
||||||
'date': datetime.date,
|
'date': datetime.date,
|
||||||
'datetime': datetime.datetime,
|
'datetime': datetime.datetime,
|
||||||
|
'decimal': decimal.Decimal,
|
||||||
'object': object,
|
'object': object,
|
||||||
}
|
}
|
||||||
_pool = None
|
_pool = None
|
||||||
@ -341,6 +343,7 @@ class ApiClient:
|
|||||||
If obj is str, int, long, float, bool, return directly.
|
If obj is str, int, long, float, bool, return directly.
|
||||||
If obj is datetime.datetime, datetime.date
|
If obj is datetime.datetime, datetime.date
|
||||||
convert to string in iso8601 format.
|
convert to string in iso8601 format.
|
||||||
|
If obj is decimal.Decimal return string representation.
|
||||||
If obj is list, sanitize each element in the list.
|
If obj is list, sanitize each element in the list.
|
||||||
If obj is dict, return the dict.
|
If obj is dict, return the dict.
|
||||||
If obj is OpenAPI model, return the properties dict.
|
If obj is OpenAPI model, return the properties dict.
|
||||||
@ -366,6 +369,8 @@ class ApiClient:
|
|||||||
)
|
)
|
||||||
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
|
elif isinstance(obj, decimal.Decimal):
|
||||||
|
return str(obj)
|
||||||
|
|
||||||
elif isinstance(obj, dict):
|
elif isinstance(obj, dict):
|
||||||
obj_dict = obj
|
obj_dict = obj
|
||||||
@ -457,6 +462,8 @@ class ApiClient:
|
|||||||
return self.__deserialize_date(data)
|
return self.__deserialize_date(data)
|
||||||
elif klass == datetime.datetime:
|
elif klass == datetime.datetime:
|
||||||
return self.__deserialize_datetime(data)
|
return self.__deserialize_datetime(data)
|
||||||
|
elif klass == decimal.Decimal:
|
||||||
|
return decimal.Decimal(data)
|
||||||
elif issubclass(klass, Enum):
|
elif issubclass(klass, Enum):
|
||||||
return self.__deserialize_enum(data, klass)
|
return self.__deserialize_enum(data, klass)
|
||||||
else:
|
else:
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
import decimal
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
@ -66,6 +67,7 @@ class ApiClient:
|
|||||||
'bool': bool,
|
'bool': bool,
|
||||||
'date': datetime.date,
|
'date': datetime.date,
|
||||||
'datetime': datetime.datetime,
|
'datetime': datetime.datetime,
|
||||||
|
'decimal': decimal.Decimal,
|
||||||
'object': object,
|
'object': object,
|
||||||
}
|
}
|
||||||
_pool = None
|
_pool = None
|
||||||
@ -338,6 +340,7 @@ class ApiClient:
|
|||||||
If obj is str, int, long, float, bool, return directly.
|
If obj is str, int, long, float, bool, return directly.
|
||||||
If obj is datetime.datetime, datetime.date
|
If obj is datetime.datetime, datetime.date
|
||||||
convert to string in iso8601 format.
|
convert to string in iso8601 format.
|
||||||
|
If obj is decimal.Decimal return string representation.
|
||||||
If obj is list, sanitize each element in the list.
|
If obj is list, sanitize each element in the list.
|
||||||
If obj is dict, return the dict.
|
If obj is dict, return the dict.
|
||||||
If obj is OpenAPI model, return the properties dict.
|
If obj is OpenAPI model, return the properties dict.
|
||||||
@ -363,6 +366,8 @@ class ApiClient:
|
|||||||
)
|
)
|
||||||
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
elif isinstance(obj, (datetime.datetime, datetime.date)):
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
|
elif isinstance(obj, decimal.Decimal):
|
||||||
|
return str(obj)
|
||||||
|
|
||||||
elif isinstance(obj, dict):
|
elif isinstance(obj, dict):
|
||||||
obj_dict = obj
|
obj_dict = obj
|
||||||
@ -454,6 +459,8 @@ class ApiClient:
|
|||||||
return self.__deserialize_date(data)
|
return self.__deserialize_date(data)
|
||||||
elif klass == datetime.datetime:
|
elif klass == datetime.datetime:
|
||||||
return self.__deserialize_datetime(data)
|
return self.__deserialize_datetime(data)
|
||||||
|
elif klass == decimal.Decimal:
|
||||||
|
return decimal.Decimal(data)
|
||||||
elif issubclass(klass, Enum):
|
elif issubclass(klass, Enum):
|
||||||
return self.__deserialize_enum(data, klass)
|
return self.__deserialize_enum(data, klass)
|
||||||
else:
|
else:
|
||||||
|
@ -10,6 +10,7 @@ $ pytest
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
from decimal import Decimal
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
@ -180,6 +181,11 @@ class ApiClientTests(unittest.TestCase):
|
|||||||
result = self.api_client.sanitize_for_serialization(data)
|
result = self.api_client.sanitize_for_serialization(data)
|
||||||
self.assertEqual(result, "1997-07-16T19:20:30.450000+01:00")
|
self.assertEqual(result, "1997-07-16T19:20:30.450000+01:00")
|
||||||
|
|
||||||
|
def test_sanitize_for_serialization_decimal(self):
|
||||||
|
data = Decimal("1.0")
|
||||||
|
result = self.api_client.sanitize_for_serialization(data)
|
||||||
|
self.assertEquals(result, "1.0")
|
||||||
|
|
||||||
def test_sanitize_for_serialization_list_enum(self):
|
def test_sanitize_for_serialization_list_enum(self):
|
||||||
class EnumSerialization(int, Enum):
|
class EnumSerialization(int, Enum):
|
||||||
NUMBER_0 = 0
|
NUMBER_0 = 0
|
||||||
|
@ -14,6 +14,7 @@ import os
|
|||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
import datetime
|
import datetime
|
||||||
|
from decimal import Decimal
|
||||||
|
|
||||||
import pytest as pytest
|
import pytest as pytest
|
||||||
|
|
||||||
@ -130,6 +131,15 @@ class DeserializationTests(unittest.TestCase):
|
|||||||
deserialized = self.deserialize(response, "datetime", 'application/json')
|
deserialized = self.deserialize(response, "datetime", 'application/json')
|
||||||
self.assertTrue(isinstance(deserialized, datetime.datetime))
|
self.assertTrue(isinstance(deserialized, datetime.datetime))
|
||||||
|
|
||||||
|
def test_deserialize_decimal(self):
|
||||||
|
""" deserialize decimal """
|
||||||
|
data = 1.1
|
||||||
|
response = json.dumps(data)
|
||||||
|
|
||||||
|
deserialized = self.deserialize(response, "decimal", 'application/json')
|
||||||
|
self.assertTrue(isinstance(deserialized, Decimal))
|
||||||
|
self.assertEqual(deserialized, Decimal(1.1))
|
||||||
|
|
||||||
def test_deserialize_pet(self):
|
def test_deserialize_pet(self):
|
||||||
""" deserialize pet """
|
""" deserialize pet """
|
||||||
data = {
|
data = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user