
                            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	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KJr  SSKJr  SSKJr  SrSrSrS r\R:                  \R<                  " \R>                  R@                  5       " S S\RB                  5      5       5       r"\R:                  \R<                  " \R>                  RF                  5       " S S\"5      5       5       r$g)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.
a3  
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'', including objects across nested
directories:

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

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

  $ {command} gs://my-bucket --format="json(name)"
zp
List only contexts attached to objects as key value pairs.

  $ {command} gs://my-bucket --format=contextsonly
c              #      #    [         R                  " U SU[        R                  R                  UUUUS9 H(  n[        U[        R                  5      (       d  M$  Uv   M*     g7f)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$   D   s[      $99	 $A((--3%	h (.==>>n	s   AA#	A#c                   >    \ rS rSrSr\\S.r\S 5       r	S r
S rSrg)	List[   Lists Cloud Storage objects.DESCRIPTIONEXAMPLESc                    UR                  SSSS9  UR                  SSSS9  [        R                  " U5        [        R                  " US	S
9  [        R                  " US	S9  [        R
                  " U5        [        R                  " U5        [        R                  " U5        U R                  5       [        R                  R                  :X  a5  [        R                  " U5        [        R                  R                  5         g g )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#   Args	List.Argse   s    
c C  E
/  0
 
%%f-	vtD	00F	v&	'	**62
T..444$$V,11::< 5    c                     UR                   (       a  [        R                  " US5        g [        R                  " US5        g )Nzobject[terminator=""]yaml)statr   Print)selfargs	resourcess      r#   DisplayList.Displayy   s*    yyY(?@Y/rE   c              #   t  #    [         R                  " U5        [        USS 5      n/ nUR                   GH  n[        R
                  " U5      nUR                  5       (       d:  UR                  5       (       aJ  [        R                  " UR                  5      (       a%  [        R                  " SR                  U5      5      eUb>  UR                  [        R                  R                   :w  a  [        R                  " S5      eUR                  5       (       a#  UR#                  UR%                  S5      5        GM  UR#                  U5        GM     UR&                  (       d,  UR(                  (       d  [*        R,                  R.                  nO[0        R2                  " U5      n[4        R6                  " 5       nU H  n[9        UUR:                  [        USS5      (       + [        USS 5      UUS9nUR&                  (       aT  Sn	U H  n
S	n	UR=                  U
SS
9v   M     U	(       d,  [>        R@                  " SURB                  -   5        SU l"        M  M  U HW  n
UR                  [F        RH                  :X  a  U
v   M'  [J        RL                  " U
[N        RP                  URR                  S9v   MY     M     g 7f)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joinrH   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)rJ   rK   rP   r-   rk   r!   r   stat_formatterobject_iteratorfound_matchr"   s              r#   RunList.Run   s'    ((.d$5t<ODii
//
;c			s}}0BB#&?? 4  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   J6J8)rl   N)__name__
__module____qualname____firstlineno____doc___COMMAND_DESCRIPTION_GA_EXAMPLESdetailed_helpclassmethodrC   rM   rt   __static_attributes__ rE   r#   r&   r&   [   s4     % *-
 = =&0;rE   r&   c                   (    \ rS rSrSr\\\-   S.rSr	g)	ListAlpha   r(   r)   r   N)
rv   rw   rx   ry   rz   r{   r|   _ALPHA_EXAMPLESr}   r   r   rE   r#   r   r      s     % *0-rE   r   N)%rz   
__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   r{   r|   r   r$   UniverseCompatibleReleaseTracksr<   GAListCommandr&   r=   r   r   rE   r#   <module>r      s    J &  ' 4 ( > 5 4 : @ P P W K F # 9 &. D%%(()]4 ] * ]@ D%%++,  - rE   