
                         &   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddl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 G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)zTasks for deleting resources.    )absolute_import)division)unicode_literalsN)api_factory)request_config_factory)progress_callbacks)task)logc                   V     e Zd ZdZd fd	Zej                  d        ZddZd Z	 xZ
S )
DeleteTaskz,Base class for tasks that delete a resource.c                 n    t         |           || _        || _        || _        |j
                  | _        y)a  Initializes task.

    Args:
      url (storage_url.StorageUrl): URL of the resource to delete.
      user_request_args (UserRequestArgs|None): Values for RequestConfig.
      verbose (bool): If true, prints status messages. Otherwise, does not print
        anything.
    N)super__init___url_user_request_args_verbose
url_stringparallel_processing_key)selfurluser_request_argsverbose	__class__s       >lib/googlecloudsdk/command_lib/storage/tasks/rm/delete_task.pyr   zDeleteTask.__init__"   s2     
GDI/DDM#&>>D     c                     t         )z+Deletes a resource. Overridden by children.NotImplementedErrorr   s    r   _perform_deletionzDeleteTask._perform_deletion2   
     r   c                     | j                   r8t        j                  j                  dj	                  | j
                               | j                          |rt        j                  |       y y )NzRemoving {}...)	r   r
   statusPrintformatr   r    r   increment_count_callback)r   task_status_queues     r   executezDeleteTask.execute7   sN    }}	jj'..tyy9:112CD r   c                     t        || j                        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DeleteTask.__eq__@   sY    eT^^,		UZZ 	,##u'?'??	,MMU^^+r   )NTr*   )__name__
__module____qualname____doc__r   abcabstractmethodr    r(   r.   __classcell__)r   s   @r   r   r      s0    42   Er   r   c                       e Zd ZdZd Zy)DeleteFileTaskzTask to delete a file.c                 V    t        j                  | j                  j                         y r*   )osremover   resource_namer   s    r   r    z DeleteFileTask._perform_deletionM   s    IIdii%%&r   N)r/   r0   r1   r2   r     r   r   r7   r7   J   s
    'r   r7   c                   :    e Zd ZdZej
                  d        Zd Zy)CloudDeleteTaskz2Base class for tasks that delete a cloud resource.c                     t         )zBPerforms an API call to delete a resource. Overridden by children.r   r   clientrequest_configs      r   _make_delete_api_callz%CloudDeleteTask._make_delete_api_callT   r!   r   c                     t        j                  | j                  j                        }t	        j
                  | j                  | j                        }| j                  ||      S )N)r   )r   get_apir   schemer   get_request_configr   rC   r@   s      r   r    z!CloudDeleteTask._perform_deletionY   sP      !1!12F+>>		T%<%<N %%fn==r   N)r/   r0   r1   r2   r3   r4   rC   r    r<   r   r   r>   r>   Q   s"    : >r   r>   c                       e Zd ZdZd Zy)DeleteBucketTaskzTask to delete a bucket.c                     	 |j                  | j                  j                  |       y # t        $ r$}dt	        |      v r t        |      d       d }~ww xY w)Nz	not emptyz\Bucket is not empty. To delete all objects and then delete bucket, use: gcloud storage rm -r)delete_bucketr   bucket_name	Exceptionstrtype)r   rA   rB   errors       r   rC   z&DeleteBucketTask._make_delete_api_calld   sZ    49900.A 	E
	"d5k1
 	

 	s   &) 	AAANr/   r0   r1   r2   rC   r<   r   r   rI   rI   a   s
     r   rI   c                   &    e Zd ZdZed        Zd Zy)DeleteManagedFolderTaskz Task to delete a managed folder.c                     | j                   S ztThe URL of the resource deleted by this task.

    Exposing this allows execution to respect containment order.
    r   r   s    r   managed_folder_urlz*DeleteManagedFolderTask.managed_folder_urlv        99r   c                 z    ~|j                  | j                  j                  | j                  j                         y r*   )delete_managed_folderr   rL   r;   r@   s      r   rC   z-DeleteManagedFolderTask._make_delete_api_call~   s)    
  !6!6		8O8OPr   N)r/   r0   r1   r2   propertyrW   rC   r<   r   r   rS   rS   s   s    ( Qr   rS   c                   &    e Zd ZdZed        Zd Zy)DeleteFolderTaskzTask to delete a folder.c                     | j                   S rU   rV   r   s    r   
folder_urlzDeleteFolderTask.folder_url   rX   r   c                 z    ~|j                  | j                  j                  | j                  j                         y r*   )delete_folderr   rL   r;   r@   s      r   rC   z&DeleteFolderTask._make_delete_api_call   s)    
..		0G0GHr   N)r/   r0   r1   r2   r[   r_   rC   r<   r   r   r]   r]      s      Ir   r]   c                       e Zd ZdZd Zy)DeleteObjectTaskzTask to delete an object.c                 <    |j                  | j                  |       y r*   )delete_objectr   r@   s      r   rC   z&DeleteObjectTask._make_delete_api_call   s    
N3r   NrQ   r<   r   r   rc   rc      s
    !4r   rc   )r2   
__future__r   r   r   r3   r9   googlecloudsdk.api_lib.storager   r   "googlecloudsdk.command_lib.storager   (googlecloudsdk.command_lib.storage.tasksr	   googlecloudsdk.corer
   Taskr   r7   r>   rI   rS   r]   rc   r<   r   r   <module>rl      s    $ &  ' 
 	 6 A A 9 #( (V'Z '>j >  $Qo Q I I 4 4r   