o
    ᡡi,h                     @  s  U 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lZd dlm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ d dlZd dlZd
dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d
dl&m'Z'm(Z( d
dl)m*Z* d
dl+m,Z,m-Z-m.Z. erd dl/m0Z0 d
dl1m2Z2 ej3dkrdZ4de5d< neZ4de5d< de5d< de5d< de5d< ej6dkZ7ese7sej3dkrd dlm8Z8m9Z9m:Z: nd\Z8Z9Z:dqddZ;e;d Z<e;d!Z=e;d"Z>e7rdrd%d&Z?ndrd'd&Z?edsd,d-Z@edsd.d/ZAejBjCd0e@eAgd1d2gd3ZDe
d4ee f ZEde5d5< eDdtd7d8ZFeDdtd9d:ZGeDdtd;d<ZHeDdtd=d>ZIeDdtd?d@ZJe;dAZKeDdtdBdCZLeDdtdDdEZMdudFdGZNdudHdIZOe'dudJdKZPeDdtdLdMZQdudNdOZReDdtdPdQZSejBjTe7 dRdSeDdtdTdUZUejBjTe7 dRdSeDdtdVdWZVe(dudXdYZWdudZd[ZXdud\d]ZYdvd`daZZejBjTe7 dbdSdwdedfZ[dudgdhZ\ejBjTedi]  djdSdudkdlZ^dvdmdnZ_dudodpZ`dS )x    )annotationsN)AsyncIteratorCallable)AbstractAsyncContextManagerasynccontextmanager)partial)Path)Signals)TYPE_CHECKINGAnyNoReturn	TypeAlias)mock   )EventProcess_core
fail_aftermove_on_afterrun_processsleepsleep_forever)skip_if_fbsd_pipes_brokenslow)open_process)	MockClockassert_no_checkpointswait_all_tasks_blocked)	FrameType)ReceiveStreamwin32r   
SignalTypeSIGKILLSIGTERMSIGUSR1posix)r"   r#   r$   )NNNcodestrreturn	list[str]c                 C  s   t jddd|  gS )Nz-u-czimport sys; )sys
executable)r&    r-   l/var/www/html/asbeauty/laura_geller_scraping/env/lib/python3.10/site-packages/trio/_tests/test_subprocess.pypython@   s   r/   zsys.exit(0)zsys.exit(1)z0sys.stdout.buffer.write(sys.stdin.buffer.read())secondsintc                 C  s   dt | gS )Nr   )r'   r0   r-   r-   r.   SLEEPJ   s   r3   c                 C  s   t d|  dS )Nzimport time; time.sleep())r/   r2   r-   r-   r.   r3   O   s   argsr   kwargsAsyncIterator[Process]c                  O sR   t | i |I d H }z|V  W |  | I d H  d S |  | I d H  w N)r   killwait)r5   r6   procr-   r-   r.   open_process_then_killS   s   r<   c               	   O s   t  4 I d H 4}|dd |ttg| R i |I d H }t|ts(J |}|V  |j	  W d   I d H  d S 1 I d H sCw   Y  d S )NcheckF)
r   open_nursery
setdefaultstartr   r   
isinstancer   cancel_scopecancel)r5   r6   nurseryvaluer;   r-   r-   r.   run_process_in_nursery`   s   ".rF   background_processr   zrun_process in nursery)ids.BackgroundProcessTypeNonec              	     s  | t 4 I d H }| I d H  W d   I d H  n1 I d H s!w   Y  t|ts-J |jd u s4J |jdks;J t|dt  dksGJ | t4 I d H }| I d H  W d   I d H  n1 I d H sgw   Y  |jdkssJ t|dtdksJ d S )Nr   <trio.Process : exited with status 0>   <trio.Process {!r}: {}>exited with status 1)		EXIT_TRUEr:   rA   r   _pidfd
returncoderepr
EXIT_FALSEformatrG   r;   r-   r-   r.   
test_basicz   s    ((
rW   c              
     s@  t jddd | t4 I d H }|jd u sJ | I d H  W d   I d H  n1 I d H s0w   Y  t|ts<J |jd u sCJ |jdksJJ t|dt dksVJ | t	4 I d H }| I d H  W d   I d H  n1 I d H svw   Y  |jdksJ t|d
t	d	ksJ W d    d S 1 sw   Y  d S )
N#trio._subprocess.can_try_pidfd_openFnewr   rK   rL   rM   rN   rO   )r   patchrP   rQ   r:   rA   r   rR   rS   rT   rU   rV   r-   r-   r.   test_basic_no_pidfd   s&   ((
"r\   c              	     s   | t d4 I d H A}|jd u sJ dt|v sJ |  |j  |jd us+J dt|v s3J |jd u s:J |jd usAJ W d   I d H  d S 1 I d H sRw   Y  d S )N'  runningexited)r3   rR   rS   r9   _procr:   rQ   )rG   pr-   r-   r.   test_auto_update_returncode   s   
.rb   c              
     s2  | t d4 I d H }t 4 I d H (}||j ||j ||j t I d H  |j  W d   I d H  n1 I d H sBw   Y  t 4 I d H '}||j ||j ||j t I d H  |  W d   I d H  n1 I d H s|w   Y  W d   I d H  d S 1 I d H sw   Y  d S )N
   )	r3   r   r>   
start_soonr:   r   rB   rC   r9   rG   r;   rD   r-   r-   r.   test_multi_wait   s"   (
*.rf   c                   sp  t jddd | td4 I d H }t 4 I d H (}||j ||j ||j t I d H  |j	  W d   I d H  n1 I d H sJw   Y  t 4 I d H '}||j ||j ||j t I d H  |
  W d   I d H  n1 I d H sw   Y  W d   I d H  n1 I d H sw   Y  W d    d S W d    d S 1 sw   Y  d S )NrX   FrY   rc   )r   r[   r3   r   r>   rd   r:   r   rB   rC   r9   re   r-   r-   r.   test_multi_wait_no_pidfd   s*   (
**"rg   zbdata = sys.stdin.buffer.read(); sys.stdout.buffer.write(data); sys.stderr.buffer.write(data[::-1])c              
     s.  | t tjtjtjd4 I d H zd d fdd}ddd}jd us'J jd us.J t 4 I d H -}t d |j_	|
| |
|j  |
|j d d d  W d   I d H  n1 I d H siw   Y  |jjrtJ  I d H dksJ W d   I d H  d S 1 I d H sw   Y  d S )Nstdinstdoutstderrs+   the quick brown fox jumps over the lazy dogr(   rJ   c                     s6   j d usJ j  I d H  j  I d H  d S r8   )ri   send_allacloser-   msgr;   r-   r.   
feed_input   s   ztest_pipes.<locals>.feed_inputstreamr   expectedbytesc                   s4   t  }| 2 z
3 d H W }||7 }q6 ||ksJ d S r8   )	bytearray)rq   rr   seenchunkr-   r-   r.   check_output   s   
z test_pipes.<locals>.check_outputg      >@r   r(   rJ   )rq   r   rr   rs   r(   rJ   )+COPY_STDIN_TO_STDOUT_AND_BACKWARD_TO_STDERR
subprocessPIPErj   rk   r   r>   current_timerB   deadlinerd   cancelled_caughtr:   )rG   rp   rw   rD   r-   rn   r.   
test_pipes   s,   

(.r   c              
     sF  | t dtjtjtjd4 I d H trdnd d fd
d}jd us(J jd us/J jd us6J td jdI d H  t	dI d H  jd  I d H  |ddI d H  jd  d   I d H  |ddI d H  |ddI d H  jd  I d H  |ddI d H  jdI d H  t
d}|ddI d H  W d    n1 sw   Y  |jsJ j I d H  |ddI d H  j I d H  jdI d H dksJ jdI d H dksJ  I d H  W d    n1 sw   Y  W d   I d H  n1 I d H sw   Y  jdks!J d S )Nzidx = 0
while True:
    line = sys.stdin.readline()
    if line == '': break
    request = int(line.strip())
    print(str(idx * 2) * request)
    print(str(idx * 2 + 1) * request * 2, file=sys.stderr)
    idx += 1
rh      
s   
idxr1   requestr(   rJ   c              	     s   t  4 I d H ;}d fdd	}jd usJ jd usJ ||j|| d
  ||j|d
 | d
 d  W d   I d H  d S 1 I d H sJw   Y  d S )Nrq   r   countr1   digitr(   rJ   c                   st   |dkr$|  |I d H }||  t| ksJ |t|8 }|dks|dks*J |  t I d H  ks8J d S )Nr   )receive_someencodelen)rq   r   r   result)newliner-   r.   	drain_one#  s    z3test_interactive.<locals>.expect.<locals>.drain_oner   rM   )rq   r   r   r1   r   r1   r(   rJ   )r   r>   rj   rk   rd   )r   r   rD   r   r   r;   r-   r.   expect   s    .z test_interactive.<locals>.expect   s   12g?s   345r   i90  s   100s   200rM   d   r         0   s   999999   i?B     )r   r1   r   r1   r(   rJ   )r/   r{   r|   r%   ri   rj   rk   r   rl   r   r   r   rm   r   r:   rR   )rG   r   scoper-   r   r.   test_interactive  sN   



*=r   c                    s  t dd tdD } tt| dddI d H }|jtksJ |jdks%J |j| ks,J |jdks3J ttddI d H }|jtksCJ |jdksJJ |jdksQJ |jd u sXJ tt| dddI d H }|jtksjJ |jdksqJ |j| ksxJ |j| d d d	 ksJ t	
t ttd
dI d H  W d    n1 sw   Y  d}t	j
t|d tttjdI d H  W d    n1 sw   Y  t	j
t|d tttjdI d H  W d    n1 sw   Y  t	j
t|dddd tttjdI d H  W d    n	1 sw   Y  t	j
tdd ttdtjdI d H  W d    n	1 s+w   Y  t	j
tdd ttdd dI d H  W d    d S 1 sNw   Y  d S )Nc                 s  s    | ]	}t d dV  qdS )r      N)randomrandint).0_r-   r-   r.   	<genexpr>P  s    ztest_run.<locals>.<genexpr>i   T)ri   capture_stdoutcapture_stderrr   r   r   rx   zoh no, it's textri   z^stdout=subprocess\.PIPE is only valid with nursery\.start, since that's the only way to access the pipe(; use nursery\.start or pass the data you want to write directly)*$match)rj   rj   rk   rM   )rk   z.^can't specify both stdout and capture_stdout$)r   rj   z.^can't specify both stderr and capture_stderr$)r   rk   )rs   ranger   CATr5   rR   rj   rk   rz   pytestraisesUnicodeError
ValueErrorr{   r|   replaceDEVNULL)datar   pipe_stdout_errorr-   r-   r.   test_runO  sn   $r   c                    s   t d} ttj}t| tjddI d H  W d    n1 s!w   Y  |jj| ks.J |jj	dks6J |jj
dks>J |jjd u sFJ t| ddddI d H }|j| ksXJ |jdks_J |j
dksfJ |j	dksmJ d S )	Nz/sys.stderr.buffer.write(b'test\n'); sys.exit(1)T)ri   r   rM   s   test
F)r   r   r=   r   )r/   r   r   r{   CalledProcessErrorr   r   rE   cmdrR   rk   rj   r5   )r   excinfor   r-   r-   r.   test_run_check  s&   r   c                    sR   t tjddgdd dI d H } | jdksJ | j| j  u r$d u s'J  J d S )Nr*   zimport sys; sys.stdin.close()   xi   r   r   )r   r+   r,   rR   rj   rk   )r   r-   r-   r.   test_run_with_broken_pipe  s   
$r   c              	     s  | t tjtjtjd4 I d H Q}|jd usJ |jd usJ |jd u s&J |jdI d H  |j I d H  g }	 |j	dI d H }|dkrHn|
| q:d|dksWJ W d   I d H  n1 I d H sgw   Y  |jdkssJ tt ddtjdI d H }|jdksJ |jdksJ |jd u sJ | ttjtjd	4 I d H (}|jd u sJ |jd u sJ |j I d H  | I d H  W d   I d H  n1 I d H sw   Y  |jdksJ trpzt \}}| t tj|tjd4 I d H [}t| |jd u sJ |jd u s	J |jd u sJ |jdI d H  |j I d H  | I d H dks.J t|d
dks9J t|d
dksDJ W d   I d H  n1 I d H sUw   Y  W t| d S W t| d S t| w d S )Nrh   s   1234T   r   s   12344321r   )ri   r   rk   )ri   rk   i   )rz   r{   r|   STDOUTstdiorj   rk   rl   send_eofr   appendjoinrR   r   r   ri   rm   r:   r%   ospipecloseread)rG   r;   outputrv   r   rwr-   r-   r.   test_stderr_stdout  s   
((	
,r   c                    s   t t} tdgddI d H  W d    n1 sw   Y  dt| jv s)J dt| jv s2J trtt t} tdgddI d H  W d    n1 sNw   Y  t t} tdddI d H  W d    d S 1 smw   Y  d S d S )	Nlszutf-8)encodingzunbuffered byte streamsz&the 'encoding' option is not supportedT)shellF)r   r   	TypeErrorr   r'   rE   r%   )r   r-   r-   r.   test_errors  s   "r   c                   sb   d fdd}|t jtI d H  |t jtI d H  tsts#tjd	kr/|d
d t	I d H  d S d S )Nsend_itCallable[[Process], None]signumsignal.Signals | Noner(   rJ   c              
     s   t d3} td4 I d H }| | | I d H  W d   I d H  n1 I d H s,w   Y  W d    n1 s;w   Y  |jrEJ trW|d usMJ |j| ksUJ d S |jdks^J d S )N      ?  r   )r   r3   r:   r   r%   rR   )r   r   r   r;   rG   r-   r.   test_one_signal  s   
(
z%test_signals.<locals>.test_one_signalr    c                 S  s
   |  tS r8   )send_signalr$   r;   r-   r-   r.   <lambda>  s   
 ztest_signals.<locals>.<lambda>)r   r   r   r   r(   rJ   )
r   r9   r"   	terminater#   r
   r%   r+   platformr$   )rG   r   r-   r   r.   test_signals  s   r   zPOSIX specific)reasonc              
     s$  t r
tjdkr
d S ttjtj}zw| td4 I d H N}t 4 I d H #}|	|j
 t I d H  |  t d |j_W d   I d H  n1 I d H sOw   Y  |jjrZJ |jdksaJ W d   I d H  n1 I d H sqw   Y  W ttj| d S W ttj| d S ttj| w )Nr    r   r   r   )r
   r+   r   signalSIGCHLDSIG_IGNr3   r   r>   rd   r:   r   r9   r}   rB   r~   r   rR   rG   old_sigchldr;   rD   r-   r-   r.   test_wait_reapable_fails  s$   (*	"	r   c                   sB  t r
tjdkr
d S tjddd ttjtj}zl| td4 I d H N}t	
 4 I d H #}||j t I d H  |  t	 d |j_W d   I d H  n1 I d H sWw   Y  |jjrbJ |jdksiJ W d   I d H  n1 I d H syw   Y  W ttj| nttj| w W d    d S 1 sw   Y  d S )Nr    rX   FrY   r   r   r   )r
   r+   r   r   r[   r   r   r   r3   r   r>   rd   r:   r   r9   r}   rB   r~   r   rR   r   r-   r-   r.   !test_wait_reapable_fails_no_pidfd/  s&   (("	"r   c               
     s   ddl m}  trtjdkstjdkrd S | jdstd ddl	m
} d td	d
gd fdd}ttj|}z+td |j jdddksRJ W jd u r`    ttj| d S jd u rv    ttj| w )Nr   )wait_child_exitingr    darwinwaitidzwaitid only)sync_wait_reapableFr   3600sigr1   frameFrameType | Noner(   rJ   c                   s   d    d S NT)r9   )r   r   	got_alarmsleeperr-   r.   on_alarm^  s   z#test_waitid_eintr.<locals>.on_alarmrM   )timeouti)r   r1   r   r   r(   rJ   )_subprocess_platformr   r
   r+   r   
__module__endswithr   skip_subprocess_platform.waitidr   r{   Popenr   SIGALRMalarmpidr:   rR   r9   )r   r   r   old_sigalrmr-   r   r.   test_waitid_eintrH  s,   




r   c               	     s   d d
 fdd} t  4 I d H "}|tttd| d	 t I d H  |j  W d   I d H  n1 I d H s:w   Y   sCJ d S )NFr;   r   r(   rJ   c                   s@   d |    zt I d H  W | jd usJ d S | jd usJ w r   )r   r   rR   r   custom_deliver_cancel_calledr-   r.   custom_deliver_cancelt  s   "z9test_custom_deliver_cancel.<locals>.custom_deliver_cancelr]   deliver_cancelr;   r   r(   rJ   	r   r>   rd   r   r   r3   r   rB   rC   )r   rD   r-   r   r.   test_custom_deliver_cancelq  s   (r   c                    sf   ddd d fdd} t t t jtd	d
 tj| dd W d    d S 1 s,w   Y  d S )Nr;   r   r(   rJ   c                   s   |    td)Nfoo)r   r   r   r-   r-   r.   r     s   z6test_bad_deliver_cancel.<locals>.custom_deliver_cancelc               	     sr   t  4 I d H #} | tttd d t I d H  | j  W d   I d H  d S 1 I d H s2w   Y  d S )Nr]   r   r   )rD   r   r-   r.   do_stuff  s   .z)test_bad_deliver_cancel.<locals>.do_stuffz^foo$r   T)strict_exception_groupsr   ry   )r   RaisesGroup	RaisesExcr   r   run)r   r-   r   r.   test_bad_deliver_cancel  s   
	"r  monkeypatchpytest.MonkeyPatchc              
     s   t j d fdd}| t d| tjtdd	B t 4 I d H }|t	t
d
 t I d H  |j  W d   I d H  n1 I d H sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )Nselfr   r(   r   c                   s    |  t d)Nwhoops)OSError)r  original_terminater-   r.   broken_terminate  s   z>test_warn_on_failed_cancel_terminate.<locals>.broken_terminater   z
.*whoops.*r   r]   )r  r   r(   r   )r   r   setattrr   warnsRuntimeWarningr   r>   rd   r   r3   r   rB   rC   )r  r  rD   r-   r  r.   $test_warn_on_failed_cancel_terminate  s   *"r  z
posix onlyautojump_clockr   c              
     s   | tddd  tjtddB t 4 I d H }|tt	d t
 I d H  |j  W d   I d H  n1 I d H s>w   Y  W d    d S W d    d S 1 sVw   Y  d S )Nr   c                  W  s   d S r8   r-   )r5   r-   r-   r.   r     s    z8test_warn_on_cancel_SIGKILL_escalation.<locals>.<lambda>z.*ignored SIGTERM.*r   r]   )r  r   r   r  r  r   r>   rd   r   r3   r   rB   rC   )r  r  rD   r-   r-   r.   &test_warn_on_cancel_SIGKILL_escalation  s   *"r  c               
     s   t tj8 t 4 I d H } | ttI d H }t	|t
s!J |}W d   I d H  n1 I d H s3w   Y  W d    n1 sBw   Y  |jdksNJ d S )NrM   )r   r  r{   r   r   r>   r@   r   rT   rA   r   rR   )rD   rE   r;   r-   r-   r.    test_run_process_background_fail  s   (r  /dev/fdz,requires a way to iterate through open filesc                    s   t   ttd } ttI d H  ttd | ks J tt	j
 ttI d H  W d    n1 s8w   Y  ttd | ksIJ tt tdgI d H  W d    n1 saw   Y  ttd | ksrJ d S )Nr  z	/dev/fd/0)gccollectsetSyncPathiterdirr   rP   r   r   r{   r   rT   PermissionError)starting_fdsr-   r-   r.   test_for_leaking_fds  s   r  c                   s`   ddd}|  tjd| ttt ttd	d
I d H  W d    d S 1 s)w   Y  d S )Nr5   objectr6   r(   r'   c                    s   dS )Noopsr-   )r5   r6   r-   r-   r.   very_broken_open  s   z9test_run_process_internal_error.<locals>.very_broken_open_open_processTr   )r5   r  r6   r  r(   r'   )r  trio_subprocessr   r  AttributeErrorr   rP   )r  r   r-   r-   r.   test_run_process_internal_error  s   
"r%  c               	     s  d  d
 fdd} t tdI d H }t 4 I d H b}|| | t I d H  t ts/J |  t	  |j
  |  W d    n1 sJw   Y  td   I d H  W d    n1 sew   Y    srJ d	W d   I d H  d S 1 I d H sw   Y  d S )Nr;   r   r(   rJ   c                   s"   t   |  I d H     d S r8   )r   r:   r  r   noticed_exitr-   r.   wait_and_tell  s   z7test_subprocess_pidfd_unnotified.<locals>.wait_and_tellr]   r   z,child task wasn't woken after poll, DEADLOCKr   )r   r3   r   r>   rd   r   rA   r   r   r   r`   r:   pollr   is_set)r(  r;   rD   r-   r&  r.    test_subprocess_pidfd_unnotified  s$   


.r+  )r&   r'   r(   r)   )r0   r1   r(   r)   )r5   r   r6   r   r(   r7   )rG   rI   r(   rJ   ry   )r  r  r(   rJ   )r  r   r  r  r(   rJ   )a
__future__r   r  r   r   r   r{   r+   collections.abcr   r   
contextlibr   r   	functoolsr   pathlibr   r  r	   typingr
   r   r   r   unittestr   r   r"   r   r   r   r   r   r   r   r   _core._tests.tutilr   r   lowlevelr   testingr   r   r   typesr   _abcr   r   r!   __annotations__namer%   r"   r#   r$   r/   rP   rT   r   r3   r<   rF   markparametrizebackground_process_paramrI   rW   r\   rb   rf   rg   rz   r   r   r   r   r   r   r   r   skipifr   r   r   r   r  r  r  r  existsr  r%  r+  r-   r-   r-   r.   <module>   s    (





"
L
9	
E
(


	
