
                         ~    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	 jr  SS
 jrS rg)ztGeneric logic for rm and mv command surfaces.

Tested in mv_test.py, rm_test.py, and managed_folders/delete_test.py
    )folder_util)plurality_checkable_iterator)task_executor)task_status)	task_util)delete_task_iterator_factory)logc           
         [         R                  " UUS9n[        R                  " [        R
                  " UR                  5       S S95      nUR                  5       (       a  U(       d  gU(       a  [        R                  R                  S5        [        R                  " USU[        R                  " [        R                  R                   SS9U R"                  =(       d    [$        R&                  " 5       S	9$ )
z8Creates and executes tasks for removing managed folders.task_status_queuec                     U R                   $ N)managed_folder_urltasks    9lib/googlecloudsdk/command_lib/storage/rm_command_util.py<lambda>(remove_managed_folders.<locals>.<lambda>/   s
    T-D-D    get_url_functionr   zRemoving managed folders:FNmanifest_pathparallelizabler   progress_manager_argscontinue_on_error)r   DeleteTaskIteratorFactoryr   PluralityCheckableIteratorr   reverse_containment_ordermanaged_folder_iteratoris_emptyr	   statusPrintr   execute_tasksr   ProgressManagerArgsIncrementTypeINTEGERr   r   should_use_parallelism)argssource_expansion_iteratorr   raise_error_for_unmatched_urlsverbosetask_iterator_factorydelete_task_iterators          r   remove_managed_foldersr0      s     #<<
#-  #==

/
/#;;= D  ""$$-KJJ01		$	$)';;

#
#
+
+ 
 
 
FI$D$D$F
 r   c           
         [        U 5      n[        R                  " UUS9n[        R                  " [
        R                  " UR                  5       S S95      nUR                  5       (       a  U(       d  gU(       a  [        R                  R                  S5        [        R                  " USU[        R                  " [        R                   R"                  SS9[$        R&                  " 5       S	9$ )
z0Creates and executes tasks for removing folders.r   c                     U R                   $ r   )
folder_urlr   s    r   r    remove_folders.<locals>.<lambda>_   s    T__r   r   r   zRemoving folders:FNr   r   )_de_duplicate_foldersr   r   r   r   r   r    folder_iteratorr"   r	   r#   r$   r   r%   r   r&   r'   r(   r   r)   )r+   r   r,   r-   !updated_source_expansion_iteratorr.   r/   s          r   remove_foldersr8   J   s     '<'#
 #<<
+-  #==

/
/#335 <  ""$$-KJJ()		$	$)';;

#
#
+
+ "88:
 r   c                     0 n[        U S5      (       d  U $ U  H7  nUR                  R                  U;  d  M  X!UR                  R                  '   M9     UR                  5       $ )z=Removes duplicate folders from the source expansion iterator.__iter__)hasattrresourcestorage_urlvalues)r+   de_duplicated_mapsources      r   r5   r5   x   s^    & 	*J	7	7$$)f""*;;7=334 * 
	!	!	##r   N)FF)__doc__"googlecloudsdk.command_lib.storager   r   (googlecloudsdk.command_lib.storage.tasksr   r   r   +googlecloudsdk.command_lib.storage.tasks.rmr   googlecloudsdk.corer	   r0   r8   r5    r   r   <module>rG      sB   
 ; K B @ > T # $)*` $)	+\$r   