a
    !f*                     @   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d
d Zdd Zdd Zdd ZG dd dZG dd de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   )ObjectProxyFc                    s    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 O/var/www/html/python-backend/venv/lib/python3.9/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P ts0datjdt  tj	
|d }|d u rXt|g |  W d    n1 sl0    Y  |d ur| | 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_hook0   s    
0r%   c                    s    fdd}|S )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   T   s
    

z8_create_import_hook_from_entrypoint.<locals>.import_hookr   )r(   r   r   r'   r   #_create_import_hook_from_entrypointS   s    r)   c                 C   sL   zdd l }W n ty    Y d S 0 |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_hooks\   s    r.   c                 C   sR   t | dd }t t|d}W d    n1 s20    Y  |D ]}||  q@d S )N__name__r   )r   r   r!   pop)r   r   hooksr$   r   r   r   notify_module_loadedk   s
    *r2   c                   @   s   e Zd Zdd ZdS )_ImportHookLoaderc                 C   s   t j| }t| |S r&   )r
   r   r2   selffullnamer   r   r   r   load_module   s    
z_ImportHookLoader.load_moduleN)r/   
__module____qualname__r7   r   r   r   r   r3   }   s   r3   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )_ImportHookChainedLoaderc                    s\   t t| | t|dr(| d| j t|dr@| d| j t|drX| d| j d S )Nr7   create_moduleexec_module)superr:   __init__hasattrZ__self_setattr___self_load_module_self_create_module_self_exec_module)r5   loader	__class__r   r   r>      s    


z!_ImportHookChainedLoader.__init__c                 C   sr   G dd d}t |d|d | fv rBz| j|_W n ty@   Y n0 t |dd d urnt |jdd | u rn| j|j_d S )Nc                   @   s   e Zd ZdS )z<_ImportHookChainedLoader._self_set_loader.<locals>.UNDEFINEDN)r/   r8   r9   r   r   r   r   	UNDEFINED       rF   
__loader____spec__rC   )r   __wrapped__rH   AttributeErrorrI   rC   )r5   r   rF   r   r   r   _self_set_loader   s    z)_ImportHookChainedLoader._self_set_loaderc                 C   s"   | j |}| | t| |S r&   )rJ   r7   rL   r2   r4   r   r   r   r@      s    
z*_ImportHookChainedLoader._self_load_modulec                 C   s   | j |S r&   )rJ   r;   )r5   specr   r   r   rA      s    z,_ImportHookChainedLoader._self_create_modulec                 C   s"   |  | | j| t| d S r&   )rL   rJ   r<   r2   )r5   r   r   r   r   rB      s    
z*_ImportHookChainedLoader._self_exec_module)	r/   r8   r9   r>   rL   r@   rA   rB   __classcell__r   r   rD   r   r:      s
   

r:   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)r5   r   r   r   r>      s    zImportHookFinder.__init__Nc                 C   s   t ( |tvrW d    d S W d    n1 s20    Y  || jv rJd S d| j|< zXtsrt| t W | j|= S tt|dd }|rt|tst|W | j|= S W | j|= n
| j|= 0 d S NTrC   )	r   r!   rO   r   r	   r3   r   r   r:   )r5   r6   pathrC   r   r   r   find_module   s$    .	

	zImportHookFinder.find_modulec                 C   s   t ( |tvrW d    d S W d    n1 s20    Y  || jv rJd S d| j|< z:t|}t|dd }|rt|tst||_|W | j|= S | j|= 0 d S rP   )r   r!   rO   r   r   r   r:   rC   )r5   r6   rQ   targetrM   rC   r   r   r   r      s    	.	


zImportHookFinder.find_spec)N)NN)r/   r8   r9   r>   rR   r   r   r   r   r   r      s   
6r   c                    s    fdd}|S )Nc                    s   t |   | S r&   )r%   )r$   r   r   r   register$  s    
zwhen_imported.<locals>.registerr   )r   rT   r   r   r   when_imported#  s    rU   )__doc__r
   	threadingversion_infoPY2
basestringr   r   strimportlib.utilZ	__wrapt__r   r!   r   RLockr   r   r%   r)   r.   r2   r3   r:   r   rU   r   r   r   r   <module>   s*   	#	6h