Skip to content

Commit 6a25f79

Browse files
committed
Added handling for different exception types, including ObjectNotFoundException
1 parent b254493 commit 6a25f79

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
@@ -8,7 +8,7 @@
88
import textwrap
99
import json
1010

11-
from .exceptions import QuickbooksException, SevereException, AuthorizationException
11+
from . import exceptions
1212
import base64
1313

1414
try:
@@ -201,24 +201,24 @@ def make_request(self, request_type, url, request_body=None, content_type='appli
201201
req = self.process_request(request_type, url, headers=headers, params=params, data=request_body)
202202

203203
if req.status_code == httplib.UNAUTHORIZED:
204-
raise AuthorizationException("Application authentication failed", detail=req.text)
204+
raise exceptions.AuthorizationException("Application authentication failed", detail=req.text)
205205

206206
try:
207207
result = req.json()
208208
except:
209-
raise QuickbooksException("Error reading json response: {0}".format(req.text), 10000)
209+
raise exceptions.QuickbooksException("Error reading json response: {0}".format(req.text), 10000)
210210

211211
if "Fault" in result:
212212
self.handle_exceptions(result["Fault"])
213213
elif not req.status_code == httplib.OK:
214-
raise QuickbooksException("Error returned with status code '{0}': {1}".format(
214+
raise exceptions.QuickbooksException("Error returned with status code '{0}': {1}".format(
215215
req.status_code, req.text), 10000)
216216
else:
217217
return result
218218

219219
def process_request(self, request_type, url, headers="", params="", data=""):
220220
if self.session_manager is None:
221-
raise QuickbooksException('No session manager')
221+
raise exceptions.QuickbooksException('No session manager')
222222

223223
if self.session_manager.oauth_version == 2.0:
224224
headers.update({'Authorization': 'Bearer ' + self.session_manager.access_token})
@@ -250,10 +250,20 @@ def handle_exceptions(self, results):
250250
if "code" in error:
251251
code = int(error["code"])
252252

253-
if code >= 10000:
254-
raise SevereException(message, code, detail)
253+
if code > 0 and code <= 499:
254+
raise exceptions.AuthorizationException(message, code, detail)
255+
elif code >= 500 and code <= 599:
256+
raise exceptions.UnsupportedException(message, code, detail)
257+
elif code >= 600 and code <= 1999:
258+
if code == 610:
259+
raise exceptions.NotFoundException(message, code, detail)
260+
raise exceptions.GeneralException(message, code, detail)
261+
elif code >= 2000 and code <= 4999:
262+
raise exceptions.ValidationException(message, code, detail)
263+
elif code >= 10000:
264+
raise exceptions.SevereException(message, code, detail)
255265
else:
256-
raise QuickbooksException(message, code, detail)
266+
raise exceptions.QuickbooksException(message, code, detail)
257267

258268
def create_object(self, qbbo, request_body, _file_path=None):
259269
self.isvalid_object_name(qbbo)
@@ -301,7 +311,7 @@ def misc_operation(self, end_point, request_body):
301311

302312
def download_pdf(self, qbbo, item_id):
303313
if self.session_manager is None:
304-
raise QuickbooksException('No session manager')
314+
raise exceptions.QuickbooksException('No session manager')
305315

306316
url = self.api_url + "/company/{0}/{1}/{2}/pdf".format(
307317
self.company_id, qbbo.lower(), item_id)
@@ -318,7 +328,7 @@ def download_pdf(self, qbbo, item_id):
318328
try:
319329
result = response.json()
320330
except:
321-
raise QuickbooksException("Error reading json response: {0}".format(response.text), 10000)
331+
raise exceptions.QuickbooksException("Error reading json response: {0}".format(response.text), 10000)
322332

323333
self.handle_exceptions(result["Fault"])
324334
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)