code: def __request(self, method, url, request_args, headers=None, stream=False):
          
          func = getattr(self.client, method)
          headers = headers if headers else {}
          response = None
          try:
              logger.info("performing request %s", url)
              response = func(url, stream=stream, headers=headers,
                              **request_args)
          except requests.RequestException as err:
              logger.error("request %s failed [%s]", url, err)
              raise err
  
          # Handle error responses
          if response.status_code >= 400:
              logger.error("request %s failed [%d,%s]",
                           url,
                           response.status_code,
                           response.content.decode('utf-8'))
              raise V20Error(response.status_code,
                             response.content.decode('utf-8'))
          return response
docs: __request.
  
          make the actual request. This method is called by the
          request method in case of 'regular' API-calls. Or indirectly by
          the__stream_request method if it concerns a 'streaming' call.