diff --git a/sift/client.py b/sift/client.py index cef3d57..5b34e2e 100644 --- a/sift/client.py +++ b/sift/client.py @@ -2,6 +2,7 @@ See: https://siftscience.com/docs/references/events-api """ +import decimal import json import requests import requests.auth @@ -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): @@ -165,7 +171,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 bb32ce3..9252d76 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -3,6 +3,7 @@ import sys import unittest import warnings +from decimal import Decimal import mock import requests.exceptions @@ -19,7 +20,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 0da8f11..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 @@ -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',