
    @gj                    ,   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl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 G d dej$                        Zd Zy)    )annotationsN)Iterator   )abc)only)ZipPathc                R    t        t        j                  j                  |             S N)itercollectionsOrderedDictfromkeys)itemss    P/var/www/openai/venv/lib/python3.12/site-packages/importlib_resources/readers.pyremove_duplicatesr      s    ''00788    c                      e Zd Zd Zd Zd Zy)
FileReaderc                `    t        j                  |j                        j                  | _        y r
   )pathlibPathpathparent)selfloaders     r   __init__zFileReader.__init__   s    LL-44	r   c                J    t        | j                  j                  |            S z{
        Return the file system path to prevent
        `resources.path()` from creating a temporary
        copy.
        strr   joinpathr   resources     r   resource_pathzFileReader.resource_path        499%%h/00r   c                    | j                   S r
   r   r   s    r   fileszFileReader.files!       yyr   N)__name__
__module____qualname__r   r$   r)    r   r   r   r      s    51r   r   c                  0     e Zd Zd Z fdZd Zd Z xZS )	ZipReaderc                    |j                   j                  dd      | _         |j                  |      r-|j                  d      \  }}}| xj                   |dz   z  c_         |j                  | _        y )N\/.)prefixreplace
is_package
rpartitionarchive)r   r   module_names        r   r   zZipReader.__init__&   s[    mm++D#6V$**3/JAq$KK4#:%K~~r   c                v    	 t         |   |      S # t        $ r}t        |j                  d         d }~ww xY wNr   )superopen_resourceKeyErrorFileNotFoundErrorargs)r   r#   exc	__class__s      r   r@   zZipReader.open_resource-   s;    	17(22 	1#CHHQK00	1s    	838c                    | j                         j                  |      }|j                         xr |j                         S )zf
        Workaround for `zipfile.Path.is_file` returning true
        for non-existent paths.
        )r)   r!   is_fileexists)r   r   targets      r   is_resourcezZipReader.is_resource3   s2    
 &&t,~~3FMMO3r   c                B    t        | j                  | j                        S r
   )r   r9   r5   r(   s    r   r)   zZipReader.files;   s    t||T[[11r   )r+   r,   r-   r   r@   rJ   r)   __classcell__rE   s   @r   r0   r0   %   s    &142r   r0   c                  r     e Zd ZdZd Zd Zd Zd Zd Zd Z	 fdZ
ed	        Zd
 Zed        Zd Z xZS )MultiplexedPathz
    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                    t        t        t        t        |                  | _        | j                  sd}t        |      t        d | j                  D              st        d      y )Nz.MultiplexedPath must contain at least one pathc              3  <   K   | ]  }|j                           y wr
   is_dir.0r   s     r   	<genexpr>z+MultiplexedPath.__init__.<locals>.<genexpr>L   s     9[T4;;=[s   z)MultiplexedPath only supports directories)listmap_ensure_traversabler   _pathsrB   allNotADirectoryError)r   pathsmessages      r   r   zMultiplexedPath.__init__G   sV    324Ee4LMN{{FG#G,,9T[[99$%PQQ :r   c                    d | j                   D        }t        j                  d      }t        j                  t        ||      |      }t        | j                  d |D              S )Nc              3  J   K   | ]  }|j                         D ]  }|   y wr
   )iterdir)rU   r   childs      r   rV   z*MultiplexedPath.iterdir.<locals>.<genexpr>P   s     Nkdt||~eE~Eks   !#r<   )keyc              3  &   K   | ]	  \  }}|  y wr
   r.   )rU   r<   locss      r   rV   z*MultiplexedPath.iterdir.<locals>.<genexpr>S   s     !@:4$s   )rZ   operator
attrgetter	itertoolsgroupbysortedrX   _follow)r   childrenby_namegroupss       r   ra   zMultiplexedPath.iterdirO   sP    NdkkN%%f-""6(#@gN4<<!@!@AAr   c                    t        |  d      Nz is not a filerB   r(   s    r   
read_byteszMultiplexedPath.read_bytesU       4& 788r   c                    t        |  d      rp   rq   r   rC   kwargss      r   	read_textzMultiplexedPath.read_textX   rs   r   c                     y)NTr.   r(   s    r   rS   zMultiplexedPath.is_dir[   s    r   c                     y)NFr.   r(   s    r   rG   zMultiplexedPath.is_file^   s    r   c                    	 t        |   | S # t        j                  $ r  | j                  d   j                  | cY S w xY wr>   )r?   r!   r   TraversalErrorrZ   )r   descendantsrE   s     r   r!   zMultiplexedPath.joinpatha   sJ    	97#[11!! 	9 +4;;q>**K88	9s    /A Ac                    t        j                  |d      \  }}}	 t        |      S # t        $ r% 	  | | cY S # t        $ r t        |      cY cY S w xY ww xY w)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.
           )rh   teer   
ValueErrorr\   next)clsrl   subdirsone_dirone_files        r   rk   zMultiplexedPath._followi   sa     &/]]8Q%?"(	&=  	&&G}$% &H~%&	&s)   
' 	A8AAAAAc                    t        |  d      rp   rq   ru   s      r   openzMultiplexedPath.open|   rs   r   c                4    | j                   d   j                  S r>   )rZ   r<   r(   s    r   r<   zMultiplexedPath.name   s    {{1~"""r   c                R    dj                  d | j                  D              }d| dS )Nz, c              3  (   K   | ]
  }d | d   yw)'Nr.   rT   s     r   rV   z+MultiplexedPath.__repr__.<locals>.<genexpr>   s     >+$AdV1++s   zMultiplexedPath())joinrZ   )r   r]   s     r   __repr__zMultiplexedPath.__repr__   s)    		>$++>>!%**r   )r+   r,   r-   __doc__r   ra   rr   rw   rS   rG   r!   classmethodrk   r   propertyr<   r   rL   rM   s   @r   rO   rO   ?   s_    RB999 & &$9 # #+r   rO   c                  T    e Zd Zd Zedd       Zed	d       Zed
d       Zd Z	d Z
y)NamespaceReaderc           	         dt        |      vrt        d      t        t        t        t        | j                  |             | _        y )NNamespacePathzInvalid path)r    r   rO   filterboolrX   _resolver   )r   namespace_paths     r   r   zNamespaceReader.__init__   s8    #n"55^,,#VD#dmm^2T%UV	r   c                J    d | j                  |      D        }t        |d      S )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  B   K   | ]  }|j                         s|  y wr
   rR   )rU   cands     r   rV   z+NamespaceReader._resolve.<locals>.<genexpr>   s     Q!?4;;=!?s   N)_candidate_pathsr   )r   path_strdirss      r   r   zNamespaceReader._resolve   s'     R!5!5h!?QD$r   c              #  p   K   t        j                  |       | j                  |      E d {    y 7 wr
   )r   r   _resolve_zip_path)r   r   s     r   r   z NamespaceReader._candidate_paths   s)     ll8$$((222s   ,646c              #    K   t        t        t        j                  d|                   D ]  }t	        j
                  t        t        t        t              5  | |j                         d  j                  dd      dz   }t        | d |j                          |j                  d             d d d         y # 1 sw Y   xY ww)Nz[\\/]r2   r3   )reversedrW   refinditer
contextlibsuppressrB   IsADirectoryErrorr\   PermissionErrorendr6   r   startlstrip)r   matchinners      r   r   z!NamespaceReader._resolve_zip_path   s     d2;;x#BCDE$$!!"	 !/77cBSHh7c9JKK  E s   ACAB6+C6B?	;Cc                J    t        | j                  j                  |            S r   r   r"   s     r   r$   zNamespaceReader.resource_path   r%   r   c                    | j                   S r
   r'   r(   s    r   r)   zNamespaceReader.files   r*   r   N)returnzabc.Traversable | None)r   r    r   zIterator[abc.Traversable])r   r    )r+   r,   r-   r   r   r   r   staticmethodr   r$   r)   r.   r   r   r   r      sP    W
     3 3 	L 	L1r   r   c                    t        | t              s| S t        j                  dt        d       t        j                  |       S )zk
    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   rY   rY      s9     dC MMF <<r   )
__future__r   r   r   rh   rf   r   r   r   collections.abcr    r   
_itertoolsr   compat.py39r   r   TraversableResourcesr   r0   TraversablerO   r   rY   r.   r   r   <module>r      s}    "      	  $    9))  2(( 24F+coo F+R0c.. 0fr   