
                         t    S r SSKr " S S\R                  5      r " S S\R                  5      rS rS	S jrg)
z9Utilities for interacting with folders in gcloud storage.    Nc                   (    \ rS rSrSrSrSrSrSrSr	g)	ManagedFolderSetting   z+Indicates how to deal with managed folders.do_not_listlist_as_prefixeslist_with_objectslist_without_objects N)
__name__
__module____qualname____firstlineno____doc__DO_NOT_LISTLIST_AS_PREFIXESLIST_WITH_OBJECTSLIST_WITHOUT_OBJECTS__static_attributes__r
       5lib/googlecloudsdk/command_lib/storage/folder_util.pyr   r      s$    3 + ( * 0r   r   c                   (    \ rS rSrSrSrSrSrSrSr	g)	FolderSetting)   z'Indicates how to deal with HNS folders.r   r   list_as_foldersr	   r
   N)
r   r   r   r   r   r   r   LIST_AS_FOLDERSr   r   r
   r   r   r   r   )   s#    / + ( &/ 0r   r   c                     U R                   nUR                   nU R                  nUR                  U5      U-   nUR                  U5      $ )z3Checks containment based on string representations.)versionless_url_string	delimiterrstrip
startswith)potential_container_urlpotential_containee_urlpotential_container_stringpotential_containee_stringr   prefixs         r   	_containsr&   =   sM    6MM6MM
 &//)%,,Y7)C&	#	.	.v	66r   c              #     #    U(       d  S n/ nU  HP  n U(       a   [        U" US   5      U" U5      5      (       a  UR                  U5        M>  UR                  5       v   MN     U(       a  UR                  5       v   U(       a  M  gg7f)a(  Reorders resources so containees are yielded before containers.

For example, an iterator with the following:
[
    gs://bucket/prefix/,
    gs://bucket/prefix/object,
    gs://bucket/prefix/object2,
    gs://bucket/prefix2/,
    gs://bucket/prefix2/object,
]

Will become:
[
    gs://bucket/prefix/object,
    gs://bucket/prefix/object2,
    gs://bucket/prefix/,
    gs://bucket/prefix2/object,
    gs://bucket/prefix2/,
]

Args:
  ordered_iterator (Iterable[object]): Yields objects containing resources
    s.t. container resources are yielded before and contiguous with all of
    their containee resources. Bucket/folder/object resources ordered
    alphabetically by storage URL safisfy this constraint.
  get_url_function (None|object -> storage_url.StorageUrl): Maps objects
    yielded by `iterator` to storage URLs. Defaults to assuming yielded
    objects are URLs. Similar to the `key` attribute on the built-in
    list.sort() method.

Yields:
  Resources s.t. containees are yielded before their containers, and
    contiguous with other containees.
c                     U $ Nr
   )urls    r   <lambda>+reverse_containment_order.<locals>.<lambda>n   s    3r   N)r&   appendpop)ordered_iteratorget_url_functionstackresource_containers       r   reverse_containment_orderr4   J   s     F 
&
 %,
i
59
%
-
.  	'(iik  - 	
))+ 	s   BB	B	r)   )r   enumEnumr   r   r&   r4   r
   r   r   <module>r7      s:    @ 0499 0(0DII 0(
75r   