o
    ᡡi$Q                     @  sf  d dl mZ d dlZd dlmZ d dlZddlmZmZm	Z
 ddlmZ ddlmZmZ ddlmZ dd	lT dd
lmZ ddlmZ erRd dlmZ d dlmZmZ d:ddZd;ddZd:ddZd<ddZd<ddZ d:ddZ!d:d d!Z"d:d"d#Z#d:d$d%Z$d:d&d'Z%d:d(d)Z&d:d*d+Z'd:d,d-Z(d:d.d/Z)d:d0d1Z*d:d2d3Z+d:d4d5Z,d:d6d7Z-d:d8d9Z.dS )=    )annotationsN)TYPE_CHECKING   )_coresleepsocket)can_bind_ipv6)StapledStreamaclose_forcefully)SocketListener)*)_assert_raises)_UnboundedByteQueue)Nursery)ReceiveStream
SendStreamreturnNonec               	     s   g  d
 fdd} d
 fdd}t  4 I d H }||  || || W d   I d H  n1 I d H s9w   Y  g  d
 fdd}t  4 I d H }|| |j  W d   I d H  n1 I d H sjw   Y   d	gksvJ d S )Nr   r   c                    s,   t dD ]	} t I d H  q d d S )N
   zbusy bee exhausted)ranger   
checkpointappend)_record i/var/www/html/asbeauty/laura_geller_scraping/env/lib/python3.10/site-packages/trio/_tests/test_testing.pybusy_bee   s   z-test_wait_all_tasks_blocked.<locals>.busy_beec                        t  I d H   d d S )Nzquiet at last!wait_all_tasks_blockedr   r   r   r   r   waiting_for_bee_to_leave      z=test_wait_all_tasks_blocked.<locals>.waiting_for_bee_to_leavec                     s6   z	t  I d H  W d S  tjy    d Y d S w )Nok)r    r   	Cancelledr   r   r   r   r   cancelled_while_waiting*   s   z<test_wait_all_tasks_blocked.<locals>.cancelled_while_waitingr#   r   r   )r   open_nursery
start_sooncancel_scopecancel)r   r!   nurseryr%   r   r   r   test_wait_all_tasks_blocked   s    

(
(r,   
mock_clock	MockClockc              	     s   g  d fdd}t  4 I d H 1}|| t I d H   dgks%J | d t I d H   ddgks8J W d   I d H  d S 1 I d H sIw   Y  d S )	Nr   r   c                     s(     d tdI d H    d d S )Ntt start   tt finishedr   r   r   r   r   r   timeout_task9   s   
z?test_wait_all_tasks_blocked_with_timeouts.<locals>.timeout_taskr/   r   r1   r&   )r   r'   r(   r    jump)r-   r3   r+   r   r   r   )test_wait_all_tasks_blocked_with_timeouts6   s   

.r5   c               	     s   g  d fdd} d fdd}d fdd}d fd	d
}t  4 I d H $}||  || || || || W d   I d H  n1 I d H sQw   Y   g dks^J d S )Nr   r   c                     sD     d tdI d H  tdI d H  tdI d H    d d S )Nblink startg{Gz?	blink endr2   r   r   r   r   blinkJ   s   
z7test_wait_all_tasks_blocked_with_cushion.<locals>.blinkc                     r   )Nwait_no_cushion endr   r   r   r   r   wait_no_cushionQ   r"   zAtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_no_cushionc                        t dI d H   d d S )Ng{Gz?wait_small_cushion endr   r   r   r   r   wait_small_cushionU      zDtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_small_cushionc                     r;   )NgQ?wait_big_cushion endr   r   r   r   r   wait_big_cushionY   r>   zBtest_wait_all_tasks_blocked_with_cushion.<locals>.wait_big_cushion)r6   r9   r7   r<   r<   r?   r&   )r   r'   r(   )r8   r:   r=   r@   r+   r   r   r   (test_wait_all_tasks_blocked_with_cushionG   s   



(rA   recwarnpytest.WarningsRecorderc              
     sD  t   t I d H  W d    n1 sw   Y  tt t   W d    n1 s/w   Y  W d    n1 s>w   Y  tjtjfD ]4}t| tt! t   | I d H  W d    n1 siw   Y  W d    n1 sxw   Y  qIt   t I d H  t I d H  W d    d S 1 sw   Y  d S N)	assert_checkpointsr   r   pytestraisesAssertionErrorcheckpoint_if_cancelledcancel_shielded_checkpointprintrB   partial_yieldr   r   r   test_assert_checkpointsq   s2   "rN   c              
     s~  t   W d    n1 sw   Y  tt" t   t I d H  W d    n1 s/w   Y  W d    n1 s>w   Y  tjtjfD ]4}t| tt! t   | I d H  W d    n1 siw   Y  W d    n1 sxw   Y  qItt2 t   t I d H  t I d H  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S rD   )	assert_no_checkpointsrF   rG   rH   r   r   rI   rJ   rK   rL   r   r   r   test_assert_no_checkpoints   s:   "rP   c               
     s  g  d fdddfd	d
} dfdd}t  }t 4 I d H C}|| | ||| |d4 I d H  t I d H  W d   I d H  n1 I d H sOw   Y   g dks\J W d   I d H  n1 I d H slw   Y  t  }|d4 I d H  W d   I d H  n1 I d H sw   Y  tt/ |d4 I d H  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 )Nvalobjectr   r   c                   s   t |   |  d S rD   )rK   r   )rQ   r   r   r   t   s   ztest_Sequencer.<locals>.tseq	Sequencerc              	     s   | d4 I d H   d W d   I d H  n1 I d H sw   Y  | d4 I d H   d W d   I d H  n1 I d H s@w   Y  | d4 I d H   d W d   I d H  d S 1 I d H scw   Y  d S )N   f1rV      rX   rY      rX   r[   r   rT   rS   r   r   rX      s   
(
(
.ztest_Sequencer.<locals>.f1c              	     s   | d4 I d H   d W d   I d H  n1 I d H sw   Y  | d4 I d H   d W d   I d H  d S 1 I d H sAw   Y  d S )Nr   f2r   r   r`   r   r   r]   r^   r   r   r`      s   
(
.ztest_Sequencer.<locals>.f2r0   )r_   rW   ra   rZ   r\   r   )rQ   rR   r   r   )rT   rU   r   r   )rU   r   r'   r(   r    rF   rG   RuntimeError)rX   r`   rT   r+   r   )r   rS   r   test_Sequencer   s2   (((*"rc   c               
     s8  g  t  d fdd} t 4 I d H 5}|| d || d d	4 I d H  W d   I d H  n1 I d H s<w   Y  W d   I d H  n1 I d H sQw   Y   d
dgks^J tt/ d4 I d H  W d   I d H  n1 I d H s}w   Y  W d    d S W d    d S 1 sw   Y  d S )Niintr   r   c              
     s   t  L}| dkr|  z | 4 I d H  W d   I d H  n1 I d H s(w   Y  W n ty@    d|  d Y n	w W d    d S W d    d S 1 sTw   Y  d S )NrV   zseq(z) RuntimeError)r   CancelScoper*   rb   r   )rd   scoper   rT   r   r   child   s    
("z$test_Sequencer_cancel.<locals>.childrV   r   r   zseq(1) RuntimeErrorzseq(2) RuntimeErrorrY   )rd   re   r   r   )rU   r   r'   r(   rF   rG   rb   )ri   r+   r   rh   r   test_Sequencer_cancel   s&   
*(*"rj   c                	   C  s   t t tt W d    n1 sw   Y  W d    n1 s$w   Y  t t  tt dd  W d    n1 sBw   Y  W d    n1 sQw   Y  tt t1 s`w   Y  d S )NfoorV   )rF   rG   rH   r   rb   	TypeErrorr   r   r   r   test__assert_raises   s   



rm   c               
     s  t    d  d  ddksJ  ddks J  d   dks-J ttj  d W d    n1 sCw   Y  ttj    W d    n1 s]w   Y  tt  d W d    n1 sww   Y   d	 t   	dI d H d	ksJ W d    n1 sw   Y   d
  d t   	dI d H dksJ W d    n1 sw   Y  t   	 I d H dksJ W d    n1 sw   Y  d fdd} d fdd}t
 4 I d H }||d || d W d   I d H  n1 I d H sw   Y  ttj3 t
 4 I d H }||d ||d W d   I d H  n1 I d H sMw   Y  W d    n	1 s]w   Y     ttj  d W d    n	1 s}w   Y   ddksJ   dksJ  	dI d H dksJ  	 I d H dksJ    t  dfdd}t
 4 I d H }||d || W d   I d H  d S 1 I d H sw   Y  d S ) N   123   456rV      1r   s   23456   789string   abc   defs   ghi   ds   efghidatabytesr   r   c                   s   t  I d H   |  d S rD   )r    putrv   ubqr   r   putter  r"   z'test__UnboundeByteQueue.<locals>.putterexpectc                   sD   t     I d H | ksJ W d    d S 1 sw   Y  d S rD   )rE   get)r}   rz   r   r   getter  s   "z'test__UnboundeByteQueue.<locals>.getter   xyzs   asdf   ---    c                     s   t  I d H     d S rD   )r    closer   )ubq2r   r   closer;  s   z'test__UnboundeByteQueue.<locals>.closerrv   rw   r   r   )r}   rw   r   r   r&   )r   rx   
get_nowaitrF   rG   r   
WouldBlockrl   rE   r~   r'   r(   RaisesGroupBusyResourceErrorr   ClosedResourceError)r|   r   r+   r   r   )r{   r   r   test__UnboundeByteQueue   sr   






**0r   c               	     s   t  dfdd  dI d H  dd	ksJ  d
ks#J t   I d H  W d    n1 s8w   Y  ttj   W d    n1 sRw   Y  ttj d W d    n1 smw   Y   dI d H  t   I d H dksJ W d    n1 sw   Y  dd fdd} t	 4 I d H }|
|  |
|  W d   I d H  n1 I d H sw   Y  dksJ t   I d H  W d    n1 sw   Y   I d H dksJ  I d H dksJ ttj  dI d H  W d    n	1 sw   Y  jd u s%J jd u s-J jd u s5J g dfdd}dfdd}dfdd}t |||j|u s[J j|u scJ j|u skJ dI d H   I d H  tI d H    g dksJ d S )Nrv   rw   r   r   c                   s>   t    | I d H  W d    d S 1 sw   Y  d S rD   )rE   send_allry   )mssr   r   do_send_allG  s   "z*test_MemorySendStream.<locals>.do_send_allrn   rV   rp   s   23r   ro   r   c                     s6   z
 dI d H  W d S  t jy   d7 Y d S w )N   xxxrV   )r   r   r   )r   resource_busy_countr   r   do_send_all_count_resourcebusya  s   z=test_MemorySendStream.<locals>.do_send_all_count_resourcebusyr   r   r   c                     s       dks	J d d S )Nrs   send_all_hook)get_data_nowaitr   r   )mss2r   r   r   r   ~  s   z,test_MemorySendStream.<locals>.send_all_hookc                          d d S )N"wait_send_all_might_not_block_hookr   r   r   r   r   r        zAtest_MemorySendStream.<locals>.wait_send_all_might_not_block_hookc                          d d S )N
close_hookr   r   r   r   r   r        z)test_MemorySendStream.<locals>.close_hookrs   )r   r   r   r   r   r&   )MemorySendStreamr   rE   wait_send_all_might_not_blockrF   rG   r   r   get_datar'   r(   acloser   r   r   r   r   r
   r   )r   r+   r   r   r   r   )r   r   r   r   r   r   test_MemorySendStreamD  sl   

(r   c               
     s  t   d fdd}  d | dI d H d	ksJ | d
I d H dks&J  d | d I d H dks6J ttj2 t 4 I d H }|| d
 || d
 W d   I d H  n1 I d H sbw   Y  W d    n1 sqw   Y   jd u s}J  d  	   	  | d
I d H dksJ | d
I d H dksJ | d
I d H dksJ t
tj  d W d    n1 sw   Y  dfdd}g dfdd}t ||j|u sJ j|u sJ d d
I d H dksJ d
I d H dksJ d
I d H dksJ d d _d
I d H dks)J d t   I d H  W d    n	1 sDw   Y  dgksQJ t
tj d
I d H  W d    d S 1 slw   Y  d S )N	max_bytes
int | Noner   rw   c                   s<   t    | I d H W  d    S 1 sw   Y  d S rD   )rE   receive_somer   )mrsr   r   do_receive_some  s   $z1test_MemoryReceiveStream.<locals>.do_receive_somers   rV      ar   s   bcrt   r   r   r   c                     r   )Nr   )put_datar   )mrs2r   r   receive_some_hook  r   z3test_MemoryReceiveStream.<locals>.receive_some_hookc                     r   )Nclosedr   r   r   r   r   r     r   z,test_MemoryReceiveStream.<locals>.close_hooks   yyys   yyyxxxr   s   zzzs   lost on closer   )r   r   r   rw   r&   )MemoryReceiveStreamr   rF   r   r   r   r'   r(   r   put_eofrG   r   r   r   rE   r   )r   r+   r   r   r   )r   r   r   r   test_MemoryReceiveStream  s\   

(




$r   c                    s   t  } |   ttj | dI d H dksJ W d    n1 s%w   Y  |   ttj | d W d    n1 sDw   Y  t  }|d |  ttj |dI d H  W d    d S 1 sow   Y  d S )Nr   r   rn   r   )r   r   rF   rG   r   r   r   r   )r   r   r   r   r   test_MemoryRecvStream_closing  s    
"r   c                    s   t  } t }t| | | dI d H  t| | |dI d H dks%J | dI d H  t| |dds6J |dI d H dksBJ t| |ddsKJ t| |ddsTJ t| |ddr]J |dI d H dksiJ |   t| | |dI d H dks~J d S )	Nrn   r   ro   rV   r      4s   56r   )r   r   memory_stream_pumpr   r   r   )r   r   r   r   r   test_memory_stream_pump  s"   


r   c               	     sl  t  \}  | jd usJ | jd u sJ | jd usJ  jd u s"J | dI d H   dI d H dks6J d fdd}t 4 I d H }|	|d	 t
 I d H  | d	I d H  W d   I d H  n1 I d H sjw   Y  t 4 I d H }|	|d
 t
 I d H  |  I d H  W d   I d H  n1 I d H sw   Y  t  \}  t 4 I d H }|	|d
 t
 I d H  |   W d   I d H  n1 I d H sw   Y  t  \}  | j}d | _| dI d H  ddd}d fdd}t 4 I d H }|	|| |	| W d   I d H  n1 I d H sw   Y  || _| dI d H   dI d H dks4J d S )Nrn   r   expectedrw   r   r   c                   s     dI d H | ksJ d S Nr   r   )r   rr   r   receiver     z1test_memory_stream_one_way_pair.<locals>.receiverrs   r   ro   r+   r   c                   s   t  I d H  | j  d S rD   )r    r)   r*   )r+   r   r   r   cancel_after_idle.  r"   z:test_memory_stream_one_way_pair.<locals>.cancel_after_idlec                     sD   t tj  dI d H  W d    d S 1 sw   Y  d S r   )rF   rG   r   r$   r   r   r   r   r   check_for_cancel2  s   "z9test_memory_stream_one_way_pair.<locals>.check_for_cancelrq   s   456789)r   rw   r   r   )r+   r   r   r   r&   )memory_stream_one_way_pairr   r   r   r   r   r   r   r'   r(   r    r   r   )sr   r+   oldr   r   r   r   r   test_memory_stream_one_way_pair	  sL   
((

(

*r   c               	     s   t  \  dI d H  dI d H  dI d H dks"J  dI d H dks.J   I d H  dI d H dksAJ dfdd} d fd	d
}t 4 I d H }|| ||  W d   I d H  d S 1 I d H ssw   Y  d S )Nrn   rs   r   r   r   r   c                     s"   t  I d H   dI d H  d S )Nr   )r    r   r   )br   r   senderK  s   z'test_memory_stream_pair.<locals>.senderc                     s     dI d H dksJ d S )Nr   r   r   r   )ar   r   r   O  r   z)test_memory_stream_pair.<locals>.receiverr&   )memory_stream_pairr   r   send_eofr   r'   r(   )r   r   r+   r   )r   r   r   test_memory_stream_pairA  s   

.r   c                    s:   ddd} t | d I d H  d	dd}t|d I d H  d S )
Nr   ,tuple[MemorySendStream, MemoryReceiveStream]c                        t  S rD   )r   r   r   r   r   one_way_stream_makerX     zDtest_memory_streams_with_generic_tests.<locals>.one_way_stream_makerqtuple[StapledStream[MemorySendStream, MemoryReceiveStream], StapledStream[MemorySendStream, MemoryReceiveStream]]c                     r   rD   )r   r   r   r   r   half_closeable_stream_maker]     zKtest_memory_streams_with_generic_tests.<locals>.half_closeable_stream_maker)r   r   )r   r   )check_one_way_streamcheck_half_closeable_stream)r   r   r   r   r   &test_memory_streams_with_generic_testsW  
   

r   c                    s:   ddd} t | | I d H  d	dd}t||I d H  d S )
Nr    tuple[SendStream, ReceiveStream]c                     r   rD   )lockstep_stream_one_way_pairr   r   r   r   r   g  r   zFtest_lockstep_streams_with_generic_tests.<locals>.one_way_stream_makerYtuple[StapledStream[SendStream, ReceiveStream], StapledStream[SendStream, ReceiveStream]]c                     r   rD   )lockstep_stream_pairr   r   r   r   two_way_stream_makerl  r   zFtest_lockstep_streams_with_generic_tests.<locals>.two_way_stream_maker)r   r   )r   r   )r   check_two_way_stream)r   r   r   r   r   (test_lockstep_streams_with_generic_testsf  r   r   c                    s2  ddd} t  }|dI d H  |d | t|I d H  t  }|d	I d H  |d | t|I d H  trYt jt jd
}|dI d H  |d | t|I d H  tt drt jt jd
}t	
 $}| d}||I d H  |d | t|I d H  W d    d S 1 sw   Y  d S d S )Nlistenerr   r   r   c                   s   | 4 I d H f t | I d H }|4 I d H B |  I d H }|4 I d H  |dI d H  |dI d H dks8J W d   I d H  n1 I d H sHw   Y  W d   I d H  n1 I d H s]w   Y  W d   I d H  d S 1 I d H ssw   Y  d S )N   xrV   )open_stream_to_socket_listeneracceptr   r   )r   client_streamserver_streamr   r   r   checkv  s   **.z2test_open_stream_to_socket_listener.<locals>.check)z	127.0.0.1r   r   )z0.0.0.0r   )family)z::r   AF_UNIXz/sock)r   r   r   r   )tsocketr   bindlistenr   r   AF_INET6hasattrr   tempfileTemporaryDirectory)r   socktmpdirpathr   r   r   #test_open_stream_to_socket_listeneru  s0   








"r   c                  C  sV   ddd} t jtdd	 t| t td
dd W d    d S 1 s$w   Y  d S )Nr-   rR   autojump_clockr   r   c                   s   d S rD   r   r-   r   r   r   r   busy_kitchen  s   z$test_trio_test.<locals>.busy_kitchenz"^too many clocks spoil the broth!$)matchr   )autojump_thresholdr   )r-   rR   r   rR   r   r   )rF   rG   
ValueError	trio_testr.   )r   r   r   r   test_trio_test  s   
"r   r&   )r-   r.   r   r   )rB   rC   r   r   )/
__future__r   r   typingr   rF    r   r   r   r   _core._tests.tutilr   _highlevel_genericr	   r
   _highlevel_socketr   testingtesting._check_streamsr   testing._memory_streamsr   trior   trio.abcr   r   r,   r5   rA   rN   rP   rc   rj   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sB    

 

*


&


H
\
=


8


*