o
    ;i!)                     @   sB  d dl mZmZmZmZmZmZ d dl mZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ ddlmZ ddlmZmZ ddlmZ erXdd	lmZmZ dd
lmZmZ ddlmZ G dd dZ ede dZ!G dd de"Z#dd Z$dee  dee	ge	f fddZ%ee gee	e	df f Z&G dd dZ'G dd de"Z(dddee! dee!gee	e	df f ddfd d!Z)G d"d# d#e e#d$Z*G d%d& d&e e#d$Z+G d'd( d(e'e(d$Z,G d)d* d*e e#d$Z-G d+d, d,e e#d$Z.G d-d. d.e e#d$Z/G d/d0 d0e,Z0G d1d2 d2e e#d$Z1G d3d4 d4e e#d$Z2G d5d6 d6e e#d$Z3G d7d8 d8e,Z4dS )9    )TYPE_CHECKINGTypeTypeVarTuple	FrozenSetDict)OptionalCallableAny
CollectionList	Coroutine)chain)defaultdict   )Status)Deadline	_Metadata)get_annotations)	_SendType	_RecvType)IEventsTargetIServerMethodFunc)Peerc                       st   e Zd ZU dZdZee ed< e Z	e
e ed< eed<  fddZded	ed
df fddZd fddZ  ZS )_Event)__interrupted__ __payload____readonly__r   c                    sN   t |t | jksJ | jt dd | D ]\}}t || qd S )Nr   F)len	__slots__super__setattr__items)selfkwargskeyvalue	__class__r   B/home/ubuntu/.local/lib/python3.10/site-packages/grpclib/events.py__init__   s
   z_Event.__init__r&   r'   returnNc                    s*   || j v rtd|t || d S )NzRead-only property: {!r})r   AttributeErrorformatr!   r"   )r$   r&   r'   r(   r   r*   r"      s   
z_Event.__setattr__c                    s   t  dd d S )Nr   T)r!   r"   )r$   r(   r   r*   	interrupt#   s   z_Event.interruptr,   N)__name__
__module____qualname__r    r   r   str__annotations__	frozensetr   r   boolr+   r
   r"   r/   __classcell__r   r   r(   r*   r      s   
 r   
_EventType)boundc                          e Zd Z fddZ  ZS )
_EventMetac                    sX   t |}|dp
d tdd |D |d< t fdd|D |d< t | |||S )Nr   r   c                 s   s    | ]}|V  qd S Nr   .0namer   r   r*   	<genexpr>/   s    z%_EventMeta.__new__.<locals>.<genexpr>r    c                 3   s    | ]	}| vr|V  qd S r=   r   r>   payloadr   r*   rA   0   s    r   )r   gettupler6   r!   __new__)mcsr@   basesparamsannotationsr(   rB   r*   rF   ,   s
   z_EventMeta.__new__r1   r2   r3   rF   r8   r   r   r(   r*   r<   *       r<   c                     s   | S r=   r   )args_r   r   r*   _ident5   s   rO   
event_typer,   c                    s   dt dt f fdd}|S )Nfuncr,   c                    s
    | _ | S r=   )__dispatches__)rQ   rP   r   r*   	decorator:   s   z_dispatches.<locals>.decorator)r
   )rP   rT   r   rS   r*   _dispatches9   s   rU   Nc                   @   s\   e Zd ZU i Zeee ef ed< dddZ	dee de
ddfdd	Zd
edefddZdS )	_Dispatch__dispatch_methods__r,   Nc                 C   s(   t t| _| j D ]}t| j|< q
d S r=   )r   list
_listenersrW   valuesrO   __dict__)r$   r@   r   r   r*   r+   F   s   
z_Dispatch.__init__rP   callbackc                 C   s(   | j | j| d  | j| | d S r=   )r[   poprW   rY   append)r$   rP   r\   r   r   r*   add_listenerK   s   z_Dispatch.add_listenereventc                    sD   | j  j D ]}| I d H   jr nqt fdd jD S )Nc                 3   s    | ]}t  |V  qd S r=   )getattrr>   r`   r   r*   rA   X   s    z)_Dispatch.__dispatch__.<locals>.<genexpr>)rY   r)   r   rE   r   )r$   r`   r\   r   rb   r*   __dispatch__S   s   z_Dispatch.__dispatch__r0   )r1   r2   r3   rW   r   r   r   r4   r5   r+   	_Callbackr_   r
   rc   r   r   r   r*   rV   C   s   
 

rV   c                       r;   )_DispatchMetac                    s   t tdd |D }| D ](\}}t|dd }|d ur8t|tr(t|ts,J |||vs4J ||||< q||d< t	 
| |||S )Nc                 s   s     | ]}t |d i  V  qdS )rW   N)ra   r#   )r?   baser   r   r*   rA   ^   s
    
z(_DispatchMeta.__new__.<locals>.<genexpr>rR   rW   )dictr   from_iterabler#   ra   
isinstancetype
issubclassr   r!   rF   )rG   r@   rH   rI   dispatch_methodsr&   r'   
dispatchesr(   r   r*   rF   ]   s    

z_DispatchMeta.__new__rK   r   r   r(   r*   re   [   rL   re   targetr   r\   c                 C   s   | j || dS )zRegisters a listener function for the given target and event type

    .. code-block:: python3

        async def callback(event: SomeEvent):
            print(event.data)

        listen(target, SomeEvent, callback)
    N)rc   r_   )rn   rP   r\   r   r   r*   listenm   s   ro   c                   @      e Zd ZU dZdZeed< dS )SendMessagezfDispatches before sending message to the other party

    :param mutable message: message to send
    messagers   Nr1   r2   r3   __doc__r   r
   r5   r   r   r   r*   rq   ~      
 rq   )	metaclassc                   @   rp   )RecvMessagezmDispatches after message was received from the other party

    :param mutable message: received message
    rr   rs   Nrt   r   r   r   r*   rx      rv   rx   c                   @   sH   e Zd Zeeddded fddZeeddded fddZd	S )
_DispatchCommonEventsrs   r   r,   c                       |  t|dI d H S Nrr   )rc   rq   r$   rs   r   r   r*   send_message      z"_DispatchCommonEvents.send_messager   c                    rz   r{   )rc   rx   r|   r   r   r*   recv_message   r~   z"_DispatchCommonEvents.recv_messageN)	r1   r2   r3   rU   rq   r   r}   rx   r   r   r   r   r*   ry      s
    ry   c                   @   sV   e Zd ZU dZdZeed< ded< eed< ee	 ed< eed< ee ed	< d
ed< dS )RecvRequesta'  Dispatches after request was received from the client

    :param mutable metadata: invocation metadata
    :param mutable method_func: coroutine function to process this request,
        accepts :py:class:`~grpclib.server.Stream`
    :param read-only method_name: RPC's method name
    :param read-only deadline: request's :py:class:`~grpclib.metadata.Deadline`
    :param read-only content_type: request's content type
    :param read-only user_agent: request's user agent
    :param read-only peer: request's :py:class:`~grpclib.protocol.Peer`
    )metadatamethod_funcr   r   r   method_namedeadlinecontent_type
user_agentr   peerN
r1   r2   r3   ru   r   r   r5   r4   r   r   r   r   r   r*   r      s   
 r   c                   @   rp   )SendInitialMetadatazyDispatches before sending headers with initial metadata to the client

    :param mutable metadata: initial metadata
    r   r   Nr1   r2   r3   ru   r   r   r5   r   r   r   r*   r      rv   r   c                   @   :   e Zd ZU dZdZeed< eed< ee	 ed< e
ed< dS )SendTrailingMetadataa.  Dispatches before sending trailers with trailing metadata to the client

    :param mutable metadata: trailing metadata
    :param read-only status: status of the RPC call
    :param read-only status_message: description of the status
    :param read-only status_details: additional status details
    r   r   statusstatus_messagestatus_detailsNr1   r2   r3   ru   r   r   r5   r   r   r4   r
   r   r   r   r*   r         
 r   c                   @   s   e Zd Zeededddedee dedee dd	d
e	edf fddZ
eeded
e	e fddZeedededee ded
e	e f
ddZdS )_DispatchServerEventsr   r   r   r   r   r   r   r   r   r,   c                   s$   |  t|||||||dI d H S )N)r   r   r   r   r   r   r   )rc   r   )r$   r   r   r   r   r   r   r   r   r   r*   recv_request   s   z"_DispatchServerEvents.recv_requestc                    rz   Nr   )rc   r   r$   r   r   r   r*   send_initial_metadata      z+_DispatchServerEvents.send_initial_metadatar   r   r   c                      |  t||||dI d H S N)r   r   r   r   )rc   r   r$   r   r   r   r   r   r   r*   send_trailing_metadata      	z,_DispatchServerEvents.send_trailing_metadataN)r1   r2   r3   rU   r   r   r4   r   r   r   r   r   r   r   r   r
   r   r   r   r   r*   r      sJ    	

r   c                   @   s:   e Zd ZU dZdZeed< eed< ee	 ed< eed< dS )SendRequesta$  Dispatches before sending request to the server

    :param mutable metadata: invocation metadata
    :param read-only method_name: RPC's method name
    :param read-only deadline: request's :py:class:`~grpclib.metadata.Deadline`
    :param read-only content_type: request's content type
    r   r   r   r   r   Nr   r   r   r   r*   r     r   r   c                   @   rp   )RecvInitialMetadatazDispatches after headers with initial metadata were received
    from the server

    :param mutable metadata: initial metadata
    r   r   Nr   r   r   r   r*   r     s   
 r   c                   @   r   )RecvTrailingMetadataa9  Dispatches after trailers with trailing metadata were received
    from the server

    :param mutable metadata: trailing metadata
    :param read-only status: status of the RPC call
    :param read-only status_message: description of the status
    :param read-only status_details: additional status details
    r   r   r   r   r   Nr   r   r   r   r*   r     s   
 r   c                   @   s   e Zd Zeedededee dede	e f
ddZ
eedede	e fdd	Zeeded
edee dede	e f
ddZdS )_DispatchChannelEventsr   r   r   r   r,   c                   r   )N)r   r   r   r   )rc   r   )r$   r   r   r   r   r   r   r*   send_request2  r   z#_DispatchChannelEvents.send_requestc                    rz   r   )rc   r   r   r   r   r*   recv_initial_metadataB  r   z,_DispatchChannelEvents.recv_initial_metadatar   r   r   c                   r   r   )rc   r   r   r   r   r*   recv_trailing_metadataK  r   z-_DispatchChannelEvents.recv_trailing_metadataN)r1   r2   r3   rU   r   r   r4   r   r   r   r   r   r   r   r   r
   r   r   r   r   r*   r   0  s>    r   )5typingr   r   r   r   r   r   r   r	   r
   r   r   r   	itertoolsr   collectionsr   constr   r   r   r   _compatr   streamr   r   _typingr   r   protocolr   r   r9   rj   r<   rO   rU   rd   rV   re   ro   rq   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r*   <module>   sN       



2