o
    ;i                     @   s  U d dl mZmZmZmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZ erOdd
lmZ e	eef Ze	eeef eeeef  f Z ededZ!ededZ"G dd dej#ej$Z%i ej&ej'ej(ej'ej)ej*ej+ej'ej,ej-ej.ej/ej0ej1ej2ej3ej4ej5ej6ej5ej7ej*ej8ej9ej:ej;ej<ej'ej=ej>ej?ej@ZAeBeeCej$ f eDd< G dd dZEe ZFG dd dee!e"f ZGG dd dee!e"f ZHdS )    )
TYPE_CHECKINGAny
CollectionGenericLiteralMappingOptionalTypeVarUnionoverloadN)Message)	GRPCErrorStatus   )	exception)suppress_tb_frame)Retry_retry_transient_errors)configlogger_ClientRequestType)boundResponseTypec                   @   s   e Zd ZdS )WrappedGRPCErrorN)__name__
__module____qualname__ r   r   F/home/ubuntu/.local/lib/python3.10/site-packages/modal/_grpc_client.pyr      s    r   _STATUS_TO_EXCEPTIONc                   @   s&   e Zd Zdd Zded fddZdS )grpc_error_converterc                 C   s   d S Nr   selfr   r   r    	__enter__/   s   zgrpc_error_converter.__enter__returnFc                 C   sv   t d}t ) t|tr)t|j |j}|j|_|j|_	|j
|_|r&||d W d    dS 1 s4w   Y  dS )N	tracebackF)r   getr   
isinstancer   r!   statusmessage_grpc_message_grpc_statusdetails_grpc_details)r%   exc_typeexcr(   use_full_traceback	modal_excr   r   r    __exit__2   s   


zgrpc_error_converter.__exit__N)r   r   r   r&   r   r5   r   r   r   r    r"   .   s    r"   c                   @   sB  e Zd ZU ejjeef ed< ded< dejjeef ddde	fddZ
ede	fdd	Zeed
d
ddededd
deeee	e	f   def
ddZed
d
ddedd
dee deeee	e	f   def
ddZed
d
ddedee dee deeee	e	f   def
ddZd
d
ddedee dee defddZd
S )UnaryUnaryWrapperwrapped_methodr   client
server_urlc                 C      || _ || _|| _d S r#   r7   r8   r9   r%   r7   r8   r9   r   r   r    __init__L      
zUnaryUnaryWrapper.__init__r'   c                 C      | j jS r#   r7   namer$   r   r   r    rA   V      zUnaryUnaryWrapper.nameN)retrytimeoutmetadatareqrC   rD   rE   c                      d S r#   r   r%   rF   rC   rD   rE   r   r   r    __call__Z      zUnaryUnaryWrapper.__call__rD   rE   c                   rG   r#   r   rH   r   r   r    rI   d   rJ   c             	      s   t  d |d ur|d urtd|d u r;t  | j|||dI d H W  d    W  d    S 1 s6w   Y  t  t| |||dI d H W  d    W  d    S 1 s[w   Y  W d    d S 1 skw   Y  d S )Nz&Retry must be None when timeout is setrK   )rC   rE   )r   r   InvalidErrorr"   directr   rH   r   r   r    rI   n   s*   

	"c                   sx   ddl m} | j jr"td| jddd   | I d H | _ | j | j	I d H | j
_| j j| j
|||dI d H S )Nr   r   %refreshing client after snapshot for /rK   )r8   r   _snapshottedr   debugrA   rsplitfrom_env_get_channelr9   r7   channel_call_unary)r%   rF   rD   rE   r   r   r   r    rM      s   zUnaryUnaryWrapper.direct)r   r   r   grpclibr8   UnaryUnaryMethodr   r   __annotations__strr=   propertyrA   r   _DEFAULT_RETRYr   r   listtuplerI   float_MetadataLikerM   r   r   r   r    r6   F   s   
 

	
r6   c                   @   sl   e Zd ZU ejjeef ed< dejjeef ddde	fddZ
ede	fdd	Z	
ddee fddZd
S )UnaryStreamWrapperr7   r8   r   r9   c                 C   r:   r#   r;   r<   r   r   r    r=      r>   zUnaryStreamWrapper.__init__r'   c                 C   r?   r#   r@   r$   r   r   r    rA      rB   zUnaryStreamWrapper.nameNrE   c                 C  s   ddl m} | j jr"td| jddd   | I d H | _ | j | j	I d H | j
_t  | j j| j
||d2 z	3 d H W }|V  q<6 W d    d S 1 sRw   Y  d S )Nr   r   rN   rO   )rE   )r8   r   rP   r   rQ   rA   rR   rS   rT   r9   r7   rU   r"   _call_stream)r%   requestrE   r   responser   r   r    unary_stream   s    "zUnaryStreamWrapper.unary_streamr#   )r   r   r   rW   r8   UnaryStreamMethodr   r   rY   rZ   r=   r[   rA   r   r   re   r   r   r   r    ra      s   
 

ra   )Itypingr   r   r   r   r   r   r   r	   r
   r   grpclib.clientrW   google.protobuf.messager   r   r    r   
_tracebackr   _utils.grpc_utilsr   r   r   r   r8   r   rZ   bytes_Valuer^   r`   r   r   Error_GRPCErrorWrapperr   	CANCELLEDServiceErrorUNKNOWNINVALID_ARGUMENTrL   DEADLINE_EXCEEDED	NOT_FOUNDNotFoundErrorALREADY_EXISTSAlreadyExistsErrorPERMISSION_DENIEDPermissionDeniedErrorRESOURCE_EXHAUSTEDResourceExhaustedErrorFAILED_PRECONDITIONConflictErrorABORTEDOUT_OF_RANGEUNIMPLEMENTEDUnimplementedErrorINTERNALInternalErrorUNAVAILABLE	DATA_LOSSDataLossErrorUNAUTHENTICATED	AuthErrorr!   dicttyperY   r"   r\   r6   ra   r   r   r   r    <module>   sh   2 	
[