B
    |b&                 @   s   d Z ddlZddlZejd dkZer2efZdZnefZddl	mZ ddl
mZ i Zdae Zdd	 Zeed
d Zdd Zdd Zee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_spec   )synchronizedFc                s    fdd}|S )Nc                sJ     d\}}| d}t| tj| }x|D ]}t||}q0W || S )N:.)split
__import__sysmodulesgetattr)modulemodule_namefunctionattrscallbackattr)name Q/home/ankuromar296_gmail_com/.local/lib/python3.7/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s*datjdt  t	|d }|d krrtj
	|d }|d k	rfg t|< | | q| gt|< n*|g krtj
| }| | nt| |  d S )NTr   )
isinstancestring_typesr   _post_import_hooks_initr
   	meta_pathinsertImportHookFinder_post_import_hooksgetr   append)hookr   hooksr   r   r   r   register_post_import_hook0   s     



r#   c                s    fdd}|S )Nc                s8   t  j tj j }x jD ]}t||}qW || S )N)r	   r   r
   r   r   r   )r   r   r   )
entrypointr   r   r   h   s
    
z8_create_import_hook_from_entrypoint.<locals>.import_hookr   )r$   r   r   )r$   r   #_create_import_hook_from_entrypointg   s    r%   c             C   sP   ydd l }W n tk
r    d S X x(|j| dD ]}t|}t||j q0W d S )Nr   )group)pkg_resourcesImportErroriter_entry_pointsr%   r#   r   )r&   r'   r$   r   r   r   r   discover_post_import_hooksp   s    r*   c             C   s>   t | dd }t|d }|r:g t|< x|D ]}||  q*W d S )N__name__)r   r   r   )r   r   r"   r!   r   r   r   notify_module_loaded   s    
r,   c               @   s   e Zd Zdd ZdS )_ImportHookLoaderc             C   s   t j| }t| |S )N)r
   r   r,   )selffullnamer   r   r   r   load_module   s    
z_ImportHookLoader.load_moduleN)r+   
__module____qualname__r0   r   r   r   r   r-      s   r-   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_ImportHookChainedLoaderc             C   s@   || _ t|dr| j| _t|dr*| j| _t|dr<| j| _d S )Nr0   create_moduleexec_module)loaderhasattr_load_moduler0   _create_moduler4   _exec_moduler5   )r.   r6   r   r   r   __init__   s    


z!_ImportHookChainedLoader.__init__c             C   s   | j |}t| |S )N)r6   r0   r,   )r.   r/   r   r   r   r   r8      s    z%_ImportHookChainedLoader._load_modulec             C   s   | j |S )N)r6   r4   )r.   specr   r   r   r9      s    z'_ImportHookChainedLoader._create_modulec             C   s   | j | t| d S )N)r6   r5   r,   )r.   r   r   r   r   r:      s    z%_ImportHookChainedLoader._exec_moduleN)r+   r1   r2   r;   r8   r9   r:   r   r   r   r   r3      s   
	r3   c               @   s0   e Zd Zdd ZeedddZd	ddZdS )
r   c             C   s
   i | _ d S )N)in_progress)r.   r   r   r   r;      s    zImportHookFinder.__init__Nc             C   sp   |t krd S || jkrd S d| j|< z<ts8t| t S tt|dd }|r^t|ts^t|S W d | j|= X d S )NTr6   )r   r=   r   r	   r-   r   r   r3   )r.   r/   pathr6   r   r   r   find_module   s    	

	zImportHookFinder.find_modulec             C   sd   |t krd S || jkrd S d| j|< z0t|}t|dd }|rRt|tsRt||_|S | j|= X d S )NTr6   )r   r=   r   r   r   r3   r6   )r.   r/   r>   targetr<   r6   r   r   r   r      s    		


zImportHookFinder.find_spec)N)NN)r+   r1   r2   r;   r   _post_import_hooks_lockr?   r   r   r   r   r   r      s   5r   c                s    fdd}|S )Nc                s   t |   | S )N)r#   )r!   )r   r   r   register  s    
zwhen_imported.<locals>.registerr   )r   rB   r   )r   r   when_imported  s    rC   )__doc__r
   	threadingversion_infoPY2
basestringr   r   strZimportlib.utilZ
decoratorsr   r   r   RLockrA   r   r#   r%   r*   r,   r-   r3   r   rC   r   r   r   r   <module>   s*   	7	g