def check_rate_limit(self): rate = self.item("/rate_limit")["resources"] if rate["core"]["remaining"] < RATE_LIMIT_THRESHOLD: reset = datetime.utcfromtimestamp(rate["core"]["reset"]) now = datetime.utcnow() delta = reset - now statsd.increment("http.client.rate_limited", tags=[f"hostname:{self.base_url.host}"]) raise exceptions.RateLimited(delta.total_seconds(), rate)
def get_client(*args, **kwargs): client = GithubInstallationClient(*args, **kwargs) rate = client.item("/rate_limit")["resources"] if rate["core"]["remaining"] < RATE_LIMIT_THRESHOLD: reset = datetime.utcfromtimestamp(rate["core"]["reset"]) now = datetime.utcnow() delta = reset - now statsd.increment("engine.rate_limited") raise exceptions.RateLimited(delta.total_seconds(), rate) return client
def _check_rate_limit(response: httpx.Response) -> None: remaining = response.headers.get("X-RateLimit-Remaining") if remaining is None: return remaining = int(remaining) if remaining < RATE_LIMIT_THRESHOLD: reset = response.headers.get("X-RateLimit-Reset") if reset is None: delta = datetime.timedelta(minutes=5) else: delta = (datetime.datetime.utcfromtimestamp(int(reset)) - datetime.datetime.utcnow()) if response.url is not None: statsd.increment( "http.client.rate_limited", tags=[f"hostname:{response.url.host}"], ) raise exceptions.RateLimited(delta, remaining)