
    4                        S 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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rSrSr\	R2                  \	R4                  " \	R6                  R8                  5       " S S\	R:                  5      5       5       r\	R4                  " \	R6                  R>                  5       " S S\5      5       r g)z<Implementation of objects compose command for Cloud Storage.    )absolute_import)division)unicode_literalsN)	cloud_api)base)encryption_util)errors)errors_util)flags)name_expansion)storage_url)user_request_args_factory)resource_reference)compose_objects_taskad  
{command} creates a new object whose content is the concatenation
of a given sequence of source objects in the same bucket.
For more information, please see:
[composite objects documentation](https://cloud.google.com/storage/docs/composite-objects).

There is a limit (currently 32) to the number of components
that can be composed in a single operation.
z
The following command creates a new object `target.txt` by concatenating
`a.txt` and `b.txt`:

  $ {command} gs://bucket/a.txt gs://bucket/b.txt gs://bucket/target.txt
a  
Contexts are merged from source objects on the composed object by default.
However, the following command overwrites custom contexts on composed object:

  $ {command} gs://bucket/a.txt gs://bucket/b.txt gs://bucket/target.txt       --custom-contexts=key1=value1,key2=value2
c                   8    \ rS rSrSr\\S.r\S 5       r	S r
Srg)Compose=   >Concatenate a sequence of objects into a new composite object.DESCRIPTIONEXAMPLESc                    UR                  SS[        R                  " S5      S9  UR                  SSS9  [        R                  " U5        [        R
                  " USS	9  [        R                  " U5        [        R                  " U5        U R                  5       [        R                  R                  :X  a-  [        R                  " U5      n[        R                  " U5        g g )
Nsource+zb            The list of source objects that will be concatenated into a
            single object.)nargshelpdestinationzThe destination object.)r   T)hidden)add_argumenttextwrapdedentr   add_additional_headers_flagadd_encryption_flagsadd_per_object_retention_flagsadd_precondition_flagsReleaseTrackr   ALPHAget_object_context_groupadd_object_context_setter_flags)clsparsercontext_groups      &lib/surface/storage/objects/compose.pyArgsCompose.ArgsG   s    
__      ,EF	%%f-	vd3	((0	  (
T..44444V<m++M: 5    c                    [         R                  " U5        UR                  (       a  [        R                  " [
        R                  " UR                  5      5      nUR                   Hs  n[
        R                  " U5      n[        R                  " UR                  U5        UR                  UR
                  R                  Ld  M_  [        R                  " S5      e   UR                  WR
                  R                  :w  a  [        R                  " S5      e[        R                   " UR                  ["        R$                  R&                  [        R(                  R*                  S9nU Vs/ s H  ofR,                  PM     nn[.        R0                  " U[.        R2                  R4                  S9n[6        R8                  " UUSUS9R;                  5         g s  snf )Nz,Composing across providers is not supported.zVerison-specific URLs are not valid destinations because composing always results in creating an object with the latest generation.)fields_scoperecursion_requested)metadata_typeT)print_status_messageuser_request_args)r   initialize_key_storer   r   UnknownResourcer   storage_url_from_stringr   r
   raise_error_if_not_cloud_objectcommand_pathschemer	   Errorversionless_url_stringr   NameExpansionIteratorr   FieldsScopeNO_ACLRecursionSettingNOresourcer   'get_user_request_args_from_command_argsMetadataTypeOBJECTr   ComposeObjectsTaskexecute)	selfargsdestination_resource
url_string
source_urlsource_expansion_iteratorr   objects_to_composer6   s	            r-   RunCompose.RunZ   s   ((.{{/??

-
-d.>.>
?A* 88D
33D4E4E4>	@$8$D$D$K$KKKL
L $ 	((??	@LL ! !
 !/ D D**11*;;>>!@ '@&?F&?  
 	"II 9 F F M M	O  ++!+	
 gis   -G N)__name__
__module____qualname____firstlineno____doc___COMMAND_DESCRIPTION_GA_EXAMPLESdetailed_helpclassmethodr.   rQ   __static_attributes__rS   r0   r-   r   r   =   s0     G *-
 ; ;$$r0   r   c                   (    \ rS rSrSr\\\-   S.rSr	g)ComposeAlpha   r   r   rS   N)
rT   rU   rV   rW   rX   rY   rZ   _ALPHA_EXAMPLESr[   r]   rS   r0   r-   r_   r_      s    F *0-r0   r_   )!rX   
__future__r   r   r   r    googlecloudsdk.api_lib.storager   googlecloudsdk.callioper   "googlecloudsdk.command_lib.storager   r	   r
   r   r   r   r   ,googlecloudsdk.command_lib.storage.resourcesr   (googlecloudsdk.command_lib.storage.tasksr   rY   rZ   ra   UniverseCompatibleReleaseTracksr&   GACommandr   r'   r_   rS   r0   r-   <module>rl      s    C &  '  4 ( > 5 : 4 = : H K I  D%%(()?dll ? * ?D D%%++,7  -r0   