B
    2*\c-                 @   s(  d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ ddlmZ ddlZddlZddlZddlZddlZdd Zdd Zd#ddZd$ddZedd Zdd Zdd Zdd ZG dd  d ejZG d!d" d"ejZ dS )%   )abc)module_from_spec)_resolve_name)spec_from_loader)
_find_spec)MAGIC_NUMBER)_RAW_MAGIC_NUMBER)cache_from_source)decode_source)source_from_cache)spec_from_file_location    )contextmanagerNc             C   s   t t| S )N)_impsource_hashr   )source_bytes r   9C:\ALexclude\prg\programme\Python37\Lib\importlib\util.pyr      s    r   c             C   s^   |  ds| S |s&tdt|  dd}x| D ]}|dkr>P |d7 }q0W t| |d  ||S )N.zno package specified for z% (required for relative module names)r   r   )
startswith
ValueErrorreprr   )namepackagelevel	characterr   r   r   resolve_name   s    

r   c             C   sx   | t jkrt| |S t j|  }|d kr*d S y
|j}W n$ tk
rX   td| d Y nX |d krptd| |S d S )Nz{}.__spec__ is not setz{}.__spec__ is None)sysmodulesr   __spec__AttributeErrorr   format)r   pathmodulespecr   r   r   _find_spec_from_path*   s    



r%   c       	   
   C   s   |  drt| |n| }|tjkr|dd }|rt|dgd}y
|j}W q tk
r } ztd|d||d|W d d }~X Y qX nd }t	||S tj| }|d krd S y
|j
}W n$ tk
r   td| d Y nX |d krtd	| |S d S )
Nr   r   __path__)fromlistz __path__ attribute not found on z while trying to find )r   z{}.__spec__ is not setz{}.__spec__ is None)r   r   r   r   
rpartition
__import__r&   r    ModuleNotFoundErrorr   r   r   r!   )	r   r   fullnameparent_nameparentparent_pather#   r$   r   r   r   	find_specI   s.    




r0   c             c   s   | t jk}t j| }|s6tt | }d|_|t j| < zJy
|V  W n: tk
r|   |sxyt j| = W n tk
rv   Y nX Y nX W d d|_X d S )NTF)r   r   gettype__initializing__	ExceptionKeyError)r   	is_reloadr#   r   r   r   _module_to_loadv   s    


r7   c                s   t   fdd}|S )Nc                 sR   t jdtdd  | |}t|dd d krN|j|_t|dsN|jdd |_|S )Nz7The import system now takes care of this automatically.   )
stacklevel__package__r&   r   r   )warningswarnDeprecationWarninggetattr__name__r:   hasattrr(   )argskwargsr#   )fxnr   r   set_package_wrapper   s    


z(set_package.<locals>.set_package_wrapper)	functoolswraps)rC   rD   r   )rC   r   set_package   s    
rG   c                s   t   fdd}|S )Nc                s:   t jdtdd  | f||}t|dd d kr6| |_|S )Nz7The import system now takes care of this automatically.r8   )r9   
__loader__)r;   r<   r=   r>   rH   )selfrA   rB   r#   )rC   r   r   set_loader_wrapper   s    
z&set_loader.<locals>.set_loader_wrapper)rE   rF   )rC   rJ   r   )rC   r   
set_loader   s    rK   c                s*   t jdtdd t  fdd}|S )Nz7The import system now takes care of this automatically.r8   )r9   c          
      sp   t |^}| |_y| |}W n ttfk
r6   Y nX |rD||_n|dd |_ | |f||S Q R X d S )Nr   r   )r7   rH   
is_packageImportErrorr    r:   r(   )rI   r+   rA   rB   r#   rL   )rC   r   r   module_for_loader_wrapper   s    
z4module_for_loader.<locals>.module_for_loader_wrapper)r;   r<   r=   rE   rF   )rC   rN   r   )rC   r   module_for_loader   s    
rO   c               @   s   e Zd Zdd Zdd ZdS )_LazyModulec       	      C   s   t j| _| jj}| jjd }| jjd }| j}i }xF| D ]:\}}||krV|||< q<t|| t|| kr<|||< q<W | jj	
|  |tjkrt| ttj| krtd|d| j| t| |S )N__dict__	__class__zmodule object for z. substituted in sys.modules during a lazy load)types
ModuleTyperR   r   r   loader_staterQ   itemsidloaderexec_moduler   r   r   updater>   )	rI   attroriginal_name
attrs_thenoriginal_type	attrs_nowattrs_updatedkeyvaluer   r   r   __getattribute__   s"    

z_LazyModule.__getattribute__c             C   s   |  | t| | d S )N)rc   delattr)rI   r[   r   r   r   __delattr__  s    
z_LazyModule.__delattr__N)r?   
__module____qualname__rc   re   r   r   r   r   rP      s   #rP   c               @   s<   e Zd Zedd Zedd Zdd Zdd Zd	d
 Z	dS )
LazyLoaderc             C   s   t | dstdd S )NrY   z loader must define exec_module())r@   	TypeError)rX   r   r   r   __check_eager_loader  s    
zLazyLoader.__check_eager_loaderc                s       fddS )Nc                 s    | |S )Nr   )rA   rB   )clsrX   r   r   <lambda>      z$LazyLoader.factory.<locals>.<lambda>)_LazyLoader__check_eager_loader)rk   rX   r   )rk   rX   r   factory  s    
zLazyLoader.factoryc             C   s   |  | || _d S )N)rn   rX   )rI   rX   r   r   r   __init__  s    
zLazyLoader.__init__c             C   s   | j |S )N)rX   create_module)rI   r$   r   r   r   rq     s    zLazyLoader.create_modulec             C   s@   | j |j_ | j |_i }|j |d< |j|d< ||j_t|_d S )NrQ   rR   )rX   r   rH   rQ   copyrR   rU   rP   )rI   r#   rU   r   r   r   rY      s    

zLazyLoader.exec_moduleN)
r?   rf   rg   staticmethodrn   classmethodro   rp   rq   rY   r   r   r   r   rh   
  s
   rh   )N)N)! r   
_bootstrapr   r   r   r   _bootstrap_externalr   r   r	   r
   r   r   
contextlibr   r   rE   r   rS   r;   r   r   r%   r0   r7   rG   rK   rO   rT   rP   Loaderrh   r   r   r   r   <module>   s4   

-'/