
    %F                     .   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	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Jr  SSKJ r   SSK!J"r"   " S S\RF                  5      r$g)z@Client for interacting with Google Cloud Storage using gRPC API.    )absolute_import)division)unicode_literals)	cloud_api)errors)download)	grpc_util)metadata_util)upload)client)apis)encryption_util)	gzip_util)tracker_file_util)user_request_args_factory)	copy_util)download_util)
exceptions)log)
properties)scaled_integerc                     ^  \ rS rSrSrSrSrU 4S jrSS jrS\	R                  R                  S4S	 jr  SS
 jr   SS jrS rS rSS\	R"                  R$                  SSS4S jrSSSS\	R(                  R*                  4S jrSrU =r$ )GrpcClientWithJsonFallback)   zBClient for Google Cloud Storage API using gRPC with JSON fallback.)authenticatedReadbucketOwnerFullControlbucketOwnerReadprivateprojectPrivate
publicRead    c                 8   > [         [        U ]  5         S U l        g N)superr   __init___gapic_client)self	__class__s    5lib/googlecloudsdk/api_lib/storage/gcs_grpc/client.pyr%   #GrpcClientWithJsonFallback.__init__9   s    	
$d46D    Nc                 l    U R                   c  [        R                  " SSSUS9U l         U R                   $ )Nstoragev2T)attempt_direct_pathredact_request_body_reason)r&   	core_apisGetGapicClientInstance)r'   r0   s     r)   _get_gapic_client,GrpcClientWithJsonFallback._get_gapic_client=   s=    
 !$;;

"%?	d r+   Fc                    Ub  [        S5      eU(       a  [        S5      eU[        R                  R                  :w  a  [        S5      eU R	                  5         U R
                  R                  R                  U R
                  R                  R                  [        R                  " U5      S95      n[        R                  " U5      $ )See super class.z(generation is not supported in gRPC API.z*soft_deleted is not supported in gRPC API.z*fields_scope is not supported in gRPC API.name)
ValueErrorr   FieldsScopeFULLr3   r&   r-   
get_buckettypesGetBucketRequestr	   get_full_bucket_namer
   !get_bucket_resource_from_metadata)r'   bucket_name
generationfields_scopesoft_deletedmetadatas         r)   r<   %GrpcClientWithJsonFallback.get_bucketK   s     ABBCDDy,,111CDD!!))44  11//< 	2 	
H
 ::8DDr+   c                 Z   U(       d  [         R                  " S5      e[        U5      U R                  :  a0  [         R                  " S[        U5       SU R                   S35      eU R	                  5         / nU H  nU R
                  R                  R                  R                  UR                  R                  S9nUR                  R                  b$  [        UR                  R                  5      Ul        UR                  U5        M     [        R                  " UR                  U R
                  R                  5      n	[!        US   SS5      b&  [        R"                  " US   R$                  U	U5      n
OU	n
[        R&                  " U
UUUS	9  [(        R*                  " UR                  R,                  5      U
l        UR                  R                  U
l        U R
                  R                  R                  UU
UR2                  UR4                  S
9nUR6                  (       aj  UR6                  R8                  nU(       aM  U[:        R<                  :w  a9  UR>                  [@        RB                  RD                  :X  a  URF                  Ul$        URJ                  b  URJ                  Ul&        [!        UR6                  SS5      nU RO                  U5         [        RP                  " U R
                  RR                  RU                  U5      5      sSSS5        $ ! , (       d  f       g= f)ay  Concatenates a list of objects into a new object.

Args:
  source_resources (list[ObjectResource|UnknownResource]): The objects to
    compose.
  destination_resource (resource_reference.UnknownResource): Metadata for
    the resulting composite object.
  request_config (RequestConfig): Object containing general API function
    arguments. Subclasses for specific cloud providers are available.
  original_source_resource (Resource|None): Useful for finding metadata to
    apply to final object. For instance, if doing a composite upload, this
    would represent the pre-split local file.
  posix_to_set (PosixAttributes|None): Set as custom metadata on target.

Returns:
  resource_reference.ObjectResource with composite object's metadata.

Raises:
  CloudApiError: API returned an error.
  NotImplementedError: This function was not implemented by a class using
    this interface.
z/Compose requires at least one component object.zCompose was called with z objects. The limit is .r7   Nr   rE   )attributes_resourceposix_to_set)source_objectsdestinationif_generation_matchif_metageneration_matchencryption_key)+cloud_errorsGcsApiErrorlen_MAX_OBJECTS_PER_COMPOSE_CALLr3   r&   r=   ComposeObjectRequestSourceObjectstorage_urlresource_namerB   intappendr
   get_grpc_metadata_from_urlgetattrcopy_object_metadatarE   *update_object_metadata_from_request_configr	   r?   rA   bucketr8   precondition_generation_match!precondition_metageneration_matchresource_argsrO   r   CLEARtyper   KeyTypeCMEKkeykms_keypredefined_acl_stringdestination_predefined_acl_encryption_headers_context$get_object_resource_from_grpc_objectr-   compose_object)r'   source_resourcesdestination_resourcerequest_configoriginal_source_resourcerJ   source_messagessourcesource_messagebase_destination_metadatafinal_destination_metadatacompose_requestrO   s                r)   compose_objects*GrpcClientWithJsonFallback.compose_objectsd   s   < $$
;  tAAA$$$S)9%:$; <334A7 
 	O"



"
"
7
7
D
D%%33 E  
 
			&	&	2$'(:(:(E(E$F!^, # !. H H(($*<*<*B*B! "J5A#0#E#E
1

&
&
#
$  $= <<"4!	 )2(F(F((44)% 	((66 # ((..CC&.*HH . P P	 D O ##%33BBn
 9 ? ??!!_%<%<%A%AA"0"4"4++7

.
. 0 $$&6N 
	)	).	9??



$
$
3
3O
D 
:	9	9s   9L
L*c                    U R                  5         [        USS5      nU(       d5  [        R                  " UR                  U R
                  R                  5      nUR                  (       a!  [        R                  " UR                  UUUS9n[        R                  " XsUS9  UR                  (       a'  UR                  U R                  ;   a  UR                  nOSnUR                  c  Sn	O[        UR                  5      n	[        R                  " UR                  [        R                   R"                  UR                  S9n
[        R$                  " UUUUS9n[        R&                  " X5      nU(       a  [(        R*                  " S5        O[(        R*                  " S5        [,        R.                  " [0        R2                  R4                  R6                  R9                  5       5      nU R;                  U5          U R
                  R                  R=                  [>        R@                  " UR                  RB                  5      UR                  RD                  [>        R@                  " UR                  RB                  5      UR                  RD                  UU	[F        RH                  " U5      URJ                  UUUS	9n[        URL                  S
S5      nU(       aM  U[N        RP                  :w  a9  URR                  [T        RV                  RX                  :X  a  URZ                  Ul.        U R
                  R4                  R_                  U5      nUR`                  nU(       a  U" U5        URb                  (       a  OU(       d  URd                  nURf                  [,        R.                  " [0        R2                  R4                  Rh                  R9                  5       5      :  a"  [        Rj                  " U
UURd                  5        GM  SSS5        [        Rl                  " U
5        [        Rn                  " WRp                  5      $ ! , (       d  f       ND= f)r6   rE   N)source_metadatadestination_metadataro   should_deep_copy)rJ   )
source_url)source_object_resourcedestination_object_resourcer{   ro   z#Found rewrite token. Resuming copy.z3No rewrite token found. Starting copy from scratch.)source_bucketsource_objectdestination_bucketdestination_namerL   source_generationrM   rN   ri   rewrite_tokenmax_bytes_rewritten_per_callrO   )9r3   r[   r
   rZ   rV   r&   r=   rE   r\   r]   rh   (ALLOWED_PREDFINED_DESTINATION_ACL_VALUESrB   rX   r   get_tracker_file_pathTrackerFileTypeREWRITE,hash_gcs_rewrite_parameters_for_tracker_file#get_rewrite_token_from_tracker_filer   debugr   ParseIntegerr   VALUESr-   copy_chunk_sizeGet,_encryption_headers_for_rewrite_call_contextRewriteObjectRequestr	   r?   rA   rW   r   get_generation_match_valuer`   ra   r   rb   rc   r   rd   re   rf   destination_kms_keyrewrite_objecttotal_bytes_rewrittendoner   sizeresumable_thresholdwrite_rewrite_tracker_filedelete_tracker_filerk   resource)r'   source_resourcern   ro   rJ   progress_callbackshould_deep_copy_metadatar{   predefined_aclr   tracker_file_pathrewrite_parameters_hashresume_rewrite_tokenmax_bytes_per_callrequestrO   rewrite_responseprocessed_bytess                     r)   copy_object&GrpcClientWithJsonFallback.copy_object   s    	"#7TJ*EE

*
*D,>,>,D,D *??)223'4	 <<< ++,,88	9 &;;nn!!)o889)??(())11".. 	FF#2(<!5)		
  	==	
 
 	ii56	iiEF'44!!11557 
	:	:>	J$$**??#88++77 *55CC(==$00<<  2==KK,/ ) D D! %3$T$T'5.);# @ 
( !((*:D
 ";"A"AA##'>'>'C'CC )7(:(:'
%--55DDWM*@@
O
,  
#!1!?!?
!!^%@%@'';;??A&  88!' ..a  
Kn ))*;<==!! q 
K	Js   :HQ
Qc                 ~   UR                   b  [        UR                   5      nOSnU R                  5         U R                  R                  R                  [        R                  " UR                  5      UR                  UUR                  UR                  S9nU R                  R                  R                  U5        g)r6   N)r^   objectrB   rM   rN   )rB   rX   r3   r&   r=   DeleteObjectRequestr	   r?   rA   rW   r_   r`   r-   delete_object)r'   
object_urlro   rB   r   s        r)   r   (GrpcClientWithJsonFallback.delete_objectO  s     (z,,-jj  &&::--j.D.DE''*HH . P P ; G 	,,W5r+   c                    UR                   (       a  UR                   R                  nOSnU R                  5         U R                  R                  R                  U R                  R                  R                  [        R                  " UR                  5      UR                  [        UR                  5      UR                  UR                  US95      n[         R"                  " U5      $ )r6   N)r^   r   rB   rM   rN   copy_source_acl)ra   preserve_aclr3   r&   r-   restore_objectr=   RestoreObjectRequestr	   r?   rA   rW   rX   rB   r_   r`   r
   rk   )r'   urlro   r   object_metadatas        r)   r   )GrpcClientWithJsonFallback.restore_objectc  s    ###11>>ll((00??  5511#//B$$3>>* . L L@@( 	6 		
O ==oNNr+   r   c
                 *   [         R                  " X5      (       a  gUR                  b.  UR                  R                  b  UR                  R                  n
OSn
[        R
                  " U R                  5       UUUU	UUUU
S9	nUR                  5         g)r6   N)	gapic_clientcloud_resourcedownload_stream
start_byteend_byte	digestersr   download_strategydecryption_key)r   (return_and_report_if_nothing_to_downloadra   r   r   GrpcDownloadr3   run)r'   r   r   ro   r   do_not_decompressr   r   r   r   r   
downloaders               r)   download_object*GrpcClientWithJsonFallback.download_object{  s     ==   	$$0((77C%33BBnn&&++-%'++%	'J NN r+   c	           
      .   U R                  SS9n	U R                  U5      n
[        R                  " UR                  U
5      nU(       a  [
        R                  " S5      eU[        R                  R                  :X  a  [        R                  " U	UUUUS9nOQU[        R                  R                  :X  a  [        R                  " U	UUUUUUS9nO[        R                  " U	UUUUS9nUR                  5       n[         R"                  " UR$                  5      $ )r6   zObject data is not displayed to keep the log output clean. Set log_http_show_request_body property to True to print the body of this request.)r0   zGzip transport encoding is not supported with GRPC API, please use the JSON API instead, changing the storage/preferred_api config value to json.)r   source_streamrn   ro   r   )r   r   rn   ro   serialization_datar   tracker_callback)r3   _get_source_pathr   should_gzip_in_flightgzip_settingscore_exceptionsInternalErrorr   UploadStrategySIMPLEr   SimpleUpload	RESUMABLEResumableUploadStreamingUploadr   r
   rk   r   )r'   r   rn   ro   rJ   r   r   r   upload_strategyr   source_pathr   uploaderresponses                 r)   upload_object(GrpcClientWithJsonFallback.upload_object  s#    ##% $ F ''8K%;;$$k3 ))  )22999$$%3')h 
I44>>	>''%3'/)+h ''%3')h ||~H== r+   )r&   r#   )NN)NNF)__name__
__module____qualname____firstlineno____doc__r   rS   r%   r3   r   r:   r;   r<   rw   r   r   r   DownloadStrategyr   r   r   r   r   __static_attributes____classcell__)r(   s   @r)   r   r   )   s    J.* #%" ((--E<  $i`  %~@6(O: !22<<'\ ..55= =r+   r   N)%r   
__future__r   r   r   googlecloudsdk.api_lib.storager   r   rP   'googlecloudsdk.api_lib.storage.gcs_grpcr   r	   r
   r   'googlecloudsdk.api_lib.storage.gcs_jsonr   gcs_json_clientgooglecloudsdk.api_lib.utilr   r1   "googlecloudsdk.command_lib.storager   r   r   r   +googlecloudsdk.command_lib.storage.tasks.cpr   r   googlecloudsdk.corer   r   r   r   googlecloudsdk.core.utilr   
JsonClientr    r+   r)   <module>r      s^    G &  ' 4 A < = A : M 9 > 8 @ H A E = # * 3x!;!; xr+   