o
    eC+                     @   s   d Z ddlZddlZejd dkZerefZdZn	efZddl	mZ i Z
dae Zdd Zdd	 Zd
d Zdd Zdd ZG dd dZG dd dZG dd dZdd ZdS )zThis module implements a post import hook mechanism styled after what is
described in PEP-369. Note that it doesn't cope with modules being reloaded.

    N   )	find_specFc                        fdd}|S )Nc                    sF     d\}}| d}t| tj| }|D ]}t||}q|| S )N:.)split
__import__sysmodulesgetattr)modulemodule_namefunctionattrscallbackattrname >D:\Projects\ConvertPro\env\Lib\site-packages\wrapt/importer.pyimport_hook$   s   

z4_create_import_hook_from_string.<locals>.import_hookr   )r   r   r   r   r   _create_import_hook_from_string#   s   r   c                 C   s   t | tr	t| } t( tsdatjdt  tj	
|d }|d u r,t|g |  W d    n1 s6w   Y  |d urE| | d S d S )NTr   )
isinstancestring_typesr   _post_import_hooks_lock_post_import_hooks_initr	   	meta_pathinsertImportHookFinderr
   get_post_import_hooks
setdefaultappend)hookr   r   r   r   r   register_post_import_hook.   s   
r$   c                    r   )Nc                    s4   t  j tj j } jD ]}t||}q|| S N)r   r   r	   r
   r   r   )r   r   r   
entrypointr   r   r   R   s
   

z8_create_import_hook_from_entrypoint.<locals>.import_hookr   )r'   r   r   r&   r   #_create_import_hook_from_entrypointQ   s   r(   c                 C   sL   zdd l }W n
 ty   Y d S w |j| dD ]}t|}t||j qd S )Nr   )group)pkg_resourcesImportErroriter_entry_pointsr(   r$   r   )r)   r*   r'   r   r   r   r   discover_post_import_hooksZ   s   r-   c                 C   sR   t | dd }t t|d}W d    n1 sw   Y  |D ]}||  q d S )N__name__r   )r   r   r    pop)r   r   hooksr#   r   r   r   notify_module_loadedi   s   
r1   c                   @   s   e Zd Zdd ZdS )_ImportHookLoaderc                 C   s   t j| }t| |S r%   )r	   r
   r1   selffullnamer   r   r   r   load_module}   s   
z_ImportHookLoader.load_moduleN)r.   
__module____qualname__r6   r   r   r   r   r2   {   s    r2   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_ImportHookChainedLoaderc                 C   sD   || _ t|dr| j| _t|dr| j| _t|dr | j| _d S d S )Nr6   create_moduleexec_module)loaderhasattr_load_moduler6   _create_moduler:   _exec_moduler;   )r4   r<   r   r   r   __init__   s   


z!_ImportHookChainedLoader.__init__c                 C   sz   G dd d}t |d|d | fv r!z| j|_W n	 ty    Y nw t |dd d ur9t |jdd | u r;| j|j_d S d S d S )Nc                   @   s   e Zd ZdS )z7_ImportHookChainedLoader._set_loader.<locals>.UNDEFINEDN)r.   r7   r8   r   r   r   r   	UNDEFINED   s    rB   
__loader____spec__r<   )r   r<   rC   AttributeErrorrD   )r4   r   rB   r   r   r   _set_loader   s   z$_ImportHookChainedLoader._set_loaderc                 C   s"   | j |}| | t| |S r%   )r<   r6   rF   r1   r3   r   r   r   r>      s   
z%_ImportHookChainedLoader._load_modulec                 C   s   | j |S r%   )r<   r:   )r4   specr   r   r   r?      s   z'_ImportHookChainedLoader._create_modulec                 C   s"   |  | | j| t| d S r%   )rF   r<   r;   r1   )r4   r   r   r   r   r@      s   
z%_ImportHookChainedLoader._exec_moduleN)r.   r7   r8   rA   rF   r>   r?   r@   r   r   r   r   r9      s    

r9   c                   @   s(   e Zd Zdd ZdddZd	ddZdS )
r   c                 C   s
   i | _ d S r%   )in_progress)r4   r   r   r   rA      s   
zImportHookFinder.__init__Nc                 C   s   t  |tvr	 W d    d S W d    n1 sw   Y  || jv r&d S d| j|< z4ts:t| t W | j|= S tt|dd }|rRt|tsYt|W | j|= S W | j|= d S W | j|= d S | j|= w NTr<   )	r   r    rH   r   r   r2   r   r   r9   )r4   r5   pathr<   r   r   r   find_module   s,   

	

zImportHookFinder.find_modulec                 C   s   t  |tvr	 W d    d S W d    n1 sw   Y  || jv r&d S d| j|< zt|}t|dd }|rBt|tsBt||_|W | j|= S | j|= w rI   )r   r    rH   r   r   r   r9   r<   )r4   r5   rJ   targetrG   r<   r   r   r   r      s    	


zImportHookFinder.find_specr%   )NN)r.   r7   r8   rA   rK   r   r   r   r   r   r      s    
6r   c                    r   )Nc                    s   t |   | S r%   )r$   )r#   r   r   r   register"  s   
zwhen_imported.<locals>.registerr   )r   rM   r   r   r   when_imported!  s   rN   )__doc__r	   	threadingversion_infoPY2
basestringr   r   strimportlib.utilr    r   RLockr   r   r$   r(   r-   r1   r2   r9   r   rN   r   r   r   r   <module>   s*    	#	6h