From 89f535aa16631a39e2adf1dea29e0ad5b04010bd Mon Sep 17 00:00:00 2001 From: jyothish6190 Date: Tue, 14 Jun 2022 20:03:13 +0530 Subject: [PATCH] json serialization - bug fixed --- sift/client.py | 10 ++++++++-- tests/test_client.py | 5 +++-- tests/test_client_v203.py | 5 +++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sift/client.py b/sift/client.py index adf690e..1bac4da 100644 --- a/sift/client.py +++ b/sift/client.py @@ -2,12 +2,13 @@ See: https://siftscience.com/docs/references/events-api """ +import decimal import json import requests import requests.auth import sys if sys.version_info[0] < 3: - import urllib.request, urllib.parse, urllib.error + import six.moves.urllib as urllib _UNICODE_STRING = str else: import urllib.parse @@ -26,6 +27,11 @@ def _quote_path(s): # optional arg to override this return urllib.parse.quote(s, '') +class DecimalEncoder(json.JSONEncoder): + def default(self, o): + if isinstance(o, decimal.Decimal): + return (str(o),) + return super(DecimalEncoder, self).default(o) class Client(object): @@ -158,7 +164,7 @@ def track( try: response = self.session.post( path, - data=json.dumps(properties), + data=json.dumps(properties, cls=DecimalEncoder), headers=headers, timeout=timeout, params=params) diff --git a/tests/test_client.py b/tests/test_client.py index 6c0b8f1..9641567 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,4 +1,5 @@ import datetime +from decimal import Decimal import warnings import json import mock @@ -7,7 +8,7 @@ import sys import requests.exceptions if sys.version_info[0] < 3: - import urllib.request, urllib.parse, urllib.error + import six.moves.urllib as urllib else: import urllib.parse @@ -16,7 +17,7 @@ def valid_transaction_properties(): return { '$buyer_user_id': '123456', '$seller_user_id': '654321', - '$amount': 1253200, + '$amount': Decimal('1253200.0'), '$currency_code': 'USD', '$time': int(datetime.datetime.now().strftime('%s')), '$transaction_id': 'my_transaction_id', diff --git a/tests/test_client_v203.py b/tests/test_client_v203.py index a18b3d0..a7af5b8 100644 --- a/tests/test_client_v203.py +++ b/tests/test_client_v203.py @@ -1,4 +1,5 @@ import datetime +from decimal import Decimal import warnings import json import mock @@ -7,7 +8,7 @@ import sys import requests.exceptions if sys.version_info[0] < 3: - import urllib.request, urllib.parse, urllib.error + import six.moves.urllib as urllib else: import urllib.parse @@ -16,7 +17,7 @@ def valid_transaction_properties(): return { '$buyer_user_id': '123456', '$seller_user_id': '654321', - '$amount': 1253200, + '$amount': Decimal('1253200.0'), '$currency_code': 'USD', '$time': int(datetime.datetime.now().strftime('%s')), '$transaction_id': 'my_transaction_id',