
    Yf                         d Z ddlmZmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ d Zd Z G d	 d
e          Zd Z G d dej                  Z G d dej                  ZdS )zI
Tests for L{twisted.internet.defer.deferredGenerator} and related APIs.
    )deferreactor)DeferreddeferredGeneratorwaitForDeferred)runWithWarningsSuppressed)unittest)suppressc                  X    t                      } t          j        d| j        d           | S )Nr   hi)r   r   	callLatercallbackds    J/var/www/html/env/lib/python3.11/site-packages/twisted/test/test_defgen.pygetThingr      s'    

AaT***H    c                  X    t                      fd} t          j        d|            S )Nc                  L                          t          d                     d S )NOMG)errbackZeroDivisionErrorr   s   r   CRAPzgetOwie.<locals>.CRAP   s$    			#E**+++++r   r   )r   r   r   )r   r   s    @r   getOwier      s?    

A, , , , , aHr   c                       e Zd ZdS )TerminalExceptionN)__name__
__module____qualname__ r   r   r   r      s        Dr   r   c                 L    t          t          d          gt          |           S )z
    Calls L{deferredGenerator} while suppressing the deprecation warning.

    @param f: Function to call
    @return: Return value of function.
    z7twisted.internet.defer.deferredGenerator was deprecatedmessage)r   SUPPRESSr   )fs    r   deprecatedDeferredGeneratorr&   #   s8     %T  	

 		  r   c                   X    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ed	
          gZdS )DeferredGeneratorTestsc                 n     t            fd            } |                                 j        d          S )z
        Test that a normal deferredGenerator works.  Tests yielding a
        deferred which callbacks, as well as a deferred errbacks. Also
        ensures returning a final value works.
        c               3     K   t          t                                } | V  |                                 }                     | d           t          t	                                }|V  	 |                                 n:# t
          $ r-}                    t          |          d           Y d }~nd }~ww xY wdV  d S )Nr   r   WOOSH)r   r   	getResultassertEqualr   r   str)xoweselfs      r   
_genBasicsz5DeferredGeneratorTests.testBasics.<locals>._genBasics=   s      

++AGGGAQ%%% ++BHHH0$ 0 0 0  Q////////0MMMFs   -B 
B9#B44B9r+   r&   addCallbackr-   )r2   r3   s   ` r   
testBasicsz!DeferredGeneratorTests.testBasics6   sJ     
%	 	 	 	 
%	$	  z||''(8'BBBr   c                 h    t           d             }|                      |            t                    S )z
        Ensure that a generator that produces an exception signals
        a Failure condition on result deferred by converting the exception to
        a L{Failure}.
        c               3   N   K   t          t                                V  ddz   d S )N   r   )r   r   r    r   r   _genProduceExceptionzJDeferredGeneratorTests.testProducesException.<locals>._genProduceExceptionW   s+      !(**-----FFFFr   )r&   assertFailurer   )r2   r:   s     r   testProducesExceptionz,DeferredGeneratorTests.testProducesExceptionP   sA     
%	 	 
%	$	 !!"6"6"8"8:KLLLr   c                 h    t           d             } |                                | j        d          S )z9Test that a generator which never yields results in None.c               3   
   K   d S Nr    r    r   r   _genNothingz7DeferredGeneratorTests.testNothing.<locals>._genNothinga   s       r   Nr4   )r2   r@   s     r   testNothingz"DeferredGeneratorTests.testNothing^   s?     
%	 	 
%	$	 {}}(()94@@@r   c                 h    t           d             } |                                | j        d          S )z
        Create a Deferred Generator which yields a Deferred which fails and
        handles the exception which results.  Assert that the Deferred
        Generator does not errback its Deferred.
        c               3      K   t          t          j        t          d                              } | V  	 |                                  d S # t          $ r Y d S w xY w)NHandled Terminal Failure)r   r   failr   r,   r/   s    r   _genHandledTerminalFailurezUDeferredGeneratorTests.testHandledTerminalFailure.<locals>._genHandledTerminalFailureo   so      
,-GHHII A GGG$   s   A 
AANr4   )r2   rG   s     r   testHandledTerminalFailurez1DeferredGeneratorTests.testHandledTerminalFailureh   sB     
%	 	 
%	$	 *)++778H$OOOr   c                     t           d             }t          j                    } ||          }|                    t	          d                     |                    | j        d          S )z~
        Just like testHandledTerminalFailure, only with a Deferred which fires
        asynchronously with an error.
        c              3   |   K   t          |           }|V  	 |                                 d S # t          $ r Y d S w xY wr?   )r   r,   r   )r   r/   s     r   _genHandledTerminalAsyncFailurez_DeferredGeneratorTests.testHandledTerminalAsyncFailure.<locals>._genHandledTerminalAsyncFailure   sT      ""AGGG$   s   - 
;;rD   N)r&   r   r   r   r   r5   r-   )r2   rK   r   deferredGeneratorResultDeferreds       r   testHandledTerminalAsyncFailurez6DeferredGeneratorTests.testHandledTerminalAsyncFailure|   ss     
%	 	 
%	$	 N*I*I!*L*L'			#$>??@@@.::4;KTRRRr   c                 h    t           d             } |                                | j        d          S )zj
        Make sure we don't blow the stack when yielding immediately
        available deferreds.
        c               3      K   t          d          D ];} t          t          j        d                    } | V  |                                 } <dV  d S Ni  r9   r   )ranger   r   succeedr,   rF   s    r   _genStackUsagez=DeferredGeneratorTests.testStackUsage.<locals>._genStackUsage   sW      4[[ " "#EM!$4$455KKMMGGGGGr   r   r4   )r2   rS   s     r   testStackUsagez%DeferredGeneratorTests.testStackUsage   sA     
%	 	 
%	$	 ~++D,<a@@@r   c                 h    t           d             } |                                | j        d          S )zg
        Make sure we don't blow the stack when yielding immediately
        available values.
        c               3   >   K   t          d          D ]} dV  dV  d S rP   )rQ   rF   s    r   _genStackUsage2z?DeferredGeneratorTests.testStackUsage2.<locals>._genStackUsage2   s3      4[[  GGGGGr   r   r4   )r2   rW   s     r   testStackUsage2z&DeferredGeneratorTests.testStackUsage2   sA     
%	 	 
%	$	   ,,T-=qAAAr   c                 l    d }t          |          }|                      |            t                    S )zZ
        Ensure that yielding a Deferred directly is trapped as an
        error.
        c               3   *   K   t                      V  d S r?   )r   r    r   r   _genDeferredzADeferredGeneratorTests.testDeferredYielding.<locals>._genDeferred   s      **r   )r&   r;   	TypeError)r2   r[   s     r   testDeferredYieldingz+DeferredGeneratorTests.testDeferredYielding   s<    	 	 	 3<@@!!,,..)<<<r   z5twisted.internet.defer.waitForDeferred was deprecatedr"   N)r   r   r   r6   r<   rA   rH   rM   rT   rX   r]   r$   r
   r    r   r   r(   r(   5   s        C C C4M M MA A AP P P(S S S(A A A"B B B= = = 	STTTHHHr   r(   c                       e Zd ZdZd Zd ZdS )DeprecateDeferredGeneratorTestszY
    Tests that L{DeferredGeneratorTests} and L{waitForDeferred} are
    deprecated.
    c                 4   t           d             }|                     | j        g          }|                     t	          |          d           |                     |d         d         t
                     |                     |d         d         d           dS )z5
        L{deferredGenerator} is deprecated.
        c               3      K   d V  d S r?   r    r    r   r   decoratedFunctionz[DeprecateDeferredGeneratorTests.test_deferredGeneratorDeprecated.<locals>.decoratedFunction   s      JJJJJr   r9   r   categoryr#   ztwisted.internet.defer.deferredGenerator was deprecated in Twisted 15.0.0; please use twisted.internet.defer.inlineCallbacks insteadN)r   flushWarnings test_deferredGeneratorDeprecatedr-   lenDeprecationWarning)r2   rb   warningss      r   re   z@DeprecateDeferredGeneratorTests.test_deferredGeneratorDeprecated   s    
 
	 	 
		 %%t'L&MNNX***!Z02DEEEQK	"=	
 	
 	
 	
 	
r   c                 N   t                      }t          |           |                     | j        g          }|                     t          |          d           |                     |d         d         t                     |                     |d         d         d           dS )z3
        L{waitForDeferred} is deprecated.
        r9   r   rc   r#   ztwisted.internet.defer.waitForDeferred was deprecated in Twisted 15.0.0; please use twisted.internet.defer.inlineCallbacks insteadN)r   r   rd   test_waitForDeferredDeprecatedr-   rf   rg   )r2   r   rh   s      r   rj   z>DeprecateDeferredGeneratorTests.test_waitForDeferredDeprecated   s     JJ%%t'J&KLLX***!Z02DEEEQK	"=	
 	
 	
 	
 	
r   N)r   r   r   __doc__re   rj   r    r   r   r_   r_      s<         

 
 
&
 
 
 
 
r   r_   N)rk   twisted.internetr   r   twisted.internet.deferr   r   r   twisted.python.utilr   twisted.trialr	   twisted.trial.utilr
   r$   r   r   	Exceptionr   r&   TestCaser(   SynchronousTestCaser_   r    r   r   <module>rt      sA    , + + + + + + + O O O O O O O O O O 9 9 9 9 9 9 " " " " " " 3 3 3 3 3 3    	 	 	 	 		 	 	 	  $K K K K KX. K K K\(
 (
 (
 (
 (
h&B (
 (
 (
 (
 (
r   