
                           S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSK	J
r
  SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSK r SSK!J"r"  SSK#J$r$  SSK#J%r%  SSK#J&r&  SSK#J'r'  SSK#J(r(  SSK#J)r)  SSK#J*r*  SSK#J+r+  SSK#J,r,  SSK#J-r-  SSK#J.r.  SSK#J/r/  SSK#J0r0  SSK#J1r1  SSK#J2r2  SSK3J4r4  SS K5J6r6  SS!K5J7r7  SS"K8J9r9  SS#K8J:r:  SS$K8J;r;  SS%K8J<r<  SS&K8J=r=  SS'K8J>r>  SS(K8J?r?  SS)K@JArA  SS*KBJCrC  SS+KDJErE  SS,KFJGrG  SS-KHJIrJ  SS.KHJKrL  SS/KMJNrN  SS0KMJOrO  SS1KMJPrP  SS2KMJQrQ  SS3KMJRrR  SS4KSJTrT  SS5KSJUrU  SS6KSJVrV  SS7KSJWrW  SS8KSJXrX  SS9KSJYrY  SS:KSJZrZ  SS;K[J\r\  SS<K[J]r]  SS=K^J_r_  SS>K^J`r`  SS?K^Jara  SS@K^Jbrb  SSAK^Jcrc  SSBKdJere  SSCKdJfrf  SSDKdJgrg  SSEKdJhrh  SSFKiJjrj  SSGKkJlrl  SSHKmJnrnJoro  SSIKpJqrq  SSJKrJsrs  SSKKrJtrt  SSLKrJuru  SSMKrJvrv  SSNKrJwrw  SSOKrJxrx  SSPKyJzrz  \R                  (       a  \|r}\LR                  r~\~R                  r\GR                  rSQr\GR                  \GR
                  \GR                  \GR                  4r\GR                  \GR                  \GR                  \GR                  \
GR                  \
GR                  \
GR                  \GR                   \ GR"                  GR$                  \GR&                  \GR(                  \GR*                  \GR,                  \4r\" / SRQ5      rSSSSTSUSVSWSX.rSSSSYSZSTSUSVS[.r\GR;                  5       r\GR?                  \5        \" S\S]/5      rS^rS_rS`rSar " Sb Sc\'5      rg)dz>JSON gsutil Cloud API implementation for Google Cloud Storage.    )absolute_import)print_function)division)unicode_literals)contextmanagerN)http_client)encoding)
exceptions)http_wrapper)transfer)CalculateWaitForRetry)config)context_config)AccessDeniedException)ArgumentException)BadRequestException)CloudApi)EncryptionException)NotEmptyException)NotFoundException)PreconditionException)Preconditions) PublishPermissionDeniedException)ResumableDownloadException)ResumableUploadAbortException)ResumableUploadException)!ResumableUploadStartOverException)ServiceException)CommandException)SetUpJsonCredentialsAndCache)isP12Credentials)BytesTransferredContainer)&DownloadCallbackConnectionClassFactory)HttpWithDownloadStream)HttpWithNoRetries)$UploadCallbackConnectionClassFactory)WrapDownloadHttpRequest)WrapUploadHttpRequest)ImpersonationCredentials)NoOpCredentials)ProgressCallbackWithTimeout)PopulateProjectId)storage_v1_client)storage_v1_messages)DeleteTrackerFile)GetRewriteTrackerFilePath)HashRewriteParameters)ReadRewriteTrackerFile)WriteRewriteTrackerFile)GetCertsFile)GetGcsJsonApiVersion)GetJsonResumableChunkSize)GetMaxRetryDelay)
GetNewHttp)GetNumRetries)JsonResumableChunkSizeDefined)ListToGetFields)ValidateDstObjectMetadata)IAM_POLICY_VERSION)NUM_OBJECTS_PER_LIST_PAGE)REQUEST_REASON_ENV_VAR)REQUEST_REASON_HEADER_KEY)UTF8)#Base64Sha256FromBase64EncryptionKey)CryptoKeyType)CryptoKeyWrapperFromKey)FindMatchingCSEKInBotoConfig)AddAcceptEncodingGzipIfNeeded)LogAndHandleRetries)CreatePayloadGetFinalUrl)GetPrintableExceptionString)CreateBucketNotFoundException)%CreateNotFoundExceptionForObjectWrite)CreateObjectNotFoundException)DEFAULT_CONTENT_TYPE)PRIVATE_DEFAULT_OBJ_ACL)REMOVE_CORS_CONFIG)ServiceAccountCredentialsi  )acldefaultObjectAclz	items/aclzitems/defaultObjectAclzitems/ownerownerauthenticatedReadprivateprojectPrivate
publicReadpublicReadWrite)Nauthenticated-readrV   project-privatepublic-readzpublic-read-writebucketOwnerReadbucketOwnerFullControl)NrZ   zbucket-owner-readzbucket-owner-full-controlrV   r[   r\   crc32cmd5Hashskipz4Insufficient OAuth2 scope to perform this operation.zstorage.googleapis.comzstorage.mtls.googleapis.comc                     ^  \ rS rSrSr       SKU 4S jjrS rS rS rS	 r	S
 r
SLS jrSLS jrSMS jr   SNS jr  SMS jrSLS jrS rSMS jrS rS r     SOS jrSLS jr    SPS jrSMS jrSNS jrS r     SOS jrSLS jrS r\S 5       rSLS jr   SMS  jr!   SNS! jr"  SMS" jr#SLS# jr$   SNS$ jr%S% r& SLS& jr'SLS' jr(SLS( jr)SSSS)\*RV                  RX                  SSSSSS4S* jr-      SQS+ jr.      SQS, jr/      SRS- jr0SSSSSSSSS\1Rd                  SS)4S. jr3S/ r4        SSS0 jr5       STS1 jr6          SUS2 jr7         SVS3 jr8   SNS4 jr9    SPS5 jr:   SNS6 jr;SLS7 jr<SMS8 jr=S9 r>   SNS: jr?S; r@S< rAS= rBS> rCS? rD SWS@ jrESA rFSB rGSC rHSD rI    SPSE jrJSF rKSG rLSH rM    SPSI jrNSJrOU =rP$ )X
GcsJsonApi   z=Google Cloud Storage JSON implementation of gsutil Cloud API.Nr   c                 *	  > [         [        U ]  UUUSUUUU	U
S9	  [        5       U l        [        5       U l        [        XUS9  U R                  5       U l	        U R                  5       U l        U R                  (       aU  U R                  R                  U R                  5      U l        U R                  R                  U R                  5      U l        O"U R                  U l        U R                  U l        [!        U R                  5      (       a?  [#        U R                  R                  5        [%        U R                  R                  5        O*[#        U R                  5        [%        U R                  5        SU l        [(        R*                  " SSS5      n[,        R.                  " 5       (       aV  [,        R.                  " 5       R0                  (       a2  U(       a  [3        SR5                  [6        U5      5      e[6        U l        OU=(       d    [:        U l        U(       d-  [(        R*                  " SS	S5      nU(       a  [3        S
U-  5      e[(        R*                  " SSS5      nU(       d5  [(        R*                  " SSS5      nU(       a  [3        SU-  5      eSU l        OS[(        R*                  " SS5      -   U l        [?        5       U l         U R&                  U R8                  -   U R<                  -   S-   S-   U R@                  -   S-   U l!        U(       a  [D        RF                  " SU-  S9OSU l$        0 n[(        R*                  " SSS5      nU(       a  U(       a  UUS'   U RK                  U5        US:  nUS:  n[L        RN                  " U RB                  U R                  UUU R                  U R@                  U RH                  US9U l(        [S        5       U l*        U RT                  U RP                  l*        [W        5       U l,        U RX                  U RP                  l,        [[        U R\                  S9U RP                  l/        SU RP                  l0        [c        U R                  [d        5      (       a  U RP                  Rg                  SS5        gg)a  Performs necessary setup for interacting with Google Cloud Storage.

Args:
  bucket_storage_uri_class: Unused.
  logger: logging.logger for outputting log messages.
  status_queue: Queue for relaying status to UI.
  provider: Unused.  This implementation supports only Google Cloud Storage.
  credentials: Credentials to be used for interacting with Google Cloud
               Storage.
  debug: Debug level for the API implementation (0..3).
  http_headers (dict|None): Arbitrary headers to be included in every request.
  trace_token: Trace token to pass to the API implementation.
  perf_trace_token: Performance trace token to use when making API calls.
  user_project: Project to be billed for this request.
gs)providerdebughttp_headerstrace_tokenperf_trace_tokenuser_project)credentialszhttps://Credentialsgs_json_hostNz"use_client_certificate" is enabled, which sets gsutil to use the host {}. However, a custom host was set using "gs_json_host": {}. Please set "use_client_certificate" to "False" or comment out the "gs_json_host" line in the Boto config.gs_hostzJSON API is selected but gs_json_host is not configured, while gs_host is configured to %s. Please also configure gs_json_host and gs_json_port to match your desired endpoint.gs_json_portgs_portzJSON API is selected but gs_json_port is not configured, while gs_port is configured to %s. Please also configure gs_json_host and gs_json_port to match your desired endpoint. :/zstorage/ztoken:%s)tracegs_json_host_headerHost   )urlhttplog_requestlog_responserm   versiondefault_global_paramsadditional_http_headers)status_queueTkey'AIzaSyDnacJHrKma0048b13sh8cgxNUwulubmJM)4superrc   __init__r4   
certs_filer8   r{   r    _GetNewDownloadHttpdownload_http_GetNewUploadHttpupload_httprm   	authorizeauthorized_download_httpauthorized_upload_httpr!   r'   r(   	http_baser   getr   get_context_configuse_client_certificater   format	MTLS_HOST	host_baseDEFAULT_HOST	host_portr5   api_versionurl_baseapitools_messagesStandardQueryParametersglobal_params_UpdateHeadersapitools_client	StorageV1
api_clientr7   max_retry_waitr9   num_retriesrG   r   
retry_func(overwrite_transfer_urls_with_client_base
isinstancer*   AddGlobalParam)selfbucket_storage_uri_classloggerr   rg   rm   rh   ri   rj   rk   rl   ro   rp   rq   rr   r   rw   r|   r}   	__class__s                      %platform/gsutil/gslib/gcs_json_api.pyr   GcsJsonApi.__init__   s   8 
*d$%=%+%1.2+02>1<6F2> % @ #nDODI ;G 113D--/D&*&6&6&@&@


'd#$($4$4$>$>t?O?O$Pd!&*&8&8d#$($4$4d!(())d;;@@AD77<<=d;;<D778DN::m^TBL))++))+BB	 vi68 	8 !dn#3|dn

=)T:g	L  	 ::m^TBL

=)T:g	L  	
 dnVZZ~FFdn+-D^^dnn4t~~EK "&"2"23589DM ,7 +BB;&(<@ 	 ! **]4I4P|(;f%/0A:KQJL%//MMYY!$$  "00 79DO +,D%)%8%8DOO"$D"&"2"2DOO!4&&"(DOO?CDOO<$""O44 oo$$U%NP 5    c                     [        U R                  [        5      (       a  U R                  R                  $ [        U R                  [        5      (       a  U R                  R
                  $ [        S5      e)z%Returns the service account email id.zBCannot get service account email id for the given credential type.)r   rm   r)   service_account_idrQ   service_account_emailr   r   s    r   GetServiceAccountIdGcsJsonApi.GetServiceAccountIdY  s`    $""$<==000	D$$&?	@	@333 r   c                    U R                   (       a  UR                  U R                   5        U R                  (       a  U R                  US'   [        R                  R                  [        5      nU(       a	  X![        '   g g )Ncookie)ri   updaterk   osenvironr   r?   r@   )r   headersrequest_reasons      r   r   GcsJsonApi._UpdateHeadersd  s\    nnT&&' //ghZZ^^$:;N+9'( r   c                     [        [        S9$ )N
http_class)r8   r$   r   s    r   r   GcsJsonApi._GetNewDownloadHttpq  s    !788r   c                     [        [        S9$ )zCReturns an upload-safe Http object (by disabling httplib2 retries).r   )r8   r%   r   s    r   r   GcsJsonApi._GetNewUploadHttpt  s    !233r   c                 t   [        U R                  [        5      (       aU  U R                  R                  nU R                  R                  nUR                  X15      nUR                  UR                  4$ [        U R                  [        5      (       a  U R                  R                  U5      $ [        S5      e)zReturns the Signed Content.zKAuthentication using a service account is required for signing the content.)r   rm   r)   apir   SignBlobkeyId
signedBlobrQ   	sign_blobr   )r   string_to_signiam_cred_apir   responses        r   _GetSignedContentGcsJsonApi._GetSignedContentx  s    $""$<==%%))l++>>&&'9Jh^^X0000	D$$&?	@	@''77 r   c                 T    USL =(       d    [         R                  [        U5      5      $ )zChecks Returns true if ACL related values are in fields set.

Args:
  fields: list or set of fields. May be in GET ['acl'] or List
      ['items/acl'] call format.

Returns:
  True if an ACL value is requested in the input fields, False otherwise.
N)_ACL_FIELDS_SETintersectionsetr   fieldss     r   _FieldsContainsAclField"GcsJsonApi._FieldsContainsAclField  s"     T>F_99#f+FFr   c                     U(       a=  [         R                  [        U5      5      (       a  SU;  a  [        S[         -  5      eggg)zEEnsures customerEncryption field is included if hashes are requested.customerEncryptionzhgsutil client error: customerEncryption must be included when requesting potentially encrypted fields %sN)_ENCRYPTED_HASHES_SETr   r   r   r   s     r   ._ValidateEncryptionFieldsForMetadataGetRequest9GcsJsonApi._ValidateEncryptionFieldsForMetadataGetRequest  sN     	(55c&kBBF*79NOP P 	+ Cr   c                 V   [         R                  " UU R                  [        S9n[         R                  " 5       nU(       a  SR                  [        U5      5      Ul         U R                  R                  R                  UUS9$ ! [         a  nU R                  XaS9   S nAg S nAff = f)N)bucketuserProjectoptionsRequestedPolicyVersion,r   bucket_name)r   !StorageBucketsGetIamPolicyRequestrl   r=   r   joinr   r   r   bucketsGetIamPolicy TRANSLATABLE_APITOOLS_EXCEPTIONS_TranslateExceptionAndRaise)r   r   rg   r   apitools_requestr   es          r   GetBucketIamPolicyGcsJsonApi.GetBucketIamPolicy  s    (JJ%%&8: &==?M XXc&k2mC__$$112B@M 2 O O+ C
&&q&BCs   !#B 
B(B##B(c                 r   Ub  [        U5      n[        R                  " UUUU R                  S9n[        R                  " 5       nU(       a  SR                  [        U5      5      Ul         U R                  R                  R                  UUS9$ ! [         a  nU R                  UUUUS9   S nAg S nAff = f)Nr   object
generationr   r   r   r   object_namer   )longr   !StorageObjectsGetIamPolicyRequestrl   r   r   r   r   r   objectsr   r   r   )	r   r   r   r   rg   r   r   r   r   s	            r   GetObjectIamPolicyGcsJsonApi.GetObjectIamPolicy  s     
#j(JJ%%	'
 &==?M XXc&k2m>__$$112B@M 2 O O+ >
&&q3>3>2< ' >>s   ,#B 
B6B11B6c                 &   Ub  [        U5      n[        R                  " UUUUU R                  S9n[        R                  " 5       n U R
                  R                  R                  UUS9$ ! [         a  nU R                  UUUS9   S nAg S nAff = f)N)r   r   r   policyr   r   r   r   )
r   r   !StorageObjectsSetIamPolicyRequestrl   r   r   r   SetIamPolicyr   r   )	r   r   r   r   r   rg   api_requestr   r   s	            r   SetObjectIamPolicyGcsJsonApi.SetObjectIamPolicy  s     
#j#EE%%'K &==?M@__$$11+@M 2 O O+ @
&&q3>3> ' @@s   #A+ +
B5BBc                     [         R                  " XU R                  S9n[         R                  " 5       n U R                  R
                  R                  UUS9$ ! [         a  nU R                  XaS9   S nAg S nAff = f)N)r   r   r   r   r   )	r   !StorageBucketsSetIamPolicyRequestrl   r   r   r   r   r   r   )r   r   r   rg   r   r   r   s          r   SetBucketIamPolicyGcsJsonApi.SetBucketIamPolicy  s    (JJt7H7HJ%==?MC__$$112B@M 2 O O+ C
&&q&BCs   #A 
A=$A88A=c	                    U R                  5       n	[        U	UUUUUUUUS9	u  p[        R                  (       a  U
R	                  [
        5      n
U R                  U
5      u  pUR                  SU	< SU< S35        [        XS   UU5      $ ),See CloudApi class for function doc strings.)		client_idmethoddurationpathr   r   regionsigned_headersstring_to_sign_debugz.Key ID used to sign blob for service account "z": ""host)	r   rH   sixPY3encoderA   r   rh   rI   )r   r  r  r  r   r   r  r	  r
  r   r   canonical_query_stringkey_idraw_signatures                 r   SignUrlGcsJsonApi.SignUrl  s     113-:$%1	.3*N ww%,,T2n 22>BF
LL$f. /}V&<d-/ /r   c                 
   [         R                  R                  R                  nU R	                  U5      (       a$  [         R                  R                  R
                  n[         R                  " UUU R                  S9n[         R                  " 5       nU(       a  SR                  [        U5      5      Ul
         U R                  R                  R                  UUS9$ ! [         a  nU R                  XqS9   SnAgSnAff = f)r  )r   
projectionr   r   r   r   N)r   StorageBucketsGetRequestProjectionValueValuesEnumnoAclr   fullrl   r   r   r   r   r   r   Getr   r   )r   r   rg   r   r  r   r   r   s           r   	GetBucketGcsJsonApi.GetBucket  s    #<<++EE ##F++%>>--dd (AA%%' &==?M XXc&k2m
C__$$(()97D ) F F+ C
&&q&BCs   ;#C 
D)C==Dc                      [         R                  " US9nU R                  R                  R	                  U5      $ ! [
         a  nU R                  X1S9   SnAgSnAff = f)r  )r   r   N)r   &StorageBucketAccessControlsListRequestr   bucketAccessControlsListr   r   )r   r   requestr   s       r   ListBucketAccessControls#GcsJsonApi.ListBucketAccessControls  sY    C!HHg__1166w??+ C
&&q&BCs   8; 
AAAc                      [         R                  " XS9nU R                  R                  R	                  U5      $ ! [
         a  nU R                  UUUS9   SnAgSnAff = f)r  )r   r   r   N)r   &StorageObjectAccessControlsListRequestr   objectAccessControlsr!  r   r   )r   r   r   r"  r   s        r   ListObjectAccessControls#GcsJsonApi.ListObjectAccessControls   sd    @!HH2g__1166w??+ @
&&q3>3> ' @@   8; 
A AA c           
         [         R                  R                  R                  nU R	                  U5      (       a$  [         R                  R                  R
                  nUn	U(       d
  [        5       n/ n
S HR  n[        XS5      nU(       d  M  [        R                  " U5      (       a  M5  [        XS5        U
R                  U5        MT     U	R                  (       a,  U	R                  [        :X  a  / U	l        U
R                  S5        U	R                  (       a/  U	R                  S   [        :X  a  / U	l        U
R                  S5        SnU(       a?  U
R                  S5        [         R                  R!                  U R#                  U5      5      nSnU(       a?  U
R                  S5        [         R                  R%                  U R'                  U5      5      n[         R                  " UU	UUR(                  UUU R*                  S9n[         R,                  " 5       nU(       a  SR/                  [1        U5      5      Ul        U R4                  R7                  U
5          U R4                  R8                  R;                  UUS	9sSSS5        $ ! [<         a  nU R?                  U5         SnAOSnAff = f SSS5        g! , (       d  f       g= f)
r  )billing
encryption	lifecycleloggingmetadataretentionPolicy
versioningwebsiteNcorsr   rS   rR   )r   bucketResourcer  ifMetagenerationMatchpredefinedAclpredefinedDefaultObjectAclr   r   r   ) r   StorageBucketsPatchRequestr  r  r   r  r   getattrr	   MessageToDictsetattrappendr4  rP   rS   rO   PredefinedAclValueValuesEnum_BucketCannedAclToPredefinedAcl)PredefinedDefaultObjectAclValueValuesEnum_ObjectCannedAclToPredefinedAclmeta_gen_matchrl   r   r   r   r   r   IncludeFieldsr   Patchr   r   )r   r   r0  
canned_aclcanned_def_aclpreconditionsrg   r   r  bucket_metadataapitools_include_fieldsmetadata_fieldattrpredefined_aclpredefined_def_aclr   r   r   s                     r   PatchBucketGcsJsonApi.PatchBucket+  sZ    $>>++EE ##F++%@@--dd O#om !	 _d;d	h,,T226&&~6	  4 48J Jo$$V,((((+/FF)+o&$$%78N$$U+)DD44 @@LN  $$%78

6
6
3
322>BD 
 )CC&+::$#5%%' &==?M XXc&k2m		&	&'>	?,&&,,-=;H - J 
@	? . ,((++,+ 
@	?	?s0   J>#J
J1J,'J>,J11J>>
Kc                 J    [        U5      n[        R                  " UUU R
                  S9n[        R                  " 5       n U R                  R                  R                  XES9$ ! [         a    [        S5      ef = f! [         a  nU R                  XaS9   S nAg S nAff = f)Nz6LockRetentionPolicy Metageneration must be an integer.r   r6  r   r   r   )r   
ValueErrorr   r   (StorageBucketsLockRetentionPolicyRequestrl   r   r   r   LockRetentionPolicyr   r   )r   r   metagenerationrg   r   r   r   s          r   rT  GcsJsonApi.LockRetentionPolicy|  s    DN+n 	BB"0))	+ 
 &==?MC__$$88
 9 9 9  D
BD DD , C
&&q&BCs#   A& "A? &A<?
B"	BB"c                 &   [         R                  R                  R                  nU R	                  U5      (       a$  [         R                  R                  R
                  nU(       d  [         R                  " 5       nXl        UR                  (       a  UR                  R                  5       Ul        UR                  (       a  UR                  R                  5       Ul
        [        U5      n[         R                  " UUUU R                  S9n[         R                  " 5       nU(       a  SR                  [        U5      5      Ul         U R"                  R$                  R'                  UUS9$ ! [(         a  n	U R+                  XS9   Sn	A	gSn	A	ff = f)r  )r   projectr  r   r   r   r   N)r   StorageBucketsInsertRequestr  r  r   r  BucketnamelocationlowerstorageClassr,   rl   r   r   r   r   r   r   Insertr   r   )
r   r   
project_idr0  rg   r   r  r   r   r   s
             r   CreateBucketGcsJsonApi.CreateBucket  sC    $??++EE ##F++%AA--dd "))+hM"++113h&3399;h":.J(DD%%	'
 &==?M XXc&k2mC__$$++,<:G , I I+ C
&&q&BCs   	#E- -
F7FFc                    U(       d
  [        5       n[        R                  " UUR                  U R                  S9n U R
                  R                  R                  U5        g! [         a  n[        U R                  XQS9[        5      (       aQ  U R                  US/S9nUR                  (       a/  UR                  R                  (       a  [        SUR                  S9eU R!                  XQS9   SnAgSnAff = f)r  rQ  r   r2  r   VersionedBucketNotEmptystatusN)r   r   StorageBucketsDeleteRequestrB  rl   r   r   Deleter   r   _TranslateApitoolsExceptionr   r  r2  enabledstatus_coder   )r   r   rG  rg   r   r   rH  s          r   DeleteBucketGcsJsonApi.DeleteBucket  s    #om(DD+::%%'
C
oo$$%56+ 
C	

*
*1
*
F

 

 ..l^.L%%/*D*D*L*L!";)*8 8
&&q&B
Cs   %A# #
C9-BC44C9c              #     #    [         R                  R                  R                  nU R	                  U5      (       a$  [         R                  R                  R
                  n[        U5      n[         R                  " U[        UU R                  S9n[         R                  " 5       nU(       a6  SU;  a  UR                  S5        SR                  [        U5      5      Ul         U R                  R                  R!                  UUS9nU R'                  W5       H  n	U	v   M	     UR(                  (       a  [         R                  " UUR(                  [        UU R                  S9n U R                  R                  R!                  UUS9nU R'                  U5       H  n	U	v   M	     UR(                  (       a  M  gg! ["         a  nU R%                  U5         SnANSnAff = f! ["         a  nU R%                  U5         SnANySnAff = f7f)r  )rX  
maxResultsr  r   nextPageTokenr   r   N)rX  	pageTokenrp  r  r   )r   StorageBucketsListRequestr  r  r   r  r,   NUM_BUCKETS_PER_LIST_PAGErl   r   addr   r   r   r   r   r!  r   r   _YieldBucketsrq  )
r   r`  rg   r   r  r   r   bucket_listr   r   s
             r   ListBucketsGcsJsonApi.ListBuckets  s    #==++EE ##F++%??--dd ":.J(BB,%%	'
 &==?M		&

?# XXc&k2m*OO++001A?L 1 Nk
 $$[1l 2 
#
#*DD--.''),oo--223CAN 3 P
 &&{3& 4 
#
#
# , *
&&q))*  . ,((++,sa   C!H$$F; AH&$G# 
-H9H;
G GHG  H#
H-H>HHHc              #   ^   #    UR                   (       a  UR                    H  nUv   M	     gg7f)z0Yields buckets from a list returned by apitools.N)items)r   rw  r   s      r   rv  GcsJsonApi._YieldBuckets  s(     %%& & s   +-c              #     #    [         R                  R                  R                  nU R	                  U5      (       a$  [         R                  R                  R
                  n[         R                  " UUUUU[        U R                  S9n[         R                  " 5       n	U(       a  [        U5      nSU;  a  UR                  S5        [        US9R                  [        5      (       aD  UR                  S5        UR                  S5        UR                  S5        UR                  S5        SR                  U5      U	l        S	n
S
nU
(       a  Sn
[         R                  " UUUUUU[        U R                  S9n U R                   R"                  R%                  UU	S9nWR*                  (       a  S	n
UR*                  nU R-                  U5       Hn  nUR.                  [0        R2                  R4                  :X  a?  U R7                  UUR8                  [        U5      S9nU[:        :X  a  M[  U(       a  Xl        O Uv   Mp     U
(       a  M  g
g
! [&         a  nU R)                  XS9   S
nANS
nAff = f7f)r  )r   prefix	delimiterversionsr  rp  r   rq  list_fieldszitems/customerEncryptionzitems/kmsKeyNamezitems/generationz
items/namer   TNF)r   r~  r  r  r  rr  rp  r   r   r   rd  )r   StorageObjectsListRequestr  r  r   r  r>   rl   r   r   ru  r;   r   r   r   r   r   r   r!  r   r   rq  _YieldObjectsAndPrefixesdatatyper   CsObjectOrPrefixTypeOBJECT_DecryptHashesIfPossibledata_SKIP_LISTING_OBJECT)r   r   r~  r  all_versionsrg   r   r  r   r   	list_pagenext_page_tokenobject_listr   object_or_prefixdecrypted_metadatas                   r   ListObjectsGcsJsonApi.ListObjects  s6     $==++EE ##F++%??--dd (BB,%%' &==?M6{f		&

?#	
*l+@A
B 	

-.

%&

%&

<  XXf-mIO
i*DD#.'')Eoo--223CAN 3 P
 
	"	"	%33";;KH
$$(E(E(L(LL#<<##$V,  =  .
  #77!$6!  I+ ) . E(((DEs7   E6I09$I
 B)I0I0

I-I(#I0(I--I0c           
         [        US9nU R                  U5      (       d  U R                  UUS9  gSnU R                  UUS9(       a7  [        R
                  " U R                  UUR                  UR                  US9nOU R                  UUS9(       a  UR                  R                  n[        R                  (       a&  [        U[        5      (       d  UR!                  S5      n[#        U[$        5      nU(       a@  [        R
                  " U R                  UUR                  UR                  U['        U5      S9nUc  g U" 5       $ ! [(         a	    [*        s $ f = f)a  Attempts to decrypt object metadata.

Helps fetch encrypted object metadata fields (if requested) for API method
calls that requested them but did not receive them; this occurs for
ListObjects(), along with GetObjectMetadata() calls for which the object is
CSEK-encrypted but no decryption information was supplied.

This method issues a StorageObjectsGetRequest (if object hash fields were
requested but not retrieved), formatted appropriately depending on the
encryption method.

Args:
  bucket_name: String of bucket containing the object.
  object_metadata: apitools Object describing the object. Must include
      name, generation, and customerEncryption fields.
  fields: ListObjects-format fields to return.

Returns:
  - apitools_messages.Object with decrypted hash fields if decryption was
  performed.
  - None if the object was not encrypted, or CSEK-encrypted but we could not
  find a matching decryption key.
  - gcs_json_api._SKIP_LISTING_OBJECT if the object no longer exists.
r  rd  Nr   r   asciir   r   decryption_tuple)r;   _ObjectIsEncrypted2_RaiseIfNoDesiredHashesPresentForUnencryptedObject _ObjectKMSEncryptedAndNeedHashes	functoolspartial_GetObjectMetadataHelperr[  r   !_ObjectCSEKEncryptedAndNeedHashesr   	keySha256r  r  r   bytesr  rE   r   rD   r   r  )r   r   object_metadatar   
get_fieldsget_metadata_func
key_sha256decryption_keys           r   r  #GcsJsonApi._DecryptHashesIfPossibleL  s\   2 !V4J""?33
==oEO > Q ,,_4> - @ $++

'
'



$// 
	/	/7A 
0 
C
 #55??j	*e,,!((1*3JGn	%--))  &114^DF  "   " "!"s   E EEc              #   b  #    UR                   (       aD  UR                    H4  n[        R                  " U[        R                  R                  5      v   M6     UR
                  (       aE  UR
                   H4  n[        R                  " U[        R                  R                  5      v   M6     g g 7fN)r{  r   CsObjectOrPrefixr  r  prefixesPREFIX)r   r  	cloud_objr~  s       r   r  #GcsJsonApi._YieldObjectsAndPrefixes  s     "(()''	(0(E(E(L(LN 	N ) ((&''(0(E(E(L(LN 	N ) s   B-B/c              #      #    U(       aI  U R                   R                  R                  5       nU R                   R                  R                  U5        Sv   U(       a  WU R                   l        gg7f)z@Wrapped code makes apitools requests with the specified headers.N)r   r   copyr   )r   r   old_headerss      r   _ApitoolsRequestHeaders"GcsJsonApi._ApitoolsRequestHeaders  sQ      OO;;@@Bk
oo--44W=	0;doo- s   A/A1c                     0 nU(       aT  UR                   [        R                  :X  a6  UR                  US'   UR                  US'   [        UR                  5      US'   U$ )z:Returns headers dict matching crypto_tuple, or empty dict.x-goog-encryption-algorithmx-goog-encryption-keyx-goog-encryption-key-sha256)crypto_typerC   CSEK
crypto_alg
crypto_keyrB   )r   crypto_tupler   s      r   _EncryptionHeadersFromTuple&GcsJsonApi._EncryptionHeadersFromTuple  s]    G00M4F4FF/;/F/Fg+,)5)@)@g%&
-l.E.E
F ,-Nr   c                 R   0 nU(       aK  UR                   [        R                  :X  a-  UR                  US'   UR                  US'   UR
                  US'   U(       aK  UR                   [        R                  :X  a-  UR                  US'   UR                  US'   UR
                  US'   U$ )zAReturns headers dict matching the provided tuples, or empty dict.z'x-goog-copy-source-encryption-algorithmz!x-goog-copy-source-encryption-keyz(x-goog-copy-source-encryption-key-sha256r  r  r  )r  rC   r  r  r  crypto_key_sha256)r   r  encryption_tupler   s       r   _RewriteCryptoHeadersFromTuples*GcsJsonApi._RewriteCryptoHeadersFromTuples  s     G,88M<N<NN

%
% 78 
%
% 12 
,
, 89 ,88M<N<NN/?/J/Jg+,)9)D)Dg%&

,
, ,- Nr   c                    U R                  XX4S9nU R                  US9n U(       aL  U R                  U R                  US95         U R                  R
                  R                  UUS9sSSS5        $ U R                  R
                  R                  UUS9$ ! , (       d  f       g= f! [         a  nU R                  UUUUS9   SnAgSnAff = f)a  Get metadata, adding necessary headers for CSEK decryption if necessary.

Args:
  bucket_name: (str) Bucket containing the object.
  object_name: (str) Object name.
  generation: (int) Generation of the object to retrieve.
  fields: (list<str>) If present, return only these Object metadata fields,
      for example: ['acl', 'updated'].
  decryption_tuple: (gslib.utils.encryption_helper.CryptoKeyWrapper) The
      CryptoKeyWrapper for the desired decryption key.

Raises:
  ArgumentException for errors during input validation.
  ServiceException for errors interacting with cloud storage providers.

Returns:
  (apitools_message.Object) The retrieved object metadata.
r  rd  r  r   Nr   )	'_CreateApitoolsObjectMetadataGetRequest&_GetApitoolsObjectMetadataGlobalParamsr  r  r   r   r  r   r   )	r   r   r   r   r   r  r   r   r   s	            r   r  #GcsJsonApi._GetObjectMetadataHelper  s    0 CCZ D H??v?NM>	)),,:J,KM((,,-=;H - JM M
 &&**+;9F + H 	HM M , >
&&q3>3>2< ' >>s;   %B) $B*	B) 4#B) 
B&"B) &B) )
C3C

Cc                 D   U R                  US9  [        R                  R                  R                  nU R                  U5      (       a$  [        R                  R                  R                  nU(       a  [        U5      n[        R                  " UUUUU R                  S9$ )Nrd  )r   r   r  r   r   )	r   r   StorageObjectsGetRequestr  r  r   r  r   rl   )r   r   r   r   r   r  s         r   r  2GcsJsonApi._CreateApitoolsObjectMetadataGetRequest  s    
 	77v7F#<<++EE ##F++%>>--dd 
#j55%%' 'r   c                 |    [         R                  " 5       nU(       a  SR                  [        U5      5      Ul        U$ )Nr   )r   r   r   r   r   )r   r   r   s      r   r  1GcsJsonApi._GetApitoolsObjectMetadataGlobalParams	  s.    %==?M XXc&k2mr   c           
      x    U R                  UUUUS9nU R                  UUS9(       d  U$ UR                  R                  n[        R
                  (       a&  [        U[        5      (       d  UR                  S5      n[        U[        5      nU(       d%  [        SU< SU R                  < SU< SU< 35      e[        R
                  (       a*  [        U[        5      (       d  UR                  [        5      nU R                  UUUU[        U5      S9$ ! [         a  n	U R!                  U	UUUS	9   S
n	A	g
S
n	A	ff = f)r  r  rd  r  z(Missing decryption key with SHA256 hash z#. No decryption key matches object z://ru   r  r   N)r  r  r   r  r  r  r   r  r  rE   r   r   rg   rA   rD   r   r   )
r   r   r   r   rg   r   r  r  r  r   s
             r   GetObjectMetadataGcsJsonApi.GetObjectMetadata  s7   #>55k6AAK=C 6 Eo 33O;A 4 C
 #55??j	*e,,!((1*3JGn! [BC 	C 
.%00)006.**

2>B + D D , >
&&q3>3>2< ' >>s   (D C'D 
D9D44D9c                 R    [        UR                  =(       d    UR                  5      $ r  )boolr   
kmsKeyName)r   r  s     r   r  GcsJsonApi._ObjectIsEncrypted;  s%    22 +**, ,r   c                     Uc  gSU;   =(       a    UR                   (       + nSU;   =(       a    UR                  (       + nU(       a2  UR                  (       d   U(       a  [        SUR                  -  5      eggg)zBRaise an exception if none of the desired hash fields are present.Nr`   r_   zNService did not provide requested hashes in metadata for unencrypted object %s)r`   r_   componentCountr   r[  )r   r  r   md5_requested_but_missingcrc32c_requested_but_missings        r   r  =GcsJsonApi._RaiseIfNoDesiredHashesPresentForUnencryptedObject?  s     ~!*f!4 "=%4%<%<!< $,$6 %?(7(>(>$> !
 	"/*H*H$"$3$8$89: : 	% +I!r   c                     Ub  [         R                  U5      (       d  gUR                  =(       a)    UR                  (       + =(       a    UR                  (       + $ )a  Checks if an object is KMS-encrypted and lacking requested hash fields.

Args:
  object_metadata: (apitools_messages.Object) Object metadata returned from
      an API call; may or may not contain hash-related metadata fields.
  fields: (list<str>) Requested object metadata fields.

Returns:
  True if a GetObjectMetadata request should be issued on the KMS-encrypted
  object in order to retrieve encrypted hash fields, False otherwise.
F)r   r   r  r_   r`   r   r  r   s      r   r  +GcsJsonApi._ObjectKMSEncryptedAndNeedHashesR  sM     "7"D"DV"L"L&& (/E/E+E (''')r   c                     Ub  [         R                  U5      (       d  gUR                  =(       a)    UR                  (       + =(       a    UR                  (       + $ )a  Checks if an object is CSEK-encrypted and lacking requested hash fields.

Args:
  object_metadata: (apitools_messages.Object) Object metadata returned from
      an API call; may or may not contain hash-related metadata fields.
  fields: (list<str>) Requested object metadata fields.

Returns:
  True if a GetObjectMetadata request including a decryption key should be
  issued on the CSEK-encrypted object in order to retrieve encrypted hash
  fields, False otherwise.
F)r   r   r   r_   r`   r  s      r   r  ,GcsJsonApi._ObjectCSEKEncryptedAndNeedHashese  sP     ~2??GG.. G&&&G/>/F/F+FHr   Fc                    U(       a  [        U5      nUnU
(       a  U
S-   nO4U(       a-  [        R                  " [        R                  " U5      5      S   nU(       a  Uc  [        S5      eU" X5        [        5       nU	Ul        [        UUUUS9nUR                  5       nX0R                  l        SU0U R                  l        U(       a  U R                  (       aZ  [        R                  " [        R                  " U5      5      nUS==   SU R                  -  -  ss'   [        R                  " U5      n[        R                   R#                  UUU R$                  R&                  U R(                  U R$                  S	9nO*[        R                   R+                  US
UU R(                  S9nU R,                  Ul        [0        R2                  " UUUU R4                  S9n[7        SU R8                  S9Ul         U[<        R>                  R@                  :X  a  U RC                  UUUUUUUUU	U
UUS9$ U RE                  UUUUUUUU	U
UUS9$ ! [F         a  nU RI                  UUUUS9   SnAgSnAff = f)r     
total_sizeNz`Download size is required when callbacks are requested for a download, but no size was provided.)r  progress_callback	digestershttpsrz   z&trace=token%%3A%s)r   clientF)auto_transferr  r   r   Tis_data_transferr   )compressed_encodingr   
start_byteend_byteserialization_datar  r   r  r  r  r  r  r   )%r   jsonloadsr  
ensure_strr   r"   bytes_transferredr#   GetConnectionClassr   streamconnectionsrj   dumpsapitools_transferDownloadFromDatar   r{   r   
FromStreamr   
bytes_httpr   r  rl   rG   r   r   r   DownloadStrategy	RESUMABLE_PerformResumableDownload_PerformDownloadr   r   )r   r   r   download_streamrg   r   object_sizer  download_strategyr  r  r  r  r  r  outer_total_sizebytes_downloaded_containercallback_class_factorydownload_http_classserialization_dictapitools_downloadr   r   s                          r   GetObjectMediaGcsJsonApi.GetObjectMediay  s   $ 
#j #!A	
..+
,..:< 		! !, - 	- 
5!:!<3=0C"#+	
 1CCE !0&-/B%CD"
 
		!ZZ7I(JK5!%9D<L<L%LL!!ZZ(:;+44==


//

&& > " ,44??
 &&	 @ ( $(#@#@ (AA%%	' $7D,=,=$? %>	h77AA	A--& 3!!1- . / 	/ $$[%0%4%5%60:9L0:.68J6F % 
H 
	H" , >
&&q3>3>2< ' >>s   57I -I 
I,I''I,c                    SnU	nXR                   ::  a   U R                  UUUUUUUU	U
UUS9$ g ! [         Ga   nU R                  U5        UR	                  5       n	Xl        X:  a  U	nSnUS-  nXR                   :  a#  [        SU R                   [        U5      4-  5      e[        R                  " [        XR                  S95        U R                  R                  [        R                  5      (       a:  U R                  R!                  SU	[        U5      ["        R$                  " 5       5        [&        R(                  " UR*                  5         S nAOS nAff = fXR                   ::  a  GM[  g )Nr   r  r  5Transfer failed after %d retries. Final exception: %smax_waitz=Retrying download from byte %s after exception: %s. Trace: %s)r   r  HTTP_TRANSFER_EXCEPTIONS$_ValidateHttpAccessTokenRefreshErrortellr  r   rJ   timesleepr   r   r   isEnabledForr/  DEBUGrh   	traceback
format_excapitools_http_wrapperRebuildHttpConnectionsr  )r   r   r   r  r   r  r  r   r  r  r  r  r  retrieslast_progress_byter   s                   r   r  $GcsJsonApi._PerformResumableDownload  ss    G#
%%
%2*$$[%0%4%5%60:9L0:.68J6F % 
H 
	H & & &*11!4$))+
7A4*)
'1%%%& +E!<Q!?@AB B 	

(;N;NOP;;##GMM22
++

M5a8""$& 	44((	* 	*K&* %%
%s   / EDEEc                    U
(       d%   U R                   R                  R                  UUS9  S nSU R                   R
                  0n[        UUS9  U R                  U5        UR                  U R                  U5      5        U(       d  U	b  UR                  UUU	SS9  UR                  $ UR                  UUUSS9  UR                  $ ! [         a  nU R	                  UUUUS9   S nANS nAff = f)	N)downloadr   c                     g r   )unused_responseunused_download_objects     r   _NoOpCallback2GcsJsonApi._PerformDownload.<locals>._NoOpCallbackT  s    
r   
user-agent)r  F)additional_headersstartend
use_chunks)callbackfinish_callbackr$  r'  )r   r   r  r   r   
user_agentrF   r   r   r  GetRangeStreamMediar	   )r   r   r   r  r   r  r   r  r  r  r  r  r   r!  r$  s                  r   r  GcsJsonApi._PerformDownload=  s'    @##$4-> 	$ 	@ 	doo00 ""46IK 	*+(()9:< X)  4F'1%-,1 ! 3 %%%	 ##]4A7I/4 $ 6 %%%S . @((5@5@4> 	) 	@@s   $C	 	
C/C**C/c
                    [         R                  R                  R                  n
U R	                  U5      (       a$  [         R                  R                  R
                  n
U(       d
  [        5       nU(       a  [        U5      nSn/ nU(       a?  UR                  S5        [         R                  R                  U R                  U5      5      nUR                  S:X  a  UR                  S5        UR                  S:X  a  UR                  S5        UR                  S:X  a  UR                  S5        UR                  S:X  a  UR                  S5        [         R                  " UUUUU
UR                  UR                   UU R"                  S9	n[         R$                  " 5       nU(       a  S	R'                  [)        U5      5      Ul         U R,                  R/                  U5         U R,                  R0                  R3                  UUS
9sSSS5        $ ! , (       d  f       g= f! [4         a  nU R7                  UUUUS9   SnAgSnAff = f)r  NrR   rs   cacheControlcontentDispositioncontentEncodingcontentLanguage)	r   r   objectResourcer   r  ifGenerationMatchr6  r7  r   r   r   r   )r   StorageObjectsPatchRequestr  r  r   r  r   r   r=  r>  rA  r/  r0  r1  r2  	gen_matchrB  rl   r   r   r   r   r   rC  r   rD  r   r   )r   r   r   r0  rE  r   rG  rg   r   rl   r  rL  rI  r   r   r   s                   r   PatchObjectMetadataGcsJsonApi.PatchObjectMetadatax  s    $>>++EE ##F++%@@--dd  #om
#jN $$U+)DD44 @@LN 
 "$$^4""b($$%9:2%$$%672%$$%67(CC'11+::$%%	' &==?M XXc&k2m>??(()@A&&,,-=;H - J BAA , >
&&q3>3>2< ' >>s6   H  !$H	H  
HH  H   
I*IIc                    [        U5        SnU(       a.  [        R                  R                  U R	                  U5      5      n[        5       nU(       a  U(       a  UnU" SU5        [        UUUU R                  U R                  S9nUR                  5       nUUS.U R                  l        SU R                  R                  0nU R                  U5         SnSnSnU	(       d  UR                  nU(       d  [         nU(       d
  [#        5       n[        R                  " UR$                  UUR&                  UR(                  UU R*                  S9n[        R,                  " 5       nU(       a  SR/                  [1        U5      5      Ul        U R5                  US9nU[6        R8                  :X  a{  [6        R:                  " UUUS	U R<                  US
9nUUl        U R@                  Ul!        U RE                  U5         U R                  RF                  RI                  UUUS9sSSS5        $ SU R                  R                  0nURK                  U5        U R                  U5        U RM                  XR@                  UUXUUUU
UX5      $ ! , (       d  f       g= f! [N         aP  n[Q        U RR                  UR$                  5      nU RU                  UUR$                  URV                  US9   SnAgSnAff = f)zUpload implementation. Cloud API arguments, plus two more.

Additional args:
  apitools_strategy: SIMPLE_UPLOAD or RESUMABLE_UPLOAD.
  total_size: Total size of the upload; None if it is unknown (streaming).

Returns:
  Uploaded object metadata.
Nr   )r  r  r   rh   )r{   r  r#  )r   r   r4  r6  r7  r   r   r  T)r  r  r   gzip_encodeduploadr   r   r   not_found_exception),r<   r   StorageObjectsInsertRequestr>  rA  r"   r&   r   rh   r  r   r  r   r*  r   contentTyperN   r   r   r6  rB  rl   r   r   r   r   r  r  SIMPLE_UPLOADUploadr   strategyr   r  r  r   r_  r   _PerformResumableUploadr   rL   rg   r   r[  )r   upload_streamr  rE  sizerG  r  rg   r   r  tracker_callbackr  apitools_strategyr  r:  rL  bytes_uploaded_containerr  upload_http_classr$  content_typer   r   encryption_headersapitools_uploadr   r>  s                              r   _UploadObjectGcsJsonApi._UploadObject  s   4 o.N)EE44 @@LN   9:Tj4 A +{{jj /AAC!"$D  	doo00 	*+?Plm&22-,'/-,HH"))"+55"/">">())+ *AAC!$#f+!6-
;;' < ) 
/==	=+22=3?>BAE?C?O?O@LN $5 %)%@%@"))*<=((//0@7F>K 0 M >= $//44
 	!!"45./++66d3C35E 1	A 	A >=$ , PA
--//1
&&q3B3I3I3B3G3G;N ' PPs?   D"J 7%J	J &AJ 
JJ J 
K/AK**K/c           
          U(       a`  [         R                  R                  UUU R                  R                  U R
                  UU R                  S9n[        5       Ul        X.l        Ow[         R                  " UUU[        5       SU R
                  US9nXnl	        X.l        U R                  U5         U R                  R                  R                  UUUS9  S S S 5        [        SU R                  S9Ul        S nUR                   U	l        U
(       a&  U
" [$        R&                  " UR(                  5      5        SnUR                   nUU R
                  ::  a   U(       d(  U(       a!  [+        5       (       d  UR-                  UUUS	9nOUR/                  UUUS	9nU R                  R                  R1                  U R                  R                  R3                  S
5      U5      nUc$  U(       a  U" UR4                  UR4                  5        U$ g ! , (       d  f       GN;= f! [6         Ga  nU R9                  U5        [:        R<                  " UR                  5        UU R
                  ::  a   UR?                  5         UR                   nUU	l        O! [6         a  nU R9                  U5        [:        R<                  " UR                  5        US-  nUU R
                  :  a  [A        SU R
                  U4-  5      e[B        RD                  " [G        UU RH                  S95         S nAOS nAff = fUU R
                  ::  a  M  WU:  a  UnSnO`US-  nUU R
                  :  a#  [A        SU R
                  [K        U5      4-  5      e[B        RD                  " [G        UU RH                  S95        U RL                  RO                  [P        RR                  5      (       a:  U RL                  RU                  SU[K        U5      [V        RX                  " 5       5         S nAOS nAff = fUU R
                  ::  a  GM  g ! [Z         a   nU R]                  U5      nU(       a  Uee S nAff = f)N)r   r:  r  F)r  	chunksizer  r   r:  r;  Tr  c                     g r  r  )r  unused_upload_objects     r   r!  9GcsJsonApi._PerformResumableUpload.<locals>._NoOpCallback]  s    r   r   )r(  r)  r$  r_  r  r
  r  z;Retrying upload from byte %s after exception: %s. Trace: %s)/r  rB  r  r   r{   r   r6   rQ  r  rC  r  r   r_  rG   r   r   progressr  r  r  r  r:   r,  StreamInChunksProcessHttpResponseGetMethodConfigr  r  r  r  r  RefreshResumableUploadStater   r  r  r   r   rJ   r   r  r/  r  rh   r  r  r   *_TranslateApitoolsResumableUploadException)r   rE  r   rK  rF  r  rH  r   r   rI  rG  addl_headersr  r:  rM  r!  r  r  http_responseprocessed_responser   r  e2resumable_exs                           r   rD  "GcsJsonApi._PerformResumableUpload6  s   ~	+22;;OO  ((%?? < $ %>$?!%;" ,22/1((%' $5 %;")),7
//
!
!
(
()90?7D ) F 8
 $7d.?.?$Ao  4C3K3K0	O$F$FGHg*33t'''I	( $/L/N/N ,77& -#/ 8 1M ,::& -#/ ; 1M  $66JJoo%%55h? P
\/
 o88-88:#
#E (- 87r ( '	(

3
3A
6

6
6((*4+++P 99;*33j;E&8+ 
P77;#::!,,.lg4+++.K%%r*+, , jj'$:M:MNP P
P 4+++& ,,!+GqLG))),I##%@%CDEF F JJ%g8K8KLN[[%%gmm44KKM7:$$&(I'	(G t'''V , DDQGl	s   B0P4 2&HB P4 B1H 
HP4 P)AP+#JP
L+BL&!P&L++P CPP4 PP4 4
Q>QQc                 N    U R                  UUUUUUUU	[        R                  U
S9
$ )r  )rE  rF  rG  r  r  r   rH  r:  )rN  r  rA  )r   rE  r  rE  rF  rG  r  r  rg   r   r:  s              r   UploadObjectGcsJsonApi.UploadObject  s?     m-)3#',90A/?%+0A0O0O+7  	9 	9r   c
                 N    U R                  UUUUUUU[        R                  SU	S9
$ )r  N)rE  rG  r  r  r   rH  r  r:  rN  r  RESUMABLE_UPLOAD)
r   rE  r  rE  rG  r  r  rg   r   r:  s
             r   UploadObjectStreaming GcsJsonApi.UploadObjectStreaming  s@     #+)+<<!  
# 
#r   c                 R    U R                  UUUUUUUUUU	[        R                  US9$ )r  )
rE  rG  r   rF  r  rG  r  r  rH  r:  re  )r   rE  r  rE  rG  rF  r  rG  r  r  rg   r   r:  s                r   UploadObjectResumable GcsJsonApi.UploadObjectResumable  sF     #-)+)+<<!  # #r   c                    [        U5        SnU(       a.  [        R                  R                  U R	                  U5      5      nU(       a  [        U5      nU(       d
  [        5       n[        R                  R                  R                  nU R                  U5      (       a$  [        R                  R                  R                  n[        R                  " 5       nU(       aI  [        / SQ5      nU H  nUR                  SU-   5        M     SR                  [        U5      5      Ul        SnU	(       a*  U	R                   ["        R$                  :X  a  U	R&                  nSnU(       aZ  UR                   ["        R$                  :X  a  UR&                  nO/UR                   ["        R(                  :X  a  UR*                  Ul        [/        UR0                  UR2                  UR0                  UR2                  S5      n[5        UUUUUR6                  UR8                  UUUUUR                  S9n[;        UU5      nU R=                  XS9nSn [        S5      n U R?                  U5         [        R                  " UR0                  UR2                  UR0                  UR,                  UR2                  UUUUR6                  UR8                  UUUU R@                  S	9nU RB                  RD                  RG                  UUS
9nSSS5        [        WRH                  5      nU(       a&  U(       d  [K        [        URL                  5      U5      nU(       a  URO                  UU-
  5        URP                  (       a  O/U(       d#  URR                  n[U        UUURR                  5        UnGMM  [W        U5        URX                  $ ! , (       d  f       N= f! [Z         ap  n[]        U R^                  UR0                  U R^                  UR0                  UR2                  US9nU Ra                  UUR0                  UR2                  US9   SnAgSnAff = f)r  N)done
objectSizerewriteTokentotalBytesRewrittenz	resource/r   JSON)src_generationr6  rB  rE  max_bytes_per_callsrc_dec_key_sha256dst_enc_key_sha256r   )r  r  r   )sourceBucketsourceObjectdestinationBucketdestinationKmsKeyNamedestinationObjectr  r   sourceGenerationr4  r6  destinationPredefinedAclro  maxBytesRewrittenPerCallr   r   )src_providersrc_bucket_namesrc_object_namerr  r=  )1r<   r   StorageObjectsRewriteRequest'DestinationPredefinedAclValueValuesEnumrA  r   r   r  r  r   r  r   r   ru  r   r   r  rC   r  r  CMEKr  r  r0   r   r[  r1   r6  rB  r2   r  r  rl   r   r   Rewriterp  r+   rn  Progressrm  ro  r3   r/   resourcer   rL   rg   r   )r   src_obj_metadatadst_obj_metadatarr  rE  rG  r  rs  r  r  rg   r   rL  r  r   
new_fieldsfielddec_key_sha256enc_key_sha256tracker_file_namerewrite_params_hashresume_rewrite_tokencrypto_headersprogress_cb_with_timeoutlast_bytes_writtenr   rewrite_responsebytes_writtenr   r>  s                                 r   
CopyObjectGcsJsonApi.CopyObject	  s    ./N)FF?? @@LN  N+n#om#@@++EE ##F++%BB--dd %==?M  	j %{U*+  XXc*o6mN,88M<N<NN'99nN		%	%););	;);;''=+=+==&6&A&A# 22B2I2I2B2G2G2B2I2I2B2G2GQ 0%))$33!-))##% 22C2EG99) : NN  $4P7)).9.KK+22+00 0 7 7 %5$?$? 0 5 5#%- - 7 7$1$@$@'5/'9++!-
" "__44<<m = =
% :( -AAB%=%@#../1B&D
"#
"
+
+M<N,N
O  
%!1!>!>

!"35H"2"?"?A*G J )*&&&K :9L , PA
--

!
!}}*11*//') &&q3C3J3J3C3H3H;N ' PPs3   O "BN58B<O 5
O?O 
Q A&P;;Q c           	      T   U(       d
  [        5       nU(       a  [        U5      n[        R                  " UUUUR                  UR
                  U R                  S9n U R                  R                  R                  U5      $ ! [         a  nU R                  UUUUS9   SnAgSnAff = f)r  )r   r   r   r4  r6  r   r   N)r   r   r   StorageObjectsDeleteRequestr6  rB  rl   r   r   ri  r   r   )r   r   r   rG  r   rg   r   r   s           r   DeleteObjectGcsJsonApi.DeleteObject  s     #om
#j(DD'11+::%%'>__$$++,<==+ >
&&q3>3>2< ' >>s   $B 
B'B""B'c                    [        U5        UR                  nSUl        UR                  nSUl        UR                  (       d  [        Ul        U(       d
  [        5       n[        R                  " 5       n	U(       a  SR                  [        U5      5      U	l
        [        R                  " XS9n
U R                  US9nSnU(       a*  UR                  [        R                  :X  a  UR                   nU R#                  U5         [        R$                  " U
UUUR&                  UR(                  U R*                  US9n U R,                  R.                  R1                  UU	S9sSSS5        $ ! [2         aU  n[5        U[6        R8                  5      (       a  UR:                  S:X  a  [=        S5      eU R?                  U5         SnAOSnAff = f SSS5        g! , (       d  f       g= f)	r  Nr   )sourceObjectsdestinationr  )composeRequestrx  rz  r4  r6  r   r  r     z)One of the source objects does not exist.) r<   r[  r   r@  rN   r   r   r   r   r   r   ComposeRequestr  r  rC   r  r  r  StorageObjectsComposeRequestr6  rB  rl   r   r   Composer   r   apitools_exceptions	HttpErrorrl  r   r   )r   src_objs_metadatar  rG  r  rg   r   dst_obj_namedst_bucket_namer   src_objs_compose_requestrL  r  r   r   s                  r   ComposeObjectGcsJsonApi.ComposeObject  s    ./#((L &--O"''%9"#om%==?M XXc&k2m0??' G 99% : ' J		%	%););	;%00
		%	%&8	9*GG1+()33 - < <''!	.&&../?=J / L 
:	9 . .q-7788MMS !"MN
N

*
*1
-
-. .% 
:	9	9s1   9G;#E((
G2AG=GGG
G"c                    [         R                  R                  R                  n[         R                  " UUUSS9n[         R                  " UUUU R
                  S9n	[         R                  " 5       n
U(       a  SR                  [        U5      5      U
l	         U R                  R                  R                  U	U
S9$ ! [         a  nU R                  XS9   SnAgSnAff = f)r  WEB_HOOK)addressidtokentype)r   channelr  r   r   r   r   N)r   StorageObjectsWatchAllRequestr  r  Channelrl   r   r   r   r   r   r   WatchAllr   r   )r   r   r  
channel_idr  rg   r   r  r  r   r   r   s               r   WatchBucketGcsJsonApi.WatchBucket  s     $AA++DD   ''+5.3-79G
 )FF%%	' &==?M XXc&k2mC__$$--.><I . K K+ C
&&q&BCs   #B= =
C CC c                     [         R                  " XS9n U R                  R                  R	                  U5        g! [
         a  nU R                  U5         SnAgSnAff = f)r  )r  
resourceIdN)r   r  r   channelsStopr   r   )r   r  resource_idrg   r  r   s         r   StopChannelGcsJsonApi.StopChannel   sP    '':NG*
oo##G,+ *
&&q))*s   %< 
A!AA!c                     [         R                  " XR                  S9n U R                  R                  R                  U5      $ ! [         a  nU R                  XQS9   SnAgSnAff = f)r  r   r   r   N)r   !StorageBucketsListChannelsRequestrl   r   r   ListChannelsr   r   )r   r   rg   r   r   r   s         r   r  GcsJsonApi.ListChannels  sa    (JJ(9(9;C__$$112BCC+ C
&&q&BCs   $A 
A(A##A(c                      [         R                  " [        R                  " U5      S9nU R                  R
                  R                  U5      $ ! [         a  nU R                  U5         SnAgSnAff = f)r  )	projectIdN)	r   'StorageProjectsServiceAccountGetRequestr  	text_typer   projects_serviceAccountr  r   r   )r   project_numberr"  r   s       r   GetProjectServiceAccount#GcsJsonApi.GetProjectServiceAccount  s_    *!IIMM.13g__4488AA+ *
&&q))*s   AA 
A4A//A4c           	          [         R                  " X#S9nU(       a  XGl        U(       a9  UR                  5        VV	s/ s H  u  p[	        XS9PM     n
nn	[        U
S9Ul        U(       a  Xgl        [         R                  " UUU R                  S9nU R                  R                  R                  U5      $ s  sn	nf ! [         a  nU R                  U5         SnAgSnAff = f)r  )topicpayload_format)r   value)additionalPropertiesr   notificationr   N)r   Notificationevent_typesr{  NotificationAdditionalProperty!NotificationCustomAttributesValuecustom_attributesobject_name_prefix!StorageNotificationsInsertRequestrl   r   notificationsr_  r   r   )r   r   pubsub_topicr  r  r  r  r  r   r  additional_propertiesr"  r   s                r   CreateNotificationConfig#GcsJsonApi.CreateNotificationConfig  s    *&33=l	#. 	 0557!
7
 +s@7 	 !
 *K!6*8&	*<'!CC#'')g __**11'::!
 , *
&&q))*s)   ;B; B5A"B; 5B; ;
C CC c                      [         R                  " UUU R                  S9nU R                  R                  R                  U5      $ ! [         a  nU R                  U5         SnAgSnAff = f)r  r  N)r   !StorageNotificationsDeleteRequestrl   r   r  ri  r   r   )r   r   r  r"  r   s        r   DeleteNotificationConfig#GcsJsonApi.DeleteNotificationConfig:  sd    *!CC#'')g __**11'::+ *
&&q))*s   AA 
A,A''A,c              #     #     [         R                  " XR                  S9nU R                  R                  R                  U5      nUR                   H  nUv   M	     g! [         a  nU R                  U5         SnAgSnAff = f7f)r  r  N)	r   StorageNotificationsListRequestrl   r   r  r!  r{  r   r   )r   r   r"  r   r  r   s         r   ListNotificationConfigs"GcsJsonApi.ListNotificationConfigsE  sq     *!AA*;*;=g..33G<h".., )+ *
&&q))*s/   BAA B
B)A?:B?BBc                      [         R                  " XS9nU R                  R                  R	                  U5      $ ! [
         a  nU R                  U5         SnAgSnAff = f)r  )r  serviceAccountEmailN)r   $StorageProjectsHmacKeysCreateRequestr   hmacKeysCreater   r   )r   r`  r   r"  r   s        r   CreateHmacKeyGcsJsonApi.CreateHmacKeyP  sW    *!FFKg__%%,,W55+ *
&&q))*r*  c                      [         R                  " XS9nU R                  R                  R	                  U5      $ ! [
         a  nU R                  U5         SnAgSnAff = fr  )r  accessIdN)r   $StorageProjectsHmacKeysDeleteRequestr   r  ri  r   r   r   r`  	access_idr"  r   s        r   DeleteHmacKeyGcsJsonApi.DeleteHmacKeyY  sV    *!FF4g__%%,,W55+ *
&&q))*r*  c                      [         R                  " XS9nU R                  R                  R	                  U5      $ ! [
         a  nU R                  U5         SnAgSnAff = fr  )r   !StorageProjectsHmacKeysGetRequestr   r  r  r   r   r  s        r   
GetHmacKeyGcsJsonApi.GetHmacKeyb  sV    *!CC4g__%%))'22+ *
&&q))*r*  c              #   l  #     [         R                  " UUU[        S9nU R                  R                  R                  U5      nUR                   H  nUv   M	     WR                  (       aw  [         R                  " UUUUR                  [        S9n U R                  R                  R                  U5      nUR                   H  nUv   M	     UR                  (       a  Mv  gg! [         a  nU R                  U5         SnANSnAff = f! [         a  nU R                  U5         SnANtSnAff = f7f)r  )r  r  showDeletedKeysrp  N)r  r  r  rr  rp  )
r   "StorageProjectsHmacKeysListRequestrt  r   r  r!  r{  r   r   rq  )r   r`  r   show_deleted_keysr"  r   r   r   s           r   ListHmacKeysGcsJsonApi.ListHmacKeysk  s    
*!DD3+.	0g ))..w7h#	  
 
 
 !DD3+**.0g,??++009 #	   
 
 
  , *
&&q))* . ,((++,s_   D4AC$ 7D4%D 8(D4"D4$
D	.D?D4D		D4
D1D,'D4,D11D4c                 "    [         R                  " XS9n[         R                  " 5       nX6l        U(       a  XFl        Xel        U R                  R                  R                  U5      $ ! [         a  nU R                  U5         SnAgSnAff = fr  )r   $StorageProjectsHmacKeysUpdateRequestHmacKeyMetadatastateetagr  r   r  Updater   r   )r   r`  r  r  r  r"  r0  r   s           r   UpdateHmacKeyGcsJsonApi.UpdateHmacKey  sw    
*!FF4g"224hn	!__%%,,W55+ *
&&q))*s   A&A) )
B3B		Bc                 D    U[         ;   a	  [         U   $ [        SU-  5      e)aM  Translates the input string to a bucket PredefinedAcl string.

Args:
  canned_acl_string: Canned ACL string.

Returns:
  String that can be used as a query parameter with the JSON API. This
  corresponds to a flavor of *PredefinedAclValueValuesEnum and can be
  used as input to apitools requests that affect bucket access controls.
Invalid canned ACL %s)._BUCKET_PREDEFINED_ACL_XML_TO_JSON_TRANSLATIONr   r   canned_acl_strings     r   r?  *GcsJsonApi._BucketCannedAclToPredefinedAcl  +     JJ;<MNN
36GG
HHr   c                 D    U[         ;   a	  [         U   $ [        SU-  5      e)aN  Translates the input string to an object PredefinedAcl string.

Args:
  canned_acl_string: Canned ACL string.

Returns:
  String that can be used as a query parameter with the JSON API. This
  corresponds to a flavor of *PredefinedAclValueValuesEnum and can be
  used as input to apitools requests that affect object access controls.
r	  )._OBJECT_PREDEFINED_ACL_XML_TO_JSON_TRANSLATIONr   r  s     r   rA  *GcsJsonApi._ObjectCannedAclToPredefinedAcl  r  r   c                     [        U[        R                  R                  5      (       a#  UR                  S:X  d  UR                  S:  d  e g g g )N    )r   oauth2clientr  HttpAccessTokenRefreshErrorrg  )r   r   s     r   r  /GcsJsonApi._ValidateHttpAccessTokenRefreshError  s@    1l))EEFFXX_C !0_ 	Gr   c                     U R                   R                  [        R                  5      (       a/  U R                   R	                  S[
        R                  " 5       5        U R                  UUUUUS9nU(       a  Uee )a  Translates an HTTP exception and raises the translated or original value.

Args:
  e: Any Exception.
  bucket_name: Optional bucket name in request that caused the exception.
  object_name: Optional object name in request that caused the exception.
  generation: Optional generation in request that caused the exception.
  not_found_exception: Optional exception to raise in the not-found case.

Raises:
  Translated CloudApi exception, or the original exception if it was not
  translatable.
zTranslateExceptionAndRaise: %s)r   r   r   r>  )r   r  r/  r  rh   r  r  rj  )r   r   r   r   r   r>  translated_exceptions          r   r   &GcsJsonApi._TranslateExceptionAndRaise  sq    & {{..
kk8!,,.0;;	/ < 1   r   c                 $   [        U[        R                  5      (       aa  [        USS 5      (       aN   [        R
                  " [        R                  " UR                  5      5      nSU;   a  SUS   ;   a  US   S   $ g g g g ! [         a     g f = f)Ncontenterrormessage)
r   r  r  r:  r  r  r  r  r  	Exception)r   
http_errorjson_objs      r   _GetMessageFromHttpError#GcsJsonApi._GetMessageFromHttpError  s    *1;;<<	Y	-	-	ZZz/A/A BC( Y(72C%CG$Y// &D  
. =  	
	s   A
B 
BBc                      UR                   S   nUR                  S5      nUS:  a  X#S  R                  S5      S   nSU-  $ g ! [         a     g f = f)Nzwww-authenticatezscope="r   r  r  zAcceptable scopes: %s)r   findsplitr  )r   r   www_authenticate	scope_idxscopess        r   !_GetAcceptableScopesFromHttpError,GcsJsonApi._GetAcceptableScopesFromHttpError  sp    #,,-?@ #''	2i	a!*-33C8;&// 
  
s   A A 
AAc                    [        U[        R                  5      (       a  U R                  U5      nUR                  S:  a  [        U=(       d    SUR                  S9$ UR                  S:X  a  [        U=(       d    SUR                  S9$ UR                  S:X  a  [        U=(       d    SUR                  S9$ UR                  S:X  a  [        U=(       d    SUR                  S9$ UR                  S	:  a  [        U=(       d    SUR                  S9$ [        U[        R                  5      (       a  [        S
[        U5      -  5      $ [        U[        R                  5      (       aY  S[        U5      ;   d  S[        U5      ;   a  [        [        U5      5      $ S[        U5      ;   a  [        S[        U5      -  5      $ g g )Nr  zServer Errorrf  r  zToo Many Requestsi  Bad Requestr    za%s; if this issue persists, try deleting the tracker files present under ~/.gsutil/tracker-files/zAborting transferzNot enough bytes in streamzadditional bytes left in streamz?%s; this can happen if a file changes size while being uploaded)r   r  r  r"  rl  r   r   r   StreamExhaustedstrTransferError)r   r   r  s      r   rZ  5GcsJsonApi._TranslateApitoolsResumableUploadException  s   !(2233--a0g	
#	'(A>/0}}> 	>==C'(F3F/0}}> 	>==C01IM89G 	G==C01IM89G 	G==C,W-E45MMC 	C!(8899*,.1!f56 6 !(6677
Q
'
&#a&
0,SV44,A6,MF 	 7	 8r   c                 f   [        U[        R                  5      (       Ga[  U R                  U5      nUR                  S:X  a  [        U=(       d    SUR                  S9$ UR                  S:X  ae  S[        U5      ;   a  [        U=(       d    SUR                  S9$ S[        U5      ;   a(  [        [        UR                  U R                  U5      S9$ GOUR                  S	:X  Gaf  S
[        U5      ;   a  [        U=(       d    SUR                  S9$ S[        U5      ;   a  [        U=(       d    SUR                  S9$ S[        U5      ;   a  [        SU-  UR                  S9$ S[        U5      ;   a  [        SUR                  S9$ S[        U5      ;   a  [        SUR                  S9$ S[        U5      ;   a  [        SUR                  S9$ S[        U5      ;   a(  [        [        UR                  U R                  U5      S9$ S[        U5      ;   a  [        XaR                  S9$ [        U=(       d    [        U5      UR                  S9$ UR                  S:X  a  U(       a  [        USUR                  5        U$ U(       aI  U(       a!  [        UR                  U R                  UUUS9$ [        UR                  U R                  U5      $ [!        U=(       d    UR"                  UR                  S9$ UR                  S:X  aD  U(       a=  S[        U5      ;   a  [        SU-  UR                  S9$ [%        SU-  UR                  S9$ UR                  S:X  a  ['        XaR                  S9$ [%        XaR                  S9$ [        U[        R(                  5      (       a  [%        S[        U5      -  5      $ g) a  Translates apitools exceptions into their gsutil Cloud Api equivalents.

Args:
  e: Any exception in TRANSLATABLE_APITOOLS_EXCEPTIONS.
  bucket_name: Optional bucket name in request that caused the exception.
  object_name: Optional object name in request that caused the exception.
  generation: Optional generation in request that caused the exception.
  not_found_exception: Optional exception to raise in the not-found case.

Returns:
  ServiceException for translatable exceptions, None
  otherwise.
r.  r-  rf  i  zLogin RequiredzAccess denied: login required.insufficient_scope)rg  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-The bucket you tried to delete was not empty.zBucketNotEmpty (%s)zFThe bucket you tried to create requires domain ownership verification.zThe bucket you tried to create requires domain ownership verification. Please see https://cloud.google.com/storage/docs/naming?hl=en#verification for more details.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 Storage JSON API.z,does not have permission to publish messagesr  rg  )r   i  z,The bucket you tried to delete is not empty.zA Cloud Storage bucket named '%s' already exists. Try another name. Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization.i  z.Transfer invalid (possible encoding error: %s)N)r   r  r  r"  rl  r   r0  r   "_INSUFFICIENT_OAUTH2_SCOPE_MESSAGEr*  r   r   r<  rM   rg   rK   r   r  r   r   TransferInvalidError)r   r   r   r   r   r>  r  s          r   rj  &GcsJsonApi._TranslateApitoolsException	  s   & !(223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= = =AF"#8;#F*+--9 9!$Q(&6 ]]$ $ (3q61&]]$ $ %A.&/ ]]$ $ "SV+ '0]]99!<> > <s1vE1'--P
P&w'8#a&O
O==C %x
?$
$0151<1<<F	H H
 /q}}dmm/:< < !5AIIammLL==CK9SVC"#8;#F*+--9 9 ** ==" 	" ==C$W]]CCgmm<<	A*??	@	@N!!f% & & 
Ar   )r   r   r   r   r   r   r   r   r   r{   r   r   r   r   r   )NNr   NNNNr  )NN)NNN)NNNNN)NNNN)NFr   NNN)NNNNNN)NNNNNNNF)NNNNNNF)
NNNNNNNNNF)	NNNNNNNNN)T)Q__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   r   r   r   r   r   r   r  r  r#  r(  rN  rT  ra  rm  rx  rv  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r  ONE_SHOTr  r  r  r7  r  rA  rN  rD  rb  rg  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?  rA  r  r   r"  r*  rZ  rj  __static_attributes____classcell__)r   s   @r   rc   rc      s|   E   $ MP^	:94
GPC" %)"& $>: %)"&@.C/0C0C	@ "!% $O,bC* #  #CJC0*X  #L\F"P	N < < 8<7;0 +/&*04*>^ :>59	'* $(!%#*>X,
 %):&)&H0 # $!%).'/'@'@'I'I !"'+(,#&*~>N ,049+,)-3715B*T #'+0"# $*.(,9&~ &*%)(,#'!%'+@>J  $"&%)!'+%)&*&7&E&E !&zPxDR #!%%)$(  %94 (,*..2-1%)#').#: (,*.!%/3-1.2-1%)#').#> !% ##'$("&"&BPN "&" >> #'%)!5.v C@*C* ,01526*>	*	**** &*B*II /3.2-16:B	(B /3.2-16:r& r&r   rc   )r=  
__future__r   r   r   r   
contextlibr   r  	six.movesr   r  r/  r   socketsslr  r  r  apitools.base.pyr	   r
   r  r   r  r   r  apitools.base.py.utilr   botor   httplib2r  gslibr   gslib.cloud_apir   r   r   r   r   r   r   r   r   r   r   r   r   r   r   gslib.exceptionr   gslib.gcs_json_credentialsr    r!   gslib.gcs_json_mediar"   r#   r$   r%   r&   r'   r(   gslib.impersonation_credentialsr)   gslib.no_op_credentialsr*   gslib.progress_callbackr+   gslib.project_idr,   "gslib.third_party.storage_apitoolsr-   r   r.   r   gslib.tracker_filer/   r0   r1   r2   r3   gslib.utils.boto_utilr4   r5   r6   r7   r8   r9   r:   gslib.utils.cloud_api_helperr;   r<   gslib.utils.constantsr=   r>   r?   r@   rA   gslib.utils.encryption_helperrB   rC   rD   rE   gslib.utils.metadata_utilrF   gslib.utils.retry_utilrG   gslib.utils.signurl_helperrH   rI   gslib.utils.text_utilrJ   gslib.utils.translation_helperrK   rL   rM   rN   rO   rP   oauth2client.service_accountrQ   r  intr   r  CustomAttributesValuer  AdditionalPropertyr  rt  r  r/  r1  r7  r   TransferRetryErrorBadStatusCodeErrorRetryAfterErrorRequestErrorBadStatusLineIncompleteReadResponseNotReadyServerNotFoundErrorr  r  r  gaierrortimeoutSSLErrorrR  r  r   r   r
  r  r  +FULL_PREDEFINED_ACL_XML_TO_JSON_TRANSLATIONr   r   r  r6  r   r   rc   r  r   r   <module>rn     s   E & %  ' %  !   	  
   
 % > B : 7      1 - / $ / - - 1 ) < 6 9 4 = , , C 7 : G 7 2 E 8 6 D 3 ? . S W 0 8 4 5 6 . 6 ; 2 , / ? 8 B 4 ; 8 ; & M 7 A F C 6 A = H P H ? B = B77	$ !--$0$F$F !%88  ! $7$A$A$7$G$G$7$E$E$7$L$L$N   ****''$$    33
LL
OO
NNLL &    -'*2 . -*!9'2 . /].a.a / + + 2 224 Xy12    ; # ()	G#& G#&r   