code: def _call_api(self, http_method, url, **kwargs):
          
          log.debug("{}: {} - {}".format(http_method.__name__.upper(), url, kwargs))
          if self.ratelimit is not None:
              # This path indicates we're taking a proactive approach to not hit the rate limit
              response = self._ratelimit(http_method=http_method, url=url, **kwargs)
          else:
              response = http_method(url, **kwargs)
  
          # If we are being rate-limited, wait the required period before trying again.
          if response.status_code == 429:
              while 'retry-after' in response.headers and int(response.headers['retry-after']) > 0:
                  retry_after_seconds = int(response.headers['retry-after'])
                  log.warning(
                      "Waiting for requested retry-after period: %s seconds" % retry_after_seconds
                  )
                  while retry_after_seconds > 0:
                      retry_after_seconds -= 1
                      self.check_ratelimit_budget(1)
                      log.debug("    -> sleeping: %s more seconds" % retry_after_seconds)
                      sleep(1)
                  response = http_method(url, **kwargs)
  
          self._check_response(response)
          self._update_callsafety(response)
          return response
docs: Execute a call to the Zendesk API. Handles rate limiting, checking the response
          from Zendesk and deserialization of the Zendesk response. All
          communication with Zendesk should go through this method.
  
          :param http_method: The requests method to call (eg post, put, get).
          :param url: The url to pass to to the requests method.
          :param kwargs: Any additional kwargs to pass on to requests.