docs: def process_request(self, method, data=None):
          """Process request over HTTP to ubersmith instance.
  
              method: Ubersmith API method string
              data: dict of method arguments
  
          """
          # make sure requested method is valid
          self._validate_request_method(method)
  
          # attempt the request multiple times
          attempts = 3
          for i in range(attempts):
              response = self._send_request(method, data)
  
              # handle case where ubersmith is 'updating token'
              # see: https://github.com/jasonkeene/python-ubersmith/issues/1
              if self._is_token_response(response):
                  if i < attempts - 1:
                      # wait 2 secs before retrying request
                      time.sleep(2)
                      continue
                  else:
                      raise UpdatingTokenResponse
              break
  
          resp = BaseResponse(response)
  
          # test for error in json response
          if response.headers.get('content-type') == 'application/json':
              if not resp.json.get('status'):
                  if all([
                      resp.json.get('error_code') == 1,
                      resp.json.get('error_message') == u"We are currently "
                          "undergoing maintenance, please check back shortly.",
                  ]):
                      raise MaintenanceResponse(response=resp.json)
                  else:
                      raise ResponseError(response=resp.json)
          return resp