
                             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	  G d d	ej                        Z G d
 dej                        Z G d de      Z G d dej                        Zy)z2Functions for du command to display resource size.    )absolute_import)division)print_function)unicode_literals)	list_util)shim_format_utilc                       e Zd ZdZd Zy)_ObjectFormatWrapperz:For formatting how obejects are printed when listed by du.c                     t        | j                  dd      }| j                         \  }}dj                  t	        j
                  || j                  | j                        |      S )2Returns string of select properties from resource.sizer   {size:<13}{url}use_gsutil_styler   url)getattrresource_check_and_handles_versionsformatr   #check_and_convert_to_readable_sizes_readable_sizes_use_gsutil_style)selfr   
url_string_s       9lib/googlecloudsdk/command_lib/storage/du_command_util.py__str__z_ObjectFormatWrapper.__str__   sf    4==&!,D446MJ %%::$&&9O9O
 	 &      N)__name__
__module____qualname____doc__r    r   r   r
   r
      s
    Br   r
   c                   2     e Zd ZdZ	 	 	 	 d fd	Zd Z xZS )_ContainerSummaryFormatWrapperz<For formatting how containers are printed when listed by du.c                 t    t         t        |   |t        j                  j
                  |||       || _        y)z?See list_util.BaseFormatWrapper class for function doc strings.)display_detailobject_statereadable_sizesr   N)superr&   __init__r   DisplayDetailSHORT_container_size)r   r   container_sizer)   r*   r   	__class__s         r   r,   z'_ContainerSummaryFormatWrapper.__init__.   s?     

($8 ..44!%) 9  *Dr   c                 B   | j                   j                  j                  }| j                   j                  j                         r|j	                  d      }n|}t        j                  | j                  | j                  | j                        }dj                  ||      S )r   /r   r   )r   storage_urlversionless_url_string	is_bucketrstripr   r   r/   r   r   r   )r   raw_url_stringr   r   s       r   r   z&_ContainerSummaryFormatWrapper.__str__@   s    ]]..EEN}}  **, "((-j!j 88d22D4J4JD
 %% &  r   )NNFF)r    r!   r"   r#   r,   r   __classcell__r1   s   @r   r&   r&   +   s    D
 *$r   r&   c                        e Zd Z fdZ xZS )_BucketSummaryFormatWrapperc                 r    | j                   j                  j                         rt        t        |          S y)N )r   r4   r6   r+   r<   r   )r   r1   s    r   r   z#_BucketSummaryFormatWrapper.__str__Y   s-    }}  **,.=??r   )r    r!   r"   r   r9   r:   s   @r   r<   r<   W   s     r   r<   c                   F     e Zd ZdZ	 	 	 	 	 	 	 	 d fd	Zd Zd Zd Z xZS )
DuExecutorz Helper class for the Du command.c
                     t         t        |   ||||d||||		       || _        | j                  rt        | _        yt        | _        t        | _        y)z>See list_util.BaseListExecutor class for function doc strings.T)	
cloud_urlsexclude_patternsr)   r*   recursion_flagtotalr   zero_terminatorlist_filterN)	r+   r@   r,   
_summarizer<   _container_summary_wrapperr&   r
   _object_wrapper)r   rB   rC   r)   r*   	summarizerE   r   rF   rG   r1   s             r   r,   zDuExecutor.__init__c   s\     
*d$)!%)' % 
  DO(Cd%(Fd%1dr   c                      y)NFr$   )r   raw_cloud_urls     r   _should_only_display_bucketsz'DuExecutor._should_only_display_buckets   s    r   c                 l   | j                   r|j                         ry | j                  r!t        j                  || j
                        }|j                         r|j                  j                  d      }n|j                  }t        dj                  ||      | j                  rd       y d       y )Nr   r3   r   r    
end)rH   is_providerr   r   get_human_readable_byte_valuer   r6   r   r7   printr   _zero_terminator)r   resource_urlonly_display_bucketsobject_counttotal_bytesr   s         r    _print_summary_for_top_level_urlz+DuExecutor._print_summary_for_top_level_url   s     ??l668$BB
(>(>k   **11#6j**j	  * 	! 	
 ))D	 04	r   c           	          t        dj                  t        j                  || j                  | j
                              | j                  rd       y d       y )Nz{size:<13}total)r   rP   rQ   rR   )rV   r   r   r   r   r   rW   )r   all_sources_total_bytess     r   _print_totalzDuExecutor._print_total   sW    	  >>'$$&& 	! 	
 ))D	 04	r   )NNFFFFFN)	r    r!   r"   r#   r,   rN   r\   r_   r9   r:   s   @r   r@   r@   `   s5    (
 2@0
r   r@   N)r#   
__future__r   r   r   r   "googlecloudsdk.command_lib.storager   ,googlecloudsdk.command_lib.storage.resourcesr   BaseFormatWrapperr
   r&   r<   BaseListExecutorr@   r$   r   r   <module>re      sb    9 &  % ' 8 I966 ")Y%@%@ )X"@ I++ Ir   