
    O              	           S SK r S SKrS SKJrJrJrJrJrJrJ	r	J
r
  S SKJr  \" S5      rS\\\\4      4S jrSSS	S
S\	/ \
\   4   4S jr " S S5      rS\S\4S jr " S S\\   5      rS\	/ \4   S\4S jrg)    N)ListUnionAnyTypeVarGenericOptionalCallable	Awaitable)	AsyncMockTeltsc                V   #    U  H  n[        U[        5      (       a  UeU7v   M!     g 7fN)
isinstance	Exception)r   elts     =lib/third_party/google/cloud/pubsublite/testing/test_utils.pyasync_iterabler      s&     c9%%I	 s   ')	started_qzasyncio.Queue[None]result_qz"asyncio.Queue[Union[T, Exception]]returnc                    ^ ^ UU 4S jnU$ )z
Given a queue to notify when started and a queue to get results from, return a waiter which
notifies started_q when started and returns from result_q when done.
c                     >#    TR                  S 5      I S h  vN   TR                  5       I S h  vN n[        U[        5      (       a  UeU$  N5 N7fr   )putgetr   r   )argskwargsresultr   r   s      r   waiter!make_queue_waiter.<locals>.waiter'   sE     mmD!!!||~%fi((L	 	"%s   AAAAAA )r   r   r   s   `` r   make_queue_waiterr"      s     M    c                   X    \ rS rSr% \R
                  \S'   \R
                  \S'   S rSrg)	QueuePair1   calledresultsc                 l    [         R                  " 5       U l        [         R                  " 5       U l        g r   )asyncioQueuer'   r(   )selfs    r   __init__QueuePair.__init__5   s    mmo}}r#   )r'   r(   N)	__name__
__module____qualname____firstlineno__r*   r+   __annotations__r-   __static_attributes__r!   r#   r   r%   r%   1   s    MM]]'r#   r%   mockc                 d    [        5       n[        UR                  UR                  5      U l        U$ r   )r%   r"   r'   r(   side_effect)r5   queuess     r   wire_queuesr9   :   s%    [F(GDMr#   c                   &    \ rS rSr% \\   \S'   Srg)Box@   valr!   N)r/   r0   r1   r2   r   r   r3   r4   r!   r#   r   r;   r;   @   s    	!r#   r;   funcc                    ^ ^ [        5       mUU 4S jn[        R                  " US9nUR                  5         UR	                  5         TR
                  $ )Nc                     > T" 5       T l         g r   )r=   )boxr>   s   r   set_boxrun_on_thread.<locals>.set_boxG   s    &r#   )target)r;   	threadingThreadstartjoinr=   )r>   rB   threadrA   s   `  @r   run_on_threadrJ   D   s<    
%C W-F
LLN
KKM77Nr#   )r*   rE   typingr   r   r   r   r   r   r	   r
   unittest.mockr   r   r   r   r"   r%   r9   r;   rJ   r!   r#   r   <module>rM      s      T T T #CLtE#y.$9: $0Tb)A,$' 'i I '!* 
Q 
A 
r#   