o
    ta                     @   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mZm	Z	m
Z
 ddlmZmZ ddlmZ eejef Zdd Zdd	 Zd
d Zdd Zdd Zdd ZejdddZejdd Zeejejdd ZdS )    N)UnionAnyOptional   )ResourceReaderTraversable)	wrap_specc                 C   s   t t| S )z3
    Get a Traversable resource from a package
    )from_packageget_package)package r   ,/root/Python-3.10.2/Lib/importlib/_common.pyfiles   s   r   c                 C   s.   t | }tj|\}}|rt| d|S )zNormalize a path by ensuring it is a string.

    If the resulting string contains path separators, an exception is raised.
    z must be only a file name)strospathsplit
ValueError)r   Zstr_pathparent	file_namer   r   r   normalize_path   s
   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   c                 C   s   t | tjr| S t| S )N)
isinstancetypes
ModuleType	importlibimport_module)Zcandr   r   r   resolve7   s   r$   c                 C   s(   t | }t|jdu rt| d|S )zTake a package name or module object and return the module.

    Raise an exception if the resolved module is not a package.
    Nz is not a package)r$   r   submodule_search_locations	TypeError)r   Zresolvedr   r   r   r
   <   s   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	   H   s   r	    c                 c   s    t j|d\}}z't||   t| ~ t|V  W zt| W d S  ty0   Y d S w zt| W w  tyA   Y w w )Nsuffix)	tempfilemkstempr   writeclosepathlibPathremoveFileNotFoundError)r   r)   fdZraw_pathr   r   r   	_tempfileR   s"   
r3   c                 C   s   t | j| jdS )zu
    Given a Traversable object, return that object as a
    path on the local file system in a context manager.
    r(   )r3   Z
read_bytesr   r   r   r   r   as_filed   s   r5   c                 c   s    | V  dS )z7
    Degenerate behavior for pathlib.Path objects.
    Nr   r4   r   r   r   _m   s   
r6   )r'   ) r   r.   r*   	functools
contextlibr    r"   typingr   r   r   abcr   r   Z	_adaptersr   r!   r   Packager   r   r   r$   r
   r	   contextmanagerr3   singledispatchr5   registerr/   r6   r   r   r   r   <module>   s0    


