U
    	f                  
   @  s  U d dl mZ 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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mZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  d dl!m"Z"m#Z#m$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,m-Z- d
dl.m/Z/ d
dl0m1Z1m2Z2 d
dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d
dlEmFZFmGZGmHZHmIZI d
dlJmKZKmLZL d
dlMmNZNmOZOmPZPmQZQ d
dlRmSZSmTZTmUZUmVZV d
dlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ d
dl_m`Z`maZambZbmcZc d
dl-mdZdmeZemfZfmgZg eheiZjdekd< edddZledddZmedZneddd Zoed!e`e dZped"ebe dZqerd d#lrmsZt n0zd d#lrmsZt W n euk
r   e9d$ZtY nX G d%d& d&ZvG d'd( d(eNeen ZwG d)d* d*ewen een ZxG d+d, d,eenemf ZyG d-d. d.ewen een Zzed/ee&j{e&j|f dZ}ed0ee`e ebe f dZ~G d1d2 d2ee}e~f ZG d3d4 d4e&j{ZG d5d6 d6ee&j{e`e f ZG d7d8 d8e&j|ZG d9d: d:ee&j|ebe f Zddddde4e4d;d<d=d<d>d?d@dAdBdCdDdEZG dFdG dGZeee"dH f ZdIdJdKdLZe ddMdNdOdPdQdRZG dSdT dTZeee"dU f ZdNdJdVdWZdNdJdXdYZdZdJd[d\Zd]d]d^d_d`daZdS )b    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)	lru_cache)Literaloverride
get_origin)URLLimits)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)	NOT_GIVENBodyOmitQueryHeadersTimeoutNotGiven	ResponseT	Transport
AnyMapping
PostParserProxiesTypesRequestFilesHttpxSendArgsAsyncTransportRequestOptionsModelBuilderProtocol)is_dictis_listis_given
is_mapping)
model_copy
model_dump)GenericModelFinalRequestOptionsvalidate_typeconstruct_type)APIResponseBaseAPIResponseAsyncAPIResponseextract_response_type)DEFAULT_LIMITSDEFAULT_TIMEOUTMAX_RETRY_DELAYDEFAULT_MAX_RETRIESINITIAL_RETRY_DELAYRAW_RESPONSE_HEADEROVERRIDE_CAST_TO_HEADER)Stream
SSEDecoderAsyncStreamSSEBytesDecoder)APIStatusErrorAPITimeoutErrorAPIConnectionErrorAPIResponseValidationErrorzlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIGg      @c                   @  sd   e Zd ZU dZded< ded< edddd	d
Zeddddd
Zeeddddddd
ZdS )PageInfozStores the necessary information to build the request to retrieve the next page.

    Either `url` or `params` must be set.
    zURL | NotGivenurlzQuery | NotGivenparamsr   NonerZ   returnc                C  s   d S N selfrZ   r`   r`   T/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/groq/_base_client.py__init__z   s    zPageInfo.__init__r$   )r[   r^   c                C  s   d S r_   r`   )rb   r[   r`   r`   rc   rd      s    rZ   r[   )rZ   r[   r^   c                C  s   || _ || _d S r_   re   )rb   rZ   r[   r`   r`   rc   rd      s    N)__name__
__module____qualname____doc____annotations__r   rd   r!   r`   r`   r`   rc   rY   q   s   

rY   c                   @  sx   e Zd ZU dZe Zded< e Zded< dddd	Zd
dddZ	ddddZ
dddddZdddddZdS )BasePagea<  
    Defines the core interface for pagination.

    Type Args:
        ModelT: The pydantic model that represents an item in the response.

    Methods:
        has_next_page(): Check if there is another page available
        next_page_info(): Get the necessary information to make a request for the next page
    r9   _optionsType[_T]_modelboolr^   c                 C  s   |   }|sdS |  d k	S )NF)_get_page_itemsnext_page_info)rb   itemsr`   r`   rc   has_next_page   s    zBasePage.has_next_pagezOptional[PageInfo]c                 C  s   d S r_   r`   rb   r`   r`   rc   rr      s    zBasePage.next_page_infozIterable[_T]c                 C  s   d S r_   r`   ru   r`   r`   rc   rq      s    zBasePage._get_page_itemsr   zhttpx.QueryParamsr]   c                 C  s   t tt| jj|jS r_   )httpxQueryParamsr   r   rl   r[   mergera   r`   r`   rc   _params_from_url   s    zBasePage._params_from_urlrY   )infor^   c                 C  s|   t | j}|  t|jts0|j|j|_|S t|jtsp| |j}|jj|d}t	|j|_t
||_|S tdd S )N)r[   zUnexpected PageInfo state)r6   rl   _strip_raw_response_header
isinstancer[   r'   rZ   ry   	copy_withdictstr
ValueError)rb   rz   optionsr[   rZ   r`   r`   rc   _info_to_options   s    

zBasePage._info_to_optionsN)rf   rg   rh   ri   r   rl   rj   rn   rt   rr   rq   ry   r   r`   r`   r`   rc   rk      s   
rk   c                   @  s`   e Zd ZU e Zded< dddddddZd	d
ddZdddddZ	dddddZ
dS )BaseSyncPageSyncAPIClient_clientrm   r9   r\   )clientmodelr   r^   c                 C  s   || _ || _|| _d S r_   rn   r   rl   )rb   r   r   r   r`   r`   rc   _set_private_attributes   s    z$BaseSyncPage._set_private_attributeszIterator[_T]rp   c                 c  s&   |   D ]}| D ]
}|V  qqd S r_   
iter_pagesrq   rb   pageitemr`   r`   rc   __iter__   s    zBaseSyncPage.__iter__rP   zIterator[SyncPageT]rb   r^   c                 c  s&   | }|V  |  r| }qd S qd S r_   rt   get_next_pagerb   r   r`   r`   rc   r      s
    
zBaseSyncPage.iter_pagesc                 C  s4   |   }|std| |}| jj| j| j|dS NzYNo next page expected; please check `.has_next_page()` before calling `.get_next_page()`.)r   r   rr   RuntimeErrorr   r   _request_api_listrn   	__class__rb   rz   r   r`   r`   rc   r      s    
zBaseSyncPage.get_next_pageN)rf   rg   rh   pydanticr   r   rj   r   r   r   r   r`   r`   r`   rc   r      s
   
	r   c                   @  sL   e Zd ZddddddddZd	d
ddZdd
ddZdd
ddZdS )AsyncPaginatorAsyncAPIClientr9   Type[AsyncPageT]rm   r\   )r   r   page_clsr   r^   c                 C  s   || _ || _|| _|| _d S r_   )rn   r   rl   	_page_cls)rb   r   r   r   r   r`   r`   rc   rd      s    zAsyncPaginator.__init__z Generator[Any, None, AsyncPageT]rp   c                 C  s   |    S r_   )	_get_page	__await__ru   r`   r`   rc   r      s    zAsyncPaginator.__await__rR   c                   s4   ddd fdd}| j _ j j j I d H S )NrR   respr^   c                   s   | j  j j jd | S )N)r   r   r   )r   rn   rl   r   r   ru   r`   rc   _parser  s    z)AsyncPaginator._get_page.<locals>._parser)rl   post_parserr   requestr   )rb   r   r`   ru   rc   r     s    zAsyncPaginator._get_pageAsyncIterator[_T]c                 C s.   t t| I d H }|2 z3 d H W }|V  q6 d S r_   )r   rR   r   r`   r`   rc   	__aiter__  s    zAsyncPaginator.__aiter__N)rf   rg   rh   rd   r   r   r   r`   r`   r`   rc   r      s   r   c                   @  s`   e Zd ZU e Zded< dddddddZd	d
ddZdddddZ	dddddZ
dS )BaseAsyncPager   r   rm   r9   r\   )r   r   r   r^   c                 C  s   || _ || _|| _d S r_   r   )rb   r   r   r   r`   r`   rc   r     s    z%BaseAsyncPage._set_private_attributesr   rp   c                 C s0   |   2 z 3 d H W }| D ]
}|V  qq6 d S r_   r   r   r`   r`   rc   r   '  s    zBaseAsyncPage.__aiter__rR   zAsyncIterator[AsyncPageT]r   c                 C s,   | }|V  |  r"| I d H }qd S qd S r_   r   r   r`   r`   rc   r   ,  s
    zBaseAsyncPage.iter_pagesc                   s:   |   }|std| |}| jj| j| j|dI d H S r   r   r   r`   r`   rc   r   5  s    
zBaseAsyncPage.get_next_pageN)rf   rg   rh   r   r   r   rj   r   r   r   r   r`   r`   r`   rc   r     s
   

	r   _HttpxClientT_DefaultStreamTc                   @  sJ  e Zd ZU ded< ded< ded< ded< d	ed
< ded< ded< ded< ded< ded< dZded< eeddddddddddddddddd Zddd!d"d#Zd$d%d&d'd(Z	dd)d$d*d+d,d-Z
d.d/dd0d1d2Zd/d3d4d5d6Zddd!d7d8Zd9d:d;d<Zd/d=d4d>d?Zd@dAdBdCdDZdEd/dEdFdGdHZd=ddIdJdKZd)dEd$dLdMdNdOZedPd:dQdRZedSd:dTdUZedVd:dWdXZedYd:dZd[Zd\d\dd]d^d_Zedd:d`daZedd:dbdcZejdddd!dedcZdfd:dgdhZdvdidjdkdldmZdwdd/didndodpdqZd$dd&drdsZ dd:dtduZ!dS )x
BaseClientr   r   r   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutzhttpx.Limits_limitsProxiesTypes | None_proxiesz!Transport | AsyncTransport | None
_transportro   _strict_response_validation
str | None_idempotency_headerNztype[_DefaultStreamT] | None_default_stream_cls)r   r   custom_headerscustom_query	str | URLzfloat | Timeout | NoneMapping[str, str] | NoneMapping[str, object] | Noner\   )versionbase_urlr   r   r   limits	transportproxiesr   r   r^   c       
         C  sX   || _ | t|| _|| _|| _|| _|| _|| _|	p:i | _	|
pDi | _
|| _d | _d S r_   )r   _enforce_trailing_slashr   r   r   r   r   r   r   _custom_headers_custom_queryr   r   )rb   r   r   r   r   r   r   r   r   r   r   r`   r`   rc   rd   Q  s    

zBaseClient.__init__r]   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr}   ra   r`   r`   rc   r   k  s    z"BaseClient._enforce_trailing_slashhttpx.ResponserK   )responser^   c                 C  s   |j r|jsd }d|j }nT|j }|}z t|}d|j d| }W n$ tk
rp   |pjd|j }Y nX | j|||dS )NzError code: z - )bodyr   )		is_closedis_stream_consumedstatus_codetextstripjsonloads	Exception_make_status_error)rb   r   r   err_msgZerr_textr`   r`   rc    _make_status_error_from_responsep  s    

z+BaseClient._make_status_error_from_responseobjectz_exceptions.APIStatusError)r   r   r   r^   c                C  s
   t  d S r_   )NotImplementedError)rb   r   r   r   r`   r`   rc   r     s    zBaseClient._make_status_errorOptional[int]r9   )remaining_retriesr   r^   c                 C  s   |d k	r|S | | jS r_   )get_max_retriesr   )rb   r   r   r`   r`   rc   _remaining_retries  s    zBaseClient._remaining_retrieszhttpx.Headersr   r^   c                 C  sb   |j pi }t| j|}| || t|}| j}|r^|j dkr^||kr^|j	pX| 
 ||< |S )Nget)headers_merge_mappingsdefault_headers_validate_headersrv   r%   r   methodloweridempotency_key_idempotency_key)rb   r   r   Zheaders_dictr   Zidempotency_headerr`   r`   rc   _build_headers  s    

zBaseClient._build_headersc                 C  s4   t |}|jr0| jj|jd }| jj|dS |S )z
        Merge a URL argument together with any 'base_url' on the client,
        to create the URL used for the outgoing request.
        r   r   )r   is_relative_urlr   r   lstripr}   )rb   rZ   	merge_urlmerge_raw_pathr`   r`   rc   _prepare_url  s
    zBaseClient._prepare_urlzSSEDecoder | SSEBytesDecoderrp   c                 C  s   t  S r_   )rH   ru   r`   r`   rc   _make_sse_decoder  s    zBaseClient._make_sse_decoderhttpx.Requestc                 C  sL  t tjr t dt|dd i }|j}|jd k	rt|d krJtt	|j}n*t
|r`t||j}ntdt| d| |}t| j|j}|d}|d k	r|drd|kr|d |rt|std	t| d
| ||d< | jjf |t|jtr| jn|j|j| |j|r8| j tt!t"t#f |nd ||j$d|S )NzRequest options: %sT)exclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`Content-Typezmultipart/form-databoundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.data)r   r   r   rZ   r[   r   files)%rO   isEnabledForloggingDEBUGdebugr7   	json_data
extra_jsonr   r"   r5   r   r   typer   r   r[   r   
startswithpopr2   	TypeError_serialize_multipartformr   build_requestr|   r   r'   r   r   rZ   qsZ	stringifyr   r   r   r   )rb   r   kwargsr   r   r[   content_typer`   r`   rc   _build_request  sB    




"zBaseClient._build_requestzMapping[object, object]zdict[str, object])r   r^   c                 C  s^   | j j|dd}i }|D ]@\}}||}|s8|||< qt|rL|| q||g||< q|S )NZbrackets)array_format)r  Zstringify_itemsr   r3   append)rb   r   rs   Z
serializedkeyvalueexistingr`   r`   rc   r    s    

z#BaseClient._serialize_multipartformtype[ResponseT])cast_tor   r^   c                 C  sD   t |js|S t|j}|tt}t |r@||_ttt |S |S r_   )	r4   r   r~   r   rF   r!   r   r   r(   )rb   r  r   r   Zoverride_cast_tor`   r`   rc   _maybe_override_cast_to  s    

z"BaseClient._maybe_override_cast_tor   r^   c                 C  s   |j tdkS )Nstream)r   r   rE   rb   r   r`   r`   rc   _should_stream_response_body  s    z'BaseClient._should_stream_response_bodyr(   )r   r  r   r^   c             
   C  s   |d krt td S |tkr$t t|S zXt|rPt|trPt t|j||dW S | jrjt tt	||dW S t tt
||dW S  tjk
r } zt||d|W 5 d }~X Y nX d S )N)r   r   )type_r
  )r   r   )r   r(   r   inspectisclass
issubclassr1   buildr   r:   r;   r   ValidationErrorrN   )rb   r   r  r   errr`   r`   rc   _process_response_data   s    

z!BaseClient._process_response_datar   c                 C  s   t  S r_   r   ru   r`   r`   rc   r  8  s    zBaseClient.qszhttpx.Auth | Nonec                 C  s   d S r_   r`   ru   r`   r`   rc   custom_auth<  s    zBaseClient.custom_authzdict[str, str]c                 C  s   i S r_   r`   ru   r`   r`   rc   auth_headers@  s    zBaseClient.auth_headerszdict[str, str | Omit]c                 C  s   dd| j d|  | j| jS )Nzapplication/json)Acceptr   z
User-Agent)
user_agentplatform_headersr  r   ru   r`   r`   rc   r   D  s    zBaseClient.default_headersr%   )r   r   r^   c                 C  s   dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nr`   )rb   r   r   r`   r`   rc   r   O  s    	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )r   rf   r   ru   r`   r`   rc   r  Z  s    zBaseClient.user_agentc                 C  s   | j S r_   )r   ru   r`   r`   rc   r   ^  s    zBaseClient.base_urlz	URL | strc                 C  s"   |  t|tr|nt|| _d S r_   )r   r|   r   r   ra   r`   r`   rc   r   b  s    Dict[str, str]c                 C  s
   t | jS r_   )r  r   ru   r`   r`   rc   r  f  s    zBaseClient.platform_headerszOptional[httpx.Headers]zfloat | None)response_headersr^   c              	   C  s   |dkrdS z| dd}t|d W S  ttfk
r>   Y nX | d}z
t|W S  ttfk
rl   Y nX tj|}|dkrdS tj|}t|t  S )a@  Returns a float of the number of seconds (not milliseconds) to wait after retrying, or None if unspecified.

        About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After
        See also  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After#syntax
        Nzretry-after-msi  zretry-after)	r   floatr   r   emailutilsparsedate_tz	mktime_tztime)rb   r!  Zretry_ms_headerZretry_headerZretry_date_tupleZ
retry_dater`   r`   rc   _parse_retry_after_headeri  s"    

z$BaseClient._parse_retry_after_headerr"  )r   r   r!  r^   c           
      C  s|   | | j}| |}|d k	r:d|  k r2dkr:n n|S || }tttd| t}ddt   }|| }	|	dkrx|	S dS )Nr   <   g       @r   g      ?)r   r   r(  minrD   powrB   r   )
rb   r   r   r!  r   Zretry_afterZ
nb_retriesZsleep_secondsZjitterr   r`   r`   rc   _calculate_retry_timeout  s    
 z#BaseClient._calculate_retry_timeoutc                 C  s   |j d}|dkr"td dS |dkr8td dS |jdkrTtd	|j dS |jd
krptd	|j dS |jdkrtd	|j dS |jdkrtd	|j dS td dS )Nzx-should-retrytruez4Retrying as header `x-should-retry` is set to `true`Tfalsez9Not retrying as header `x-should-retry` is set to `false`Fi  zRetrying due to status code %ii  i  i  zNot retrying)r   r   rO   r   r   )rb   r   Zshould_retry_headerr`   r`   rc   _should_retry  s*    






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4ru   r`   r`   rc   r     s    zBaseClient._idempotency_key)N)N)"rf   rg   rh   rj   r   rC   rA   rd   r   r   r   r   r   r   r   r  r  r  r  r  propertyr  r  r  r   r   r  r   setterr  r(  r,  r/  r   r`   r`   r`   rc   r   D  sb   
&	:
& #r   c                   @  s   e Zd ZddddZdS )SyncHttpxClientWrapperr\   rp   c                 C  s&   z|    W n tk
r    Y nX d S r_   )closer   ru   r`   r`   rc   __del__  s    zSyncHttpxClientWrapper.__del__Nrf   rg   rh   r6  r`   r`   r`   rc   r4    s   r4  c                      s^  e Zd ZU ded< dZded< eedddddddddd	d
ddddddddd fddZddddZddddZ	dddddZ
dd d!dd"d#d$Zd%dd&d'd(Zd)dd*d+d,Zed|d-d%d.d/d0d1d2d3d4Zed}d5d6d-d%d.d7d8d9d:d4Zed~d5dd;d-d%d.dd<d=d2d>d4Zdd5dd;d-d%d.dd?d=d2d@d4Zd-d%dAdd?d=d2dBdCZd%d-d	dDdd?d=dEdFdGZd-d%dHddId8dJdKdLZdMdNd%dOdPdQdRZei d5dSdd-dTd7d8dUdVdWZei dXdd-dTd/dYd1dZd[dWZei dd\dd-dTdd?d=dZd]dWZi d5dd^dd-dTdd?d=dZd_dWZedi dd5d`dd-dadTdbd7d8dcdddeZedi ddfdd-dadTdbd/dYd1dgdhdeZedi dddidd-dadTdbdd?d=dgdjdeZdi dd5ddkdd-dadTdbdd?d=dgdldeZdi dmdd-dadTd8dndodpZddi dqdd-dadbdTd8drdsdtZdi dmdd-dadTd8dndudvZdi dwdxddMdNdadTddOdydzd{Z  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   r   r   r   http_clientr   r   r   r   r   !float | Timeout | None | NotGivenzTransport | Noner   Limits | Nonezhttpx.Client | Noner   r   ro   r\   )r   r   r   r   r   r   r   r9  r   r   r   r^   c                  s   |d k	r*t jdtdd |d k	r.tdnt}|d k	rVt jdtdd |d k	rVtd|d k	r~t jdtdd |d k	r~tdt|s|r|jtkr|j}nt}t	 j
||tt||||||
|	|d	
 |pt|tt||||d
d| _d S )NhThe `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead   category
stacklevelNThe `http_client` argument is mutually exclusive with `connection_pool_limits`[The `transport` argument is deprecated. The `http_client` argument should be passed insteadAThe `http_client` argument is mutually exclusive with `transport`YThe `proxies` argument is deprecated. The `http_client` argument should be passed instead?The `http_client` argument is mutually exclusive with `proxies`)
r   r   r   r   r   r   r   r   r   r   Tr   r   r   r   r   follow_redirects)warningswarnDeprecationWarningr   r@   r4   r   HTTPX_DEFAULT_TIMEOUTrA   superrd   r   r&   r4  r   )rb   r   r   r   r   r   r   r   r9  r   r   r   r   r`   rc   rd     sb    
zSyncAPIClient.__init__rp   c                 C  s   | j jS r_   r   r   ru   r`   r`   rc   r   %  s    zSyncAPIClient.is_closedc                 C  s   t | dr| j  dS )`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        r   N)hasattrr   r5  ru   r`   r`   rc   r5  (  s    
zSyncAPIClient.closerS   r   c                 C  s   | S r_   r`   ru   r`   r`   rc   	__enter__2  s    zSyncAPIClient.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbr^   c                 C  s   |    d S r_   r5  rb   rV  rW  rX  r`   r`   rc   __exit__5  s    zSyncAPIClient.__exit__r9   r   c                 C  s   dS z#Hook for mutating the given optionsNr`   rb   r   r`   r`   rc   _prepare_options=  s    zSyncAPIClient._prepare_optionsr   r  c                 C  s   dS a  This method is used as a callback for mutating the `Request` object
        after it has been constructed.
        This is useful for cases where you want to add certain headers based off of
        the request properties, e.g. `url`, `method` etc.
        Nr`   r  r`   r`   rc   _prepare_requestD  s    	zSyncAPIClient._prepare_requestType[ResponseT]r   Literal[True]zType[_StreamT]rV   )r  r   r   r  
stream_clsr^   c                C  s   d S r_   r`   rb   r  r   r   r  rc  r`   r`   rc   r   O  s    
zSyncAPIClient.requestFr  Literal[False]r(   )r  r   r   r  r^   c                C  s   d S r_   r`   )rb   r  r   r   r  r`   r`   rc   r   [  s    	r  rc  zType[_StreamT] | NonezResponseT | _StreamTc                C  s   d S r_   r`   rd  r`   r`   rc   r   f  s    
ztype[_StreamT] | Nonec                C  s   | j |||||dS N)r  r   r  rc  r   _requestrd  r`   r`   rc   r   r  s    	
int | Nonec                C  s4  |  ||}| | | ||}| |}| | i }| jd k	rN| j|d< z(| jj|fd|pj| j|di|}	W n t	j
k
r }
 zNtjddd |dkr| j|||||d d W Y S td	 t|d|
W 5 d }
~
X Y np tk
rR }
 zPtjd
dd |dkr,| j|||||d d W Y S td t|d|
W 5 d }
~
X Y nX td|j|j|	j|	j z|	  W n t	jk
r }
 ztjddd |dkr| |
jr|
j  | j||||
jj||d W Y 2S |
jjs|
j  td | |
jd W 5 d }
~
X Y nX | j|||	||dS Nauthr  )r   z"Encountered httpx.TimeoutExceptionT)exc_infor   )r  rc  r!  zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Request: %s %s "%i %s"z!Encountered httpx.HTTPStatusErrorrg  zRe-raising status error)r  r   r   r  rc  )r  r^  r   r  r`  r  r   sendr  rv   TimeoutExceptionrO   r   _retry_requestrL   r   rM   r   rZ   r   reason_phraseraise_for_statusHTTPStatusErrorr/  r   r5  r   r   readr   _process_response)rb   r  r   r   r  rc  retriesr   r  r   r  r`   r`   rc   rj    s    	





	

	
    



 zSyncAPIClient._requesthttpx.Headers | Noner   r  r   r!  r  rc  r^   c          	      C  sd   |d }|dkrt d nt d| | |||}t d|j| t| | j|||||dS Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)r   r  r   r  rc  )rO   r   r,  rz   rZ   r'  sleeprj  	rb   r   r  r   r!  r  rc  	remainingr   r`   r`   rc   rq    s    

zSyncAPIClient._retry_requestr   1type[Stream[Any]] | type[AsyncStream[Any]] | Noner  r   r   r  rc  r^   c          	   
   C  s   t |p
|}t|rft|trft|ts>tdt d| td|}tt||| t	||||dS |t
jkrztt|S t|| td||||d}t|jjtrtt|S | S )N!API Response types must subclass ; Received type[BaseAPIResponse[Any]]rawr   r  r  rc  r   r  )r   r  r  r  r=   r<   r   r   r(   r?   rv   Responsero   r   r   r   rE   parse	rb   r  r   r   r  rc  originresponse_clsZapi_responser`   r`   rc   rv    s:    	




zSyncAPIClient._process_responsezType[object]zType[SyncPageT]rP   r   r   r   r^   c                   s.   ddd fdd}|_ j|ddS )NrP   r   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rb   r`   rc   r   1  s    z0SyncAPIClient._request_api_list.<locals>._parserFre  )r   r   )rb   r   r   r   r   r`   r  rc   r   +  s    zSyncAPIClient._request_api_listr   r  r0   pathr  r   r  r^   c                C  s   d S r_   r`   rb   r  r  r   r  r`   r`   rc   r   =  s    	zSyncAPIClient.getr   ztype[_StreamT]r  r  r   r  rc  r^   c                C  s   d S r_   r`   rb   r  r  r   r  rc  r`   r`   rc   r   H  s    
r   rc  c                C  s   d S r_   r`   r  r`   r`   rc   r   T  s    
r   r  rc  c                C  s.   t jf d|d|}tt| j||||dS Nr   )r   rZ   rg  )r9   	constructr   r(   r   rb   r  r  r   r  rc  optsr`   r`   rc   r   `  s    	)r   r   r   r  Body | NoneRequestFiles | None)r  r  r   r   r   r  r^   c                C  s   d S r_   r`   )rb   r  r  r   r   r   r  r`   r`   rc   postn  s    zSyncAPIClient.post)r   r   r   )r  r  r   r   r   r  rc  r^   c                C  s   d S r_   r`   rb   r  r  r   r   r   r  rc  r`   r`   rc   r  {  s    )r   r   r   rc  c                C  s   d S r_   r`   r  r`   r`   rc   r    s    )r   r   r   r  rc  c          	      C  s6   t jf d||t|d|}tt| j||||dS Nr  r   rZ   r   r   rg  )r9   r  r   r   r(   r   )	rb   r  r  r   r   r   r  rc  r  r`   r`   rc   r    s       r   r   r  r  r   r   r^   c                C  s$   t jf d||d|}| ||S Npatchr   rZ   r   r9   r  r   rb   r  r  r   r   r  r`   r`   rc   r    s    zSyncAPIClient.patchr   r   r   r  r  r   r   r   r^   c                C  s*   t jf d||t|d|}| ||S Nputr  )r9   r  r   r   rb   r  r  r   r   r   r  r`   r`   rc   r    s    	   zSyncAPIClient.putc                C  s$   t jf d||d|}| ||S Ndeleter  r  r  r`   r`   rc   r    s    zSyncAPIClient.deleter   r   r   r   r  r   r   r   r   r   r^   c                C  s&   t jf |||d|}| |||S Nr  r9   r  r   rb   r  r   r   r   r   r   r  r`   r`   rc   get_api_list  s    
zSyncAPIClient.get_api_list)N)N)N)N)rf   rg   rh   rj   r   rC   r!   rd   r   r5  rQ  r[  r^  r`  r   r   rj  rq  rv  r   r   r  r  r  r  r  __classcell__r`   r`   rM  rc   r     s   
,P
  
  ],
 "" r   c                   @  s   e Zd ZddddZdS )AsyncHttpxClientWrapperr\   rp   c                 C  s0   zt  |   W n tk
r*   Y nX d S r_   )asyncioget_running_loopcreate_taskacloser   ru   r`   r`   rc   r6    s    zAsyncHttpxClientWrapper.__del__Nr7  r`   r`   r`   rc   r    s   r  c                      s`  e Zd ZU ded< dZded< eedddddddddd	d
ddddddddd fddZd	dddZddddZ	dddddZ
dd d!dd"d#d$Zd%dd&d'd(Zd)dd*d+d,Zed-dd.d/d%d0d1d2d3d4d5Zedd6d/d%d7d8d1d9d:d;d5Zeddd<d/d%d	d=d1d>d:d?d5Zd-ddd@d/d%d	d=d1d>d:dAd5Zd/d%d	d=dBd>d:dCdDZd%d/d
dEd	d=d>dFdGdHZd/d%dId	dJd2dKdLdMZdNdOd%dPdQdRdSZei d-dTdd/dUd0d2dVdWdXZei dYdd/dUd7d8d9dZd[dXZei dd\dd/dUd	d=d>dZd]dXZi d-dd^dd/dUd	d=d>dZd_dXZeddi d-d`dd/dadbdUd0d2dcdddeZeddi dfdd/dadbdUd7d8d9dgdhdeZeddi ddidd/dadbdUd	d=d>dgdjdeZddi d-ddkdd/dadbdUd	d=d>dgdldeZdi dmdd/dadUd2dndodpZddi dfdd/dadbdUd2dqdrdsZdi dmdd/dadUd2dndtduZdi dvdwddNdOdadUddPdxdydzZ  ZS ){r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   r8  r   r   ro   r   r:  zAsyncTransport | Noner   r;  zhttpx.AsyncClient | Noner   r   r\   )r   r   r   r   r   r   r   r   r9  r   r   r^   c                  s   |d k	r*t jdtdd |	d k	r.tdnt}|d k	rVt jdtdd |	d k	rVtd|d k	r~t jdtdd |	d k	r~tdt|s|	r|	jtkr|	j}nt}t	 j
|||tt||||||
|d	
 |	pt|tt||||d
d| _d S )Nr<  r=  r>  rA  rB  rC  rD  rE  )
r   r   r   r   r   r   r   r   r   r   TrF  )rH  rI  rJ  r   r@   r4   r   rK  rA   rL  rd   r   r&   r  r   )rb   r   r   r   r   r   r   r   r   r9  r   r   rM  r`   rc   rd     sb    
zAsyncAPIClient.__init__rp   c                 C  s   | j jS r_   rN  ru   r`   r`   rc   r   6  s    zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )rO  N)r   r  ru   r`   r`   rc   r5  9  s    zAsyncAPIClient.closerS   r   c                   s   | S r_   r`   ru   r`   r`   rc   
__aenter__@  s    zAsyncAPIClient.__aenter__rR  rS  rT  rU  c                   s   |   I d H  d S r_   rY  rZ  r`   r`   rc   	__aexit__C  s    zAsyncAPIClient.__aexit__r9   r   c                   s   dS r\  r`   r]  r`   r`   rc   r^  K  s    zAsyncAPIClient._prepare_optionsr   r  c                   s   dS r_  r`   r  r`   r`   rc   r`  R  s    	zAsyncAPIClient._prepare_requestF)r  r   ra  rf  r   r(   )r  r   r  r   r^   c                  s   d S r_   r`   )rb   r  r   r  r   r`   r`   rc   r   ]  s    	zAsyncAPIClient.request)r   rb  ztype[_AsyncStreamT]rW   )r  r   r  rc  r   r^   c                  s   d S r_   r`   rb   r  r   r  rc  r   r`   r`   rc   r   h  s    
)rc  r   ztype[_AsyncStreamT] | NonezResponseT | _AsyncStreamTc                  s   d S r_   r`   r  r`   r`   rc   r   t  s    
)r  rc  r   c                  s   | j |||||dI d H S rh  ri  r  r`   r`   rc   r     s    	rk  c                  sj  |  ||}| |I d H  | ||}| |}| |I d H  i }| jd k	rZ| j|d< z.| jj|fd|pv| j|di|I d H }	W n t	j
k
r }
 zTtjddd |dkr| j|||||d dI d H  W Y S td	 t|d|
W 5 d }
~
X Y nv tk
rp }
 zVtjd
dd |dkrJ| j|||||d dI d H  W Y S td t|d|
W 5 d }
~
X Y nX td|j|j|	j|	j z|	  W n t	jk
rN }
 ztjddd |dkr| |
jr|
j I d H  | j||||
jj||dI d H  W Y 8S |
jjs&|
j I d H  td | |
jd W 5 d }
~
X Y nX | j|||	||dI d H S rl  )r  r^  r   r  r`  r  r   ro  r  rv   rp  rO   r   rq  rL   r   rM   r   rZ   r   rr  rs  rt  r/  r   r  r   r   areadr   rv  )rb   r  r   r  rc  r   rw  r   r  r   r  r`   r`   rc   rj    s    	


	

	
    

 zAsyncAPIClient._requestrx  ry  c          	        sp   |d }|dkrt d nt d| | |||}t d|j| t|I d H  | j|||||dI d H S rz  )rO   r   r,  rz   rZ   anyior{  rj  r|  r`   r`   rc   rq    s    
zAsyncAPIClient._retry_requestr   r~  r  c          	   
     s   t |p
|}t|rft|trft|ts>tdt d| td|}td||| t||||dS |t	j
krztt|S t|| td||||d}t|jjtrtt|S | I d H S )Nr  r  r  r(   r  r  )r   r  r  r  r=   r>   r   r   r?   rv   r  r(   ro   r   r   r   rE   r  r  r`   r`   rc   rv    s:    	




z AsyncAPIClient._process_responserm   r   zAsyncPaginator[_T, AsyncPageT]r  c                 C  s   t | |||dS )N)r   r   r   r   )r   )rb   r   r   r   r`   r`   rc   r   7  s    z AsyncAPIClient._request_api_listr  r0   r  c                  s   d S r_   r`   r  r`   r`   rc   r   ?  s    	zAsyncAPIClient.getr  r  c                  s   d S r_   r`   r  r`   r`   rc   r   J  s    
r  c                  s   d S r_   r`   r  r`   r`   rc   r   V  s    
r  c                  s.   t jf d|d|}| j||||dI d H S r  r  r  r`   r`   rc   r   b  s    	)r   r   r   r  r  r  )r  r  r   r   r   r  r^   c                  s   d S r_   r`   )rb   r  r  r   r   r   r  r`   r`   rc   r  n  s    zAsyncAPIClient.postr  )r  r  r   r   r   r  rc  r^   c                  s   d S r_   r`   rb   r  r  r   r   r   r  rc  r`   r`   rc   r  {  s    )r   r   r   rc  c                  s   d S r_   r`   r  r`   r`   rc   r    s    )r   r   r   r  rc  c          	        s<   t jf d||t|I d H d|}| j||||dI d H S r  r9   r  r    r   )	rb   r  r  r   r   r   r  rc  r  r`   r`   rc   r    s       r  r  c                  s*   t jf d||d|}| ||I d H S r  r  r  r`   r`   rc   r    s    zAsyncAPIClient.patchr  c                  s6   t jf d||t|I d H d|}| ||I d H S r  r  r  r`   r`   rc   r    s    	   zAsyncAPIClient.putc                  s*   t jf d||d|}| ||I d H S r  r  r  r`   r`   rc   r    s    zAsyncAPIClient.deleter   r  r  c                C  s&   t jf |||d|}| |||S r  r  r  r`   r`   rc   r    s    
zAsyncAPIClient.get_api_list)rf   rg   rh   rj   r   rC   r!   rd   r   r5  r  r  r^  r`  r   r   rj  rq  rv  r   r   r  r  r  r  r  r  r`   r`   rM  rc   r     s   
,P
],
 "" r   )queryextra_headersextra_query
extra_bodyr   r   r   zQuery | NonezHeaders | Noner  r   z'float | httpx.Timeout | None | NotGivenzPostParser | NotGivenr0   )r  r  r  r  r   r   r   r^   c                 C  s   i }|dk	r||d< |dk	r*t t||d< | dk	r:| |d< |dk	rV|di ||d< t|tsh||d< |dk	rx||d< t|r||d< |S )zECreate a dict of type RequestOptions without keys of NotGiven values.Nr   r   r[   r   r   r   )r   r*   r   r|   r'   r4   )r  r  r  r  r   r   r   r   r`   r`   rc   make_request_options  s     
r  c                   @  s.   e Zd ZdddddZeddddZd	S )
OtherPlatformr   r\   namer^   c                 C  s
   || _ d S r_   r  rb   r  r`   r`   rc   rd     s    zOtherPlatform.__init__rp   c                 C  s   d| j  S )NzOther:r  ru   r`   r`   rc   __str__  s    zOtherPlatform.__str__Nrf   rg   rh   rd   r   r  r`   r`   r`   rc   r    s   r  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformrp   c                  C  s   zt   } t    }W n tk
r2   Y dS X d|ksDd|krHdS | dkrTdS | dkr`dS d	|krld
S | dkrt }|dkrdS |dkrdS dS |rt|S dS )Nr  ZiphoneZipadr  darwinr  Zwindowsr  Zandroidr  linuxZfreebsdr  Zopenbsdr  r  )platformsystemr   r   distroidr  )r  Zplatform_nameZ	distro_idr`   r`   rc   get_platform  s.    r  )maxsizer   r   )r   r^   c                 C  s"   d| t t t t t t dS )Npython)zX-Stainless-LangzX-Stainless-Package-VersionzX-Stainless-OSzX-Stainless-ArchzX-Stainless-RuntimezX-Stainless-Runtime-Version)r   r  get_architectureget_python_runtimeget_python_version)r   r`   r`   rc   r  @  s    r  c                   @  s.   e Zd ZdddddZeddddZd	S )
	OtherArchr   r\   r  c                 C  s
   || _ d S r_   r  r  r`   r`   rc   rd   M  s    zOtherArch.__init__rp   c                 C  s   d| j  S )Nzother:r  ru   r`   r`   rc   r  P  s    zOtherArch.__str__Nr  r`   r`   r`   rc   r  L  s   r  )x32x64armarm64unknownc                   C  s&   z
t  W S  tk
r    Y dS X d S Nr  )r  python_implementationr   r`   r`   r`   rc   r  X  s    
r  c                   C  s&   z
t  W S  tk
r    Y dS X d S r  )r  python_versionr   r`   r`   r`   rc   r  _  s    
r  Archc                  C  st   zt  \} }t   }W n tk
r2   Y dS X |dkr@dS |dkrLdS |dkrXdS | dkrddS |rpt|S dS )	Nr  )r  Zaarch64r  r  Zx86_64r  32bitr  )r  architecturemachiner   r   r  )Zpython_bitness_r  r`   r`   rc   r  f  s     r  zMapping[_T_co, Union[_T, Omit]]zDict[_T_co, _T])obj1obj2r^   c                 C  s   | |}dd |  D S )zMerge two mappings of the same type, removing any values that are instances of `Omit`.

    In cases with duplicate keys the second mapping takes precedence.
    c                 S  s    i | ]\}}t |ts||qS r`   )r|   r#   ).0r	  r
  r`   r`   rc   
<dictcomp>  s     
  z#_merge_mappings.<locals>.<dictcomp>)rs   )r  r  mergedr`   r`   rc   r     s    r   )
__future__r   r   r'  r0  r#  r  r  r   r  rH  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   	functoolsr   typing_extensionsr   r   r   r  rv   r  r   r   r   r    r   _qsr   _filesr   r    _typesr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   _utilsr2   r3   r4   r5   _compatr6   r7   _modelsr8   r9   r:   r;   	_responser<   r=   r>   r?   
_constantsr@   rA   rB   rC   rD   rE   rF   
_streamingrG   rH   rI   rJ   rK   rL   rM   rN   	getLoggerrf   rO   rj   rP   rR   rS   rT   rV   rW   Zhttpx._configrX   rK  ImportErrorrY   rk   r   r   r   ClientAsyncClientr   r   r   r4  r   r  r   r  r  r  r  r  r  r  r  r  r  r   r`   r`   r`   rc   <module>   s    DL$	#1.'&       	   | %	*	