§
    Ètºf°  ã                   ó–   — d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ  G d„ d	e¦  «        Z G d
„ de¦  «        ZdS )z*
Tests for C{await} support in Deferreds.
é    N)ÚNoReturn)ÚDeferredÚensureDeferredÚfailÚmaybeDeferredÚsucceed)ÚClock)ÚFailure)ÚTestCasec                   ó   — e Zd ZdZdS )ÚSampleExceptionz2
    A specific sample exception for testing.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úe/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/test/test_defer_await.pyr   r      s   € € € € € ðð ð ð r   r   c                   ób   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„Zdd„Zdd„ZdS )Ú
AwaitTestsz@
    Tests for using Deferreds in conjunction with PEP-492.
    ÚreturnNc                 ó�   — t          ¦   «         }|                     ¦   «         }|                      |t          |¦  «        ¦  «         dS )z<
        C{Deferred.__await__} returns an iterable.
        N)r   Ú	__await__ÚassertEqualÚiter)ÚselfÚdÚawaitedDeferreds      r   Útest_awaitReturnsIterablez$AwaitTests.test_awaitReturnsIterable$   s>   € õ %™JœJˆØŸ+š+™-œ-ˆØ×Ò˜­$¨Ñ*?Ô*?Ñ@Ô@Ð@Ð@Ð@r   c                 ó@  ‡— dt           fˆfd„}dt           fd„Š |¦   «         }|                      |t          j        ¦  «         t	          j        |¦  «        }|                      |t          ¦  «         |                      |¦  «        }|                      |d¦  «         dS )zU
        L{Deferred.fromCoroutine} will turn a coroutine into a L{Deferred}.
        r   c               “   óZ   •K  — t          d¦  «        } | ƒ d {V —†  ‰¦   «         ƒ d {V —†}|S )NÚbar©r   )r   ÚresÚrun2s     €r   Úrunz2AwaitTests.test_deferredFromCoroutine.<locals>.run1   s?   øè è € Ý˜‘”ˆAØˆGˆGˆGˆGˆGˆGˆGØ˜™œ�,�,�,�,�,�,ˆCØˆJr   c               “   ó8   K  — t          d¦  «        } | ƒ d {V —†}|S ©NÚfoor#   ©r   r$   s     r   r%   z3AwaitTests.test_deferredFromCoroutine.<locals>.run27   ó'   è è € Ý˜‘”ˆAØ�'�'�'�'�'�'ˆCØˆJr   r)   N)ÚstrÚassertIsInstanceÚtypesÚCoroutineTyper   ÚfromCoroutineÚsuccessResultOfr   )r   r&   Úrr   r$   r%   s        @r   Útest_deferredFromCoroutinez%AwaitTests.test_deferredFromCoroutine,   sÂ   ø€ ð
	�3ð 	ð 	ð 	ð 	ð 	ð 	ð	�Cð 	ð 	ð 	ð 	ð ˆC‰EŒEˆØ×Ò˜a¥Ô!4Ñ5Ô5Ð5õ Ô" 1Ñ%Ô%ˆØ×Ò˜a¥Ñ*Ô*Ð*ð ×"Ò" 1Ñ%Ô%ˆØ×Ò˜˜eÑ$Ô$Ð$Ð$Ð$r   c                 óª   — dt           fd„}t          j         |¦   «         ¦  «        }|                      |¦  «        }|                      |d¦  «         dS )zc
        L{Deferred.fromCoroutine} allows a function to C{await} on a
        L{Deferred}.
        r   c               “   ó8   K  — t          d¦  «        } | ƒ d {V —†}|S r(   r#   r*   s     r   r&   z"AwaitTests.test_basic.<locals>.runN   r+   r   r)   N)r,   r   r0   r1   r   ©r   r&   r   r$   s       r   Ú
test_basiczAwaitTests.test_basicH   sd   € ð	�3ð 	ð 	ð 	ð 	õ
 Ô" 3 3¡5¤5Ñ)Ô)ˆØ×"Ò" 1Ñ%Ô%ˆØ×Ò˜˜eÑ$Ô$Ð$Ð$Ð$r   c                 ó    — dt           fd„}t           |¦   «         ¦  «        }|                      |¦  «        }|                      |d¦  «         dS )zS
        L{ensureDeferred} allows a function to C{await} on a L{Deferred}.
        r   c               “   ó8   K  — t          d¦  «        } | ƒ d {V —†}|S r(   r#   r*   s     r   r&   z0AwaitTests.test_basicEnsureDeferred.<locals>.run\   r+   r   r)   N)r,   r   r1   r   r6   s       r   Útest_basicEnsureDeferredz#AwaitTests.test_basicEnsureDeferredW   sa   € ð
	�3ð 	ð 	ð 	ð 	õ
 ˜3˜3™5œ5Ñ!Ô!ˆØ×"Ò" 1Ñ%Ô%ˆØ×Ò˜˜eÑ$Ô$Ð$Ð$Ð$r   c                 ó  — dt           fd„}t          j         |¦   «         ¦  «        }|                      |¦  «        }|                      t          |j        ¦  «        t          ¦  «         |                      |j        j        d¦  «         dS )zš
        An exception in a coroutine scheduled with L{Deferred.fromCoroutine}
        will cause the returned L{Deferred} to fire with a failure.
        r   c               “   óR   K  — t          d¦  «        } | ƒ d {V —† t          d¦  «        ‚)Nr)   úOh no!)r   Ú
ValueError)r   s    r   r&   z&AwaitTests.test_exception.<locals>.runk   s0   è è € Ý˜‘”ˆAØˆGˆGˆGˆGˆGˆGˆGÝ˜XÑ&Ô&Ð&r   )r=   N)	r   r   r0   ÚfailureResultOfr   ÚtypeÚvaluer>   Úargsr6   s       r   Útest_exceptionzAwaitTests.test_exceptione   s†   € ð	'�8ð 	'ð 	'ð 	'ð 	'õ
 Ô" 3 3¡5¤5Ñ)Ô)ˆØ×"Ò" 1Ñ%Ô%ˆØ×Ò�˜cœi™œ­*Ñ5Ô5Ð5Ø×Ò˜œœ¨Ñ5Ô5Ð5Ð5Ð5r   c                 ó8  ‡— dd„}t          |¦  «        Šdˆfd„}|                      t          j         |¦   «         ¦  «        ¦  «        }|                      d|                     ¦   «         ¦  «         |                      d|                     ¦   «         ¦  «         dS )zé
        When a Deferred is awaited upon that has already failed with a Failure
        that has a traceback, both the place that the synchronous traceback
        comes from and the awaiting line are shown in the traceback.
        r   Nc                  ó   — t          ¦   «         ‚©N)r   r   r   r   ÚraiseszCAwaitTests.test_synchronousDeferredFailureTraceback.<locals>.raises|   s   € Ý!Ñ#Ô#Ð#r   c               “   ó   •K  — ‰ ƒ d {V —†S rF   r   ©Úits   €r   ÚdoomedzCAwaitTests.test_synchronousDeferredFailureTraceback.<locals>.doomed�   ó   øè è € Ø�8�8�8�8�8�8ˆOr   ú, in doomed
z, in raises
©r   N)r   r?   r   r0   ÚassertInÚgetTraceback)r   rG   rK   ÚfailurerJ   s       @r   Ú(test_synchronousDeferredFailureTracebackz3AwaitTests.test_synchronousDeferredFailureTracebacku   s°   ø€ ð	$ð 	$ð 	$ð 	$õ ˜6Ñ"Ô"ˆð	ð 	ð 	ð 	ð 	ð 	ð ×&Ò&¥xÔ'=¸f¸f¹h¼hÑ'GÔ'GÑHÔHˆà�Š�o w×';Ò';Ñ'=Ô'=Ñ>Ô>Ð>Ø�Š�o w×';Ò';Ñ'=Ô'=Ñ>Ô>Ð>Ð>Ð>r   c                 ó¬  ‡— dt           fd„}t          ¦   «         Šdˆfd„}t          j         |¦   «         ¦  «        }|                      |¦  «         ‰                      |¦   «         ¦  «         |                      |¦  «        }|                      d|                     ¦   «         ¦  «         |                      d|                     ¦   «         ¦  «         dS )zâ
        When a Deferred is awaited upon that later fails with a Failure that
        has a traceback, both the place that the synchronous traceback comes
        from and the awaiting line are shown in the traceback.
        r   c                  ó\   — 	 t          ¦   «         ‚# t           $ r t          ¦   «         cY S w xY wrF   )r   r
   r   r   r   ÚreturnsFailurezEAwaitTests.test_asyncDeferredFailureTraceback.<locals>.returnsFailure�   s>   € ð!Ý%Ñ'Ô'Ð'øÝ"ð !ð !ð !Ý‘y”yÐ Ð Ð ð!øøøs   ‚ �+ª+Nc               “   ó   •K  — ‰ ƒ d {V —†S rF   r   rI   s   €r   rK   z=AwaitTests.test_asyncDeferredFailureTraceback.<locals>.doomed˜   rL   r   rM   z, in returnsFailure
rN   )r
   r   r0   ÚassertNoResultÚerrbackr?   rO   rP   )r   rU   rK   ÚstartedrQ   rJ   s        @r   Ú"test_asyncDeferredFailureTracebackz-AwaitTests.test_asyncDeferredFailureTraceback‰   sç   ø€ ð	!¥ð 	!ð 	!ð 	!ð 	!õ &™ZœZˆð	ð 	ð 	ð 	ð 	ð 	õ Ô(¨¨©¬Ñ2Ô2ˆØ×Ò˜GÑ$Ô$Ð$Ø
�
Š
�>�>Ñ#Ô#Ñ$Ô$Ð$Ø×&Ò& wÑ/Ô/ˆØ�Š�o w×';Ò';Ñ'=Ô'=Ñ>Ô>Ð>Ø�ŠÐ-¨w×/CÒ/CÑ/EÔ/EÑFÔFÐFÐFÐFr   c                 ó\  ‡‡‡— t          ¦   «         Šg Šdt          fˆˆfd„Šdt          fˆˆˆfd„}t          j         |¦   «         ¦  «        }‰                     d¦  «         |                      ‰ddg¦  «         ‰                     d¦  «         |                      ‰g d¢¦  «         ‰                     d¦  «         |                      ‰g d¢¦  «         ‰                     d¦  «         |                      ‰g d	¢¦  «         |                      |¦  «        }|                      |d
¦  «         dS )z¢
        A coroutine scheduled with L{Deferred.fromCoroutine} that awaits a
        L{Deferred} suspends its execution until the inner L{Deferred} fires.
        r   c               “   óÄ   •K  — ‰                      d¦  «         t          ¦   «         } ‰                     d| j        d¦  «         | ƒ d {V —† ‰                      d¦  «         dS )Né   é   é   úYay!©Úappendr   Ú	callLaterÚcallback)r   ÚreactorÚsectionss    €€r   Úrunonez'AwaitTests.test_twoDeep.<locals>.runoneª   sd   øè è € Ø�OŠO˜AÑÔÐÝ'™zœzˆAØ×Ò˜a ¤¨QÑ/Ô/Ð/ØˆGˆGˆGˆGˆGˆGˆGØ�OŠO˜AÑÔÐØ�6r   c               “   ó  •K  — ‰                      d¦  «          ‰¦   «         ƒ d {V —†} ‰                      d¦  «         t          ¦   «         }‰                     d|j        d¦  «         |ƒ d {V —† ‰                      d¦  «         | S )Nr^   é   é   ra   )Úresultr   re   rg   rf   s     €€€r   r&   z$AwaitTests.test_twoDeep.<locals>.run²   s�   øè è € Ø�OŠO˜AÑÔÐØ!˜6™8œ8�^�^�^�^�^�^ˆFØ�OŠO˜AÑÔÐÝ'™zœzˆAØ×Ò˜a ¤¨QÑ/Ô/Ð/ØˆGˆGˆGˆGˆGˆGˆGØ�OŠO˜AÑÔÐØˆMr   gÍÌÌÌÌÌì?r^   r]   çš™™™™™¹?)r^   r]   r_   ri   )r^   r]   r_   ri   rj   r`   N)r	   r,   r   r0   Úadvancer   r1   )r   r&   r   r$   re   rg   rf   s       @@@r   Útest_twoDeepzAwaitTests.test_twoDeep¢   se  øøø€ õ
 ‘'”'ˆØˆð	�cð 	ð 	ð 	ð 	ð 	ð 	ð 	ð	�3ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ Ô" 3 3¡5¤5Ñ)Ô)ˆà�Š˜ÑÔÐØ×Ò˜ A q 6Ñ*Ô*Ð*à�Š˜ÑÔÐØ×Ò˜ < < <Ñ0Ô0Ð0à�Š˜ÑÔÐØ×Ò˜ < < <Ñ0Ô0Ð0à�Š˜ÑÔÐØ×Ò˜ ? ? ?Ñ3Ô3Ð3à×"Ò" 1Ñ%Ô%ˆØ×Ò˜˜fÑ%Ô%Ð%Ð%Ð%r   c                 ó¬   ‡ — dt           fˆ fd„}‰                      t          j         |¦   «         ¦  «        ¦  «        }‰                      |d¦  «         dS )zO
        Awaiting an already failed Deferred will raise the exception.
        r   c               “   óº   •K  — 	 t          t          d¦  «        ¦  «        ƒ d {V —† n3# t          $ r&} ‰                     | j        d¦  «         Y d } ~ dS d } ~ ww xY wdS )NÚBoom)rq   r^   r   )r   r>   r   rB   )Úer   s    €r   Útestz%AwaitTests.test_reraise.<locals>.testÒ   s‚   øè è € ðÝ�: fÑ-Ô-Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.øÝð ð ð Ø× Ò  ¤¨Ñ3Ô3Ð3Ø�q�q�q�q�qøøøøðøøøð �1s   …"( ¨
A²AÁAr^   N)Úintr1   r   r0   r   )r   rs   r$   s   `  r   Útest_reraisezAwaitTests.test_reraiseÍ   sj   ø€ ð
	�Cð 	ð 	ð 	ð 	ð 	ð 	ð ×"Ò"¥8Ô#9¸$¸$¹&¼&Ñ#AÔ#AÑBÔBˆØ×Ò˜˜aÑ Ô Ð Ð Ð r   c                 óè   ‡— t          ¦   «         Šdˆfd„}t          j         |¦   «         ¦  «        }‰                     d¦  «         |                      |¦  «        }|                      |d¦  «         dS )zd
        Awaiting a paused & chained Deferred will give the result when it has
        one.
        r   Nc               “   óä   •‡K  — t          ¦   «         } t          ¦   «         Š|                      ˆfd„¦  «         |                      d ¦  «         ‰                     d‰j        d¦  «         | ƒ d {V —†S )Nc                 ó   •— ‰S rF   r   )ÚignoredÚd2s    €r   ú<lambda>z7AwaitTests.test_chained.<locals>.test.<locals>.<lambda>ç   s   ø€ ¨"€ r   r   Úbye)r   ÚaddCallbackrd   rc   )r   rz   re   s    @€r   rs   z%AwaitTests.test_chained.<locals>.testä   ss   øøè è € Ý (¡
¤
ˆAÝ!)¡¤ˆBØ�MŠMÐ,Ð,Ð,Ð,Ñ-Ô-Ð-à�JŠJ�tÑÔÐØ×Ò˜a ¤¨eÑ4Ô4Ð4Ø�7�7�7�7�7�7ˆNr   rl   r|   rN   )r	   r   r0   rm   r1   r   )r   rs   r   r$   re   s       @r   Útest_chainedzAwaitTests.test_chainedÝ   s…   ø€ õ
 ‘'”'ˆð	ð 	ð 	ð 	ð 	ð 	õ Ô" 4 4¡6¤6Ñ*Ô*ˆØ�Š˜ÑÔÐà×"Ò" 1Ñ%Ô%ˆØ×Ò˜˜eÑ$Ô$Ð$Ð$Ð$r   rN   )r   r   r   r   r   r3   r7   r:   rC   rR   rZ   rn   ru   r~   r   r   r   r   r      sï   € € € € € ðð ðAð Að Að Að%ð %ð %ð %ð8%ð %ð %ð %ð%ð %ð %ð %ð6ð 6ð 6ð 6ð ?ð ?ð ?ð ?ð(Gð Gð Gð Gð2)&ð )&ð )&ð )&ðV!ð !ð !ð !ð %ð %ð %ð %ð %ð %r   r   )r   r.   Útyping_extensionsr   Útwisted.internet.deferr   r   r   r   r   Útwisted.internet.taskr	   Útwisted.python.failurer
   Útwisted.trial.unittestr   Ú	Exceptionr   r   r   r   r   ú<module>r…      s  ðð
ð ð €€€à &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð �iñ ô ð ðR%ð R%ð R%ð R%ð R%�ñ R%ô R%ð R%ð R%ð R%r   