
                             d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlmZ	 ddl
mZ ddl
mZ ddlZej                  j                  d	k(  rej                  j                   d
kD  rddlmZ ddZd Zy)z5Utilities for retrying requests on failures for gRPC.    )absolute_import)division)unicode_literalsN)
exceptions)errors)
retry_util      c                    ~ ~~t        |t        j                  t        j                  t
        j                  t
        j                  t
        j                  t
        j                  t
        j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  t        f      S )z'Returns True if the error is retriable.)
isinstanceauth_exceptionsTransportErrorr   RetryableApiErrorr   
BadGatewayGatewayTimeoutInternalServerErrorTooManyRequestsServiceUnavailablerequestsConnectionErrorChunkedEncodingErrorTimeout)exc_type	exc_valueexc_tracebackstates       9lib/googlecloudsdk/api_lib/storage/gcs_grpc/retry_util.pyis_retriabler   %   s     u	I$$$$  ##))..!!  
     c                 B     t        j                          fd       }|S )z)A decorator to retry on transient errors.c                  >    t        j                  t        | |      S )N)targetshould_retry_iftarget_argstarget_kwargs)r   retryerr   )argskwargsfuncs     r   wrapped_funcz*grpc_default_retryer.<locals>.wrapped_func;   s"    $	 r   )	functoolswraps)r)   r*   s   ` r   grpc_default_retryerr-   9   s&    ??4  
r   )NNNN)__doc__
__future__r   r   r   r+   sysgoogle.authr   r   googlecloudsdk.api_lib.storager   r   r   version_infomajorminorgoogle.api_corer   r-    r   r   <module>r8      s[    < &  '  
 5 1 5  Q3#3#3#9#9A#=((
r   