
    i                     j    S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJr   " S S	\5      rg
)zA spy agency to manage spies.    )unicode_literals)pformat)	safe_repr)
_UNSET_ARG)FunctionSpySpyCall)format_spy_kwargsc                   6  ^  \ rS rSrSrU 4S jrU 4S jrS r\4S jr	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS"S jrS"S jr S"S jr!S"S jr"S#S  jr#\r$\r%\r&\r'\r(\r)\r*\r+\r,\r-\r.\r/\r0\r1\r2S!r3U =r4$ )$	SpyAgency   a  Manages spies.

A SpyAgency can be instantiated or mixed into a
:py:class:`unittest.TestCase` in order to provide spies.

Every spy created through this agency will be tracked, and can be later
be removed (individually or at once).

Version Changed:
    7.0:
    Added ``assert_`` versions of all the assertion methods (e.g.,
    ``assert_spy_called_with`` as an alias of ``assertSpyCalledWith``.

Attributes:
    spies (set of kgb.spies.FunctionSpy):
        All spies currently registered with this agency.
c                 L   > [         [        U ]
  " U0 UD6  [        5       U l        g)a  Initialize the spy agency.

Args:
    *args (tuple):
        Positional arguments to pass on to any other class (if using
        this as a mixin).

    **kwargs (dict):
        Keyword arguments to pass on to any other class (if using
        this as a mixin).
N)superr   __init__setspies)selfargskwargs	__class__s      I/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/kgb/agency.pyr   SpyAgency.__init__    s"     	i'88U
    c                 J   > [         [        U ]  5         U R                  5         g)zTear down a test suite.

This is used when SpyAgency is mixed into a TestCase. It will
automatically remove all spies when tearing down.
N)r   r   tearDown	unspy_all)r   r   s    r   r   SpyAgency.tearDown0   s     	i')r   c                 Z    [        U /UQ70 UD6nU R                  R                  U5        U$ )a  Spy on a function.

By default, the spy will allow the call to go through to the original
function. This can be disabled by passing ``call_original=False`` when
initiating the spy. If disabled, the original function will never be
called.

This can also be passed a ``call_fake`` parameter pointing to another
function to call instead of the original. If passed, this will take
precedence over ``call_original``.

See :py:class:`~kgb.spies.FunctionSpy` for more details on arguments.

Args:
    *args (tuple):
        Positional arguments to pass to
        :py:class:`~kgb.spies.FunctionSpy`.

    **kwargs (dict):
        Keyword arguments to pass to
        :py:class:`~kgb.spies.FunctionSpy`.

Returns:
    kgb.spies.FunctionSpy:
    The resulting spy.
)r   r   add)r   r   r   spys       r   spy_onSpyAgency.spy_on9   s-    6 $000

s
r   c                    ^ ^^ UUU 4S jnU$ )a  Decorate a function that should be a spy for another function.

This is a convenience over declaring a function and using
:py:meth:`spy_on` with ``call_fake=``. It's used to quickly and
easily create a fake function spy for another function.

Version Added:
    6.0

Args:
    func (callable):
        The function or method to spy on.

    owner (type or object, optional):
        The owner of the function or method.

        If spying on an unbound method, this **must** be set to the
        class that owns it.

        If spying on a bound method that identifies as a plain
        function (which may happen if the method is decorated and
        dynamically returns a new function on access), this should
        be the instance of the object you're spying on.

Example:
    @self.spy_for(get_doomsday):
    def _fake_get_doomsday():
        return datetime(year=2038, month=12, day=5,
                        hour=1, minute=2, second=3)
c                 *   > TR                  TTU S9  U $ )N)owner	call_fake)r    )r%   funcr$   r   s    r   _wrap SpyAgency.spy_for.<locals>._wrapw   s$    KK#"+  - r    )r   r&   r$   r'   s   ``` r   spy_forSpyAgency.spy_forX   s    >	 r   c                      UR                   nX R                  ;   d   eUR	                  5         g! [         a    [        SU-  5      ef = f)zStop spying on a function.

Args:
    func (callable):
        The function to stop spying on.

Raises:
    ValueError:
        The provided function was not spied on.
"Function %r has not been spied on.N)r   AttributeError
ValueErrorr   unspy)r   r&   r   s      r   r0   SpyAgency.unspy   sP    	J((C jj   		  	JADHII	Js	   0 A	c                 |    U R                    H  nUR                  SS9  M     U R                   R                  5         g)z4Stop spying on all functions tracked by this agency.F)
unregisterN)r   r0   clearr   r   s     r   r   SpyAgency.unspy_all   s0    ::CIII'  	

r   c                 T     UR                   $ ! [         a    [        SU-  5      ef = f)ai  Return the spy for a function.

This method is a helper to prevent type checkers from complaining when
accessing data about a spy.

Version Added:
    7.3

Args:
    func (callable):
        The function to return the spy for.

Returns:
    kgb.spies.FunctionSpy:
    The function's spy.

Raises:
    ValueError:
        The provided function was not spied on.
r-   )r   r.   r/   )r   r&   s     r   get_spySpyAgency.get_spy   s3    *	J88O 	JADHII	Js    'c                     [        US5      (       d:  [        U[        5      (       d$  U R                  SU R	                  U5      -  5        ggg)a  Assert that a function has a spy.

This also accepts a spy as an argument, which will always return
``True``.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

Raises:
    AssertionError:
        The function did not have a spy.
r   z%s has not been spied on.N)hasattr
isinstancer   _kgb_assert_fail_format_spy_or_callr5   s     r   assertHasSpySpyAgency.assertHasSpy   sL     sE"":c;+G+G!!"=$($<$<S$A#B C ,H"r   c                     U R                  U5        UR                  (       d$  U R                  SU R                  U5      -  5        gg)zAssert that a function has been called at least once.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

Raises:
    AssertionError:
        The function was not called.
z%s was not called.N)r?   calledr=   r>   r5   s     r   assertSpyCalledSpyAgency.assertSpyCalled   sD     	#zz!!"6$($<$<S$A#B C r   c           	          U R                  U5        [        UR                  5      nUS:  a@  U R                  SU R	                  U5      UU R                  XR                  5      4-  5        gg)zAssert that a function has been called exactly once.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

Raises:
    AssertionError:
        The function was not called.
   z=%s was not called exactly 1 time. It was called %d times:

%sN)rC   lencallsr=   r>   _format_spy_calls_format_spy_call_args)r   r   
call_counts      r   assertSpyCalledOnceSpyAgency.assertSpyCalledOnce   sq     	S! ^
>!! ,,S1**30J0JK r   c                 8   U R                  U5        UR                  (       ax  [        UR                  5      nUS:X  a  SU R	                  U5      -  nOSU R	                  U5      U4-  nU R                  U< SU R                  XR                  5      < 35        gg)zAssert that a function has not been called.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

Raises:
    AssertionError:
        The function was called.
rF   z%s was called 1 time:z%s was called %d times:

N)r?   rB   rG   rH   r>   r=   rI   rJ   )r   r   rK   msgs       r   assertSpyNotCalledSpyAgency.assertSpyNotCalled   s     	#::SYYJQ+..s34  .//4jAB 
 !!
 **30J0JK r   c                     U R                  U5        [        UR                  5      nX2:w  a2  US:X  a  SnOSnU R                  UU R	                  U5      UU4-  5        gg)a  Assert that a function was called the given number of times.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

    count (int):
        The number of times the function is expected to have been
        called.

Raises:
    AssertionError:
        The function was not called the specified number of times.
rF   z%s was called %d time, not %d.z%s was called %d times, not %d.N)r?   rG   rH   r=   r>   )r   r   countrK   rP   s        r   assertSpyCallCountSpyAgency.assertSpyCallCount  si    " 	#^
Q67!!##'#;#;C#@#-#(#*#* + r   c                    [        U[        5      (       a  U R                  U5        UR                  " U0 UD6(       d  [        U[        5      (       aR  U R                  SU R                  U5      < S[        U5      < S[        U5      < SU R                  U5      < 35        gU R                  SU R                  U5      < S[        U5      < S[        U5      < SU R                  UU R                  5      < 35        gg)	a@  Assert that a function was called with the given arguments.

If a spy is provided, all calls will be checked for a match.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy_or_call (callable or kgb.spies.FunctionSpy):
        The function, spy, or call to check.

    *expected_args (tuple):
        Positional arguments expected to be provided in any of the
        calls.

    **expected_kwargs (dict):
        Keyword arguments expected to be provided in any of the calls.

Raises:
    AssertionError:
        The function was not called with the provided arguments.
This call to  was not passed args=	, kwargs=.

It was called with:

No call to  was passed args='.

The following calls were recorded:

N)r<   r   rC   called_withr   r=   r>   r   r	   rJ   rI   r   spy_or_callexpected_argsexpected_kwargss       r   assertSpyCalledWithSpyAgency.assertSpyCalledWith>  s    . k;//  -&&II+w//%% 00=!-0)/:22;?
 %% 00=!-0)/:..' 668 Jr   c                    U R                  U5        UR                  " U0 UD6(       d  [        U[        5      (       aR  U R	                  SU R                  U5      < S[        U5      < S[        U5      < SU R                  U5      < 35        gU R	                  SU R                  U5      < S[        U5      < S[        U5      < SU R                  UU R                  5      < 35        gg)	a@  Assert that a function was called once with the given arguments.

This will fail if there was more than one call to the function.

This will imply :py:meth:`assertSpyCalledOnce`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

    *expected_args (tuple):
        Positional arguments expected to be provided in any of the
        calls.

    **expected_kwargs (dict):
        Keyword arguments expected to be provided in any of the calls.

Raises:
    AssertionError:
        The function was not called with the provided arguments.
rX   rY   rZ   r[   r\   r]   r^   N)
rL   r_   r<   r   r=   r>   r   r	   rJ   rI   r   r   rb   rc   s       r   assertSpyCalledOnceWith!SpyAgency.assertSpyCalledOnceWithv  s    , 	  %AA#w''%% 005!-0)/:2237
 %% 005!-0)/:.. 668 Br   c                    [        U[        5      (       a  U R                  U5        UR                  " U0 UD6(       a  [        U[        5      (       a@  U R                  SU R                  U5      < S[        U5      < S[        U5      < S35        gU R                  SU R                  U5      < S[        U5      < S[        U5      < SU R                  UU R                  5      < 35        gg)aP  Assert that a function was not called with the given arguments.

If a spy is provided, all calls will be checked for a match.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy_or_call (callable or kgb.spies.FunctionSpy):
        The function, spy, or call to check.

    *expected_args (tuple):
        Positional arguments not expected to be provided in any of the
        calls.

    **expected_kwargs (dict):
        Keyword arguments not expected to be provided in any of the
        calls.

Raises:
    AssertionError:
        The function was called with the provided arguments.
rX   z was unexpectedly passed args=rZ   .z
A call to r^   N)r<   r   rC   r_   r   r=   r>   r   r	   rI   rJ   r`   s       r   assertSpyNotCalledWith SpyAgency.assertSpyNotCalledWith  s    0 k;//  -""ME_E+w//%% 00=!-0)/: %% 00=!-0)/:..' 668 Fr   c                    U R                  U5        UR                  " U0 UD6(       d\  U R                  SU R                  U5      < S[	        U5      < S[        U5      < SU R                  UR                  5      < 35        gg)a  Assert that a function was last called with the given arguments.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

    *expected_args (tuple):
        Positional arguments expected to be provided in the last call.

    **expected_kwargs (dict):
        Keyword arguments expected to be provided in the last call.

Raises:
    AssertionError:
        The function was not called last with the provided arguments.
The last call to rY   rZ   z.

It was last called with:

N)rC   last_called_withr=   r>   r   r	   rJ   	last_callrg   s       r   assertSpyLastCalledWith!SpyAgency.assertSpyLastCalledWith  sp    & 	S!##]FoF!! ,,S1m,%o6..s}}=
 Gr   c                    [        U[        5      (       a  U R                  U5        UR                  U5      (       d  [        U[        5      (       aE  U R                  SU R                  U5      < S[        U5      < SU R                  U5      < 35        gU R                  SU R                  U5      < S[        U5      < SU R                  UU R                  5      < 35        gg)a  Assert that a function call returned the given value.

If a spy is provided, all calls will be checked for a match.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy_or_call (callable or kgb.spies.FunctionSpy or
                 kgb.spies.SpyCall):
        The function, spy, or call to check.

    return_value (object or type):
        The value expected to be returned by any of the calls.

Raises:
    AssertionError:
        The function never returned the provided value.
rX    did not return z.

It returned:

r\   z
 returned z-.

The following values have been returned:

N)
r<   r   rC   returnedr   r=   r>   r   _format_spy_call_returnedrI   )r   ra   return_values      r   assertSpyReturnedSpyAgency.assertSpyReturned  s    & k;//  -##L11+w//%% 00=!,/66{C	
 %% 00=!,/..' ::< 2r   c           
          U R                  U5        UR                  U5      (       dO  U R                  SU R                  U5      < S[	        U5      < SU R                  UR                  5      < 35        gg)a  Assert that the last function call returned the given value.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

    return_value (object or type):
        The value expected to be returned by the last call.

Raises:
    AssertionError:
        The function's last call did not return the provided value.
ro   ru   z.

It last returned:

N)rC   last_returnedr=   r>   r   rw   rq   )r   r   rx   s      r   assertSpyLastReturnedSpyAgency.assertSpyLastReturned7  se      	S!  ..!! ,,S1l+223==A	
 /r   c                    [        U[        5      (       a  U R                  U5        UR                  U5      (       Gd%  [        U[        5      (       ax  UR
                  bG  U R                  SU R                  U5      < SUR                  < SU R                  U5      < S35        gU R                  SU R                  U5      -  5        g[        S UR                   5       5      nU(       aQ  U R                  SU R                  U5      < S	UR                  < S
U R                  UU R                  5      < 35        gU R                  SU R                  U5      -  5        gg)a  Assert that a function call raised the given exception type.

If a spy is provided, all calls will be checked for a match.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy_or_call (callable or kgb.spies.FunctionSpy or
                 kgb.spies.SpyCall):
        The function, spy, or call to check.

    exception_cls (type):
        The exception type expected to be raised by one of the calls.

Raises:
    AssertionError:
        The function never raised the provided exception type.
NrX    did not raise z. It raised rk   +This call to %s did not raise an exception.c              3   >   #    U  H  nUR                   S Lv   M     g 7fN	exception.0calls     r   	<genexpr>,SpyAgency.assertSpyRaised.<locals>.<genexpr>{         ! 1 NN$. 1   r\    raised /.

The following exceptions have been raised:

"No call to %s raised an exception.)r<   r   rC   raisedr   r   r=   r>   __name___format_spy_call_raisedanyrH   rI   )r   ra   exception_cls
has_raiseds       r   assertSpyRaisedSpyAgency.assertSpyRaisedV  sC   & k;//  -!!-00+w//((4)) !44[A)22 88E	 ))E22;?@A ! ! + 1 1! 

 )) !44[A)22 22 + $ < <>
 ))<22;?@AE 1r   c           
      j   U R                  U5        UR                  U5      (       d  UR                  R                  bQ  U R	                  SU R                  U5      < SUR                  < SU R                  UR                  5      < S35        gU R	                  SU R                  U5      -  5        gg)a  Assert that the last function call raised the given exception type.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

    exception_cls (type):
        The exception type expected to be raised by the last call.

Raises:
    AssertionError:
        The last function call did not raise the provided exception
        type.
Nro   r   z. It last raised rk   /The last call to %s did not raise an exception.)rC   last_raisedrq   r   r=   r>   r   r   )r   r   r   s      r   assertSpyLastRaisedSpyAgency.assertSpyLastRaised  s    " 	S!}--}}&&2%% 005%..44S]]C %%E..s345 .r   c                    [        U[        5      (       a  U R                  U5        UR                  X#5      (       Gd,  [        U[        5      (       a{  UR
                  bJ  U R                  SU R                  U5      < SUR                  < SU< SU R                  U5      < 35        gU R                  SU R                  U5      -  5        g[        S UR                   5       5      nU(       aU  U R                  SU R                  U5      < S	UR                  < SU< S
U R                  UU R                  5      < 35        gU R                  SU R                  U5      -  5        gg)am  Assert that a function call raised the given exception/message.

If a spy is provided, all calls will be checked for a match.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy_or_call (callable or kgb.spies.FunctionSpy or
                 kgb.spies.SpyCall):
        The function, spy, or call to check.

    exception_cls (type):
        The exception type expected to be raised by one of the calls.

    message (bytes or unicode):
        The expected message in a matching extension.

Raises:
    AssertionError:
        The function never raised the provided exception type with
        the expected message.
NrX   r    with message z.

It raised:

r   c              3   >   #    U  H  nUR                   S Lv   M     g 7fr   r   r   s     r   r   3SpyAgency.assertSpyRaisedMessage.<locals>.<genexpr>  r   r   r\   r   r   r   )r<   r   rC   raised_with_messager   r   r=   r>   r   $_format_spy_call_raised_with_messager   rH   rI   )r   ra   r   messager   s        r   assertSpyRaisedMessage SpyAgency.assertSpyRaisedMessage  sN   . k;//  -..}FF+w//((4)) !44[A)22# EE +- ))E22;?@A ! ! + 1 1! 

 )) !44[A)22# 22 + $ I IK ))<22;?@AU Gr   c                 p   U R                  U5        UR                  X#5      (       d  UR                  R                  bT  U R	                  SU R                  U5      < SUR                  < SU< SU R                  UR                  5      < 35        gU R	                  SU R                  U5      -  5        gg)a  Assert that the function last raised the given exception/message.

This will imply :py:meth:`assertHasSpy`.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The function or spy to check.

    exception_cls (type):
        The exception type expected to be raised by the last call.

    message (bytes or unicode):
        The expected message in the matching extension.

Raises:
    AssertionError:
        The last function call did not raise the provided exception
        type with the expected message.
Nro   r   r   z.

It last raised:

r   )rC   last_raised_with_messagerq   r   r=   r>   r   r   )r   r   r   r   s       r   assertSpyLastRaisedMessage$SpyAgency.assertSpyLastRaisedMessage  s    ( 	S!++MCC}}&&2%% 005%..AAMM+ %%E..s345! Dr   c                     [        U S5      (       a#  [        U S5      (       a  U R                  U5        g[        U5      e)aG  Raise an assertion failure.

If this class is mixed into a unit test suite, this will call the
main :py:meth:`unittest.TestCase.fail` method. Otherwise, it will
simply raise an :py:exc:`AssertionError`.

Args:
    msg (unicode):
        The assertion message.

Raises:
    AssertionError:
        The assertion error to raise.
failfailureExceptionN)r;   r   AssertionError)r   rP   s     r   r=   SpyAgency._kgb_assert_fail&  s4     4  WT3E%F%FIIcN %%r   c                 
   [        U[        5      (       a  UR                  nO.[        U[        5      (       a  UR                  R                  nOUnUR
                  n[        U[        5      (       a  UR                  S5      nU$ )zFormat a spy or call for output in an assertion message.

Args:
    spy_or_call (callable or kgb.spies.FunctionSpy or
                 kgb.spies.SpyCall):
        The spy or call to format.

Returns:
    unicode:
    The formatted name of the function.
zutf-8)r<   r   	orig_funcr   r   r   bytesdecode)r   ra   r   names       r   r>   SpyAgency._format_spy_or_call;  sf     k;//''CW--//++CC||dE"";;w'Dr   c                 `   ^ SR                  U4S j[        UR                  5       5       5      $ )a  Format a list of calls for a spy.

Args:
    spy (callable or kgb.spies.FunctionSpy):
        The spy to format.

    formatter (callable):
        A formatting function used for each recorded call.

Returns:
    unicode:
    The formatted output of the calls.
rO   c              3   @   >#    U  H  u  pS UT" USS94-  v   M     g7f)zCall %d:
%s   indentNr)   )r   ir   	formatters      r   r   .SpyAgency._format_spy_calls.<locals>.<genexpr>c  s+      
/ a4!:;;/s   )join	enumeraterH   )r   r   r   s     `r   rI   SpyAgency._format_spy_callsU  s,     {{ 
$SYY/
 
 	
r   c                 x    U R                  UR                  SUS9< SU R                  UR                  SUS9< 3$ )a  Format a call's arguments.

Args:
    call (kgb.spies.SpyCall):
        The call containing arguments to format.

    indent (int, optional):
        The indentation level for any output.

Returns:
    unicode:
    The formatted output of the arguments for the call.
zargs=prefixr   
zkwargs=)_format_spy_linesr   r   r   r   r   s      r   rJ   SpyAgency._format_spy_call_argsh  sN     ""499*1*0 # 2 ""4;;*3*0 # 2	
 	
r   c                 6    U R                  UR                  US9$ )a  Format the return value from a call.

Args:
    call (kgb.spies.SpyCall):
        The call containing a return value to format.

    indent (int, optional):
        The indentation level for any output.

Returns:
    unicode:
    The formatted return value from the call.
r   )r   rx   r   s      r   rw   #SpyAgency._format_spy_call_returned  s'     %%d&7&7-3 & 5 	5r   c                 `    U R                  UR                  R                  R                  USS9$ )a"  Format the exception type raised by a call.

Args:
    call (kgb.spies.SpyCall):
        The call that raised an exception to format.

    indent (int, optional):
        The indentation level for any output.

Returns:
    unicode:
    The formatted name of the exception raised by a call.
F)r   format_data)r   r   r   r   r   s      r   r   !SpyAgency._format_spy_call_raised  s4     %%dnn&>&>&G&G-327 & 9 	9r   c                     U R                  UR                  R                  R                  SUSS9< SU R                  [	        UR                  5      SUS9< 3$ )aK  Format the exception type and message raised by a call.

Args:
    call (kgb.spies.SpyCall):
        The call that raised an exception to format.

    indent (int, optional):
        The indentation level for any output.

Returns:
    unicode:
    The formatted name of the exception and accompanying message raised
    by a call.
z
exception=F)r   r   r   r   zmessage=r   )r   r   r   r   strr   s      r   r   .SpyAgency._format_spy_call_raised_with_message  sb      ""4>>#;#;#D#D*6*0/4 # 6 ""3t~~#6*4*0 # 2
 	
r   c                    SU-  nU(       a  [        U5      nUR                  5       nU< U< US   < 3/n[        U5      S:  a0  SU[        U5      -   -  nUUSS  Vs/ s H  nU< U< 3PM     sn-  nSR                  U5      $ s  snf )a  Format a multi-line list of output for an assertion message.

Unless otherwise specified, the provided data will be formatted
using :py:func:`pprint.pformat`.

The first line of data will be prefixed, if a prefix is provided.
Subsequent lines be aligned with the contents after the prefix.

All line will be indented by the given amount.

Args:
    data (object):
        The data to format.

    prefix (unicode, optional):
        An optional prefix for the first line in the data.

    indent (int, optional):
        The indentation level for any output.

    format_data (bool, optional):
        Whether to format the provided ``data`` using
        :py:func:`pprint.pformat`.

Returns:
    unicode:
    The formatted string for the data.
 r   rF   Nr   )r   
splitlinesrG   r   )	r   datar   r   r   
indent_str
data_lineslineslines	            r   r   SpyAgency._format_spy_lines  s    : 6\
4=D__&
'A?@z?QV 45J&qrN*D %d+* E
 yys   B)r   )r   ) r   T)5r   
__module____qualname____firstlineno____doc__r   r   r    r   r*   r0   r   r8   r?   rC   rL   rQ   rU   rd   rh   rl   rr   ry   r}   r   r   r   r   r=   r>   rI   rJ   rw   r   r   r   assert_has_spyassert_spy_calledassert_spy_called_onceassert_spy_not_calledassert_spy_call_countassert_spy_called_withassert_spy_called_once_withassert_spy_not_called_withassert_spy_last_called_withassert_spy_returnedassert_spy_last_returnedassert_spy_raisedassert_spy_last_raisedassert_spy_raised_messageassert_spy_last_raised_message__static_attributes____classcell__)r   s   @r   r   r      s   $ > #- &P(J4C$C&<$L+@6p4l4l!F0d>:Ax 5DFAP(5T&*4
&
.5"9$
2- d "N'0..0"9!7"9+4'0 6%?"r   r   N)r   
__future__r   pprintr   unittest.utilr   kgb.signaturer   	kgb.spiesr   r   	kgb.utilsr	   objectr   r)   r   r   <module>r      s*    # '  # $ * 'n@ n@r   