o
    éT•j–  ã                   @   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 )z€Normalize 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 )z�Take 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    
ý

