o
    cN                     @   s  d Z ddlZddlZddlmZmZmZmZmZ ddl	Z	ddl	m
Z
 ddl	mZ ddl	mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl#m%Z% ddl#m&Z& ddl#m'Z' ddl(m)Z) d*ej+Z,ej-d dk rd eej. fd!d"Z/n
d eej. fd#d"Z/d$e$d%ee	j0 fd&d'Z1G d(d) d)Z2G d*d+ d+e2ej3Z3G d,d- d-e2ej4Z4G d.d/ d/e2ej5Z5G d0d1 d1e2ej6Z6G d2d3 d3ej7Z7			d<d4e8d5ee$ d%ee	j0 d6eee  fd7d8Z9			d<d4e8d9e	j:d5ee$ d%ee	j0 d6eee  f
d:d;Z;dS )=z6Invocation-side implementation of gRPC Asyncio Python.    N)AnyIterableListOptionalSequence)_common)_compression)_grpcio_metadata)cygrpc   )
_base_call)_base_channel)StreamStreamCall)StreamUnaryCall)UnaryStreamCall)UnaryUnaryCall)ClientInterceptor)InterceptedStreamStreamCall)InterceptedStreamUnaryCall)InterceptedUnaryStreamCall)InterceptedUnaryUnaryCall)StreamStreamClientInterceptor)StreamUnaryClientInterceptor)UnaryStreamClientInterceptor)UnaryUnaryClientInterceptor)Metadata)ChannelArgumentType)DeserializingFunction)RequestIterableType)SerializingFunction)_timeout_to_deadlinezgrpc-python-asyncio/{}   returnc                   C   s
   t j S N)asyncioTask	all_tasks r'   r'   1lib/python3.10/site-packages/grpc/aio/_channel.py
_all_tasks4   s   
r)   c                   C   s   t  S r#   )r$   r&   r'   r'   r'   r(   r)   8   s   base_optionscompressionc                 C   s(   t |}tjjtff}t| | | S r#   )r   Zcreate_channel_optionr
   ZChannelArgKeyZprimary_user_agent_string_USER_AGENTtuple)r*   r+   Zcompression_channel_argumentZuser_agent_channel_argumentr'   r'   r(   _augment_channel_arguments<   s   r.   c                   @   s   e Zd ZU dZejed< ejed< e	ed< e
ed< eed< eee  ed< ee ed< ejed< d	ejd
e	de
dedeee  dee dejddfddZe		ddee deej defddZdS )_BaseMultiCallablezrBase class of all multi callable objects.

    Handles the initialization logic and stores common attributes.
    _loop_channel_method_request_serializer_response_deserializer_interceptors_referenceschannelmethodrequest_serializerresponse_deserializerinterceptors
referencesloopr"   Nc                 C   s.   || _ || _|| _|| _|| _|| _|| _d S r#   )r0   r1   r2   r3   r4   r5   r6   )selfr7   r8   r9   r:   r;   r<   r=   r'   r'   r(   __init__W   s   

z_BaseMultiCallable.__init__metadatar+   c                 C   s"   | pt  } |rt t| | } | S )zBased on the provided values for <metadata> or <compression> initialise the final
        metadata, as it should be used for the current call.
        )r   r   Zaugment_metadata)r@   r+   r'   r'   r(   _init_metadatai   s   

z!_BaseMultiCallable._init_metadataNN)__name__
__module____qualname____doc__r$   AbstractEventLoop__annotations__r
   
AioChannelbytesr   r   r   r   r   r   r   r?   staticmethodr   grpcCompressionrA   r'   r'   r'   r(   r/   H   sJ   
 



	
r/   c                   @   Z   e Zd Zdddddddedee dee deej dee	 deej
 d	ejfd
dZdS )UnaryUnaryMultiCallableNtimeoutr@   credentialswait_for_readyr+   requestrQ   r@   rR   rS   r+   r"   c                C   sj   |  ||}| jst|t||||| j| j| j| j| j
}|S t	| j|||||| j| j| j| j| j}|S r#   )
rA   r5   r   r    r1   r2   r3   r4   r0   r   )r>   rT   rQ   r@   rR   rS   r+   callr'   r'   r(   __call__z   s    

z UnaryUnaryMultiCallable.__call__)rC   rD   rE   r   r   floatr   rL   CallCredentialsboolrM   r   r   rV   r'   r'   r'   r(   rO   w   *    	rO   c                   @   rN   )UnaryStreamMultiCallableNrP   rT   rQ   r@   rR   rS   r+   r"   c          	      C   n   |  ||}t|}| js!t|||||| j| j| j| j| j
}|S t	| j|||||| j| j| j| j| j}|S r#   )
rA   r    r5   r   r1   r2   r3   r4   r0   r   )	r>   rT   rQ   r@   rR   rS   r+   deadlinerU   r'   r'   r(   rV      s    


z!UnaryStreamMultiCallable.__call__)rC   rD   rE   r   r   rW   r   rL   rX   rY   rM   r   r   rV   r'   r'   r'   r(   r[      rZ   r[   c                   @   ^   e Zd Z						ddee dee dee deej dee	 deej
 dejfd	d
ZdS )StreamUnaryMultiCallableNrequest_iteratorrQ   r@   rR   rS   r+   r"   c           	      C   r\   r#   )
rA   r    r5   r   r1   r2   r3   r4   r0   r   	r>   r`   rQ   r@   rR   rS   r+   r]   rU   r'   r'   r(   rV          

z!StreamUnaryMultiCallable.__call__NNNNNN)rC   rD   rE   r   r   rW   r   rL   rX   rY   rM   r   r   rV   r'   r'   r'   r(   r_      ,    r_   c                   @   r^   )StreamStreamMultiCallableNr`   rQ   r@   rR   rS   r+   r"   c           	      C   r\   r#   )
rA   r    r5   r   r1   r2   r3   r4   r0   r   ra   r'   r'   r(   rV      rb   z"StreamStreamMultiCallable.__call__rc   )rC   rD   rE   r   r   rW   r   rL   rX   rY   rM   r   r   rV   r'   r'   r'   r(   re      rd   re   c                   @   s  e Zd ZU ejed< ejed< ee	 ed< ee
 ed< ee ed< ee ed< deded	eej d
eej deee  f
ddZdd Zdd Zdd Zd/dee fddZdd Z	d0dedejfddZdejddfd d!Zd1d"d#Z 		d2d$ed%ee! d&ee" de#fd'd(Z$		d2d$ed%ee! d&ee" de%fd)d*Z&		d2d$ed%ee! d&ee" de'fd+d,Z(		d2d$ed%ee! d&ee" de)fd-d.Z*dS )3Channelr0   r1   _unary_unary_interceptors_unary_stream_interceptors_stream_unary_interceptors_stream_stream_interceptorstargetoptionsrR   r+   r;   c                 C   s   g | _ g | _g | _g | _|durc|D ]P}t|tr | j | qt|tr,| j| qt|tr8| j| qt|t	rD| j| qt
d|dtj dtj dtj dt	j t | _tt|t|||| j| _dS )a  Constructor.

        Args:
          target: The target to which to connect.
          options: Configuration options for the channel.
          credentials: A cygrpc.ChannelCredentials or None.
          compression: An optional value indicating the compression method to be
            used over the lifetime of the channel.
          interceptors: An optional list of interceptors that would be used for
            intercepting any RPC executed with that channel.
        NzInterceptor {} must be z{} or z{}. )rg   rh   ri   rj   
isinstancer   appendr   r   r   
ValueErrorformatrC   r
   Zget_working_loopr0   rI   r   encoder.   r1   )r>   rk   rl   rR   r+   r;   Zinterceptorr'   r'   r(   r?      s>   










zChannel.__init__c                    s   | S r#   r'   r>   r'   r'   r(   
__aenter__(  s   zChannel.__aenter__c                    s   |  d I d H  d S r#   _close)r>   exc_typeZexc_valZexc_tbr'   r'   r(   	__aexit__+     zChannel.__aexit__c                    s6  | j  rd S | j   t }g }g }|D ]f}z|jdd}W n ty9 } zdt|v r4W Y d }~q d }~ww |s=q|d }|jd}	|	r|t	|	t
jr|t|	dr\|	j | j ur[qnt|	drj|	jj | j uriqntd|	 ||	 || q|r|rtj||d	I d H  |D ]}
|
  q| j   d S )
Nr   )limitframer   r>   r1   _cython_callzUnrecognized call object: )rQ   )r1   closedclosingr)   Z	get_stackAttributeErrorstrf_localsgetrm   r   ZCallhasattrr{   r
   ZInternalErrorrn   r$   waitZcancelclose)r>   graceZtasksZcallsZ
call_tasksZtaskstackZattribute_errorrz   	candidaterU   r'   r'   r(   ru   .  sR   






zChannel._closeNr   c                    s   |  |I d H  d S r#   rt   )r>   r   r'   r'   r(   r   u  rx   zChannel.closec                 C   s*   t | dr| j s| j  d S d S d S )Nr1   )r   r1   r|   r   rr   r'   r'   r(   __del__x  s
   

zChannel.__del__Ftry_to_connectr"   c                 C   s   | j |}tj| S r#   )r1   Zcheck_connectivity_stater   Z1CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY)r>   r   resultr'   r'   r(   	get_state}  s   
zChannel.get_statelast_observed_statec                    s$   | j |jd d I d H sJ d S )Nr   )r1   Zwatch_connectivity_statevalue)r>   r   r'   r'   r(   wait_for_state_change  s   
zChannel.wait_for_state_changec                    sJ   | j dd}|tjjkr#| |I d H  | j dd}|tjjksd S d S )NT)r   )r   rL   ChannelConnectivityZREADYr   )r>   stater'   r'   r(   channel_ready  s   zChannel.channel_readyr8   r9   r:   c                 C   "   t | jt|||| j| g| jS r#   )rO   r1   r   rq   rg   r0   r>   r8   r9   r:   r'   r'   r(   unary_unary     zChannel.unary_unaryc                 C   r   r#   )r[   r1   r   rq   rh   r0   r   r'   r'   r(   unary_stream  r   zChannel.unary_streamc                 C   r   r#   )r_   r1   r   rq   ri   r0   r   r'   r'   r(   stream_unary  r   zChannel.stream_unaryc                 C   r   r#   )re   r1   r   rq   rj   r0   r   r'   r'   r(   stream_stream  s   zChannel.stream_streamr#   )F)r"   NrB   )+rC   rD   rE   r$   rG   rH   r
   rI   r   r   r   r   r   r   r   r   rL   ChannelCredentialsrM   r   r   r?   rs   rw   ru   rW   r   r   rY   r   r   r   r   r   r   rO   r   r[   r   r_   r   re   r   r'   r'   r'   r(   rf      s   
 




,G


	


rf   rk   rl   r;   c                 C   s   t | |du rdn|d||S )a'  Creates an insecure asynchronous Channel to a server.

    Args:
      target: The server address
      options: An optional list of key-value pairs (:term:`channel_arguments`
        in gRPC Core runtime) to configure the channel.
      compression: An optional value indicating the compression method to be
        used over the lifetime of the channel. This is an EXPERIMENTAL option.
      interceptors: An optional sequence of interceptors that will be executed for
        any call executed with this channel.

    Returns:
      A Channel.
    Nr'   )rf   )rk   rl   r+   r;   r'   r'   r(   insecure_channel  s   r   rR   c                 C   s   t | |du rdn||j||S )a\  Creates a secure asynchronous Channel to a server.

    Args:
      target: The server address.
      credentials: A ChannelCredentials instance.
      options: An optional list of key-value pairs (:term:`channel_arguments`
        in gRPC Core runtime) to configure the channel.
      compression: An optional value indicating the compression method to be
        used over the lifetime of the channel. This is an EXPERIMENTAL option.
      interceptors: An optional sequence of interceptors that will be executed for
        any call executed with this channel.

    Returns:
      An aio.Channel.
    Nr'   )rf   Z_credentials)rk   rR   rl   r+   r;   r'   r'   r(   secure_channel  s   r   )NNN)<rF   r$   systypingr   r   r   r   r   rL   r   r   r	   Zgrpc._cythonr
    r   r   _callr   r   r   r   Z_interceptorr   r   r   r   r   r   r   r   r   Z	_metadatar   Z_typingr   r   r   r   Z_utilsr    rp   __version__r,   version_infor%   r)   rM   r.   r/   rO   r[   r_   re   rf   r   r   r   r   r'   r'   r'   r(   <module>   s   
/  O


