From 5afd3f5179aa52162bfcdfb08a71310eb38bbc90 Mon Sep 17 00:00:00 2001 From: "William N. Green" Date: Wed, 22 May 2024 18:10:33 -0700 Subject: [PATCH] Use simplejson Decimal support Modified imports and removed unused json imports Modified calls to set use_decimal for serialization/deserialization --- quickbooks/client.py | 4 ++-- quickbooks/mixins.py | 10 ++++------ quickbooks/objects/payment.py | 1 - 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/quickbooks/client.py b/quickbooks/client.py index 967bba3..7a07578 100644 --- a/quickbooks/client.py +++ b/quickbooks/client.py @@ -1,6 +1,6 @@ import http.client as httplib import textwrap -import json +import simplejson as json import base64 import hashlib import hmac @@ -206,7 +206,7 @@ def make_request(self, request_type, url, request_body=None, content_type='appli "Application authentication failed", error_code=req.status_code, detail=req.text) try: - result = req.json() + result = json.loads(req.text, use_decimal=True) except: raise exceptions.QuickbooksException("Error reading json response: {0}".format(req.text), 10000) diff --git a/quickbooks/mixins.py b/quickbooks/mixins.py index 2083139..6b0a1be 100644 --- a/quickbooks/mixins.py +++ b/quickbooks/mixins.py @@ -1,16 +1,14 @@ from urllib.parse import quote -try: import simplejson as json -except ImportError: import json +import simplejson as json from .utils import build_where_clause, build_choose_clause from .client import QuickBooks from .exceptions import QuickbooksException - class ToJsonMixin(object): def to_json(self): - return json.dumps(self, default=self.json_filter(), sort_keys=True, indent=4) + return json.dumps(self, default=self.json_filter(), sort_keys=True, indent=4, use_decimal=True) def json_filter(self): """ @@ -178,7 +176,7 @@ def void(self, qb=None): data = self.get_void_data() params = self.get_void_params() - results = qb.post(url, json.dumps(data), params=params) + results = qb.post(url, json.dumps(data, use_decimal=True), params=params) return results @@ -232,7 +230,7 @@ def delete(self, qb=None, request_id=None): 'Id': self.Id, 'SyncToken': self.SyncToken, } - return qb.delete_object(self.qbo_object_name, json.dumps(data), request_id=request_id) + return qb.delete_object(self.qbo_object_name, json.dumps(data, use_decimal=True), request_id=request_id) class DeleteNoIdMixin(object): diff --git a/quickbooks/objects/payment.py b/quickbooks/objects/payment.py index 75cbf57..5783d16 100644 --- a/quickbooks/objects/payment.py +++ b/quickbooks/objects/payment.py @@ -4,7 +4,6 @@ from ..client import QuickBooks from .creditcardpayment import CreditCardPayment from ..mixins import DeleteMixin, VoidMixin -import json class PaymentLine(QuickbooksBaseObject):