
    "                        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 ddl
mZ ddl
mZ dZ G d de	j"                        Z G d de	j"                        Z G d de	j(                        Zy)zTask for retrieving a list of resources from the cloud.

Typically executed in a task iterator:
googlecloudsdk.command_lib.storage.tasks.task_executor.
    )absolute_import)division)print_function)unicode_literals)	cloud_api)	list_util)gcloud_full_resource_formatter)gsutil_full_resource_formatter)resource_reference)resource_util)shim_format_utilz<{size:>10}  {creation_time:>20}  {url}{metageneration}{etag}c                   ^     e Zd ZdZej
                  j                  dddddf fd	Zd Z xZ	S )_HeaderFormatWrapperz-For formatting how headers print when listed.FNc           	      :    t         t        |   |||||||       y)?See list_util.BaseFormatWrapper class for function doc strings.)display_detailfull_formatterinclude_etagobject_statereadable_sizesuse_gsutil_styleN)superr   __init__)	selfresourcer   r   r   r   r   r   	__class__s	           9lib/googlecloudsdk/command_lib/storage/ls_command_util.pyr   z_HeaderFormatWrapper.__init__+   s/     

.%%!!%) /     c                 H   | j                   r%t        | j                  t        j                        ry| j                  j
                  j                  }| j                  t        j                  j                  k(  r| j                  j                         S dj                  |      S )N z
{}:)_use_gsutil_style
isinstancer   r   BucketResourcestorage_urlversionless_url_string_display_detailr   DisplayDetailJSONget_json_dumpformatr   urls     r   __str__z_HeaderFormatWrapper.__str__A   sx    *)88# 
--
#
#
:
:Cy66;;;]]((**>>#r   )
__name__
__module____qualname____doc__r   r'   SHORTr   r-   __classcell__r   s   @r   r   r   (   s0    5
 ,,22,r   r   c                   d     e Zd ZdZej
                  j                  dddddf fd	Zd Zd Z	 xZ
S )_ResourceFormatWrapperz/For formatting how resources print when listed.NFc                 F    t         t        |   ||||||       || _        y)r   )r   r   r   r   r   N)r   r6   r   _full_formatter)	r   r   r   r   r   r   r   r   r   s	           r   r   z_ResourceFormatWrapper.__init__R   s6     

 $0%!!%) 1  *Dr   c                 Z   t        | j                  t        j                        r8t        j                  dd| j                  j                  j                  dd      S t        j                  | j                  j                        }| j                         \  }}| j                  r/dj                  t        | j                  j                              }nd}t        j                  t        j                   | j                  j"                  | j$                  | j&                        ||||      S )z2Returns string of select properties from resource.r    )sizecreation_timer,   metagenerationetagz	  etag={})r"   r   r   PrefixResourceLONG_LIST_ROW_FORMATr*   r$   
url_stringr   get_formatted_timestamp_in_utcr;   _check_and_handles_versions_include_etagstrr=   r   #check_and_convert_to_readable_sizesr:   _readable_sizesr!   )r   r;   r@   metageneration_stringetag_strings        r   _format_for_list_longz,_ResourceFormatWrapper._format_for_list_longi   s   $--!3!B!BC!((mm''22 )   "@@##M )-(H(H(J%J%&&s4==+=+='>?kk  &&::MM 4 4d6L6L
 $, '  r   c                    | j                   t        j                  j                  k(  rXt	        | j
                  t        j                        s$t	        | j
                  t        j                        r| j                         S | j                  t        j                  j                  t        j                  j                  fv }| j                   t        j                  j                  k(  rot	        | j
                  t        j                         s$t	        | j
                  t        j                        r'| j"                  j%                  | j
                  |      S | j                   t        j                  j&                  k(  r| j
                  j)                         S |r | j
                  j*                  j,                  S | j
                  j*                  j.                  S )N)show_version_in_url)r&   r   r'   LONGr"   r   r   ObjectResourcer>   rI   _object_stater   ObjectStateLIVE_AND_NONCURRENTSOFT_DELETEDFULLr#   r8   r*   r(   r)   r$   r@   r%   )r   rK   s     r   r-   z_ResourceFormatWrapper.__str__   sU   y66;;;4=="4"C"CDdmm%7%F%FG'')),,11**1  y66;;;4=="4"C"CDdmm%7%F%FG!!((
---@ )   y66;;;]]((**]]&&111==$$;;;r   )r.   r/   r0   r1   r   r'   r2   r   rI   r-   r3   r4   s   @r   r6   r6   O   s6    7
 ,,22*.!F<r   r6   c                   x     e Zd ZdZdej
                  j                  dddddddddddf fd	Zd Zd Z	d Z
 xZS )	
LsExecutorz Helper class for the ls command.FTNc                     t         t        |   |||||||||	|
||||       |rt        j                         | _        nt        j                         | _        t        | _	        t        | _        y)z>See list_util.BaseListExecutor class for function doc strings.)
cloud_urlsbuckets_flagr   fetch_encrypted_object_hasheshalt_on_empty_responser   include_managed_foldersnext_page_tokenr   r   recursion_flagr   soft_deleted_bucketslist_filterN)r   rT   r   r
   GsutilFullResourceFormatterr8   r	   GcloudFullResourceFormatterr   _header_wrapperr6   _object_wrapper)r   rV   rW   r   rX   rY   r   rZ   r[   r   r   r\   r   r]   r^   r   s                  r   r   zLsExecutor.__init__   s    $ 
*d$!%&C5! 7'!%%)1 % " 
(
D
D
F 
 )
D
D
F  0D1Dr   c           
         | j                   t        j                  j                  t        j                  j                  fv rG|sDt        dj                  |t        |      t        j                  || j                                     y y y )Nz TOTAL: {} objects, {} bytes ({}))r&   r   r'   rL   rR   printr*   intr   get_human_readable_byte_valuer!   )r   resource_urlonly_display_bucketsobject_counttotal_bytess        r    _print_summary_for_top_level_urlz+LsExecutor._print_summary_for_top_level_url   s}     	##(()*A*A*F*FG	H$ 
,
3
3+<<t55 %	Hr   c                     | j                   rKt        | j                        dkD  r2| j                  s%t	        dj                  |j                               y y y y )N   z{}:)r!   len_cloud_urls_buckets_flagrd   r*   r@   r+   s     r   _print_bucket_headerzLsExecutor._print_bucket_header   sK      !A%""ELL() # & 	r   c                     d}t        |      D ]A  \  }}d}|dk(  rt        d       t        |d       &t        dj                  |      d       C t                |st        d       y	y	)
z,Prints ResourceWrapper objects as JSON list.TFr   [r    )endz,
{}]N)	enumeraterd   r*   )r   resource_wrappersis_empty_listiresource_wrappers        r   _print_json_listzLsExecutor._print_json_list   sg    M():;m	
ac
B' 	gnn-.B7  < 
GCj r   )r.   r/   r0   r1   r   r'   r2   r   rk   rq   r{   r3   r4   s   @r   rT   rT      sP    (
 ,,22$)!# ,2\&*r   rT   N)r1   
__future__r   r   r   r   googlecloudsdk.api_lib.storager   "googlecloudsdk.command_lib.storager   ,googlecloudsdk.command_lib.storage.resourcesr	   r
   r   r   r   r?   BaseFormatWrapperr   r6   BaseListExecutorrT    r   r   <module>r      st    '  % ' 4 8 W W K F I C 
$966 $NT<Y88 T<n_++ _r   