code: def acquire(self, *, raise_on_failure=True):
          
          acquired = False
  
          try:
              acquired = self._acquire()
              if raise_on_failure and not acquired:
                  raise RateLimitExceeded("rate limit exceeded for key %(key)r" % vars(self))
  
              yield acquired
          finally:
              if acquired:
                  self._release()
docs: Attempt to acquire a slot under this rate limiter.
  
          Parameters:
            raise_on_failure(bool): Whether or not failures should raise an
              exception.  If this is false, the context manager will instead
              return a boolean value representing whether or not the rate
              limit slot was acquired.
  
          Returns:
            bool: Whether or not the slot could be acquired.