
    Jf                         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y)zI
Tests for L{twisted.internet.defer.deferredGenerator} and related APIs.
    )deferreactor)DeferreddeferredGeneratorwaitForDeferred)runWithWarningsSuppressed)unittest)suppressc                  \    t               } t        j                  d| j                  d       | S )Nr   hi)r   r   	callLatercallbackds    S/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/twisted/test/test_defgen.pygetThingr      s$    
AaT*H    c                  R    t               fd} t        j                  d|        S )Nc                  :     j                  t        d             y )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y)TerminalExceptionN)__name__
__module____qualname__ r   r   r   r      s    r   r   c                 :    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&   #   s)     %T	

 		 r   c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ed	
      gZy)DeferredGeneratorTestsc                 b     t          fd       } |       j                   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                     } |  | j                         } j                  | d       t        t	                     }| 	 |j                          d y # t
        $ r%}j                  t        |      d       Y d }~.d }~ww xY ww)Nr   r   WOOSH)r   r   	getResultassertEqualr   r   str)xoweselfs      r   
_genBasicsz5DeferredGeneratorTests.testBasics.<locals>._genBasics=   s     
+AGAQ% +BH0 M % 0  Q//0s0   ABA* %B*	B3BBBBr+   r&   addCallbackr-   )r2   r3   s   ` r   
testBasicsz!DeferredGeneratorTests.testBasics6   s4     
%	 
%	  |''(8(8'BBr   c                 P    t         d        }| j                   |       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   @   K   t        t                      ddz   y w)N   r   )r   r   r    r   r   _genProduceExceptionzJDeferredGeneratorTests.testProducesException.<locals>._genProduceExceptionW   s     !(*--Fs   )r&   assertFailurer   )r2   r:   s     r   testProducesExceptionz,DeferredGeneratorTests.testProducesExceptionP   s0     
%	 
%	 !!"6"8:KLLr   c                 \    t         d        } |       j                  | j                  d      S )z9Test that a generator which never yields results in None.c               3      K   y wNr    r    r   r   _genNothingz7DeferredGeneratorTests.testNothing.<locals>._genNothinga   s	     s   Nr4   )r2   r@   s     r   testNothingz"DeferredGeneratorTests.testNothing^   s3     
%	 
%	 }(()9)94@@r   c                 \    t         d        } |       j                  | 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                  } |  	 | j	                          y # t        $ r Y y w xY ww)NHandled Terminal Failure)r   r   failr   r,   r/   s    r   _genHandledTerminalFailurezUDeferredGeneratorTests.testHandledTerminalFailure.<locals>._genHandledTerminalFailureo   sI     

,-GHIA G$ s'   ,AA  A 	A	AAANr4   )r2   rG   s     r   testHandledTerminalFailurez1DeferredGeneratorTests.testHandledTerminalFailureh   s4     
%	 
%	 *+778H8H$OOr   c                     t         d        }t        j                         } ||      }|j                  t	        d             |j                  | j                  d      S )z~
        Just like testHandledTerminalFailure, only with a Deferred which fires
        asynchronously with an error.
        c              3   j   K   t        |       }| 	 |j                          y # t        $ r Y y w xY wwr?   )r   r,   r   )r   r/   s     r   _genHandledTerminalAsyncFailurez_DeferredGeneratorTests.testHandledTerminalAsyncFailure.<locals>._genHandledTerminalAsyncFailure   s4     "AG$ s   3$ 3	0303rD   N)r&   r   r   r   r   r5   r-   )r2   rK   r   deferredGeneratorResultDeferreds       r   testHandledTerminalAsyncFailurez6DeferredGeneratorTests.testHandledTerminalAsyncFailure|   s[     
%	 
%	 NN*I!*L'			#$>?@.::4;K;KTRRr   c                 \    t         d        } |       j                  | j                  d      S )zj
        Make sure we don't blow the stack when yielding immediately
        available deferreds.
        c               3      K   t        d      D ]4  } t        t        j                  d            } |  | j	                         } 6 d y wNi  r9   r   )ranger   r   succeedr,   rF   s    r   _genStackUsagez=DeferredGeneratorTests.testStackUsage.<locals>._genStackUsage   sC     4[ "#EMM!$45KKM	"
 Gs   AA
r   r4   )r2   rS   s     r   testStackUsagez%DeferredGeneratorTests.testStackUsage   s4     
%	 
%	 ++D,<,<a@@r   c                 \    t         d        } |       j                  | j                  d      S )zg
        Make sure we don't blow the stack when yielding immediately
        available values.
        c               3   <   K   t        d      D ]  } d  d y wrP   )rQ   rF   s    r   _genStackUsage2z?DeferredGeneratorTests.testStackUsage2.<locals>._genStackUsage2   s%     4[  Gs   r   r4   )r2   rW   s     r   testStackUsage2z&DeferredGeneratorTests.testStackUsage2   s4     
%	 
%	  ,,T-=-=qAAr   c                 T    d }t        |      }| j                   |       t              S )zZ
        Ensure that yielding a Deferred directly is trapped as an
        error.
        c               3   $   K   t                y wr?   )r   r    r   r   _genDeferredzADeferredGeneratorTests.testDeferredYielding.<locals>._genDeferred   s     *s   )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   sC    C4MAP(S(A"B= 	STHr   r(   c                       e Zd ZdZd Zd Zy)DeprecateDeferredGeneratorTestszY
    Tests that L{DeferredGeneratorTests} and L{waitForDeferred} are
    deprecated.
    c                     t         d        }| j                  | j                  g      }| j                  t	        |      d       | j                  |d   d   t
               | j                  |d   d   d       y)z5
        L{deferredGenerator} is deprecated.
        c               3      K   d  y wr?   r    r    r   r   decoratedFunctionz[DeprecateDeferredGeneratorTests.test_deferredGeneratorDeprecated.<locals>.decoratedFunction   s     Js   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'L&MNX*!Z02DEQK	"=	
r   c                    t               }t        |       | j                  | j                  g      }| j	                  t        |      d       | j	                  |d   d   t               | j	                  |d   d   d       y)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   sy     J%%t'J'J&KLX*!Z02D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      s`    , O O 9 " 3		 	$KX.. K\(
h&B&B (
r   