
    ,                     v   d Z ddlm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Zddl	m
Z ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddl$m%Z% ejL                  Z' ejP                         rdZ)ndZ) G d de*      Z+y)z>JSON gsutil Cloud API implementation for Google Cloud Storage.    )absolute_import)print_function)division)unicode_literalsN)
exceptions)config)AccessDeniedException)BadRequestException)NotFoundException)PreconditionException)ServiceException)SetUpJsonCredentialsAndCache)NoOpCredentials)pubsub_v1_client)pubsub_v1_messages)system_util)GetCertsFile)GetMaxRetryDelay)
GetNewHttp)GetNumRetries)UTF8zVInsufficient OAuth2 scope to perform this operation. Please re-run `gcloud auth login`zRInsufficient OAuth2 scope to perform this operation. Please re-run `gsutil config`c                   ^     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	ddZ
d	 Zd
 ZddZ xZS )	PubsubApiz;Wraps calls to the Cloud Pub/Sub v1 interface via apitools.c                    t         t        |           || _        t	               | _        t               | _        d| _        t        j                  ddd      | _        t        j                  ddd      }|rd|z   nd| _        | j                  | j                  z   | j                  z   | _        t        | ||	       |d
k\  }|d
k\  }t        j                   | j                  | j                  ||| j"                        | _        t'               | _        | j(                  | j$                  _        t+               | _        | j,                  | j$                  _        t/        | j"                  t0              r| j$                  j3                  dd       yy)a'  Performs necessary setup for interacting with Google Cloud Pub/Sub.

    Args:
      logger: logging.logger for outputting log messages.
      credentials: Credentials to be used for interacting with Google Cloud
          Pub/Sub
      debug: Debug level for the API implementation (0..3).
    zhttps://Credentialsgs_pubsub_hostzpubsub.googleapis.comgs_pubsub_portN: )credentials   )urlhttplog_requestlog_responser    key'AIzaSyDnacJHrKma0048b13sh8cgxNUwulubmJM)superr   __init__loggerr   
certs_filer   r#   	http_baser   get	host_base	host_porturl_baser   apitools_clientPubsubV1r    
api_clientr   num_retriesr   max_retry_wait
isinstancer   AddGlobalParam)selfr*   r    debugr   r$   r%   	__class__s          #platform/gsutil/gslib/pubsub_api.pyr)   zPubsubApi.__init__;   sA    
)T#%DK"nDODIDNZZ/? 79DNZZ/?FN/=cN*2DN^^dnn4t~~EDM v;GA:KQJL%..4==48II;F<H;?;K;K	MDO %D"&"2"2DOO*,D%)%8%8DOO"$""O4 oo$$U%NP 5    c                     t        j                  |      }	 | j                  j                  j	                  |      S # t
        $ r}| j                  ||       Y d }~y d }~ww xY w)Ntopic
topic_name)apitools_messagesPubsubProjectsTopicsGetRequestr3   projects_topicsGet TRANSLATABLE_APITOOLS_EXCEPTIONS_TranslateExceptionAndRaiser8   rA   requestes       r;   GetTopiczPubsubApi.GetTopicg   s[    >>ZPGA__,,0099+ A
&&qZ&@@A   $= 	A#AA#c                     t        j                  |      }	 | j                  j                  j	                  |      S # t
        $ r}| j                  ||       Y d }~y d }~ww xY w)N)namer@   )rB   Topicr3   rD   CreaterF   rG   )r8   rA   r?   rJ   s       r;   CreateTopiczPubsubApi.CreateTopicn   s[    ##4EA__,,33E::+ A
&&qZ&@@ArL   c                     t        j                  |      }	 | j                  j                  j	                  |      S # t
        $ r}| j                  ||       Y d}~yd}~ww xY w)zOnly used in system tests.r>   r@   N)rB   !PubsubProjectsTopicsDeleteRequestr3   rD   DeleterF   rG   rH   s       r;   DeleteTopiczPubsubApi.DeleteTopicu   s^    AAGA__,,33G<<+ A
&&qZ&@@ArL   c                     t        j                  |      }	 | j                  j                  j	                  |      S # t
        $ r}| j                  ||       Y d }~y d }~ww xY w)N)resourcer@   )rB   'PubsubProjectsTopicsGetIamPolicyRequestr3   rD   GetIamPolicyrF   rG   rH   s       r;   GetTopicIamPolicyzPubsubApi.GetTopicIamPolicy~   s^    GGGA__,,99'BB+ A
&&qZ&@@ArL   c                     t        j                  |      }t        j                  ||      }	 | j                  j                  j                  |      S # t        $ r}| j                  ||       Y d }~y d }~ww xY w)N)policy)rW   setIamPolicyRequestr@   )rB   SetIamPolicyRequest'PubsubProjectsTopicsSetIamPolicyRequestr3   rD   SetIamPolicyrF   rG   )r8   rA   r\   policy_requestrI   rJ   s         r;   SetTopicIamPolicyzPubsubApi.SetTopicIamPolicy   sq    &::&INGGAGA__,,99'BB+ A
&&qZ&@@As   $A 	A:A55A:c                     | j                   j                  t        j                        r.| j                   j	                  dt        j                                | j                  ||      }|r| )a+  Translates an HTTP exception and raises the translated or original value.

    Args:
      e: Any Exception.
      topic_name: Optional topic name in request that caused the exception.

    Raises:
      Translated CloudApi exception, or the original exception if it was not
      translatable.
    zTranslateExceptionAndRaise: %sr@   )r*   isEnabledForloggingDEBUGr9   	traceback
format_exc_TranslateApitoolsException)r8   rJ   rA   translated_exceptions       r;   rG   z%PubsubApi._TranslateExceptionAndRaise   sb     {{.
kk8!,,.0;;	j < "  r<   c                    t        |t        j                        rVt        |dd       rH	 t	        j
                  |j                  j                  t                    }d|v rd|d   v r|d   d   S y y y y # t        $ r Y y w xY w)Ncontenterrormessage)
r6   apitools_exceptions	HttpErrorgetattrjsonloadsrl   decoder   	Exception)r8   
http_errorjson_objs      r;   _GetMessageFromHttpErrorz"PubsubApi._GetMessageFromHttpError   s    *1;;<	Y	-	ZZ
 2 2 9 9$ ?@( Y(72C%CG$Y// &D  
. =  	
	s   AA2 2	A>=A>c                     	 |j                   d   }|j                  d      }|dk\  r||d  j                  d      d   }d|z  S y # t        $ r Y y w xY w)Nzwww-authenticatezscope="r   "   zAcceptable scopes: %s)responsefindsplitru   )r8   rv   www_authenticate	scope_idxscopess        r;   !_GetAcceptableScopesFromHttpErrorz+PubsubApi._GetAcceptableScopesFromHttpError   sr    #,,-?@ #''	2i	a!)*-33C8;&// 
  
s   A A 	AAc                    t        |t        j                        r=| j                  |      }|j                  dk(  rt        |xs d|j                        S |j                  dk(  radt        |      v rt        |xs d|j                        S dt        |      v rt        t        |j                  | j                  |            S |j                  d	k(  rd
t        |      v rt        |xs d|j                        S dt        |      v rt        |xs d|j                        S dt        |      v rt        d|j                        S dt        |      v rt        d|j                        S dt        |      v r+t        t        |j                  | j                  |            S t        |xs |j                  |j                        S |j                  dk(  rt        ||j                        S |j                  dk(  r|rt        d|z  |j                        S |j                  dk(  rt        ||j                        S t        ||j                        S y)a-  Translates apitools exceptions into their gsutil equivalents.

    Args:
      e: Any exception in TRANSLATABLE_APITOOLS_EXCEPTIONS.
      topic_name: Optional topic name in request that caused the exception.

    Returns:
      ServiceException for translatable exceptions, None
      otherwise.
    i  zBad Request)statusi  zLogin RequiredzAccess denied: login required.insufficient_scope)r   bodyi  z7The account for the specified project has been disabledzAccount disabled.z,Daily Limit for Unauthenticated Use Exceededz8Access denied: quota exceeded. Is your project ID valid?zUser Rate Limit Exceededz5Rate limit exceeded. Please retry this request later.zAccess Not ConfiguredzAccess Not Configured. Please go to the Google Cloud Platform Console (https://cloud.google.com/console#/project) for your project, select APIs and Auth and enable the Google Cloud Pub/Sub API.i  i  zThe topic %s already exists.i  N)r6   ro   rp   rx   status_coder
   strr	   "_INSUFFICIENT_OAUTH2_SCOPE_MESSAGEr   rn   r   r   r   )r8   rJ   rA   rn   s       r;   ri   z%PubsubApi._TranslateApitoolsException   s?    !(223--a0g	
#	 #7#;m*+--9 	9==Cs1v%&w (H'G./mm= = "SV+ '0]]99!<> > ==CDAN&w'E2E./mm= =;s1vE&w (C(C./mm= = (3q61&]]$ $ %A.&* ]]$ $ "SV+ '0]]99!<> >
 'w';!))./mm= ===C ??==CJ > K'(}}6 	6==C$WQ]]CCgamm<<w 4r<   )NNr   )N)__name__
__module____qualname____doc__r)   rK   rQ   rU   rZ   rb   rG   rx   r   ri   __classcell__)r:   s   @r;   r   r   8   s@    C*PXAAAAA*	(G=r<   r   ),r   
__future__r   r   r   r   rr   re   rg   apitools.base.pyr   ro   botor   gslib.cloud_apir	   r
   r   r   r   gslib.gcs_json_credentialsr   gslib.no_op_credentialsr   !gslib.third_party.pubsub_apitoolsr   r1   r   rB   gslib.utilsr   gslib.utils.boto_utilr   r   r   r   gslib.utils.constantsr   rp   rF   InvokedViaCloudSdkr   objectr    r<   r;   <module>r      s    E & %  '    >  1 / - 1 , C 3 Q U # . 2 , / &$7$A$A  !;!!#* %
& %
R= R=r<   