B
    u9a.                 @   s   d dl Z d dlZd dlZd dlZd dlmZmZ ddgZG dd de	Z
G dd de	Zdd	d
Zd ddZefddZG dd deZd!ddZd"ddZefddZdd Zd#ddZedk ree jdk  rede jd ne jd = ee jd   dS )$    N)	read_codeget_importer
run_modulerun_pathc               @   s$   e Zd Zdd Zdd Zdd ZdS )_TempModulec             C   s   || _ t|| _g | _d S )N)mod_nametypes
ModuleTypemodule_saved_module)selfr    r   /usr/lib/python3.7/runpy.py__init__   s    z_TempModule.__init__c             C   sB   | j }y| jtj|  W n tk
r0   Y nX | jtj|< | S )N)r   r   appendsysmodulesKeyErrorr
   )r   r   r   r   r   	__enter__   s    z_TempModule.__enter__c             G   s.   | j r| j d tj| j< n
tj| j= g | _ d S )Nr   )r   r   r   r   )r   argsr   r   r   __exit__'   s    
z_TempModule.__exit__N)__name__
__module____qualname__r   r   r   r   r   r   r   r      s   	r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )_ModifiedArgv0c             C   s   || _ t  | _| _d S )N)valueobject_saved_value	_sentinel)r   r   r   r   r   r   /   s    z_ModifiedArgv0.__init__c             C   s0   | j | jk	rtdtjd | _ | jtjd< d S )NzAlready preserving saved valuer   )r   r   RuntimeErrorr   argvr   )r   r   r   r   r   3   s    z_ModifiedArgv0.__enter__c             G   s   | j | _| jtjd< d S )Nr   )r   r   r   r   r    )r   r   r   r   r   r   9   s    z_ModifiedArgv0.__exit__N)r   r   r   r   r   r   r   r   r   r   r   .   s   r   c       
   	   C   sn   |d k	r| | |d kr(d }|}d }	n |j}|j}|j}	|d krH|j}|j |||	d |||d t| | |S )N)r   __file__
__cached____doc__
__loader____package____spec__)updateloaderorigincachedparentexec)
codeZrun_globalsinit_globalsr   mod_specpkg_namescript_namer(   fnamer*   r   r   r   	_run_code>   s(    

r3   c       	   
   C   s^   |d kr|n|j }t|6}t|" |jj}t| |||||| W d Q R X W d Q R X | S )N)r)   r   r   r
   __dict__r3   copy)	r-   r.   r   r/   r0   r1   r2   temp_modulemod_globalsr   r   r   _run_module_codeX   s     r8   c             C   s0  |  dr|d| d\}}}|ryt| W nH tk
rz } z*|jd ksh|j|krj| |jd sj W d d }~X Y nX tj| }|d k	rt|dsddl	m
} dj| |d}|t| ytj| }W nJ ttttfk
r }	 z"d}||| t|	j|	|	W d d }	~	X Y nX |d kr2|d	|  |jd k	r| d
ksT| dr\|dy| d }
t|
|S  |k
r } z"| tjkr |d|| f W d d }~X Y nX |j}|d kr|d|  y|| }W n2 tk
r } z|t||W d d }~X Y nX |d kr&|d|  | ||fS )N.z#Relative module names not supported__path__r   )warnz{mod_name!r} found in sys.modules after import of package {pkg_name!r}, but prior to execution of {mod_name!r}; this may result in unpredictable behaviour)r   r0   z:Error while finding module specification for {!r} ({}: {})zNo module named %s__main__z	.__main__z%Cannot use package as __main__ modulez3%s; %r is a package and cannot be directly executedz0%r is a namespace package and cannot be executedzNo code object available for %s)
startswith
rpartition
__import__ImportErrornamer   r   gethasattrwarningsr;   formatRuntimeWarning	importlibutil	find_specAttributeError	TypeError
ValueErrortyper   submodule_search_locationsendswith_get_module_detailsr(   get_code)r   errorr0   _eZexistingr;   msgspecZexZpkg_main_namer(   r-   r   r   r   rP   f   sZ    

,


 
rP   c               @   s   e Zd ZdS )_ErrorN)r   r   r   r   r   r   r   rW      s   rW   Tc          
   C   s   y0|s| dkr t | t\} }}ntt\} }}W n: tk
rj } zdtj|f }t| W d d }~X Y nX tjd j}|r|jtj	d< t
||d d|S )Nr<   z%s: %sr   )rP   rW   _get_main_module_detailsr   
executableexitr   r4   r)   r    r3   )r   Z
alter_argvr/   r-   excrU   Zmain_globalsr   r   r   _run_module_as_main   s    r\   Fc             C   s@   t | \} }}|d kr| }|r,t||||S t|i |||S d S )N)rP   r8   r3   )r   r.   run_nameZ	alter_sysr/   r-   r   r   r   r      s    c          
   C   s~   d}t j| }t j|= zVyt|S  tk
rh } z*|t|krV| d|t jd f | W d d }~X Y nX W d |t j|< X d S )Nr<   zcan't find %r module in %rr   )r   r   rP   r@   strpath)rR   Z	main_nameZ
saved_mainr[   r   r   r   rX      s    
rX   c          	   C   sT   t |d}t|}W d Q R X |d krLt |d}t| |d}W d Q R X ||fS )Nrbr,   )openr   compileread)r]   r2   fr-   r   r   r   _get_code_from_file   s    re   c             C   s  |d krd}| dd }t| }d}t|jdkrFt|jdkrFd}t|td sX|rxt|| \}}t|||||dS tj	
d|  zRt \}}	}t|4}
t|   |
jj}t|||||	| S Q R X W d Q R X W d ytj	|  W n tk
r    Y nX X d S )	Nz
<run_path>r9   r   FZimpZNullImporterT)r0   r1   )r>   r   rM   r   r   
isinstancere   r8   r   r_   insertrX   r   r   r
   r4   r3   r5   removerL   )Z	path_namer.   r]   r0   ZimporterZis_NullImporterr-   r2   r   r/   r6   r7   r   r   r   r      s0    



"r<      z!No module specified for execution)file)NNNNN)NNNNN)T)NNF)NN)r   Zimportlib.machineryrG   importlib.utilr   Zpkgutilr   r   __all__r   r   r   r3   r8   r@   rP   	ExceptionrW   r\   r   rX   re   r   r   lenr    printstderrr   r   r   r   <module>   s4     
  
:
 


1
