o
    bi8                     @   sV  d Z ddlZddl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ZG dd dejZG dd dejZdd Zdd ZG dd dejZdd Zdd Zdd Zdd Zdd  ZG d!d" d"ed#d$ej Z!d%d& Z"d'd( Z#G d)d* d*ej$Z%G d+d, d,ej&Z'd-d. Z(dS )/zCTranslates gRPC's server-side API into gRPC's server-side Beta API.    N)_common)	_metadata)
interfaces)cardinality)style)abandonment)logging_pool)stream)face   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_ServerProtocolContextc                 C   
   || _ d S N_servicer_contextselfservicer_context r   W/home/kim/smarthome/.venv/lib/python3.10/site-packages/grpc/beta/_server_adaptations.py__init__$      
z_ServerProtocolContext.__init__c                 C   
   | j  S r   )r   peerr   r   r   r   r   '   r   z_ServerProtocolContext.peerc                 C   s   d S r   r   r   r   r   r   !disable_next_response_compression*   s   z8_ServerProtocolContext.disable_next_response_compressionN)__name__
__module____qualname__r   r   r   r   r   r   r   r   #   s    r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )_FaceServicerContextc                 C   r   r   r   r   r   r   r   r   /   r   z_FaceServicerContext.__init__c                 C   r   r   )r   	is_activer   r   r   r   r    2   r   z_FaceServicerContext.is_activec                 C   r   r   )r   time_remainingr   r   r   r   r!   5   r   z#_FaceServicerContext.time_remainingc                 C   s   d}t |)Nz6add_abortion_callback no longer supported server-side!)NotImplementedError)r   Zabortion_callback	error_msgr   r   r   add_abortion_callback8   s   z*_FaceServicerContext.add_abortion_callbackc                 C      | j   d S r   )r   cancelr   r   r   r   r&   <      z_FaceServicerContext.cancelc                 C   s
   t | jS r   )r   r   r   r   r   r   protocol_context?   r   z%_FaceServicerContext.protocol_contextc                 C   s   t | j S r   )r   betar   invocation_metadatar   r   r   r   r*   B      z(_FaceServicerContext.invocation_metadatac                 C      | j t| d S r   )r   Zsend_initial_metadatar   unbeta)r   initial_metadatar   r   r   r.   E      z%_FaceServicerContext.initial_metadatac                 C   r,   r   )r   Zset_terminal_metadatar   r-   )r   terminal_metadatar   r   r   r0   J   r/   z&_FaceServicerContext.terminal_metadatac                 C      | j | d S r   )r   Zset_code)r   coder   r   r   r2   O   r+   z_FaceServicerContext.codec                 C   r1   r   )r   Zset_details)r   detailsr   r   r   r3   R   r+   z_FaceServicerContext.detailsN)r   r   r   r   r    r!   r$   r&   r(   r*   r.   r0   r2   r3   r   r   r   r   r   .   s    r   c                        fdd}|S )Nc                        | t |S r   r   )requestr   unary_request_inliner   r   
adaptationW      z/_adapt_unary_request_inline.<locals>.adaptationr   )r9   r:   r   r8   r   _adapt_unary_request_inlineV      r<   c                    r4   )Nc                    r5   r   r6   )request_iteratorr   stream_request_inliner   r   r:   `   r;   z0_adapt_stream_request_inline.<locals>.adaptationr   )r@   r:   r   r?   r   _adapt_stream_request_inline_   r=   rA   c                   @   D   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )	_Callbackc                 C   s    t  | _g | _d| _d| _d S NF)	threading	Condition
_condition_values_terminated
_cancelledr   r   r   r   r   i   s   

z_Callback.__init__c                 C   sB   | j  | j| | j   W d    d S 1 sw   Y  d S r   )rG   rH   append
notify_allr   valuer   r   r   consumeo   s   "z_Callback.consumec                 C   <   | j  d| _| j   W d    d S 1 sw   Y  d S NT)rG   rI   rL   r   r   r   r   	terminatet      "z_Callback.terminatec                 C   sH   | j  | j| d| _| j   W d    d S 1 sw   Y  d S rQ   )rG   rH   rK   rI   rL   rM   r   r   r   consume_and_terminatey   s
   "z_Callback.consume_and_terminatec                 C   rP   rQ   )rG   rJ   rL   r   r   r   r   r&      rS   z_Callback.cancelc                 C   sp   | j + 	 | jrt | jr| jdW  d    S | jr(	 W d    d S | j   q1 s1w   Y  d S )NTr   )rG   rJ   r   	AbandonedrH   poprI   waitr   r   r   r   draw_one_value   s   

z_Callback.draw_one_valuec                 C   s`   | j # 	 | jrt | jr t| j}d | _|W  d    S | j   q1 s)w   Y  d S r   )rG   rJ   r   rU   rI   tuplerH   rW   )r   Z
all_valuesr   r   r   draw_all_values   s   

z_Callback.draw_all_valuesN)
r   r   r   r   rO   rR   rT   r&   rX   rZ   r   r   r   r   rC   h   s    rC   c                    s8   t   fdd}t j|d}d|_|  d S )Nc                     sL   D ]}   r r d S  |    r r d S q   d S r   )r    is_setrO   rR   )r7   request_consumerr>   r   Zthread_joinedr   r   pipe_requests   s   
z/_run_request_pipe_thread.<locals>.pipe_requests)targetT)rE   EventThreaddaemonstart)r>   r]   r   r^   Zrequest_pipe_threadr   r\   r   _run_request_pipe_thread   s
   	rd   c                    r4   )Nc                    s8   t  }||jst  | |jt| | d S Nr   )rC   add_callbackr&   r   rU   rT   r   rZ   )r7   r   callbackunary_unary_eventr   r   r:      s   z,_adapt_unary_unary_event.<locals>.adaptationr   )ri   r:   r   rh   r   _adapt_unary_unary_event   s   rj   c                    r4   )Nc                 3   sJ    t  }||jst  | |t| 	 | }|d u r!d S |V  qr   )rC   rf   r&   r   rU   r   rX   )r7   r   rg   responseunary_stream_eventr   r   r:      s   
z-_adapt_unary_stream_event.<locals>.adaptationr   )rm   r:   r   rl   r   _adapt_unary_stream_event   s   rn   c                    r4   )Nc                    sB   t  }||jst  |jt|}t| || | d S re   )	rC   rf   r&   r   rU   rT   r   rd   rZ   )r>   r   rg   r]   stream_unary_eventr   r   r:      s   z-_adapt_stream_unary_event.<locals>.adaptationr   )rp   r:   r   ro   r   _adapt_stream_unary_event   s   rq   c                    r4   )Nc                 3   sT    t  }||jst  |t|}t| || 	 | }|d u r&d S |V  qr   )rC   rf   r&   r   rU   r   rd   rX   )r>   r   rg   r]   rk   stream_stream_eventr   r   r:      s    z._adapt_stream_stream_event.<locals>.adaptationr   )rs   r:   r   rr   r   _adapt_stream_stream_event   s   rt   c                   @   s   e Zd ZdS )_SimpleMethodHandlerN)r   r   r   r   r   r   r   ru      s    ru   Z_MethodHandler)Zrequest_streamingZresponse_streamingrequest_deserializerresponse_serializerZunary_unaryZunary_streamZstream_unaryZstream_streamc              
   C   sx  | j t jju r^| jtjju rtdd||t| jd d d S | jtjj	u r1tdd||d t| j
d d S | jtjju rFtdd||d d t| jd S | jtjju r[tdd||d d d t| jS t | j t jju r| jtjju rztdd||t| jd d d S | jtjj	u rtdd||d t| jd d S | jtjju rtdd||d d t| jd S | jtjju rtdd||d d d t| jS t )NFT)r   ZServiceZINLINEr   ZCardinalityZUNARY_UNARYru   r<   Zunary_unary_inlineZUNARY_STREAMZunary_stream_inlineZSTREAM_UNARYrA   Zstream_unary_inlineZSTREAM_STREAMZstream_stream_inlineZEVENTrj   ri   rn   rm   rq   rp   rt   rs   
ValueError)implementationrv   rw   r   r   r   _simple_method_handler  s   

9



rz   c                 C   s:   | pi } i }| D ]}t |d |d }| | ||< q|S )Nr      )r   Zfully_qualified_method)Zmethod_pair_mapZflat_mapZmethod_pairmethodr   r   r   _flatten_method_pair_mapl  s   r}   c                   @   s   e Zd Zdd Zdd ZdS )_GenericRpcHandlerc                 C   s(   t || _t || _t || _|| _d S r   )r}   _method_implementations_request_deserializers_response_serializers_multi_method_implementation)r   Zmethod_implementationsmulti_method_implementationrequest_deserializersresponse_serializersr   r   r   r   v  s   
z_GenericRpcHandler.__init__c                 C   sb   | j |j}|d urt|| j|j| j|jS | jd u r"d S zW d S  tjy0   Y d S w r   )	r   getr|   rz   r   r   r   r
   ZNoSuchMethodError)r   Zhandler_call_detailsZmethod_implementationr   r   r   service  s    
z_GenericRpcHandler.serviceN)r   r   r   r   r   r   r   r   r   r~   u  s    r~   c                   @   rB   )_Serverc                 C   r   r   )_grpc_server)r   Zgrpc_serverr   r   r   r     r   z_Server.__init__c                 C      | j |S r   )r   add_insecure_port)r   addressr   r   r   r        z_Server.add_insecure_portc                 C   s   | j ||S r   )r   add_secure_port)r   r   Zserver_credentialsr   r   r   r     r'   z_Server.add_secure_portc                 C   r%   r   r   rc   r   r   r   r   rc     r'   z_Server.startc                 C   r   r   r   stop)r   Zgracer   r   r   r     r   z_Server.stopc                 C   s   | j   | S r   r   r   r   r   r   	__enter__  s   
z_Server.__enter__c                 C   s   | j d  dS rD   r   )r   exc_typeexc_valexc_tbr   r   r   __exit__  s   z_Server.__exit__N)
r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r     s    r   c                 C   sF   t | |||}|d u rt|d u rtn|}n|}ttj||fdS )N)handlers)r~   r   pool_DEFAULT_POOL_SIZEr   grpcserver)Zservice_implementationsr   r   r   Zthread_poolZthread_pool_sizeZgeneric_rpc_handlerZeffective_thread_poolr   r   r   r     s   r   ))__doc__collectionsrE   r   r   Z	grpc.betar   r   Zgrpc.framework.commonr   r   Zgrpc.framework.foundationr   r   r	   Zgrpc.framework.interfaces.facer
   r   ZGRPCServicerContextr   ZServicerContextr   r<   rA   ZConsumerrC   rd   rj   rn   rq   rt   
namedtupleZRpcMethodHandlerru   rz   r}   ZGenericRpcHandlerr~   Serverr   r   r   r   r   r   <module>   sH   (		3
d	%