o
    3Ih                     @   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 eejef ZeZdd Zed+dee defd	d
Zdejdee fddZejdee dejfddZejdedejfddZejdddejfddZdd ZdejfddZe j	d,ejdddZ dd Z!dede"fdd Z#ejd!d" Z$e$ej%e jd#d Ze jd$ej&fd%d&Z'e jd'd( Z(d)d* Z)dS )-    N)OptionalUnioncast   )ResourceReaderTraversablec                    s(   t  t f fdd	}|S )a1  
    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

    Remove this compatibility in Python 3.14.
    c                    sH   |ur| 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func	undefined [/home/air/sanwanet/gpt-api/venv/lib/python3.10/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   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   candc                 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                     s>    f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   | j  d j kS )Nr   )filename
frame_infostackr   r   is_this_file_      z#_infer_caller.<locals>.is_this_filec                 S   s
   | j dkS )Nr   )functionr0   r   r   r   
is_wrapperb   s   
z!_infer_caller.<locals>.is_wrapper)inspectr3   	itertoolsfilterfalsenextframe)r4   r7   not_this_filecallersr   r2   r   r-   Z   s   
r-   c                 C   s*   ddl m} || }|j|j}| S )z=
    Return a Traversable object for the given package.

    r   )	wrap_spec)future.adaptersr?   r    r   r!   r   )r   r?   r"   r#   r   r   r   r   l   s   r    )
_os_removec                c   s    t j|d\}}z/zt||   W t| nt| w ~ t|V  W z|| W d S  ty8   Y d S w z|| W w  tyH   Y w w N)suffix)tempfilemkstemposwriteclosepathlibPathFileNotFoundError)r#   rD   rB   fdraw_pathr   r   r   	_tempfiley   s$   rO   c                 C   s   t | j| jdS rC   )rO   
read_bytesr!   pathr   r   r   
_temp_file   r5   rS   rR   c                 C   s6   t t |  W  d   S 1 sw   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suppressrL   is_dirrQ   r   r   r   _is_present_dir   s    rW   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.
    )rW   	_temp_dirrS   rQ   r   r   r   as_file   s   rY   c                 c   s    | V  dS )z7
    Degenerate behavior for pathlib.Path objects.
    Nr   rQ   r   r   r   r+      s   
dirc                 c   s8    | }t |V  W d   dS 1 sw   Y  dS )zF
    Wrap tempfile.TemporaryDirectory to return a pathlib object.
    N)rJ   rK   )rZ   resultr   r   r   
_temp_path   s   "r\   c                 c   sL    |   sJ tt }t|| V  W d   dS 1 sw   Y  dS )zt
    Given a traversable dir, recursively replicate the whole tree
    to the file system in a context manager.
    N)rV   r\   rE   TemporaryDirectory_write_contents)rR   temp_dirr   r   r   rX      s
   "rX   c                 C   sJ   |  |j}| r|  | D ]}t|| q|S ||  |S r%   )joinpathr!   rV   mkdiriterdirr^   write_bytesrP   )targetsourcechilditemr   r   r   r^      s   r^   r%   )rA   )*rT   r   r)   r8   r9   rG   rJ   rE   r&   r
   typingr   r   r   abcr   r   r'   strPackageAnchorr   r   r   singledispatchr   registerr+   r-   r   contextmanagerremoverO   rS   boolrW   rY   rK   r]   r\   rX   r^   r   r   r   r   <module>   sV     



