o
    qmœiÞR  ã                   @   sè  d dl Z d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlZddlmZ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dZdZdejdeje fdd„Z dej!de"defdd„Z#dej!de$fdd„Z%dej&e'ejej( f dejej( dej&e'ej(f fdd„Z)dejej( deje dejej( dejej( fdd „Z*d!ejej( dejej( deje dejej( dej+ejej( ejej( f f
d"d#„Z,G d$d%„ d%ƒZ-G d&d'„ d'ƒZ.dS )(é    N)ÚasynccontextmanagerÚcontextmanager)Úrandomé   )ÚFileÚ!convert_file_dict_to_httpx_tuples)ÚFORCE_MULTIPART)Újsonable_encoder)Úencode_query)Úremove_none_from_dict)ÚRequestOptions)ÚRequestFilesg      à?é
   é   Úresponse_headersÚreturnc                 C   sÖ   |   d¡}|dur!z|dkrt|ƒd W S dW S  ty    Y nw |   d¡}|du r,dS t d|¡r7t|ƒ}n,tj |¡}|du rCdS |d du rW|dd… d |d	d…  }tj 	|¡}|t
 
¡  }|dk rid}|S )
z¨
    This function parses the `Retry-After` header in a HTTP response and returns the number of seconds to wait.

    Inspired by the urllib3 retry implementation.
    zretry-after-msNr   iè  zretry-afterz^\s*[0-9]+\s*$é	   )r   r   )ÚgetÚintÚ	ExceptionÚreÚmatchÚfloatÚemailÚutilsÚparsedate_tzÚ	mktime_tzÚtime)r   Úretry_after_msÚretry_afterÚsecondsÚretry_date_tupleÚ
retry_date© r#   úM/home/ubuntu/.local/lib/python3.10/site-packages/sarvamai/core/http_client.pyÚ_parse_retry_after   s,   
ÿ

r%   ÚresponseÚretriesc                 C   sT   t | jƒ}|dur|tkr|S tttd|ƒ tƒ}|ddtƒ    }|dkr(|S dS )a  
    Determine the amount of time to wait before retrying a request.
    This function begins by trying to parse a retry-after header from the response, and then proceeds to use exponential backoff
    with a jitter to determine the number of seconds to wait.
    Ng       @r   g      Ð?r   )r%   ÚheadersÚ#MAX_RETRY_DELAY_SECONDS_FROM_HEADERÚminÚINITIAL_RETRY_DELAY_SECONDSÚpowÚMAX_RETRY_DELAY_SECONDSr   )r&   r'   r   Úretry_delayÚtimeoutr#   r#   r$   Ú_retry_timeoutC   s   
r0   c                 C   s   g d¢}| j dkp| j |v S )N)i­  i˜  i™  iô  )Ústatus_code)r&   Úretryable_400sr#   r#   r$   Ú_should_retryW   s   r3   ÚoriginalÚomitc                 C   s6   |d u r| S i }|   ¡ D ]\}}||ur|||< q|S ©N)Úitems)r4   r5   ÚnewÚkeyÚvaluer#   r#   r$   Úremove_omit_from_dict\   s   €r;   ÚdataÚrequest_optionsc                 C   sv   | d u r|d urt | di ¡ƒpi S d S t| tjƒs t | ƒ}|S i t t| |ƒƒ¥|d ur6t | di ¡ƒp5i ni ¥}|S )NÚadditional_body_parameters)r	   r   Ú
isinstanceÚtypingÚMappingr;   )r<   r=   r5   Údata_contentr#   r#   r$   Úmaybe_filter_request_bodyi   s$   ÿÿý
øÿÿ€ûrC   Újsonc                 C   sL   d }d }|d urt |||ƒ}nt | ||ƒ}|i kr|nd |i kr#|fS d fS r6   )rC   )rD   r<   r=   r5   Ú	json_bodyÚ	data_bodyr#   r#   r$   Úget_request_bodyƒ   s   "rG   c                    @   s¬  e Zd Zddœdejdejg eje f dejg ej	e
e
f f dejejg e
f  fdd„Zd	eje
 d
e
fdd„Z	dddddddddddddœdeje
 de
deje
 dejej	e
ejf  dejej dejej dejejeeje eje f  dejejej	e
ejejeeje f  f ejeje
ef  f  dejej	e
ejf  deje dedejej deje d
ejfdd„Ze	dddddddddddddœdeje
 de
deje
 dejej	e
ejf  dejej dejej dejejeeje eje f  dejejej	e
ejejeeje f  f ejeje
ef  f  dejej	e
ejf  deje dedejej deje d
ejej fdd„ƒZdS ) Ú
HttpClientN©Úbase_urlÚhttpx_clientÚbase_timeoutÚbase_headersrJ   c                C   ó   || _ || _|| _|| _d S r6   ©rJ   rL   rM   rK   ©ÚselfrK   rL   rM   rJ   r#   r#   r$   Ú__init__—   ó   
zHttpClient.__init__Úmaybe_base_urlr   c                 C   ó2   |}| j d ur|d u r|   ¡ }|d u rtdƒ‚|S ©NzNA base_url is required to make this request, please provide one and try again.©rJ   Ú
ValueError©rQ   rT   rJ   r#   r#   r$   Úget_base_url¤   ó   zHttpClient.get_base_urlé   ©rJ   ÚparamsrD   r<   ÚcontentÚfilesr(   r=   r'   r5   Úforce_multipartÚpathÚmethodr^   rD   r<   r_   r`   r(   r=   r'   r5   ra   c                C   sž  |   |¡}|
d ur|
 d¡d ur|
 d¡n|  ¡ }t|||
|d\}}|d ur9||ur9t|tƒr9ttt|ƒ|ƒƒnd }|d u sEt	|ƒdkrI|rIt
}| jj|tj |› d|¡tti |  ¡ ¥|	d urc|	ni ¥|
d urq|
 di ¡ppi ni ¥ƒƒtttti |d ur€|ni ¥|
d urŽ|
 di ¡pi ni ¥|ƒƒƒƒ|||||d	}|
d ur§|
 dd¡nd}t|d	rÍ||krÍt t||d
¡ | j||||||||	|
|d |dS |S )NÚtimeout_in_seconds©rD   r<   r=   r5   r   ú/Úadditional_headersÚadditional_query_parameters©	rc   Úurlr(   r^   rD   r<   r_   r`   r/   Úmax_retries©r&   ©r&   r'   r   ©rb   rc   rJ   r^   rD   r_   r`   r(   r=   r'   r5   )rZ   r   rL   rG   r?   Údictr   r;   r   Úlenr   rK   ÚrequestÚurllibÚparseÚurljoinr	   rM   r
   r3   r   Úsleepr0   )rQ   rb   rc   rJ   r^   rD   r<   r_   r`   r(   r=   r'   r5   ra   r/   rE   rF   Úrequest_filesr&   rk   r#   r#   r$   rq   ­   sŠ   

ÿýÿýÿþ€ ýÿÿ	ÿÿ€û÷ÿÿÿß$
õzHttpClient.requestc                c   s`   |   |¡}|
d ur|
 d¡d ur|
 d¡n|  ¡ }|d ur0||ur0t|tƒr0ttt|ƒ|ƒƒnd }|d u s<t|ƒdkr@|r@t	}t
|||
|d\}}| jj|tj |› d|¡tti |  ¡ ¥|	d urd|	ni ¥|
d urp|
 di ¡ni ¥ƒƒtttti |d ur|ni ¥|
d ur‹|
 di ¡ni ¥|ƒƒƒƒ|||||d	}|V  W d   ƒ d S 1 s©w   Y  d S )Nrd   r   re   rf   rg   rh   ri   ©rZ   r   rL   r?   ro   r   r;   r   rp   r   rG   rK   Ústreamrr   rs   rt   r	   rM   r
   ©rQ   rb   rc   rJ   r^   rD   r<   r_   r`   r(   r=   r'   r5   ra   r/   rv   rE   rF   rx   r#   r#   r$   rx     sh   €

ÿýÿýÿþýÿÿ	ÿÿû÷ÿÿÿß""ÝzHttpClient.streamr6   )Ú__name__Ú
__module__Ú__qualname__ÚhttpxÚClientr@   ÚCallableÚOptionalr   ÚDictÚstrrR   rZ   ÚAnyÚUnionÚbytesÚIteratorÚAsyncIteratorr   ÚListÚTupler   r   ÚboolÚResponserq   r   rx   r#   r#   r#   r$   rH   –   óÚ    úýüû
úþìþüûú
ù
ø 	÷
"ÿÿÿöðïî
íì
ë`þìþüûú
ù
ø 	÷
"ÿÿÿöðïî
íì
ërH   c                    @   s¬  e Zd Zddœdejdejg eje f dejg ej	e
e
f f dejejg e
f  fdd„Zd	eje
 d
e
fdd„Z	dddddddddddddœdeje
 de
deje
 dejej	e
ejf  dejej dejej dejejeeje eje f  dejejej	e
ejejeeje f  f ejeje
ef  f  dejej	e
ejf  deje dedejej deje d
ejfdd„Ze	dddddddddddddœdeje
 de
deje
 dejej	e
ejf  dejej dejej dejejeeje eje f  dejejej	e
ejejeeje f  f ejeje
ef  f  dejej	e
ejf  deje dedejej deje d
ejej fdd„ƒZdS ) ÚAsyncHttpClientNrI   rK   rL   rM   rJ   c                C   rN   r6   rO   rP   r#   r#   r$   rR   ]  rS   zAsyncHttpClient.__init__rT   r   c                 C   rU   rV   rW   rY   r#   r#   r$   rZ   j  r[   zAsyncHttpClient.get_base_urlr\   r]   rb   rc   r^   rD   r<   r_   r`   r(   r=   r'   r5   ra   c                Ã   s²  |   |¡}|
d ur|
 d¡d ur|
 d¡n|  ¡ }|d ur0||ur0t|tƒr0ttt|ƒ|ƒƒnd }|d u s<t|ƒdkr@|r@t	}t
|||
|d\}}| jj|tj |› d|¡tti |  ¡ ¥|	d urd|	ni ¥|
d urr|
 di ¡pqi ni ¥ƒƒtttti |d ur|ni ¥|
d ur|
 di ¡pŽi ni ¥|ƒƒƒƒ|||||d	I d H }|
d ur«|
 dd¡nd}t|d	r×||kr×t t||d
¡I d H  | j||||||||	|
|d |dI d H S |S )Nrd   r   re   rf   rg   rh   ri   rk   rl   rm   r   rn   )rZ   r   rL   r?   ro   r   r;   r   rp   r   rG   rK   rq   rr   rs   rt   r	   rM   r
   r3   Úasyncioru   r0   )rQ   rb   rc   rJ   r^   rD   r<   r_   r`   r(   r=   r'   r5   ra   r/   rv   rE   rF   r&   rk   r#   r#   r$   rq   s  sŒ   €

ÿýÿýÿþ€ ýÿÿ	ÿÿ€û÷ÿÿÿß$
õzAsyncHttpClient.requestc                C  sv  |   |¡}|
d ur|
 d¡d ur|
 d¡n|  ¡ }|d ur0||ur0t|tƒr0ttt|ƒ|ƒƒnd }|d u s<t|ƒdkr@|r@t	}t
|||
|d\}}| jj|tj |› d|¡tti |  ¡ ¥|	d urd|	ni ¥|
d urp|
 di ¡ni ¥ƒƒtttti |d ur|ni ¥|
d ur‹|
 di ¡ni ¥|dƒƒƒ|||||d	4 I d H š}|V  W d   ƒI d H  d S 1 I d H s´w   Y  d S )	Nrd   r   re   rf   rg   rh   )r5   ri   rw   ry   r#   r#   r$   rx   Ó  sh   €

ÿýÿýÿþýÿÿ	ÿÿû÷ÿÿÿß".ÝzAsyncHttpClient.streamr6   )rz   r{   r|   r}   ÚAsyncClientr@   r   r€   r   r   r‚   rR   rZ   rƒ   r„   r…   r†   r‡   r   rˆ   r‰   r   r   rŠ   r‹   rq   r   rx   r#   r#   r#   r$   r   \  rŒ   r   )/rŽ   Úemail.utilsr   r   r   r@   Úurllib.parserr   Ú
contextlibr   r   r   r}   Úfiler   r   ra   r   r	   Úquery_encoderr
   r   r=   r   Úhttpx._typesr   r+   r-   r)   ÚHeadersr€   r   r%   r‹   r   r0   rŠ   r3   r   r‚   rƒ   r;   rC   r‰   rG   rH   r   r#   r#   r#   r$   Ú<module>   sh   )ÿ
þ
ý
ÿþ
ý

ü
þ
ýü
û
ú G