
    P                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z dd	lmZ dd
lmZ  G d dej                         Zy)z#Task for composing storage objects.    )absolute_import)division)unicode_literals)api_factory)	cloud_api)request_config_factory)errors)task)logc                   :     e Zd ZdZ	 	 	 	 d fd	ZddZd Z xZS )ComposeObjectsTaskzComposes storage objects.c                 ~    t         t        |           || _        || _        || _        || _        || _        || _        y)a  Initializes task.

    Args:
      source_resources (list[ObjectResource|UnknownResource]): The objects to
        compose. This field accepts UnknownResources since it should allow
        ComposeObjectsTasks to be initialized before the target objects have
        been created.
      destination_resource (resource_reference.UnknownResource): Metadata for
        the resulting composite object.
      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): POSIX info set as custom cloud
        metadata on target. If preserving POSIX, avoids re-parsing metadata from
        file system.
      print_status_message (bool): If True, the task prints the status message.
      user_request_args (UserRequestArgs|None): Values for RequestConfig.
    N)	superr   __init___source_resources_destination_resource_original_source_resource_posix_to_set_print_status_message_user_request_args)selfsource_resourcesdestination_resourceoriginal_source_resourceposix_to_setprint_status_messageuser_request_args	__class__s          Dlib/googlecloudsdk/command_lib/storage/tasks/compose_objects_task.pyr   zComposeObjectsTask.__init__!   sC    6 

d,.-D!5D%=D"%D!5D/D    c                    ~| j                   j                  j                  }t        j                  |      }t
        j                  j                  |j                  vr$t        j                  dj                  |            | j                  D ]N  }|j                  j                  | j                   j                  j                  k7  s;t        j                  d       t        j                  | j                   j                  | j                         }| j"                  rLt$        j&                  j)                  dj                  | j                   t+        | j                                     |j-                  | j                  | j                   || j.                  | j0                        }t3        j4                  t3        j6                  t2        j8                  j:                  |      gg       S )Nz4Compose is not available with requested provider: {}z$Inter-bucket composing not supported)r   z*Composing {} from {} component object(s).
)r   r   )topicpayload)messagesadditional_task_iterators)r   storage_urlschemer   get_apir   
CapabilityCOMPOSE_OBJECTScapabilitiescommand_errorsErrorformatr   bucket_namer   get_request_configr   r   r   statuswritelencompose_objectsr   r   r
   OutputMessageTopicCREATED_RESOURCE)r   task_status_queueproviderapisource_resourcerequest_configcreated_resources          r   executezComposeObjectsTask.executeD   s   ))55<<H


h
'C++33C3CC  
@
G
G   11		$	$	0	0D4N4N4Z4Z4f4f	f""24 	4 2 ,>>""..113N !!	jjDKK

$
$c$*@*@&AC D **""!%!?!?'' +  ;;LLjj11;KM
 #%& &r    c                     t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S N)
isinstancer   NotImplementedr   r   r   )r   others     r   __eq__zComposeObjectsTask.__eq__g   sa    e/0""e&=&== @&&%*E*EE@##u'?'??Ar    )NNFNrA   )__name__
__module____qualname____doc__r   r?   rE   __classcell__)r   s   @r   r   r      s&    !  $ !0F!&FAr    r   N)rI   
__future__r   r   r   googlecloudsdk.api_lib.storager   r   r   "googlecloudsdk.command_lib.storager	   r,   (googlecloudsdk.command_lib.storage.tasksr
   googlecloudsdk.corer   Taskr    r    r   <module>rR      s;    * &  ' 7 4 A G 9 #NA NAr    