????
Your IP : 3.21.34.214
o
��e73�@sdZddlZddlZddlZddlZddlZddlZddgZGdd�de �Z
Gdd�de �Z dd d
�Z ddd�Z
efd
d�ZGdd�de�Zd dd�Z d!dd�Zefdd�Zdd�Zd"dd�Zedkr�eej�dkr{edejd�dSejd=eejd�dSdS)#aZrunpy.py - locating and running Python code using the module namespace
Provides support for locating and running Python scripts using the Python
module namespace instead of the native filesystem.
This allows Python code to play nicely with non-filesystem based PEP 302
importers when locating support scripts as well as when importing modules.
�N�
run_module�run_pathc@s(eZdZdZdd�Zdd�Zdd�ZdS) �_TempModulezCTemporarily replace a module in sys.modules with an empty namespacecCs||_t�|�|_g|_dS�N)�mod_name�types�
ModuleType�module�
_saved_module��selfr�r
�,/opt/alt/python310/lib64/python3.10/runpy.py�__init__s
z_TempModule.__init__cCs@|j}z|j�tj|�Wn tyYnw|jtj|<|Sr)rr
�append�sys�modules�KeyErrorr rr
r
r� __enter__s�z_TempModule.__enter__cGs.|jr
|jdtj|j<ntj|j=g|_dS�Nr)r
rrr�r�argsr
r
r�__exit__(s
z_TempModule.__exit__N)�__name__�
__module__�__qualname__�__doc__rrrr
r
r
rrs
rc@s$eZdZdd�Zdd�Zdd�ZdS)�_ModifiedArgv0cCs||_t�|_|_dSr)�value�object�_saved_value� _sentinel)rrr
r
rr0sz_ModifiedArgv0.__init__cCs0|j|jur
td��tjd|_|jtjd<dS)NzAlready preserving saved valuer)r r!�RuntimeErrorr�argvr)rr
r
rr4sz_ModifiedArgv0.__enter__cGs|j|_|jtjd<dSr)r!rr rr#rr
r
rr:sz_ModifiedArgv0.__exit__N)rrrrrrr
r
r
rr/src
Csn|dur |�|�|durd}|}d} n|j}|j}|j} |dur$|j}|j||| d|||d�t||�|S)z)Helper to run code in nominated namespaceN)r�__file__�
__cached__r�
__loader__�__package__�__spec__)�update�loader�origin�cached�parent�exec)
�codeZrun_globals�init_globalsr�mod_spec�pkg_name�script_namer*�fnamer,r
r
r� _run_code?s*
�
r5c
Cs�|dur|n|j}t|��7}t|��|jj}t|||||||�Wd�n1s+wYWd�|��SWd�|��S1sGwY|��S)z5Helper to run code in new namespace with sys modifiedN)r+rrr �__dict__r5�copy) r/r0rr1r2r3r4�temp_module�mod_globalsr
r
r�_run_module_codeYs�(���r:c
Cs.|�d�r |d��|�d�\}}}|razt|�Wn%ty>}z|jdus3|j|kr4|�|jd�s4�WYd}~nd}~wwtj�|�}|durat|d�saddl m
}dj||d�}|t|��zt
j�|�}Wn3ttttfy�} z#d}|�d �r�|d
|dd��d|�d
�7}||�|t| �j| ��| �d} ~ ww|dur�|d|��|jdur�|dks�|�d�r�|d��z
|d}
t|
|�WS|y�}z|tjvrт|d||f��d}~ww|j}|dur�|d|��z|�|�}Wnt�y}z|t|��|�d}~ww|du�r|d|��|||fS)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)rr2z:Error while finding module specification for {!r} ({}: {})z.pyz
. Try using '���z' instead of 'z' as the module name.zNo 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 executedzNo code object available for %s)�
startswith�
rpartition�
__import__�ImportError�namerr�get�hasattr�warningsr=�format�RuntimeWarning� importlib�util� find_spec�AttributeError� TypeError�
ValueError�endswith�typer�submodule_search_locations�_get_module_detailsr*�get_code)
r�errorr2�_�eZexistingr=�msg�specZexZ
pkg_main_namer*r/r
r
rrSgsz
����
���
������
rSc@seZdZdZdS)�_ErrorzBError that _run_module_as_main() should report without a tracebackN)rrrrr
r
r
rrZ�srZTc
Cs�z|s|dkrt|t�\}}}ntt�\}}}Wnty6}zdtj|f}t�|�WYd}~nd}~wwtjdj}|rE|jtj d<t
||dd|�S)a�Runs the designated module in the __main__ namespace
Note that the executed module will have full access to the
__main__ namespace. If this is not desirable, the run_module()
function should be used to run the module code in a fresh namespace.
At the very least, these variables in __main__ will be overwritten:
__name__
__file__
__cached__
__loader__
__package__
r?z%s: %sNr)rSrZ�_get_main_module_detailsr�
executable�exitrr6r+r#r5)rZ
alter_argvr1r/�excrXZmain_globalsr
r
r�_run_module_as_main�s ����r_FcCs<t|�\}}}|dur
|}|rt||||�St|i|||�S)u"Execute a module's code without importing it.
mod_name -- an absolute module name or package name.
Optional arguments:
init_globals -- dictionary used to pre-populate the module’s
globals dictionary before the code is executed.
run_name -- if not None, this will be used for setting __name__;
otherwise, __name__ will be set to mod_name + '__main__' if the
named module is a package and to just mod_name otherwise.
alter_sys -- if True, sys.argv[0] is updated with the value of
__file__ and sys.modules[__name__] is updated with a temporary
module object for the module being executed. Both are
restored to their original values before the function returns.
Returns the resulting module globals dictionary.
N)rSr:r5)rr0�run_nameZ alter_sysr1r/r
r
rr�sc
Cszd}tj|}tj|=z+zt|�WW|tj|<Sty6}z|t|�vr1|d|tjdf�|��d}~ww|tj|<w)Nr?zcan't find %r module in %rr)rrrSrC�str�path)rUZ main_nameZ
saved_mainr^r
r
rr[�s"
�����r[cCs�ddlm}tj�t�|��}t�|��}||�}Wd�n1s#wY|durLt�|��}t|� �|d�}Wd�||fS1sGwY||fS)Nr)� read_coder.)
�pkgutilrc�osrb�abspath�fsdecode�io� open_code�compile�read)r`r4rcZdecoded_path�fr/r
r
r�_get_code_from_file�s
�
��rmc
Cs�|durd}|�d�d}ddlm}||�}d}t|�jdkr)t|�jdkr)d }t|td��s2|rBt||�\}}t|||||d
�St j
�d|�zkt�\} }
}t
|��D}t|��0|jj}t|||||
|���Wd�Wd�Wzt j
�|�WSty�YSw1s�wYWd�n1s�wYWz t j
�|�WdSty�YdSwzt j
�|�Wwty�Yww)uExecute code located at the specified filesystem location.
path_name -- filesystem location of a Python script, zipfile,
or directory containing a top level __main__.py script.
Optional arguments:
init_globals -- dictionary used to pre-populate the module’s
globals dictionary before the code is executed.
run_name -- if not None, this will be used to set __name__;
otherwise, '<run_path>' will be used for __name__.
Returns the resulting module globals dictionary.
Nz
<run_path>r;r)�get_importerFZimpZNullImporterT)r2r3)rArdrnrQrr�
isinstancermr:rrb�insertr[rrr r6r5r7�removerO)
Z path_namer0r`r2rnZimporterZis_NullImporterr/r4rr1r8r9r
r
rrsV�
����.�����r?�z!No module specified for execution)�file)NNNNN)T)NNF)NN)rr�importlib.machineryrJ�importlib.utilrhrre�__all__rrrr5r:rCrS� ExceptionrZr_rr[rmrr�lenr#�print�stderrr
r
r
r�<module>sD�
�
�=
�
7�