a
    xdQ                     @   s  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Zd dlZd dl	Z	d dl
mZmZmZ ddlmZmZ ddlmZ eejef ZeZdd Zed,ee edd	d
Zejee dddZejee ejdddZejeejdddZejdejdddZdd ZejdddZej d-e j!dddZ"dd Z#ee$dd d!Z%ejd"d# Z&e&ej'ej d$d Zej ej(d%d&d'Z)ej d(d) Z*d*d+ Z+dS ).    N)UnionOptionalcast   )ResourceReaderTraversable)	wrap_specc                    s(   t  t f fdd	}|S )a  
    Replace 'package' parameter as 'anchor' and warn about the change.

    Other errors should fall through.

    >>> files('a', 'b')
    Traceback (most recent call last):
    TypeError: files() takes from 0 to 1 positional arguments but 2 were given
    c                    sH   |ur2| ur | |S t jdtdd  |S | u r@  S  | S )Nz/First parameter to files is renamed to 'anchor'   )
stacklevel)warningswarnDeprecationWarning)anchorpackagefuncZ	undefined S/var/www/html/Ranjet/env/lib/python3.9/site-packages/importlib_resources/_common.pywrapper!   s    
z"package_to_anchor.<locals>.wrapper)object	functoolswraps)r   r   r   r   r   package_to_anchor   s    
r   )r   returnc                 C   s   t t| S )z3
    Get a Traversable resource for an anchor.
    )from_packageresolve)r   r   r   r   files3   s    r   )r   r   c                 C   s*   | j }t|jdd}|du r dS ||jS )z?
    Return the package's loader if it's a ResourceReader.
    get_resource_readerN)__spec__getattrloadernamer   specreaderr   r   r   r   ;   s
    	r   )candr   c                 C   s   t tj| S N)r   types
ModuleTyper%   r   r   r   r   K   s    r   c                 C   s
   t | S r&   )	importlibimport_moduler)   r   r   r   _P   s    r,   c                 C   s   t t jd S )N__name__)r   _infer_caller	f_globalsr)   r   r   r   r,   U   s    c                  C   s6   dd } dd }t | t }t ||}t|jS )zS
    Walk the stack and find the frame of the first caller not in this module.
    c                 S   s
   | j tkS r&   )filename__file__Z
frame_infor   r   r   is_this_file_   s    z#_infer_caller.<locals>.is_this_filec                 S   s
   | j dkS )Nr   )functionr2   r   r   r   
is_wrapperb   s    z!_infer_caller.<locals>.is_wrapper)	itertoolsfilterfalseinspectstacknextframe)r3   r5   Znot_this_filecallersr   r   r   r.   Z   s
    r.   )r   c                 C   s   t | }|j|j}| S )z=
    Return a Traversable object for the given package.

    )r   r    r   r!   r   r"   r   r   r   r   k   s    r    )
_os_removec                c   s   t j|d\}}z\zt||   W t| nt| 0 ~ t|V  W z|| W q tyj   Y q0 n"z|| W n ty   Y n0 0 d S N)suffix)tempfilemkstemposwriteclosepathlibPathFileNotFoundError)r$   r@   r>   fdraw_pathr   r   r   	_tempfileu   s    rK   c                 C   s   t | j| jdS r?   )rK   
read_bytesr!   pathr   r   r   
_temp_file   s    rO   )rN   r   c                 C   s6   t t |  W  d   S 1 s(0    Y  dS )a  
    Some Traversables implement ``is_dir()`` to raise an
    exception (i.e. ``FileNotFoundError``) when the
    directory doesn't exist. This function wraps that call
    to always return a boolean and only return True
    if there's a dir and it exists.
    NF)
contextlibsuppressrH   is_dirrM   r   r   r   _is_present_dir   s    &rS   c                 C   s   t | rt| S t| S )zu
    Given a Traversable object, return that object as a
    path on the local file system in a context manager.
    )rS   	_temp_dirrO   rM   r   r   r   as_file   s    rU   c                 c   s
   | V  dS )z7
    Degenerate behavior for pathlib.Path objects.
    Nr   rM   r   r   r   r,      s    )dirc                 c   s4   | }t |V  W d   n1 s&0    Y  dS )zD
    Wrap tempfile.TemporyDirectory to return a pathlib object.
    N)rF   rG   )rV   resultr   r   r   
_temp_path   s    rX   c                 c   sH   |   sJ tt }t|| V  W d   n1 s:0    Y  dS )zt
    Given a traversable dir, recursively replicate the whole tree
    to the file system in a context manager.
    N)rR   rX   rA   TemporaryDirectory_write_contents)rN   temp_dirr   r   r   rT      s    rT   c                 C   sH   |  |j}| r6|  | D ]}t|| q$n||  |S r&   )joinpathr!   rR   mkdiriterdirrZ   write_bytesrL   )targetsourcechilditemr   r   r   rZ      s    rZ   )N)r=   ),rC   rF   rA   r   rP   r'   r*   r8   r   r6   typingr   r   r   abcr   r   _compatr   r(   strPackageZAnchorr   r   r   singledispatchr   registerr,   r.   r   contextmanagerremoverK   rO   boolrS   rU   rG   rY   rX   rT   rZ   r   r   r   r   <module>   sV   
 



