+
    üÐj¥  ã                   óŠ   € R t ^ RIt^ RIHt ^ RIHtHtHtHtH	t	 ^ RI
Ht ^ RIHt ^ RIHt  ! R R]4      t ! R	 R
]4      tR# )z*
Tests for C{await} support in Deferreds.
N©ÚNoReturn)ÚDeferredÚensureDeferredÚfailÚmaybeDeferredÚsucceed)ÚClock©ÚFailure)ÚTestCasec                   ó   € ] tR t^tRtRtR# )ÚSampleExceptionz*
A specific sample exception for testing.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚH/usr/lib/python3/dist-packages/twisted/internet/test/test_defer_await.pyr   r      s   † õr   r   c                   óØ   a € ] tR t^t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )Ú
AwaitTestsz8
Tests for using Deferreds in conjunction with PEP-492.
c                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnNr   )ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚAwaitTests.__annotate__$   s   ø€ ÷ Añ A¨4ñ Ar   c                óp   € \        4       pVP                  4       pV P                  V\        V4      4       R# )z,
C{Deferred.__await__} returns an iterable.
N)r   Ú	__await__ÚassertEqualÚiter)ÚselfÚdÚawaitedDeferreds   &  r   Útest_awaitReturnsIterableÚ$AwaitTests.test_awaitReturnsIterable$   s+   € ô %›JˆØŸ+™+›-ˆØ×Ñ˜¬$¨Ó*?Ö@r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   ,   s   ø€ ÷ %ñ %¨Dñ %r   c                ó  a€ R V3R llpR R loV! 4       pV P                  V\        P                  4       \        P                  ! V4      pV P                  V\        4       V P                  V4      pV P                  VR4       R# )zE
L{Deferred.fromCoroutine} will turn a coroutine into a L{Deferred}.
c                ó$   € V ^8„  d   QhR\         /# ©r   r   ©Ústr)r   s   "r   r    Ú;AwaitTests.test_deferredFromCoroutine.<locals>.__annotate__1   s   € ÷ 	ñ 	œ3ñ 	r   c               “   ó`   <"  € \        R 4      p V G Rj  x€L
  S! 4       G Rj  x€L
 pV#  L L5i)ÚbarN©r   )r'   ÚresÚrun2s     €r   ÚrunÚ2AwaitTests.test_deferredFromCoroutine.<locals>.run1   s,   øé € Ü˜“ˆAØ�GˆGÙ›—,ˆCØˆJñ Ùùs   ƒ.”*•.£,¤.¬.c                ó$   € V ^8„  d   QhR\         /# r.   r/   )r   s   "r   r    r1   7   s   € ÷ 	ñ 	œCñ 	r   c               “   ó<   "  € \        R 4      p V G Rj  x€L
 pV#  L5i©ÚfooNr4   ©r'   r5   s     r   r6   Ú3AwaitTests.test_deferredFromCoroutine.<locals>.run27   ó   é € Ü˜“ˆAØ—'ˆCØˆJñ ùó   ‚“”r<   N)ÚassertIsInstanceÚtypesÚCoroutineTyper   ÚfromCoroutineÚsuccessResultOfr$   )r&   r7   Úrr'   r5   r6   s   &    @r   Útest_deferredFromCoroutineÚ%AwaitTests.test_deferredFromCoroutine,   su   ø€ ÷
	ð 	õ	ñ ‹EˆØ×Ñ˜a¤×!4Ñ!4Ô5ô ×"Ò" 1Ó%ˆØ×Ñ˜a¤Ô*ð ×"Ñ" 1Ó%ˆØ×Ñ˜˜eÖ$r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   H   s   ø€ ÷ %ñ %˜Dñ %r   c                óŽ   € R R lp\         P                  ! V! 4       4      pV P                  V4      pV P                  VR4       R# )zK
L{Deferred.fromCoroutine} allows a function to C{await} on a
L{Deferred}.
c                ó$   € V ^8„  d   QhR\         /# r.   r/   )r   s   "r   r    Ú+AwaitTests.test_basic.<locals>.__annotate__N   ó   € ÷ 	ñ 	œ3ñ 	r   c               “   ó<   "  € \        R 4      p V G Rj  x€L
 pV#  L5ir;   r4   r=   s     r   r7   Ú"AwaitTests.test_basic.<locals>.runN   r?   r@   r<   N)r   rD   rE   r$   ©r&   r7   r'   r5   s   &   r   Ú
test_basicÚAwaitTests.test_basicH   s;   € õ	ô
 ×"Ò"¡3£5Ó)ˆØ×"Ñ" 1Ó%ˆØ×Ñ˜˜eÖ$r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   W   s   ø€ ÷ %ñ %¨$ñ %r   c                óx   € R R lp\        V! 4       4      pV P                  V4      pV P                  VR4       R# )zC
L{ensureDeferred} allows a function to C{await} on a L{Deferred}.
c                ó$   € V ^8„  d   QhR\         /# r.   r/   )r   s   "r   r    Ú9AwaitTests.test_basicEnsureDeferred.<locals>.__annotate__\   rM   r   c               “   ó<   "  € \        R 4      p V G Rj  x€L
 pV#  L5ir;   r4   r=   s     r   r7   Ú0AwaitTests.test_basicEnsureDeferred.<locals>.run\   r?   r@   r<   N)r   rE   r$   rP   s   &   r   Útest_basicEnsureDeferredÚ#AwaitTests.test_basicEnsureDeferredW   s5   € õ
	ô
 ™3›5Ó!ˆØ×"Ñ" 1Ó%ˆØ×Ñ˜˜eÖ$r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   e   s   ø€ ÷ 6ñ 6 ñ 6r   c                ó  € R R lp\         P                  ! V! 4       4      pV P                  V4      pV P                  \	        VP
                  4      \        4       V P                  VP
                  P                  R4       R# )z‚
An exception in a coroutine scheduled with L{Deferred.fromCoroutine}
will cause the returned L{Deferred} to fire with a failure.
c                ó$   € V ^8„  d   QhR\         /# r.   r   )r   s   "r   r    Ú/AwaitTests.test_exception.<locals>.__annotate__k   s   € ÷ 	'ñ 	'œ8ñ 	'r   c               “   óN   "  € \        R 4      p V G Rj  x€L
  \        R4      h L5i)r<   NúOh no!)r   Ú
ValueError)r'   s    r   r7   Ú&AwaitTests.test_exception.<locals>.runk   s%   é € Ü˜“ˆAØ�GˆGÜ˜XÓ&Ð&ñ ùs   ‚%“#”%N)r`   )r   rD   ÚfailureResultOfr$   ÚtypeÚvaluera   ÚargsrP   s   &   r   Útest_exceptionÚAwaitTests.test_exceptione   s[   € õ	'ô
 ×"Ò"¡3£5Ó)ˆØ×"Ñ" 1Ó%ˆØ×Ñœ˜cŸi™i›¬*Ô5Ø×Ñ˜Ÿ™Ÿ™¨Ö5r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   u   s   ø€ ÷ ?ñ ?¸$ñ ?r   c                ó  a€ R R lp\        V4      oR V3R llpV P                  \        P                  ! V! 4       4      4      pV P	                  RVP                  4       4       V P	                  RVP                  4       4       R# )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.
c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    ÚIAwaitTests.test_synchronousDeferredFailureTraceback.<locals>.__annotate__|   s   € ÷ 	$ñ 	$˜ñ 	$r   c                  ó   € \        4       h©N)r   r   r   r   ÚraisesÚCAwaitTests.test_synchronousDeferredFailureTraceback.<locals>.raises|   s   € Ü!Ó#Ð#r   c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    rl   �   ó   € ÷ 	ñ 	˜dñ 	r   c               “   ó$   <"  € S G R j  x€L
 #  L5irn   r   ©Úits   €r   ÚdoomedÚCAwaitTests.test_synchronousDeferredFailureTraceback.<locals>.doomed�   ó   øé € Ø—8ˆO‘8ùó   ƒ‰Šú, in doomed
z, in raises
N)r   rc   r   rD   ÚassertInÚgetTraceback)r&   ro   rv   Úfailureru   s   &   @r   Ú(test_synchronousDeferredFailureTracebackÚ3AwaitTests.test_synchronousDeferredFailureTracebacku   sk   ø€ õ	$ô ˜6Ó"ˆ÷	ð 	ð ×&Ñ&¤x×'=Ò'=¹f»hÓ'GÓHˆà�‰�o w×';Ñ';Ó'=Ô>Ø�‰�o w×';Ñ';Ó'=Ö>r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   ‰   s   ø€ ÷ Gñ G°Dñ Gr   c                ó`  a€ R R lp\        4       oR V3R llp\         P                  ! V! 4       4      pV P                  V4       SP                  V! 4       4       V P	                  V4      pV P                  RVP                  4       4       V P                  RVP                  4       4       R# )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.
c                ó$   € V ^8„  d   QhR\         /# r.   r
   )r   s   "r   r    ÚCAwaitTests.test_asyncDeferredFailureTraceback.<locals>.__annotate__�   s   € ÷ 	!ñ 	!¤ñ 	!r   c                  óN   €  \        4       h  \          d    \        4       u # i ; irn   )r   r   r   r   r   ÚreturnsFailureÚEAwaitTests.test_asyncDeferredFailureTraceback.<locals>.returnsFailure�   s'   € ð!Ü%Ó'Ð'øÜ"ô !Ü“yÒ ð!ús   ‚
 Œ$£$c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    rƒ   ˜   rr   r   c               “   ó$   <"  € S G R j  x€L
 #  L5irn   r   rt   s   €r   rv   Ú=AwaitTests.test_asyncDeferredFailureTraceback.<locals>.doomed˜   rx   ry   rz   z, in returnsFailure
N)r   rD   ÚassertNoResultÚerrbackrc   r{   r|   )r&   r…   rv   Ústartedr}   ru   s   &    @r   Ú"test_asyncDeferredFailureTracebackÚ-AwaitTests.test_asyncDeferredFailureTraceback‰   s‹   ø€ õ	!ô &›Zˆ÷	ð 	ô ×(Ò(©«Ó2ˆØ×Ñ˜GÔ$Ø
�
‰
‘>Ó#Ô$Ø×&Ñ& wÓ/ˆØ�‰�o w×';Ñ';Ó'=Ô>Ø�‰Ð-¨w×/CÑ/CÓ/EÖFr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   ¢   s   ø€ ÷ )&ñ )&˜dñ )&r   c                óò  aaa€ \        4       o. oR VV3R lloR VVV3R llp\        P                  ! V! 4       4      pSP                  R4       V P	                  S^^.4       SP                  R4       V P	                  S. R	O4       SP                  R4       V P	                  S. R	O4       SP                  R4       V P	                  S. R
O4       V P                  V4      pV P	                  VR4       R# )zŠ
A coroutine scheduled with L{Deferred.fromCoroutine} that awaits a
L{Deferred} suspends its execution until the inner L{Deferred} fires.
c                ó$   € V ^8„  d   QhR\         /# r.   r/   )r   s   "r   r    Ú-AwaitTests.test_twoDeep.<locals>.__annotate__ª   s   € ÷ 	ñ 	œcñ 	r   c               “   óº   <"  € SP                  ^4       \        4       p SP                  ^V P                  ^4       V G Rj  x€L
  SP                  ^4       R#  L5i)r   NúYay!©Úappendr   Ú	callLaterÚcallback)r'   ÚreactorÚsectionss    €€r   ÚrunoneÚ'AwaitTests.test_twoDeep.<locals>.runoneª   sJ   øé € Ø�O‰O˜AÔÜ'›zˆAØ×Ñ˜a §¡¨QÔ/Ø�GˆGØ�O‰O˜AÔÙñ ùs   ƒ>AÁAÁAc                ó$   € V ^8„  d   QhR\         /# r.   r/   )r   s   "r   r    r’   ²   s   € ÷ 	ñ 	œ3ñ 	r   c               “   óþ   <"  € SP                  ^4       S! 4       G Rj  x€L
 p SP                  ^4       \        4       pSP                  ^VP                  ^4       VG Rj  x€L
  SP                  ^4       V #  LY L5i)é   Nr•   )Úresultr'   r™   r›   rš   s     €€€r   r7   Ú$AwaitTests.test_twoDeep.<locals>.run²   sf   øé € Ø�O‰O˜AÔÙ!›8—^ˆFØ�O‰O˜AÔÜ'›zˆAØ×Ñ˜a §¡¨QÔ/Ø�GˆGØ�O‰O˜AÔØˆMñ $ñ ùs"   ƒA=ŸA9 AA=Á!A;Á"A=Á;A=gÍÌÌÌÌÌì?çš™™™™™¹?r”   N)rŸ   r   é   é   )rŸ   r   r£   r¤   é   )r	   r   rD   Úadvancer$   rE   )r&   r7   r'   r5   r™   r›   rš   s   &   @@@r   Útest_twoDeepÚAwaitTests.test_twoDeep¢   sÍ   ú€ ô
 “'ˆØˆ÷	ñ 	÷	ò 	ô ×"Ò"¡3£5Ó)ˆà�‰˜ÔØ×Ñ˜ A q 6Ô*à�‰˜ÔØ×Ñ˜¢<Ô0à�‰˜ÔØ×Ñ˜¢<Ô0à�‰˜ÔØ×Ñ˜¢?Ô3à×"Ñ" 1Ó%ˆØ×Ñ˜˜fÖ%r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   Í   s   ø€ ÷ !ñ !˜dñ !r   c                ó’   a € R V 3R llpS P                  \        P                  ! V! 4       4      4      pS P                  V^4       R# )z?
Awaiting an already failed Deferred will raise the exception.
c                ó$   € V ^8„  d   QhR\         /# r.   )Úint)r   s   "r   r    Ú-AwaitTests.test_reraise.<locals>.__annotate__Ò   s   € ÷ 	ñ 	œCñ 	r   c               “   ó¸   <"  €  \        \        R 4      4      G Rj  x€L
  ^ #  L  \         d(   p SP                  T P                  R4        Rp ? ^# Rp ? ii ; i5i)ÚBoomN)r¯   )r   ra   r$   rf   )Úer&   s    €r   ÚtestÚ%AwaitTests.test_reraise.<locals>.testÒ   sN   øé € ðÜœ: fÓ-Ó.×.Ð.ñ ñ	 /øÜô Ø× Ñ  §¡¨Ô3Ýûðüs6   ƒA…% œ#�% ¡A£% ¥A°AÁAÁAÁAN)rE   r   rD   r$   )r&   r±   r5   s   f  r   Útest_reraiseÚAwaitTests.test_reraiseÍ   s<   ø€ ÷
	ð 	ð ×"Ñ"¤8×#9Ò#9¹$»&Ó#AÓBˆØ×Ñ˜˜aÖ r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r    r!   Ý   s   ø€ ÷ %ñ %˜dñ %r   c                óÌ   a€ \        4       oR V3R llp\        P                  ! V! 4       4      pSP                  R4       V P	                  V4      pV P                  VR4       R# )zL
Awaiting a paused & chained Deferred will give the result when it has
one.
c                ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    Ú-AwaitTests.test_chained.<locals>.__annotate__ä   s   € ÷ 	ñ 	˜Dñ 	r   c               “   óÔ   <a"  € \        4       p \        4       oV P                  V3R  l4       V P                  R4       SP                  ^ SP                  R4       V G Rj  x€L
 #  L5i)c                 ó   <€ S# rn   r   )ÚignoredÚd2s   &€r   Ú<lambda>Ú7AwaitTests.test_chained.<locals>.test.<locals>.<lambda>ç   s   ø€ ©"r   NÚbye)r   ÚaddCallbackr˜   r—   )r'   r¼   r™   s    @€r   r±   Ú%AwaitTests.test_chained.<locals>.testä   sL   ùé € Ü (£
ˆAÜ!)£ˆBØ�M‰MÔ,Ô-à�J‰J�tÔØ×Ñ˜a §¡¨eÔ4Ø—7ˆN‘7ùs   „AA(Á!A&Á"A(r¢   r¿   N)r	   r   rD   r¦   rE   r$   )r&   r±   r'   r5   r™   s   &   @r   Útest_chainedÚAwaitTests.test_chainedÝ   sV   ø€ ô
 “'ˆ÷	ð 	ô ×"Ò"¡4£6Ó*ˆØ�‰˜Ôà×"Ñ" 1Ó%ˆØ×Ñ˜˜eÖ$r   r   N)r   r   r   r   r   r)   rG   rQ   rY   rg   r~   r�   r§   r³   rÂ   r   Ú__classdictcell__)r   s   @r   r   r      ss   ø‡ € ñ÷Að A÷%ð %÷8%ð %÷%ð %÷6ð 6÷ ?ð ?÷(Gð G÷2)&ð )&÷V!ð !÷ %ö %r   r   )r   rB   Útypingr   Útwisted.internet.deferr   r   r   r   r   Útwisted.internet.taskr	   Útwisted.python.failurer   Útwisted.trial.unittestr   Ú	Exceptionr   r   r   r   r   Ú<module>rË      sA   ðñ
ó å ÷õ õ (Ý *Ý +ô�iô ôR%�ö R%r   