o
    i e&                     @   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 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                        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 =/var/www/myenv/lib/python3.10/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 u r;tj
	|d }|d ur4g t|< | | d S | gt|< d S |g krJtj
| }| | d S 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                    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   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   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_hooksp   s   r.   c                 C   s>   t | dd }t|d }|rg t|< |D ]}||  qd S d S )N__name__)r   r    r!   )r   r   r$   r#   r   r   r   notify_module_loaded   s   
r0   c                   @   s   e Zd Zdd ZdS )_ImportHookLoaderc                 C   s   t j| }t| |S r&   )r   r   r0   selffullnamer   r   r   r   load_module   s   
z_ImportHookLoader.load_moduleN)r/   
__module____qualname__r5   r   r   r   r   r1      s    r1   c                   @   s,   e Z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 )Nr5   create_moduleexec_module)loaderhasattr_load_moduler5   _create_moduler9   _exec_moduler:   )r3   r;   r   r   r   __init__   s   


z!_ImportHookChainedLoader.__init__c                 C   s   | j |}t| |S r&   )r;   r5   r0   r2   r   r   r   r=      s   z%_ImportHookChainedLoader._load_modulec                 C   s   | j |S r&   )r;   r9   )r3   specr   r   r   r>      s   z'_ImportHookChainedLoader._create_modulec                 C   s   | j | t| d S r&   )r;   r:   r0   )r3   r   r   r   r   r?      s   z%_ImportHookChainedLoader._exec_moduleN)r/   r6   r7   r@   r=   r>   r?   r   r   r   r   r8      s
    
	r8   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 r&   )in_progress)r3   r   r   r   r@      s   
zImportHookFinder.__init__Nc                 C   s   |t vrd S || jv rd S d| j|< z4ts!t| t W | j|= S tt|dd }|r9t|ts@t|W | j|= S W | j|= d S W | j|= d S | j|= w NTr;   )r    rB   r   r
   r1   r   r   r8   )r3   r4   pathr;   r   r   r   find_module   s$   
	
	

zImportHookFinder.find_modulec                 C   sj   |t vrd S || jv rd S d| j|< zt|}t|dd }|r)t|ts)t||_|W | j|= S | j|= w rC   )r    rB   r   r   r   r8   r;   )r3   r4   rD   targetrA   r;   r   r   r   r      s   	
	

zImportHookFinder.find_specr&   )NN)r/   r6   r7   r@   r   _post_import_hooks_lockrE   r   r   r   r   r   r      s
    5r   c                    r   )Nc                    s   t |   | S r&   )r%   )r#   r   r   r   register  s   
zwhen_imported.<locals>.registerr   )r   rH   r   r   r   when_imported  s   rI   )__doc__r   	threadingversion_infoPY2
basestringr   r   strimportlib.util
decoratorsr   r    r   RLockrG   r   r%   r)   r.   r0   r1   r8   r   rI   r   r   r   r   <module>   s0    	
6	
g