Ë
    êmxis.  ã                   óR  — 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 d dlZ	d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ  G d	„ d
e«      Z G d„ dej6                  «      Z G d„ dej6                  «      Z G d„ dej6                  «      Z G d„ de«      Zy)é    N)ÚThreadPoolExecutor)Úgen)ÚIOLoop)ÚAsyncIOLoopÚto_asyncio_futureÚAddThreadSelectorEventLoop)ÚAsyncTestCaseÚgen_testÚsetup_with_context_managerÚAsyncHTTPTestCase)Úignore_deprecation)ÚApplicationÚRequestHandlerc                   óN   — e Zd Zed„ «       Zd„ Zed„ «       Zed„ «       Zd„ Z	d„ Z
y)ÚAsyncIOLoopTestc                 ó.   — | j                   j                  S ©N)Úio_loopÚasyncio_loop©Úselfs    úP/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/asyncio_test.pyr   zAsyncIOLoopTest.asyncio_loop(   s   € à�|‰|×(Ñ(Ð(ó    c                 óp   ‡ — ˆ fd„}‰ j                   j                   |«       «       ‰ j                  «        y )Nc               “   óh   •K  — t        j                  «       j                  ‰ j                  «       y ­wr   )ÚasyncioÚget_event_loopÚ	call_soonÚstopr   s   €r   Úadd_callbackz;AsyncIOLoopTest.test_asyncio_callback.<locals>.add_callback.   s"   øè ø€ Ü×"Ñ"Ó$×.Ñ.¨t¯y©yÕ9ùs   ƒ/2)r   Úrun_until_completeÚwait)r   r    s   ` r   Útest_asyncio_callbackz%AsyncIOLoopTest.test_asyncio_callback,   s)   ø€ ô	:ð 	×Ñ×,Ñ,©\«^Ô<Ø�	‰	�r   c              #   ó¤   K  — t        j                  t        j                  «       j                  d d„ «      «      –—}| j	                  |d«       y ­w)Nc                   ó   — y©Né*   © r(   r   r   ú<lambda>z5AsyncIOLoopTest.test_asyncio_future.<locals>.<lambda>9   ó   � r   r'   )r   Úensure_futurer   Úrun_in_executorÚassertEqual)r   Úxs     r   Útest_asyncio_futurez#AsyncIOLoopTest.test_asyncio_future4   sH   è ø€ ô ×'Ñ'Ü×"Ñ"Ó$×4Ñ4°T¹:ÓFó
ñ 
ˆð 	×Ñ˜˜BÕùs   ‚AAc              #   ón   K  — t         j                  d„ «       } |«       –—}| j                  |d«       y ­w)Nc               3   óp   K  — t        j                  «       } | j                  d d„ «      E d {  –—† }|S 7 Œ­w)Nc                   ó   — yr&   r(   r(   r   r   r)   zDAsyncIOLoopTest.test_asyncio_yield_from.<locals>.f.<locals>.<lambda>B   r*   r   )r   r   r,   )Ú
event_loopr.   s     r   Úfz2AsyncIOLoopTest.test_asyncio_yield_from.<locals>.f?   s4   è ø€ ä ×/Ñ/Ó1ˆJØ%×5Ñ5°d¹JÓG×GˆAØˆHð Hús   ‚+6­4®6r'   )r   Ú	coroutiner-   )r   r4   Úresults      r   Útest_asyncio_yield_fromz'AsyncIOLoopTest.test_asyncio_yield_from=   s7   è ø€ ä	�‰ñ	ó 
ð	ñ
 “s‘ˆØ×Ñ˜ Õ$ùs   ‚35c                 ót  ‡‡— t         j                  d„ «       Šˆfd„Šˆfd„}ˆfd„}| j                  | j                  j	                  ‰«      d«       | j                  | j                  j	                  |«      d«       | j                  | j                  j	                  |«      d«       | j                  | j
                  j                   ‰«       «      d«       | j                  | j
                  j                   |«       «      d«       | j                  | j
                  j                   |«       «      d«       y )Nc               3   óX   K  — t         j                  –— t        j                  d«      ‚­wr&   )r   ÚmomentÚReturnr(   r   r   Útornado_coroutinez?AsyncIOLoopTest.test_asyncio_adapter.<locals>.tornado_coroutineM   s   è ø€ ä—*‘*ÒÜ—*‘*˜R“.Ð ùs   ‚(*c               “   ó.   •K  —  ‰ «       ƒ d {  –—† S 7 Œ­wr   r(   ©r<   s   €r   Ú native_coroutine_without_adapterzNAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_without_adapterR   s   øè ø€ Ù*Ó,×,Ð,Ð,ús   ƒŽ�c               “   ó@   •K  — t         ‰ «       «      ƒ d {  –—† S 7 Œ­wr   ©r   r>   s   €r   Únative_coroutine_with_adapterzKAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapterU   s   øè ø€ Ü*Ñ+<Ó+>Ó?×?Ð?Ð?úó   ƒ—˜c               “   ó@   •K  — t         ‰ «       «      ƒ d {  –—† S 7 Œ­wr   rA   )r?   s   €r   Únative_coroutine_with_adapter2zLAsyncIOLoopTest.test_asyncio_adapter.<locals>.native_coroutine_with_adapter2Y   s   øè ø€ Ü*Ñ+KÓ+MÓN×NÐNÐNúrC   r'   )r   r5   r-   r   Úrun_syncr   r!   )r   rB   rE   r?   r<   s      @@r   Útest_asyncio_adapterz$AsyncIOLoopTest.test_asyncio_adapterH   s  ù€ ô
 
�‰ñ	!ó 
ð	!ô	-ô	@ô	Oð 	×Ñ˜Ÿ™×.Ñ.Ð/OÓPÐRTÔUØ×Ñ˜Ÿ™×.Ñ.Ð/LÓMÈrÔRØ×Ñ˜Ÿ™×.Ñ.Ð/MÓNÐPRÔSð 	×ÑØ×Ñ×0Ñ0Ñ1QÓ1SÓTØô	
ð 	×ÑØ×Ñ×0Ñ0Ñ1NÓ1PÓQØô	
ð 	×ÑØ×Ñ×0Ñ0Ñ1OÓ1QÓRØõ	
r   c                 ó~   — t        t        j                  «       «      }|j                  «        |j                  «        y r   )r   r   r   Úclose©r   Úloops     r   Ú test_add_thread_close_idempotentz0AsyncIOLoopTest.test_add_thread_close_idempotentp   s'   € Ü)¬'×*@Ñ*@Ó*BÓCˆØ�
‰
ŒØ�
‰
�r   N)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r#   r
   r/   r7   rG   rL   r(   r   r   r   r   '   sL   „ Øñ)ó ð)òð ñ ó ð ð ñ%ó ð%ò&
óPr   r   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚLeakTestc                 ó8   — t        d¬«      j                  «        y )NF©Úmake_current)r   rI   r   s    r   ÚsetUpzLeakTest.setUpw   s   € ä Ô'×-Ñ-Õ/r   c                 óˆ   — 	 t        j                  «       j                  «       }|j                  «        y # t        $ r Y y w xY wr   )r   Úget_event_loop_policyr   rI   Ú	ExceptionrJ   s     r   ÚtearDownzLeakTest.tearDown{   s=   € ð	Ü×0Ñ0Ó2×AÑAÓCˆDð
 �J‰J�Løô	 ò 	áð	ús   ‚"5 µ	AÁ Ac                 ól  — t        t        j                  «      }t        d«      D ]S  }t	        j
                  «       5  t	        j                  dt        «       t        «       }|j                  «        d d d «       ŒU t        t        j                  «      |z
  }| j                  |d«       y # 1 sw Y   ŒŽxY w)Né
   Úignorer   )Úlenr   Ú_ioloop_for_asyncioÚrangeÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningr   rI   r-   ©r   Ú
orig_countÚirK   Ú	new_counts        r   Útest_ioloop_close_leakzLeakTest.test_ioloop_close_leak„   s“   € Üœ×3Ñ3Ó4ˆ
Ü�r“ò 	ˆAä×(Ñ(Ó*ñ Ü×%Ñ% hÔ0BÔCÜ"“}�Ø—
‘
”÷ð ð	ô œ×2Ñ2Ó3°jÑ@ˆ	Ø×Ñ˜ AÕ&÷ð ús   ¼5B*Â*B3	c                 óŽ  — t        t        j                  «      }t        d«      D ]p  }t	        j
                  «       }|j                  t        j                  «       |j                  |j                  «       |j                  «        |j                  «        Œr t        t        j                  «      |z
  }| j                  |d«       y )Nr\   é   )r^   r   r_   r`   r   Únew_event_loopr   Úcurrentr   Úrun_foreverrI   r-   re   s        r   Útest_asyncio_close_leakz LeakTest.test_asyncio_close_leak�   s‘   € Üœ×3Ñ3Ó4ˆ
Ü�r“ò 	ˆAä×)Ñ)Ó+ˆDØ�N‰Nœ6Ÿ>™>Ô*Ø�N‰N˜4Ÿ9™9Ô%Ø×ÑÔØ�J‰J�Lð	ô œ×2Ñ2Ó3°jÑ@ˆ	ð 	×Ñ˜ AÕ&r   N)rM   rN   rO   rV   rZ   ri   ro   r(   r   r   rR   rR   v   s   „ ò0òò	'ó'r   rR   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSelectorThreadLeakTestc                 ó|   — t        j                  | j                  «       «       t        j                  «       | _        y r   )r   ÚrunÚdummy_tornado_coroutineÚ	threadingÚactive_countÚorig_thread_countr   s    r   rV   zSelectorThreadLeakTest.setUp    s*   € ô 	�‰�D×0Ñ0Ó2Ô3Ü!*×!7Ñ!7Ó!9ˆÕr   c                 ór  — t        j                   «       dz   }t        j                   «       |k  rct        t        j                  «       «      }t	        |«      | j
                  k  rn-t        j                  d«       t        j                   «       |k  rŒc| j                  t	        «      | j
                  |«       y )Nrk   gš™™™™™¹?)ÚtimeÚlistru   Ú	enumerater^   rw   ÚsleepÚassertLessEqual)r   ÚdeadlineÚthreadss      r   Úassert_no_thread_leakz,SelectorThreadLeakTest.assert_no_thread_leak¦   s‚   € ô —9‘9“; ‘?ˆÜ�i‰i‹k˜HÒ$Üœ9×.Ñ.Ó0Ó1ˆGÜ�7‹|˜t×5Ñ5Ò5ØÜ�J‰J�sŒOô	 �i‰i‹k˜HÓ$ð
 	×ÑœS ›\¨4×+AÑ+AÀ7ÕKr   c              ƒ   ó4   K  — t        j                  «        y ­wr   )r   rm   r   s    r   rt   z.SelectorThreadLeakTest.dummy_tornado_coroutine´   s   è ø€ ä�‰Õùs   ‚c                 óŠ   — t        d«      D ]%  }t        j                  | j                  «       «       Œ' | j	                  «        y ©Nr\   )r`   r   rs   rt   r€   )r   rg   s     r   Útest_asyncio_runz'SelectorThreadLeakTest.test_asyncio_run¸   s8   € Ü�r“ò 	8ˆAä�K‰K˜×4Ñ4Ó6Õ7ð	8ð 	×"Ñ"Õ$r   c                 ó  — t        d«      D ]d  }t        j                  «       }|j                  | j	                  «       «       |j                  |j                  «       «       |j                  «        Œf | j                  «        y rƒ   )r`   r   rl   r!   rt   Úshutdown_asyncgensrI   r€   ©r   rg   rK   s      r   Útest_asyncio_manualz*SelectorThreadLeakTest.test_asyncio_manual¾   sh   € Ü�r“ò 	ˆAÜ×)Ñ)Ó+ˆDØ×#Ñ# D×$@Ñ$@Ó$BÔCà×#Ñ# D×$;Ñ$;Ó$=Ô>Ø�J‰J�Lð	ð 	×"Ñ"Õ$r   c                 ó²   — t        d«      D ]9  }t        d¬«      }|j                  | j                  «       |j	                  «        Œ; | j                  «        y )Nr\   FrT   )r`   r   rF   rt   rI   r€   r‡   s      r   Útest_tornadoz#SelectorThreadLeakTest.test_tornadoÇ   sJ   € Ü�r“ò 	ˆAô  uÔ-ˆDØ�M‰M˜$×6Ñ6Ô7Ø�J‰J�Lð	ð 	×"Ñ"Õ$r   N)	rM   rN   rO   rV   r€   rt   r„   rˆ   rŠ   r(   r   r   rq   rq   ž   s!   „ ò:òLòò%ò%ó%r   rq   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚAnyThreadEventLoopPolicyTestc                 óÐ   — t        | t        «       «       t        j                  j                  j
                  | _        t	        j                  «       | _        t        d«      | _	        y )Nrk   )
r   r   ÚtornadoÚplatformr   ÚAnyThreadEventLoopPolicyrX   Úorig_policyr   Úexecutorr   s    r   rV   z"AnyThreadEventLoopPolicyTest.setUpÒ   sN   € Ü" 4Ô);Ó)=Ô>ô ×Ñ×$Ñ$×=Ñ=ð 	Ô%ô #×8Ñ8Ó:ˆÔÜ*¨1Ó-ˆ�r   c                 óv   — t        j                  | j                  «       | j                  j	                  «        y r   )r   Úset_event_loop_policyr‘   r’   Úshutdownr   s    r   rZ   z%AnyThreadEventLoopPolicyTest.tearDownÜ   s&   € Ü×%Ñ% d×&6Ñ&6Ô7Ø�‰×ÑÕ r   c                 ó^   — d„ }| j                   j                  |«      }|j                  «       S )Nc                  óN   — t        j                  «       } | j                  «        | S )a#  Get the event loop. Close it if one is returned.

            Returns the (closed) event loop. This is a silly thing
            to do and leaves the thread in a broken state, but it's
            enough for this test. Closing the loop avoids resource
            leak warnings.
            ©r   r   rI   )rK   s    r   Úget_and_close_event_loopzWAnyThreadEventLoopPolicyTest.get_event_loop_on_thread.<locals>.get_and_close_event_loopá   s    € ô ×)Ñ)Ó+ˆDØ�J‰JŒLØˆKr   )r’   Úsubmitr6   )r   r™   Úfutures      r   Úget_event_loop_on_threadz5AnyThreadEventLoopPolicyTest.get_event_loop_on_threadà   s*   € ò
	ð —‘×%Ñ%Ð&>Ó?ˆØ�}‰}‹Ðr   c                 ó\  — t        j                  «       5  t        j                  dt        «       | j	                  t
        | j                  j                  t        j                  «      j                  «       t        j                  | j                  «       «       | j                  | j                  j                  t        j                  «      j                  «       t        j                  «       | j                  j                  d„ «      j                  «        d d d «       y # 1 sw Y   y xY w)Nr]   c                  óF   — t        j                  «       j                  «       S r   r˜   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_asyncio_accessor.<locals>.<lambda>   ó   € ¬×)?Ñ)?Ó)A×)GÑ)GÓ)I€ r   )ra   rb   rc   rd   ÚassertRaisesÚRuntimeErrorr’   rš   r   r   r6   r”   r�   ÚassertIsInstanceÚAbstractEventLoopr   s    r   Útest_asyncio_accessorz2AnyThreadEventLoopPolicyTest.test_asyncio_accessorð   s×   € Ü×$Ñ$Ó&ñ 	TÜ×!Ñ! (Ô,>Ô?ð ×ÑÜ˜dŸm™m×2Ñ2´7×3IÑ3IÓJ×QÑQôô ×)Ñ)¨$×*GÑ*GÓ*IÔJØ×!Ñ!Ø—‘×$Ñ$¤W×%;Ñ%;Ó<×CÑCÓEÜ×)Ñ)ôð �M‰M× Ñ Ñ!IÓJ×QÑQÔS÷	T÷ 	Tñ 	Tús   •DD"Ä"D+c                 ó¤  — t        j                  «       5  t        j                  dt        «       | j	                  | j
                  j                  t        j                  «      j                  «       t        «       | j
                  j                  d„ «      j                  «        t        j                  | j                  «       «       | j	                  | j
                  j                  t        j                  «      j                  «       t        «       | j
                  j                  d„ «      j                  «        d d d «       y # 1 sw Y   y xY w)Nr]   c                  óF   — t        j                  «       j                  «       S r   r˜   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>
  rŸ   r   c                  óF   — t        j                  «       j                  «       S r   r˜   r(   r   r   r)   zDAnyThreadEventLoopPolicyTest.test_tornado_accessor.<locals>.<lambda>  rŸ   r   )ra   rb   rc   rd   r¢   r’   rš   r   rm   r6   r   r”   r�   r   s    r   Útest_tornado_accessorz2AnyThreadEventLoopPolicyTest.test_tornado_accessor  så   € ô ×$Ñ$Ó&ñ 		TÜ×!Ñ! (Ô,>Ô?Ø×!Ñ! $§-¡-×"6Ñ"6´v·~±~Ó"F×"MÑ"MÓ"OÔQWÔXð �M‰M× Ñ Ñ!IÓJ×QÑQÔSä×)Ñ)¨$×*GÑ*GÓ*IÔJØ×!Ñ! $§-¡-×"6Ñ"6´v·~±~Ó"F×"MÑ"MÓ"OÔQWÔXØ�M‰M× Ñ Ñ!IÓJ×QÑQÔS÷		T÷ 		Tñ 		Tús   •D(EÅEN)rM   rN   rO   rV   rZ   rœ   r¤   r¨   r(   r   r   rŒ   rŒ   Ñ   s   „ ò.ò!òò Tó$Tr   rŒ   c                   óp   — e Zd ZdZdZ ej                  dd¬«      Zej                  e«       de	fd„Z
d„ Zy	)
ÚSelectorThreadContextvarsTestÚfooú/Útornado_test_ctxÚdefault)r®   Úreturnc                 ón   ‡— | j                   Š G ˆfd„dt        «      }t        | j                  |fg«      S )Nc                   ó   •— e Zd Zˆ fd„Zy)ú6SelectorThreadContextvarsTest.get_app.<locals>.Handlerc              “   óL   •K  — | j                  ‰j                  «       «       y ­wr   )ÚwriteÚget)r   r­   s    €r   rµ   z:SelectorThreadContextvarsTest.get_app.<locals>.Handler.get  s   øè ø€ ð —
‘
Ð+×/Ñ/Ó1Õ2ùs   ƒ!$N)rM   rN   rO   rµ   )r­   s   €r   ÚHandlerr²     s   ø„ õ
3r   r¶   )r­   r   r   Útest_endpoint)r   r¶   r­   s     @r   Úget_appz%SelectorThreadContextvarsTest.get_app  s6   ø€ Ø×0Ñ0Ðö	3”nô 	3ô ˜T×/Ñ/°Ð9Ð:Ó;Ð;r   c                 óž   — | j                  | j                  | j                  | j                  «      j                  j                  «       «       y r   )r-   Ú	ctx_valueÚfetchr·   ÚbodyÚdecoder   s    r   Útest_context_varsz/SelectorThreadContextvarsTest.test_context_vars)  s4   € Ø×Ñ˜Ÿ™¨¯©°D×4FÑ4FÓ)G×)LÑ)L×)SÑ)SÓ)UÕVr   N)rM   rN   rO   rº   r·   ÚcontextvarsÚ
ContextVarr­   Úsetr   r¸   r¾   r(   r   r   rª   rª     sB   „ Ø€IØ€MØ-�{×-Ñ-Ð.@È)ÔTÐØ×Ñ˜Ô#ð<˜ó <ó$Wr   rª   ) r   r¿   ru   ry   Úunittestra   Úconcurrent.futuresr   Útornado.platform.asynciorŽ   r   Útornado.ioloopr   r   r   r   Útornado.testingr	   r
   r   r   Útornado.test.utilr   Útornado.webr   r   r   ÚTestCaserR   rq   rŒ   rª   r(   r   r   ú<module>rÊ      sš   ðó Û Û Û Û Û å 1Û Ý Ý !÷ñ ÷
ó õ 1ß 3ôL�mô Lô^%'ˆx× Ñ ô %'ôP0%˜X×.Ñ.ô 0%ôf=T 8×#4Ñ#4ô =Tô@WÐ$5õ Wr   