
                            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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dZdZd Zej:                   ej<                  ej>                  j@                         G d dejB                                      Z"ej:                   ej<                  ej>                  jF                         G d de"                    Z$y)zCImplementation of objects list command for getting info on objects.    )absolute_import)division)unicode_literals)	cloud_api)base)encryption_util)errors)flags)storage_url)wildcard_iterator)contexts_only_formatter)full_resource_formatter)gsutil_full_resource_formatter)resource_reference)resource_util)log)resource_printerz
List Cloud Storage objects.

Bucket URLs like `gs://bucket` match all the objects inside a bucket,
but `gs://b*` fails because it matches a list of buckets.
a  
List all objects in bucket ``my-bucket'' within current directory level:

  $ {command} gs://my-bucket

List all objects across nested directories using wildcards (https://cloud.google.com/storage/docs/wildcards):

  $ {command} gs://my-bucket/**

List all objects in bucket beginning with ``o'':

  $ {command} gs://my-bucket/o*

List all objects in bucket with JSON formatting, only returning the
value of the ``name'' metadata field:

  $ {command} gs://my-bucket --format="json(name)"

c           
   #      K   t        j                  | d|t        j                  j                  ||||      D ]!  }t        |t        j                        s| # yw)zCIterates through resources matching URL and filter out non-objects.F)error_on_missing_keyfetch_encrypted_object_hashesfields_scopehalt_on_empty_responsenext_page_tokenobject_statelist_filterN)r   CloudWildcardIteratorr   FieldsScopeFULL
isinstancer   ObjectResource)urlr   r   r   r   r   resources          #lib/surface/storage/objects/list.py_object_iteratorr%   @   sY      $99	 $A((--3%	h (.==>n	s   AAAc                   6    e Zd ZdZeedZed        Zd Z	d Z
y)ListLists Cloud Storage objects.DESCRIPTIONEXAMPLESc                    |j                  ddd       |j                  ddd       t        j                  |       t        j                  |d	
       t        j                  |d	       t        j
                  |       t        j                  |       t        j                  |       | j                         t        j                  j                  k(  r4t        j                  |       t        j                  j                          y y )Nurls+z!Specifies URL of objects to list.)nargshelpz--stat
store_truezbEmulates gsutil stat-style behavior. Does not show past object versions and changes output format.)actionr0   T)command_only_reads_data)is_list)add_argumentr
   add_additional_headers_flagadd_encryption_flags&add_fetch_encrypted_object_hashes_flagadd_raw_display_flagadd_soft_delete_flags add_uri_support_to_list_commandsReleaseTrackr   ALPHAadd_metadata_filter_flagr   ContextsOnlyPrinterRegister)clsparsers     r$   Argsz	List.Argsa   s    
c C  E
/  0
 
%%f-	vtD	00F	v&	'	**62
T..444$$V,11::< 5    c                 v    |j                   rt        j                  |d       y t        j                  |d       y )Nzobject[terminator=""]yaml)statr   Print)selfargs	resourcess      r$   DisplayzList.Displayu   s*    yyY(?@Y/rD   c              #     K   t        j                  |       t        |dd       }g }|j                  D ]  }t	        j
                  |      }|j                         s/|j                         rCt        j                  |j                        r$t        j                  dj                  |            |<|j                  t        j                  j                   k7  rt        j                  d      |j                         r!|j#                  |j%                  d             |j#                  |        |j&                  s'|j(                  st*        j,                  j.                  }nt1        j2                  |      }t5        j6                         }|D ]  }t9        ||j:                  t        |dd       t        |dd       ||      }|j&                  rMd}	|D ]  }
d	}	|j=                  |
d
        |	rdt?        j@                  d|jB                  z          d| _"        |D ]V  }
|j                  tF        jH                  k(  r|
 %tK        jL                  |
tN        jP                  |jR                         X  y w)Nmetadata_filterzURL does not match objects: {}z/Metadata filter is only supported for GCS URLs.*
exhaustiveFr   )r   r   r   r   r   T)show_aclzNo URLs matched:    )display_raw_keys)*r   initialize_key_storegetattrr-   r   storage_url_from_stringis_provider	is_bucketr   contains_wildcardbucket_namer	   InvalidUrlErrorformatschemeProviderPrefixGCSappendjoinrG   soft_deletedr   ObjectStateLIVE_AND_NONCURRENTr
   get_object_state_from_flagsr   GsutilFullResourceFormatterr%   r   format_objectr   error
url_string	exit_coder   CONTEXT_ONLY_PRINTER_FORMATr   get_display_dict_for_resourcer   ObjectDisplayTitlesAndDefaultsraw)rI   rJ   rN   r-   ri   r"   r   stat_formatterobject_iteratorfound_matchr#   s              r$   RunzList.Run{   s    ((.d$5t<ODii
//
;c		s}}0BB#&?? 4$$,33J?A 	A 
%jjK66:::$$=
 	
 
CHHSM"C%  ( II****>>l66t<l&BBD  (
(,(J(J%,T<%G!G!$(94@#%o 
'H+,,X,F
F ( 
))'#..8
9$.'H[[3OOON=='FF!% 	 (' s   G/I:2BI:N)__name__
__module____qualname____doc___COMMAND_DESCRIPTION_GA_EXAMPLESdetailed_helpclassmethodrC   rL   rr    rD   r$   r'   r'   W   s4     % *-
 = =&0;rD   r'   c                        e Zd ZdZeeez   dZy)	ListAlphar(   r)   N)rs   rt   ru   rv   rw   rx   _ALPHA_EXAMPLESry   r{   rD   r$   r}   r}      s     % *0-rD   r}   N)%rv   
__future__r   r   r   googlecloudsdk.api_lib.storager   googlecloudsdk.callioper   "googlecloudsdk.command_lib.storager   r	   r
   r   r   ,googlecloudsdk.command_lib.storage.resourcesr   r   r   r   r   googlecloudsdk.corer   googlecloudsdk.core.resourcer   rw   rx   r~   r%   UniverseCompatibleReleaseTracksr<   GAListCommandr'   r=   r}   r{   rD   r$   <module>r      s    J &  ' 4 ( > 5 4 : @ P P W K F # 9 $. D%%(()]4 ] * ]@ D%%++,  - rD   