o
    ;i
                     @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZmZ d dlmZ ddlmZ djee e e d	 Zd
ddddddZe ddeZdZee	e e f  Z!de de"fddZ#de"de fddZ$G dd dZ%ddd e&ddD d d e&d!d"D  Z'd#e de fd$d%Z(de de fd&d'Z)e d(Z*e d)Z+h d*Z,ee e-f Z.e
d+d,Z/eee e.f ee	e e.f  f Z0de-de-fd-d.Z1d/e!de/fd0d1Z2de-de-fd2d3Z3d4e0de!fd5d6Z4dS )7    N)	b64encode	b64decode)UnionMappingTupleNewTypeOptionalcast
Collection)quoteunquote)	MultiDict   )__version__z4grpc-python-grpclib/{lib_ver} ({sys}; {py}/{py_ver}))lib_versyspypy_veri  <   gMbP?gư>g&.>)HMSmunz^(\d+)([{}])$ zgrpc-status-details-binvaluereturnc                 C   s<   t | }|d u rtd| | \}}t|t|  S )NzInvalid timeout: {})_TIMEOUT_REmatch
ValueErrorformatgroupsint_UNITS)r   r   timeoutunit r'   D/home/ubuntu/.local/lib/python3.10/site-packages/grpclib/metadata.pydecode_timeout)   s
   
r)   r%   c                 C   s\   | dkrd t| S | dkrd t| d S | dkr%d t| d S d	 t| d
 S )N
   z{}Sg{Gz?z{}mi  gh㈵>z{}ui@B z{}ni ʚ;)r!   r#   )r%   r'   r'   r(   encode_timeout1   s   r+   c                   @   s   e Zd ZdZdeddfddZdedefdd	Zdedefd
dZ	e
deded  fddZe
dedd fddZdefddZdS )Deadlinez8Represents request's deadline - fixed point in time
    
_timestampr   Nc                C   s
   || _ d S )Nr-   )selfr-   r'   r'   r(   __init__?   s   
zDeadline.__init__otherc                 C   s2   t |tstdt| jt|j| j|jk S )Nz>comparison is not supported between instances of '{}' and '{}')
isinstancer,   	TypeErrorr!   type__name__r-   r/   r1   r'   r'   r(   __lt__B   s
   
zDeadline.__lt__c                 C   s   t |tsdS | j|jkS )NF)r2   r,   r-   r6   r'   r'   r(   __eq__I   s   
zDeadline.__eq__headersc                 C   s2   t ttdd |D d d}|d ur| |S d S )Nc                 s   s     | ]\}}|d kr|V  qdS )zgrpc-timeoutNr'   ).0kvr'   r'   r(   	<genexpr>Q   s    z(Deadline.from_headers.<locals>.<genexpr>)default)minmapr)   from_timeout)clsr9   r%   r'   r'   r(   from_headersN   s   
zDeadline.from_headersr%   c                 C   s   | t  | dS )Nr.   )time	monotonic)rB   r%   r'   r'   r(   rA   X   s   zDeadline.from_timeoutc                 C   s   t d| jt  S )zCalculates remaining time for the current request completion

        This function returns time in seconds as a floating point number,
        greater or equal to zero.
        r   )maxr-   rD   rE   )r/   r'   r'   r(   time_remaining\   s   zDeadline.time_remaining)r5   
__module____qualname____doc__floatr0   objectboolr7   r8   classmethod_Headersr   rC   rA   rG   r'   r'   r'   r(   r,   <   s    	r,   c                 C      g | ]}t |qS r'   chrr:   ir'   r'   r(   
<listcomp>e       rU       %   c                 C   rP   r'   rQ   rS   r'   r'   r(   rU   f   rV   &      messagec                 C   s   t | tddS )Nutf-8)safeencoding)r   	_UNQUOTED)r[   r'   r'   r(   encode_grpc_messagei      r`   c                 C   s   t | dddS )Nr\   replace)r^   errors)r   r   r'   r'   r(   decode_grpc_messagem   ra   re   z^[0-9a-z_.\-]+$z	^[ !-~]+$>   
user-agentcontent-typete	_MetadatazMultiDict[_Value]c                 C   s   t | dt| d   S )N   =   )r   lenrd   r'   r'   r(   decode_bin_value   s   rm   r9   c                 C   s`   t tt }| D ]%\}}|ds|tv rq|dr'||t|d q||| q|S )N):grpc--binascii)	r	   ri   r   
startswith_SPECIALendswithaddrm   encode)r9   metadatakeyr   r'   r'   r(   decode_metadata   s   
ry   c                 C   s   t | dS )Nrj   )r   rstriprd   r'   r'   r(   encode_bin_value   ra   r{   rw   c                 C   s   t | tr	|  } g }| D ]V\}}|tv s|dst|s&td||	drDt |t
s7td|||t|df qt |tsPtd|t|s\td||||f q|S )Nro   zInvalid metadata key: {!r}rp   z1Invalid metadata value type, bytes expected: {!r}rq   z/Invalid metadata value type, str expected: {!r}zInvalid metadata value: {!r})r2   r   itemsrs   rr   _KEY_RE	fullmatchr    r!   rt   bytesr3   appendr{   decodestr	_VALUE_RE)rw   resultrx   r   r'   r'   r(   encode_metadata   s0   




r   )5rerD   platformbase64r   r   typingr   r   r   r   r   r	   r
   urllib.parser   r   	multidictr   r   r   r!   systempython_implementationpython_versionlower
USER_AGENTr$   compilejoinr   _STATUS_DETAILS_KEYr   rO   rK   r)   r+   r,   ranger_   r`   re   r}   r   rs   r   _Valueri   _MetadataLikerm   ry   r{   r   r'   r'   r'   r(   <module>   sZ    $	)


 