# -*- coding: utf-8 - # # Copyright (c) 2008, 2009 Benoit Chesneau <firstname.lastname@example.org> # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # """ exception classes. """ class ResourceError(Exception): def __init__(self, msg=None, http_code=None, response=None): self.msg = msg or '' self.status_code = http_code self.response = response Exception.__init__(self) def _get_message(self): return self.msg def _set_message(self, msg): self.msg = msg or '' message = property(_get_message, _set_message) def __str__(self): if self.msg: return self.msg try: return self._fmt % self.__dict__ except (NameError, ValueError, KeyError), e: return 'Unprintable exception %s: %s' \ % (self.__class__.__name__, str(e)) class ResourceNotFound(ResourceError): """Exception raised when no resource was found at the given url. """ class Unauthorized(ResourceError): """Exception raised when an authorization is required to access to the resource specified. """ class RequestFailed(ResourceError): """Exception raised when an unexpected HTTP error is received in response to a request. The request failed, meaning the remote HTTP server returned a code other than success, unauthorized, or NotFound. The exception message attempts to extract the error You can get the status code by e.http_code, or see anything about the response via e.response. For example, the entire result body (which is probably an HTML error page) is e.response.body. """ class RedirectLimit(Exception): """Exception raised when the redirection limit is reached.""" class RequestError(Exception): """Exception raised when a request is malformed""" class InvalidUrl(Exception): """ Not a valid url for use with this software. """ class TransportError(Exception): """Error raised by a transport """ class ResponseError(Exception): """ Error raised while getting response or decompressing response stream"""