Skip to content

Commit

Permalink
add support for error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
dibyadas committed May 24, 2017
1 parent a247724 commit ff3e16d
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
1 change: 1 addition & 0 deletions python_http_client/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from .client import Client
from .exceptions import *
9 changes: 7 additions & 2 deletions python_http_client/client.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
"""HTTP Client library"""
import json

from .exceptions import handle_error

try:
# Python 3
import urllib.request as urllib
from urllib.parse import urlencode
from urllib.error import HTTPError
except ImportError:
# Python 2
import urllib2 as urllib
from urllib2 import HTTPError
from urllib import urlencode


Expand Down Expand Up @@ -135,7 +137,10 @@ def _make_request(self, opener, request):
:type request: urllib.Request object
:return: urllib response
"""
return opener.open(request)
try:
return opener.open(request)
except HTTPError as err:
handle_error(err)

def _(self, name):
"""Add variable values to the url.
Expand Down
53 changes: 53 additions & 0 deletions python_http_client/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
class HTTPError(Exception):
''' Base of all other errors'''
def __init__(self,error):
self.code = error.code
self.reason = error.reason
#self.headers = error.headers

class BadRequestsError(HTTPError):
pass

class UnauthorizedError(HTTPError):
pass

class ForbiddenError(HTTPError):
pass

class NotFoundError(HTTPError):
pass

class MethodNotAllowedError(HTTPError):
pass

class PayloadTooLargeError(HTTPError):
pass

class UnsupportedMediaTypeError(HTTPError):
pass

class TooManyRequestsError(HTTPError):
pass

class InternalServerError(HTTPError):
pass

class ServiceUnavailableError(HTTPError):
pass

err_dict = { 400 : BadRequestsError,
401 : UnauthorizedError,
403 : ForbiddenError,
404 : NotFoundError,
405 : MethodNotAllowedError,
413 : PayloadTooLargeError,
415 : UnsupportedMediaTypeError,
429 : TooManyRequestsError,
500 : InternalServerError,
503 : ServiceUnavailableError
}

def handle_error(error):
exc = err_dict[error.code](error)
exc.__cause__ = None
raise exc

0 comments on commit ff3e16d

Please sign in to comment.