docs: def process_response(self,
                           method,
                           response,
                           response_type=None,
                           objects_type=None):
          """Processes the API response based on the status codes and method used
          to access the API
          """
  
          try:
              response_json = response.json(
                  object_hook=
                  lambda x: ResponseObject(x) if isinstance(x, dict) else x)
              if response_type:
                  r = response_type(self, response_json.__dict__)
                  response_json = r
  
              if 'objects' in response_json and objects_type:
                  response_json.objects = [
                      objects_type(self, obj.__dict__)
                      for obj in response_json.objects
                  ]
          except ValueError:
              response_json = None
  
          if response.status_code == 400:
              if response_json and 'error' in response_json:
                  raise ValidationError(response_json.error)
              raise ValidationError(
                  'A parameter is missing or is invalid while accessing resource'
                  'at: {url}'.format(url=response.url))
  
          if response.status_code == 401:
              if response_json and 'error' in response_json:
                  raise AuthenticationError(response_json.error)
              raise AuthenticationError(
                  'Failed to authenticate while accessing resource at: '
                  '{url}'.format(url=response.url))
  
          if response.status_code == 404:
              if response_json and 'error' in response_json:
                  raise ResourceNotFoundError(response_json.error)
              raise ResourceNotFoundError(
                  'Resource not found at: {url}'.format(url=response.url))
  
          if response.status_code == 405:
              if response_json and 'error' in response_json:
                  raise InvalidRequestError(response_json.error)
              raise InvalidRequestError(
                  'HTTP method "{method}" not allowed to access resource at: '
                  '{url}'.format(method=method, url=response.url))
  
          if response.status_code == 500:
              if response_json and 'error' in response_json:
                  raise PlivoServerError(response_json.error)
              raise PlivoServerError(
                  'A server error occurred while accessing resource at: '
                  '{url}'.format(url=response.url))
  
          if method == 'DELETE':
              if response.status_code != 204:
                  raise PlivoRestError('Resource at {url} could not be '
                                       'deleted'.format(url=response.url))
  
          elif response.status_code not in [200, 201, 202]:
              raise PlivoRestError(
                  'Received status code {status_code} for the HTTP method '
                  '"{method}"'.format(
                      status_code=response.status_code, method=method))
  
          return response_json