o
    8Di#                     @   sf   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlZd dlZd dl	Z	G dd de	j
ZdS )    N)Popen)mkdtempc                   @   sN   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dS )AutoreloadTestc                 C   s    d| _ t | _| ddi d S )Ni   zrun_twice_magic.pya  
                    import os
                    import sys

                    import tornado.autoreload

                    sys.stdout.flush()

                    if "TESTAPP_STARTED" not in os.environ:
                        os.environ["TESTAPP_STARTED"] = "1"
                        tornado.autoreload._reload()
                    else:
                        os._exit(0)
                )maxDiffr   pathwrite_filesself r
   U/var/www/Datamplify/venv/lib/python3.10/site-packages/tornado/test/autoreload_test.pysetUp   s   	zAutoreloadTest.setUpc                 C   s>   z	t | j W d S  ty   td t | j Y d S w )N   )shutilrmtreer   OSErrortimesleepr   r
   r
   r   tearDown-   s   
zAutoreloadTest.tearDownNc              	   C   s   |du r| j }| D ]C\}}t|tr*ttj || | |tj || qttj ||ddd}|	t
| W d   n1 sIw   Y  qdS )zWrite a directory tree to self.path.

        tree is a dictionary mapping file names to contents, or
        sub-dictionaries representing subdirectories.
        Nwutf-8)encoding)r   items
isinstancedictosmkdirjoinr   openwritetextwrapdedent)r	   tree	base_pathnamecontentsfr
   r
   r   r   9   s   
zAutoreloadTest.write_filesc                 C   s   t  g}dt jv r|dd t jd t jD 7 }t j|}t|tjt	t j|d| j
ddd}tdD ]}| d ur? ntd	 q5|  td
| d }| |jd |S )N
PYTHONPATHc                 S   s   g | ]}t jt  |qS r
   )r   r   r   getcwd).0partr
   r
   r   
<listcomp>N   s    z1AutoreloadTest.run_subprocess.<locals>.<listcomp>)r&   Tr   )stdoutenvcwduniversal_newlinesr   (   g?zsubprocess failed to terminater   )r   r'   environsplitpathsepr   r   
subprocessPIPEr   r   rangepollr   r   kill	ExceptioncommunicateassertEqual
returncode)r	   argsparts
pythonpathpioutr
   r
   r   run_subprocessI   s.   

zAutoreloadTest.run_subprocessc              
   C   sr  d}|  dd|di dD ]}| j|d | jdd$ |r'tjd	d
g}ntjg}| |d	dg }| |d W d    n1 sDw   Y  | jdd! | |dg }|r\dnd}| || dd  W d    n1 ssw   Y  | jdd! | |dg }|rdnd}| || dd  W d    n1 sw   Y  W d    n1 sw   Y  qd S )Na  import sys

# In module mode, the path is set to the parent directory and we can import testapp.
try:
    import testapp
except ImportError:
    print("import testapp failed")
else:
    print("import testapp succeeded")

spec = getattr(sys.modules[__name__], '__spec__', None)
print(f"Starting {__name__=}, __spec__.name={getattr(spec, 'name', None)}")
exec(open("run_twice_magic.py", encoding="utf-8").read())
testapp z__init__.pyz__main__.py)FT)wrappermodule)mode-mtornado.autoreloadzimport testapp succeeded
Starting __name__='__main__', __spec__.name=testapp.__main__
import testapp succeeded
Starting __name__='__main__', __spec__.name=testapp.__main__
fileztestapp/__main__.pyzimport testapp succeededzimport testapp failedz2
Starting __name__='__main__', __spec__.name=None
   	directoryz6
Starting __name__='__main__', __spec__.name=__main__
)r   subTestsys
executablerB   r:   )r	   mainrF   	base_argsrA   expect_importr
   r
   r   test_reloadk   sd   zAutoreloadTest.test_reloadc                 C   s>   d}|  dd|di | tjddddg}| |d d S )Na  import sys

# This import will fail if path is not set up correctly
import testapp

if 'tornado.autoreload' not in sys.modules:
    raise Exception('started without autoreload wrapper')

print('Starting')
exec(open("run_twice_magic.py", encoding="utf-8").read())
rC   rD   rE   rI   rJ   zStarting
Starting
r   rB   rO   rP   r:   r	   rQ   rA   r
   r
   r    test_reload_wrapper_preservation   s   	z/AutoreloadTest.test_reload_wrapper_preservationc              
   C   s>   d}|  d|i | tjdddddddg}| |d d S )	Nzimport os
import sys

print(os.path.basename(sys.argv[0]))
print(f'argv={sys.argv[1:]}')
exec(open("run_twice_magic.py", encoding="utf-8").read())
main.pyrI   rJ   arg1z--arg2arg3z\main.py
argv=['arg1', '--arg2', '-m', 'arg3']
main.py
argv=['arg1', '--arg2', '-m', 'arg3']
rU   rV   r
   r
   r   test_reload_wrapper_args   s   	z'AutoreloadTest.test_reload_wrapper_argsc                 C   s8   d}|  d|i | tjddddg}| |d d S )Nzimport os
import sys

if "TESTAPP_STARTED" in os.environ:
    print("exiting cleanly")
    sys.exit(0)
else:
    print("reloading")
    exec(open("run_twice_magic.py", encoding="utf-8").read())
rX   rI   rJ   z--until-successzreloading
exiting cleanly
rU   rV   r
   r
   r   !test_reload_wrapper_until_success   s   z0AutoreloadTest.test_reload_wrapper_until_success)N)__name__
__module____qualname__r   r   r   rB   rT   rW   r[   r\   r
   r
   r
   r   r      s     
"Qr   )r   r   r3   r   rO   tempfiler   r   r   unittestTestCaser   r
   r
   r
   r   <module>   s    