
    g#                     ~    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e	j                        Zy)    N)Popen)mkdtempc                   >    e Zd Zd Zd Zd
dZd Zd Zd Zd Z	d	 Z
y)AutoreloadTestc                 V    d| _         t               | _        | j                  ddi       y )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selfs    Q/var/www/openai/venv/lib/python3.12/site-packages/tornado/test/autoreload_test.pysetUpzAutoreloadTest.setUp   s/    I	 	$ '	
    c                     	 t        j                  | j                         y # t        $ r7 t	        j
                  d       t        j                  | j                         Y y w xY w)N   )shutilrmtreer	   OSErrortimesleepr   s    r   tearDownzAutoreloadTest.tearDown-   sC    		%MM$))$ 	% JJqMMM$))$	%s   " =A"!A"Nc                    || j                   }|j                         D ]  \  }}t        |t              rdt	        j
                  t        j                   j                  ||             | j                  |t        j                   j                  ||             zt        t        j                   j                  ||      dd      5 }|j                  t        j                  |             ddd        y# 1 sw Y   xY w)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fs         r   r
   zAutoreloadTest.write_files9   s     		I"jjlND((D)i67  277<<	4+HI"'',,y$7wOSTGGHOOH56 PO +
 POs   %C55C>	c                 &   t        j                         }dt         j                  v r'|t         j                  t         j                  d   z   z  }t	        |t
        j                  t        t         j                  |      | j                  dd      }t        d      D ])  }|j                          n2t        j                  d       + |j                          t        d      |j                         d	   }| j!                  |j"                  d	       |S )
N
PYTHONPATH)r,   Tr   )stdoutenvcwduniversal_newlinesr   (   g?zsubprocess failed to terminater   )r   getcwdenvironpathsepr   
subprocessPIPEr   r	   rangepollr   r   kill	ExceptioncommunicateassertEqual
returncode)r   args
pythonpathpiouts         r   run_subprocesszAutoreloadTest.run_subprocessI   s     YY[
2::%"**rzz,'???J??RZZJ7		#
 rAvvx#JJsO 
 FFH<==mmoa q)
r   c                    d}| j                  dd|di       dD ]$  }| j                  |      5  | j                  d      5  |rt        j                  d	d
g}nt        j                  g}| j	                  |d	dgz         }| j                  |d       d d d        | j                  d      5  | j	                  dgz         }|rdnd}| j                  || ddz         d d d        | j                  d      5  | j	                  dgz         }|rdnd}| j                  || ddz         d d d        d d d        ' y # 1 sw Y   xY w# 1 sw Y   oxY w# 1 sw Y   -xY w# 1 sw Y   WxY w)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").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
executablerC   r<   )r   mainrH   	base_argsrB   expect_imports         r   test_reloadzAutoreloadTest.test_reloadg   s   " 	#%#'	
 %Gg.\\x\0%(^^T;O$P	%(^^$4	 --i4:K.KLC$$ 1" \\v\.--i;P:Q.QRC # 34 " $$(/)]^ /" \\{\3 --i9+.EFC # 34 "
 $$(/)ab 4G /. %00" /." 43G /.sT   E(AEE(.4E"E(<4E0E(E	E(EE(E%!E((E2	c                     d}| j                  dd|di       | j                  t        j                  ddddg      }| j	                  |d       y )Nzimport 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").read())
rE   rF   rG   rK   rL   zStarting
Starting
r
   rC   rQ   rR   r<   r   rS   rB   s      r    test_reload_wrapper_preservationz/AutoreloadTest.test_reload_wrapper_preservation   sd     	#%#'	
 !!^^T#7yI
 	./r   c           
          d}| j                  d|i       | j                  t        j                  dddddddg      }| j	                  |d       y )	Nzimport os
import sys

print(os.path.basename(sys.argv[0]))
print(f'argv={sys.argv[1:]}')
exec(open("run_twice_magic.py").read())
main.pyrK   rL   arg1z--arg2arg3z\main.py
argv=['arg1', '--arg2', '-m', 'arg3']
main.py
argv=['arg1', '--arg2', '-m', 'arg3']
rX   rY   s      r   test_reload_wrapper_argsz'AutoreloadTest.test_reload_wrapper_args   sd     	)T*+ !!$	
 	TUr   c                     d}| j                  d|i       | j                  t        j                  ddddg      }| j	                  |d       y )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").read())
r\   rK   rL   z--until-successzreloading
exiting cleanly
rX   rY   s      r   !test_reload_wrapper_until_successz0AutoreloadTest.test_reload_wrapper_until_success   sU    
 	)T*+!!^^T#79JIV
 	<=r   )N)__name__
__module____qualname__r   r   r
   rC   rV   rZ   r_   ra    r   r   r   r      s.    
@
%7 <Ob0>V:>r   r   )r   r   r5   r   rQ   tempfiler   r$   r   unittestTestCaser   re   r   r   <module>ri      s4    	    
    |>X&& |>r   