
    F\hc                    (   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
Jr  SSKJr  SSKJr  S r " S S	\R"                  5      r " S
 S\R"                  5      r " S S\R(                  5      r " S S\R"                  5      rS rg)    )annotationsN)Iterator   )abc)onlyc                R    [        [        R                  R                  U 5      5      $ N)itercollectionsOrderedDictfromkeys)itemss    2/usr/lib/python3.13/importlib/resources/readers.pyremove_duplicatesr      s    ''00788    c                  &    \ rS rSrS rS rS rSrg)
FileReader   c                b    [         R                  " UR                  5      R                  U l        g r	   )pathlibPathpathparent)selfloaders     r   __init__FileReader.__init__   s    LL-44	r   c                J    [        U R                  R                  U5      5      $ z[
Return the file system path to prevent
`resources.path()` from creating a temporary
copy.
strr   joinpathr   resources     r   resource_pathFileReader.resource_path        499%%h/00r   c                    U R                   $ r	   r   r   s    r   filesFileReader.files"       yyr   r)   N)__name__
__module____qualname____firstlineno__r   r%   r+   __static_attributes__ r   r   r   r      s    51r   r   c                  :   ^  \ rS rSrS rU 4S jrS rS rSrU =r	$ )	ZipReader&   c                    UR                   R                  SS5      U l         UR                  U5      (       a,  UR                  S5      u    p4U =R                   US-   -  sl         UR                  U l        g )N\/.)prefixreplace
is_package
rpartitionarchive)r   r   module_names        r   r   ZipReader.__init__'   s\    mm++D#6V$$**3/JAqKK4#:%K~~r   c                x   >  [         TU ]  U5      $ ! [         a  n[        UR                  S   5      eS nAff = fNr   )superopen_resourceKeyErrorFileNotFoundErrorargs)r   r$   exc	__class__s      r   rG   ZipReader.open_resource.   s;    	17(22 	1#CHHQK00	1s    
949c                    U R                  5       R                  U5      nUR                  5       =(       a    UR                  5       $ )zN
Workaround for `zipfile.Path.is_file` returning true
for non-existent paths.
)r+   r"   is_fileexists)r   r   targets      r   is_resourceZipReader.is_resource4   s2    
 &&t,~~3FMMO3r   c                X    [         R                  " U R                  U R                  5      $ r	   )zipfiler   r?   r;   r*   s    r   r+   ZipReader.files<   s    ||DLL$++66r   )r?   r;   )
r.   r/   r0   r1   r   rG   rR   r+   r2   __classcell__rL   s   @r   r5   r5   &   s    &147 7r   r5   c                  |   ^  \ rS rSrSrS rS rS rS rS r	S r
U 4S	 jr\S
 5       rS r\S 5       rS rSrU =r$ )MultiplexedPath@   z
Given a series of Traversable objects, implement a merged
version of the interface across all objects. Useful for
namespace packages which may be multihomed at a single
name.
c                    [        [        [        [        U5      5      5      U l        U R                  (       d  Sn[        U5      e[        S U R                   5       5      (       d  [        S5      eg )Nz.MultiplexedPath must contain at least one pathc              3  @   #    U  H  oR                  5       v   M     g 7fr	   is_dir.0r   s     r   	<genexpr>+MultiplexedPath.__init__.<locals>.<genexpr>M   s     9[T;;==[s   z)MultiplexedPath only supports directories)listmap_ensure_traversabler   _pathsrI   allNotADirectoryError)r   pathsmessages      r   r   MultiplexedPath.__init__H   sY    324Ee4LMN{{FG#G,,9T[[999$%PQQ :r   c                    S U R                    5       n[        R                  " S5      n[        R                  " [        XS9US9n[        U R                  S U 5       5      $ )Nc              3  R   #    U  H  oR                  5         H  o"v   M     M     g 7fr	   )iterdir)ra   r   childs      r   rb   *MultiplexedPath.iterdir.<locals>.<genexpr>Q   s     Nkd||~eE~Eks   %'rB   )keyc              3  *   #    U  H	  u  pUv   M     g 7fr	   r3   )ra   rB   locss      r   rb   rq   T   s     !@:4$s   )rg   operator
attrgetter	itertoolsgroupbysortedre   _follow)r   childrenby_namegroupss       r   ro   MultiplexedPath.iterdirP   sN    NdkkN%%f-""6(#@gN4<<!@!@AAr   c                    [        U  S35      eNz is not a filerI   r*   s    r   
read_bytesMultiplexedPath.read_bytesV       4& 788r   c                    [        U  S35      er   r   r   rJ   kwargss      r   	read_textMultiplexedPath.read_textY   r   r   c                    g)NTr3   r*   s    r   r_   MultiplexedPath.is_dir\   s    r   c                    g)NFr3   r*   s    r   rO   MultiplexedPath.is_file_   s    r   c                   >  [         TU ]  " U6 $ ! [        R                   a    U R                  S   R                  " U6 s $ f = frE   )rF   r"   r   TraversalErrorrg   )r   descendantsrL   s     r   r"   MultiplexedPath.joinpathb   sH    	97#[11!! 	9 ;;q>**K88	9s    0AAc                    [         R                  " US5      u  p#n [        U5      $ ! [         a&     U " U6 s $ ! [         a    [        U5      s s $ f = ff = f)z
Construct a MultiplexedPath if needed.

If children contains a sole element, return it.
Otherwise, return a MultiplexedPath of the items.
Unless one of the items is not a Directory, then return the first.
   )rw   teer   
ValueErrorri   next)clsr{   subdirsone_dirone_files        r   rz   MultiplexedPath._followj   s_     &/]]8Q%?"(	&=  	&&G}$% &H~%&	&s)   
' 
A9AAAAAc                    [        U  S35      er   r   r   s      r   openMultiplexedPath.open}   r   r   c                4    U R                   S   R                  $ rE   )rg   rB   r*   s    r   rB   MultiplexedPath.name   s    {{1~"""r   c                R    SR                  S U R                   5       5      nSU S3$ )Nz, c              3  .   #    U  H  nS U S 3v   M     g7f)'Nr3   r`   s     r   rb   +MultiplexedPath.__repr__.<locals>.<genexpr>   s     >+$AdV1++s   zMultiplexedPath())joinrg   )r   rj   s     r   __repr__MultiplexedPath.__repr__   s)    		>$++>>!%**r   )rg   )r.   r/   r0   r1   __doc__r   ro   r   r   r_   rO   r"   classmethodrz   r   propertyrB   r   r2   rW   rX   s   @r   rZ   rZ   @   sd    RB999 & &$9 # #+ +r   rZ   c                  b    \ rS rSrS r\S
S j5       r\SS j5       r\SS j5       r	S r
S rSrg	)NamespaceReader   c           	         S[        U5      ;  a  [        S5      e[        [        [        [        U R                  U5      5      6 U l        g )NNamespacePathzInvalid path)r!   r   rZ   filterboolre   _resolver   )r   namespace_paths     r   r   NamespaceReader.__init__   s8    #n"55^,,#VD#dmm^2T%UV	r   c                J    S U R                  U5       5       n[        US5      $ )a  
Given an item from a namespace path, resolve it to a Traversable.

path_str might be a directory on the filesystem or a path to a
zipfile plus the path within the zipfile, e.g. ``/foo/bar`` or
``/foo/baz.zip/inner_dir`` or ``foo\baz.zip\inner_dir\sub``.

path_str might also be a sentinel used by editable packages to
trigger other behaviors (see python/importlib_resources#311).
In that case, return None.
c              3  R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fr	   r^   )ra   cands     r   rb   +NamespaceReader._resolve.<locals>.<genexpr>   s     Q!?;;=!?s   '	'N)_candidate_pathsr   )r   path_strdirss      r   r   NamespaceReader._resolve   s'     R!5!5h!?QD$r   c              #  r   #    [         R                  " U5      v   U R                  U5       S h  vN   g  N7fr	   )r   r   _resolve_zip_path)r   r   s     r   r    NamespaceReader._candidate_paths   s(     ll8$$((222s   -757c              #    #    [        [        [        R                  " SU 5      5      5       H  n[        R
                  " [        [        [        [        5         XR                  5       S  R                  SS5      S-   n[        R                  " U S UR                  5        UR                  S5      5      v   S S S 5        M     g ! , (       d  f       M  = f7f)Nz[\\/]r8   r9   )reversedrd   refinditer
contextlibsuppressrI   IsADirectoryErrorri   PermissionErrorendr<   rU   r   startlstrip)r   matchinners      r   r   !NamespaceReader._resolve_zip_path   s     d2;;x#BCDE$$!!"	 !/77cBSHll8Oekkm#<ell3>OPP  E s   ACAC7C
C	Cc                J    [        U R                  R                  U5      5      $ r   r    r#   s     r   r%   NamespaceReader.resource_path   r'   r   c                    U R                   $ r	   r)   r*   s    r   r+   NamespaceReader.files   r-   r   r)   N)returnzabc.Traversable | None)r   r!   r   zIterator[abc.Traversable])r   r!   )r.   r/   r0   r1   r   r   r   r   staticmethodr   r%   r+   r2   r3   r   r   r   r      sP    W
     3 3 	Q 	Q1r   r   c                    [        U [        5      (       d  U $ [        R                  " S[        SS9  [
        R                  " U 5      $ )z_
Convert deprecated string arguments to traversables (pathlib.Path).

Remove with Python 3.15.
z<String arguments are deprecated. Pass a Traversable instead.r   )
stacklevel)
isinstancer!   warningswarnDeprecationWarningr   r   r)   s    r   rf   rf      s<     dC  MMF <<r   )
__future__r   r   r   rw   r   ru   r   r   rU   collections.abcr    r   
_itertoolsr   r   TraversableResourcesr   r5   TraversablerZ   r   rf   r3   r   r   <module>r      s}    "      	   $  9))  7(( 74F+coo F+R0c.. 0fr   