Skip to content

Commit de6a247

Browse files
authored
Merge pull request ej2#128 from bendavis78/exceptions
Add handling for different exception types
2 parents dd7f38c + a961133 commit de6a247

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

quickbooks/client.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import codecs
1313
import json
1414

15-
from .exceptions import QuickbooksException, SevereException, AuthorizationException
15+
from . import exceptions
1616
import base64
1717
import hashlib
1818
import hmac
@@ -221,17 +221,17 @@ def make_request(self, request_type, url, request_body=None, content_type='appli
221221
req = self.process_request(request_type, url, headers=headers, params=params, data=request_body)
222222

223223
if req.status_code == httplib.UNAUTHORIZED:
224-
raise AuthorizationException("Application authentication failed", detail=req.text)
224+
raise exceptions.AuthorizationException("Application authentication failed", detail=req.text)
225225

226226
try:
227227
result = req.json()
228228
except:
229-
raise QuickbooksException("Error reading json response: {0}".format(req.text), 10000)
229+
raise exceptions.QuickbooksException("Error reading json response: {0}".format(req.text), 10000)
230230

231231
if "Fault" in result:
232232
self.handle_exceptions(result["Fault"])
233233
elif not req.status_code == httplib.OK:
234-
raise QuickbooksException("Error returned with status code '{0}': {1}".format(
234+
raise exceptions.QuickbooksException("Error returned with status code '{0}': {1}".format(
235235
req.status_code, req.text), 10000)
236236
else:
237237
return result
@@ -244,7 +244,7 @@ def post(self, *args, **kwargs):
244244

245245
def process_request(self, request_type, url, headers="", params="", data=""):
246246
if self.session_manager is None:
247-
raise QuickbooksException('No session manager')
247+
raise exceptions.QuickbooksException('No session manager')
248248

249249
if self.session_manager.oauth_version == 2.0:
250250
headers.update({'Authorization': 'Bearer ' + self.session_manager.access_token})
@@ -276,10 +276,20 @@ def handle_exceptions(self, results):
276276
if "code" in error:
277277
code = int(error["code"])
278278

279-
if code >= 10000:
280-
raise SevereException(message, code, detail)
279+
if code > 0 and code <= 499:
280+
raise exceptions.AuthorizationException(message, code, detail)
281+
elif code >= 500 and code <= 599:
282+
raise exceptions.UnsupportedException(message, code, detail)
283+
elif code >= 600 and code <= 1999:
284+
if code == 610:
285+
raise exceptions.ObjectNotFoundException(message, code, detail)
286+
raise exceptions.GeneralException(message, code, detail)
287+
elif code >= 2000 and code <= 4999:
288+
raise exceptions.ValidationException(message, code, detail)
289+
elif code >= 10000:
290+
raise exceptions.SevereException(message, code, detail)
281291
else:
282-
raise QuickbooksException(message, code, detail)
292+
raise exceptions.QuickbooksException(message, code, detail)
283293

284294
def create_object(self, qbbo, request_body, _file_path=None):
285295
self.isvalid_object_name(qbbo)
@@ -327,7 +337,7 @@ def misc_operation(self, end_point, request_body):
327337

328338
def download_pdf(self, qbbo, item_id):
329339
if self.session_manager is None:
330-
raise QuickbooksException('No session manager')
340+
raise exceptions.QuickbooksException('No session manager')
331341

332342
url = "{0}/company/{1}/{2}/{3}/pdf".format(
333343
self.api_url, self.company_id, qbbo.lower(), item_id)
@@ -349,7 +359,7 @@ def download_pdf(self, qbbo, item_id):
349359
try:
350360
result = response.json()
351361
except:
352-
raise QuickbooksException("Error reading json response: {0}".format(response.text), 10000)
362+
raise exceptions.QuickbooksException("Error reading json response: {0}".format(response.text), 10000)
353363

354364
self.handle_exceptions(result["Fault"])
355365
else:

quickbooks/exceptions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,11 @@ class SevereException(QuickbooksException):
4343
Quickbooks Error Codes greater than 10000
4444
"""
4545
pass
46+
47+
48+
class ObjectNotFoundException(QuickbooksException):
49+
"""
50+
Quickbooks Error Code 610
51+
"""
52+
pass
53+

0 commit comments

Comments
 (0)