Source code for schedy.errors

# -*- coding: utf-8 -*-

from __future__ import absolute_import, division, print_function, unicode_literals
from builtins import *

import requests

[docs]class SchedyError(Exception): ''' Base class for all Schedy exceptions. ''' pass
[docs]class HTTPError(SchedyError): ''' Base class for exceptions caused by a transaction with the service. ''' def __init__(self, body, code, *args): ''' Args: body (str): Error message. code (int or None): HTTP status code. args (list): Other arguments passed to :py:exc:`Exception`. ''' self.code = code self.body = body # Truncate long bodies msg_body = body msg_body = msg_body.replace('\r', '') msg_body = msg_body.rstrip('\n') if len(msg_body) == 0: msg_body = '<No server message>' elif len(msg_body) > 150: msg_body = msg_body[:147] + '...' msg_body = msg_body.replace('\n', '\n> ') message = 'HTTP Error {}:\n> {}'.format(code, msg_body) super().__init__(message, *args)
[docs]class ClientError(HTTPError): ''' Exception caused by the client side. ''' pass
[docs]class ClientRequestError(ClientError): ''' Exception caused by the content of the request. ''' pass
[docs]class AuthenticationError(ClientRequestError): ''' Authentication error, access to the resource is forbidden. ''' pass
[docs]class ReauthenticateError(ClientRequestError): ''' Authentication error, the client should retry after authenticating again. ''' pass
[docs]class ResourceExistsError(ClientRequestError): ''' The resource cannot be created because it exists already. ''' pass
[docs]class UnsafeUpdateError(ClientRequestError): ''' The resource cannot be updated safely because it has been modified by another client since its state was retrieved, so updating it could overwrite these modifications. ''' pass
[docs]class NoJobError(ClientRequestError): ''' The request could not return any job. ''' pass
[docs]class UnhandledResponseError(ClientError): ''' The response could not be parsed or handled. ''' pass
[docs]class ServerError(HTTPError): ''' Server-side exception. ''' pass
def _handle_response_errors(response): code = response.status_code if code in [200, 201, 204]: return if code == requests.codes.forbidden: raise AuthenticationError(response.text, code) if code == requests.codes.unauthorized: raise ReauthenticateError(response.text, code) if code == requests.codes.precondition_failed: raise UnsafeUpdateError(response.text, code) if code in range(400, 500): raise ClientRequestError(response.text, code) if code in range(500, 600): raise ServerError(response.text, code) raise UnhandledResponseError(response.text, code)