o
    tBh	                     @   s   d dl mZmZmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ zd dl mZ W n ey7   d dl mZ Y nw ddgZG dd dZG d	d de	Zd
S )    )FutureQueueensure_futuresleep)isawaitable)AnyAsyncIteratorCallableOptionalSet)get_running_loop)get_event_loopSimplePubSubSimplePubSubIteratorc                   @   sT   e Zd ZU dZee ed< dddZdede	fdd	Z
	dd
ee ddfddZdS )r   zA very simple publish-subscript system.

    Creates an AsyncIterator from an EventEmitter.

    Useful for mocking a PubSub system for tests.
    subscribersreturnNc                 C   s   t  | _d S N)setr   self r   u/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/graphql/pyutils/simple_pub_sub.py__init__   s   zSimplePubSub.__init__eventc                 C   s.   | j D ]}||}t|rt| qt| j S )zEmit an event.)r   r   r   bool)r   r   
subscriberresultr   r   r   emit   s   

zSimplePubSub.emit	transformr   c                 C   s
   t | |S r   )r   )r   r   r   r   r   get_subscriber#   s   
zSimplePubSub.get_subscriberr   Nr   )__name__
__module____qualname____doc__r   r	   __annotations__r   r   r   r   r
   r   r   r   r   r   r      s   
 
	c                   @   sd   e Zd Zdedee ddfddZdddZdefd	d
Z	dddZ
dddZdeddfddZdS )r   pubsubr   r   Nc                 C   s4   || _ || _t | _t | _d| _|j| j d S )NT)	r&   r   r   
pull_queue
push_queue	listeningr   add
push_value)r   r&   r   r   r   r   r   *   s   zSimplePubSubIterator.__init__c                 C   s   | S r   r   r   r   r   r   	__aiter__2   s   zSimplePubSubIterator.__aiter__c                    sT   | j sttdI d H  | j s| j I d H S t  }| j	|I d H  |S )Nr   )
r)   StopAsyncIterationr   r(   emptygetr   create_futurer'   putr   futurer   r   r   	__anext__5   s   

zSimplePubSubIterator.__anext__c                    s   | j r|  I d H  d S d S r   )r)   empty_queuer   r   r   r   aclose?   s   zSimplePubSubIterator.aclosec                    sp   d| _ | jj| j | j s"| j I d H }|  | j r| j	 s6| j	 I d H  | j	 r'd S d S )NF)
r)   r&   r   remover+   r'   r.   r/   cancelr(   r2   r   r   r   r5   C   s   


z SimplePubSubIterator.empty_queuer   c                    sT   | j d u r|n|  |}| j r| j|I d H  d S | j I d H | d S r   )r   r'   r.   r(   r1   r/   
set_result)r   r   valuer   r   r   r+   L   s
   
zSimplePubSubIterator.push_value)r   r   r    )r!   r"   r#   r   r
   r	   r   r,   r   r4   r6   r5   r+   r   r   r   r   r   )   s    



	N)asyncior   r   r   r   inspectr   typingr   r   r	   r
   r   r   ImportErrorr   __all__r   r   r   r   r   r   <module>   s    