o
    f                     @   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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   (/usr/lib/python3.10/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   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)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   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	    )
_os_removec                c   s    t j|d\}}z&t||   t| ~ t|V  W z|| W d S  ty/   Y d S w z|| W w  ty?   Y w w )Nsuffix)tempfilemkstempr   writeclosepathlibPathFileNotFoundError)r   r-   r+   fdraw_pathr   r   r   	_tempfileR   s"   
r7   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,   )r7   
read_bytesr   r   r   r   r   as_fileg   s   r:   c                 c   s    | V  dS )z7
    Degenerate behavior for pathlib.Path objects.
    Nr   r9   r   r   r   _p   s   
r;   )r*   )!r   r2   r.   	functools
contextlibr!   r#   typingr   r   r   abcr   r   	_adaptersr   r"   r   Packager   r   r   r&   r
   r	   contextmanagerremover7   singledispatchr:   registerr3   r;   r   r   r   r   <module>   s4    


