code: def RetryOnUnavailable(func):
    
  
    @functools.wraps(func)
    def Wrapper(*args, **kwargs):
      while True:
        try:
          response = func(*args, **kwargs)
        except (httpclient.HTTPException, socket.error, urlerror.URLError) as e:
          time.sleep(5)
          if (isinstance(e, urlerror.HTTPError)
              and e.getcode() == httpclient.SERVICE_UNAVAILABLE):
            continue
          elif isinstance(e, socket.timeout):
            continue
          raise
        else:
          if response.getcode() == httpclient.OK:
            return response
          else:
            raise StatusException(response)
    return Wrapper
docs: Function decorator to retry on a service unavailable exception.