U
    &Jj                 
   @  sn  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 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' d dl&m(Z( d	d
l)m*Z* d	dl+m,Z, d	dl-m.Z.m/Z/ d	dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d	dl@mAZAmBZBmCZCmDZDmEZEmFZF d	dlGmHZHmIZImJZJ d	dlKmLZLmMZMmNZNmOZO d	dlPmQZQmRZRmSZSmTZT d	dlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ d	dl]m^Z^m_Z_m`Z`maZa d	dl*mbZbmcZcmdZdmeZe e	fegZhdeid< edddZjedddZkedZledddZmed e^e dZned!e`e dZoerd d"lpmqZq eqZrn0zd d"lpmqZr W n esk
r   e5d#ZrY nX G d$d% d%ZtG d&d' d'eLeel ZuG d(d) d)euel eel ZvG d*d+ d+eelekf ZwG d,d- d-euel eel Zxed.ee$jye$jzf dZ{ed/ee^e e`e f dZ|G d0d1 d1ee{e|f Z}G d2d3 d3e$jyZ~ere$jyZne~ZG d4d5 d5eZG d6d7 d7e}e$jye^e f ZG d8d9 d9e$jzZzd dlZW n( esk
r$   G d:d; d;e$jzZY nX G d<d; d;ejZerLe$jzZe$jzZneZeZG d=d> d>eZG d?d@ d@e}e$jze`e f Zddddde?e?dAdBdCdBdDdEdFdGdHdIdJdKZG dLdM dMeedf ZG dNdO dOZeee dP f ZdQdRdSdTZeEddUdVdWdXdYdZd[ZG d\d] d]Zeee d^ f ZdVdRd_d`ZdVdRdadbZdcdRdddeZdfdfdgdhdidjZdS )k    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)Literaloverride
get_origin)URL)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)BodyOmitQueryHeadersTimeoutNotGiven	ResponseT
AnyMapping
PostParserRequestFilesHttpxSendArgsRequestOptionsHttpxRequestFilesModelBuilderProtocol	not_given)is_dictis_listasyncifyis_given	lru_cache
is_mapping)PYDANTIC_V1
model_copy
model_dump)GenericModelFinalRequestOptionsvalidate_typeconstruct_type)APIResponseBaseAPIResponseAsyncAPIResponseextract_response_type)DEFAULT_TIMEOUTMAX_RETRY_DELAYDEFAULT_MAX_RETRIESINITIAL_RETRY_DELAYRAW_RESPONSE_HEADEROVERRIDE_CAST_TO_HEADERDEFAULT_CONNECTION_LIMITS)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                   @  s   e Zd ZU dZded< ded< ded< edd	d
ddZedd	dddZedd	dddZeeeddddd	dddZe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paramszBody | NotGivenjsonr   NonerY   returnc                C  s   d S N selfrY   r`   r`   r/var/www/api.dyntland.com/public_html/python_social_comments/venv/lib/python3.8/site-packages/groq/_base_client.py__init__|   s    zPageInfo.__init__r!   )rZ   r^   c                C  s   d S r_   r`   )rb   rZ   r`   r`   rc   rd      s    r   )r[   r^   c                C  s   d S r_   r`   )rb   r[   r`   r`   rc   rd      s    rY   r[   rZ   )rY   r[   rZ   r^   c                C  s   || _ || _|| _d S r_   re   )rb   rY   r[   rZ   r`   r`   rc   rd      s    strr^   c                 C  sN   | j r| jj d| j  dS | jr8| jj d| j dS | jj d| j dS )Nz(url=)z(json=z(params=)rY   	__class____name__r[   rZ   rb   r`   r`   rc   __repr__   s
    zPageInfo.__repr__N)
rj   
__module____qualname____doc____annotations__r   rd   r-   r   rl   r`   r`   r`   rc   rX   r   s    
	rX   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
    r8   _optionsType[_T]_modelboolrg   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`   rk   r`   r`   rc   rw          zBasePage.next_page_infozIterable[_T]c                 C  s   d S r_   r`   rk   r`   r`   rc   rv      s    zBasePage._get_page_itemsr   zhttpx.QueryParamsr]   c                 C  s   t tt| jj|jS r_   )httpxZQueryParamsr   r   rr   rZ   mergera   r`   r`   rc   _params_from_url   s    zBasePage._params_from_urlrX   )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|jtst|jstd|js|j|_n t|jstd|j|j|_|S tdd S )N)rZ   z*Pagination is only supported with mappingszUnexpected PageInfo state)r5   rr   Z_strip_raw_response_header
isinstancerZ   r$   rY   r}   	copy_withdictrf   r[   r3   	TypeError	json_data
ValueError)rb   r~   optionsrZ   rY   r`   r`   rc   _info_to_options   s*    



zBasePage._info_to_optionsN)rj   rm   rn   ro   r   rr   rp   rt   ry   rw   rv   r}   r   r`   r`   r`   rc   rq      s   
rq   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_clientrs   r8   r\   )clientmodelr   r^   c                 C  s0   t st| dd d kri | _|| _|| _|| _d S N__pydantic_private__r4   getattrr   rt   r   rr   )rb   r   r   r   r`   r`   rc   _set_private_attributes   s
    z$BaseSyncPage._set_private_attributeszIterator[_T]rg   c                 c  s&   |   D ]}| D ]
}|V  qqd S r_   
iter_pagesrv   rb   pageitemr`   r`   rc   __iter__   s    zBaseSyncPage.__iter__rO   zIterator[SyncPageT]rb   r^   c                 c  s&   | }|V  |  r| }qd S qd S r_   ry   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   rw   RuntimeErrorr   r   _request_api_listrt   ri   rb   r~   r   r`   r`   rc   r     s    
zBaseSyncPage.get_next_pageN)rj   rm   rn   pydanticr   r   rp   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AsyncAPIClientr8   Type[AsyncPageT]rs   r\   )r   r   page_clsr   r^   c                 C  s   || _ || _|| _|| _d S r_   )rt   r   rr   	_page_cls)rb   r   r   r   r   r`   r`   rc   rd     s    zAsyncPaginator.__init__z Generator[Any, None, AsyncPageT]rg   c                 C  s   |    S r_   )	_get_page	__await__rk   r`   r`   rc   r      s    zAsyncPaginator.__await__rQ   c                   s4   ddd fdd}| j _ j j j I d H S )NrQ   respr^   c                   s   | j  j j jd | S )N)r   r   r   )r   rt   rr   r   r   rk   r`   rc   _parser$  s    z)AsyncPaginator._get_page.<locals>._parser)rr   post_parserr   requestr   )rb   r   r`   rk   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   rQ   r   r`   r`   rc   	__aiter__0  s    zAsyncPaginator.__aiter__N)rj   rm   rn   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   rs   r8   r\   )r   r   r   r^   c                 C  s0   t st| dd d kri | _|| _|| _|| _d S r   r   )rb   r   r   r   r`   r`   rc   r   =  s
    z%BaseAsyncPage._set_private_attributesr   rg   c                 C s0   |   2 z 3 d H W }| D ]
}|V  qq6 d S r_   r   r   r`   r`   rc   r   J  s    zBaseAsyncPage.__aiter__rQ   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   O  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   X  s    
zBaseAsyncPage.get_next_pageN)rj   rm   rn   r   r   r   rp   r   r   r   r   r`   r`   r`   rc   r   :  s
   
	r   _HttpxClientT_DefaultStreamTc                
   @  s<  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Zded< ee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*dd+d,d-d.Zdddd/d0Zd1d2d3d4Zd(d)d*dd5d,d6d7Zd8d9d:d;d<Zd=d*d=d>d?d@Zd5ddAdBdCZd#d=ddDdEdFdGZedHd2dIdJZedKd2dLdMZedNd2dOdPZedQd2dRdSZed9d2dTdUZdVdVddWdXdYZedd2dZd[Zedd2d\d]Zejd^ddd_d]Zd`d2dadbZdpdcdddedfdgZdqdd*dcdhdidjdkZddd dldmZ dd2dndoZ!dS )r
BaseClientr   r   rf   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutru   _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   r   r   r^   c                C  s\   || _ | t|| _|| _|| _|p(i | _|p2i | _|| _d | _	d | _
|d krXtdd S )Nzmax_retries cannot be None. If you want to disable retries, pass `0`; if you want unlimited retries, pass `math.inf` or a very high number; if you want the default behavior, pass `groq.DEFAULT_MAX_RETRIES`)r   _enforce_trailing_slashr   r   r   r   _custom_headers_custom_queryr   r   	_platformr   )rb   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     s    z"BaseClient._enforce_trailing_slashhttpx.ResponserJ   )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_closedZis_stream_consumedstatus_codetextstripr[   loads	Exception_make_status_error)rb   r   r   err_msgZerr_textr`   r`   rc    _make_status_error_from_response  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_errorr   retries_takenr8   zhttpx.Headers)r   r   r^   c          	      C  s   |j pi }t| j|}| || t|}| j}|rN|jrN||krN|j||< dd |D }d|krpt||d< d|krt	|j
tr| j
n|j
}t	|tr|j}|d k	rt||d< |S )Nc                 S  s   g | ]}|  qS r`   )lower).0headerr`   r`   rc   
<listcomp>  s     z-BaseClient._build_headers.<locals>.<listcomp>zx-stainless-retry-countzx-stainless-read-timeout)headers_merge_mappingsdefault_headers_validate_headersr{   r"   r   idempotency_keyrf   r   r   r$   r#   read)	rb   r   r   r   Zheaders_dictr   Zidempotency_headerZlower_custom_headersr   r`   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   Zis_relative_urlr   r   lstripr   )rb   rY   Z	merge_urlZmerge_raw_pathr`   r`   rc   _prepare_url  s
    zBaseClient._prepare_urlzSSEDecoder | SSEBytesDecoderrg   c                 C  s   t  S r_   )rG   rk   r`   r`   rc   _make_sse_decoder  s    zBaseClient._make_sse_decoderhttpx.Requestc                C  s  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| j||d}t| j|j}|d}|j}|d k	r|drd	|kr|d |rt|std
t| d| ||d< |sttt }| |j}	d|	jkr6d|	jddi|d< |j dk}
|
rt |t!r`||d< nt"|rn|nd |d< ||d< n|dd  |dd  | j#j$f |t |j%t&r| j%n|j%|j|	|r| j'(tt)t*t+f |nd d|S )NzRequest options: %sT)Zexclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`r   Content-Typezmultipart/form-databoundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.data_Zsni_hostname-
extensionsgetcontentr[   files)r   r   methodrY   rZ   ),rN   isEnabledForloggingDEBUGdebugr6   r   
extra_jsonr   r   r3   r   r   typer   default_queryrZ   r   r   
startswithpopr.   r   _serialize_multipartformr+   ForceMultipartDictr   rY   hostreplacer   r   r   bytesr1   r   Zbuild_requestr   r$   qs	stringifyr   rf   r   )rb   r   r   kwargsr   r   rZ   content_typer   Zprepared_urlZis_body_allowedr`   r`   rc   _build_request  sZ    




"
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)Zarray_format)r  Zstringify_itemsr   r/   append)rb   r   rx   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_   )	r1   r   r   r   rD   r-   r   r   r%   )rb   r  r   r   Zoverride_cast_tor`   r`   rc   _maybe_override_cast_toL  s    

z"BaseClient._maybe_override_cast_tor   r^   c                 C  s   |j tdkS )Nstream)r   r   rC   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
issubclassr,   buildr   r9   r:   r   ZValidationErrorrM   )rb   r   r  r   errr`   r`   rc   _process_response_data`  s    

z!BaseClient._process_response_datar   c                 C  s   t  S r_   r   rk   r`   r`   rc   r  x  s    zBaseClient.qszhttpx.Auth | Nonec                 C  s   d S r_   r`   rk   r`   r`   rc   custom_auth|  s    zBaseClient.custom_authzdict[str, str]c                 C  s   i S r_   r`   rk   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   rk   r`   r`   rc   r     s    zBaseClient.default_headersc                 C  s   | j S r_   )r   rk   r`   r`   rc   r     s    zBaseClient.default_queryr"   )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     s    	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )ri   rj   r   rk   r`   r`   rc   r    s    zBaseClient.user_agentc                 C  s   | j S r_   )r   rk   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     s    Dict[str, str]c                 C  s   t | j| jdS )N)platform)r  r   r   rk   r`   r`   rc   r    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-ms  zretry-after)	r   floatr   r   emailutilsparsedate_tz	mktime_tztime)rb   r!  Zretry_ms_headerZretry_headerretry_date_tuple
retry_dater`   r`   rc   _parse_retry_after_header  s"    

z$BaseClient._parse_retry_after_headerr#  )remaining_retriesr   r!  r^   c           
      C  s   | | j}| |}|d k	r:d|  k r2dkr:n n|S t|| d}tttd| t}ddt   }|| }	|	dkr~|	S dS )Nr   <   r"  g       @r   g      ?)get_max_retriesr   r+  minrB   powr@   r   )
rb   r,  r   r!  r   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   rN   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uuid4rk   r`   r`   rc   _idempotency_key  s    zBaseClient._idempotency_key)N)N)"rj   rm   rn   rp   r   rA   r?   rd   r   r   r   r   r   r   r  r   r  r  r  propertyr  r  r  r   r   r   r  r   setterr  r+  r2  r5  r8  r`   r`   r`   rc   r   g  s`   
 	U
& #r   c                      s$   e Zd Zddd fddZ  ZS )_DefaultHttpxClientr   r\   r  r^   c                   s6   | dt | dt | dd t jf | d S Nr   Zlimitsfollow_redirectsT
setdefaultr?   rE   superrd   rb   r  ri   r`   rc   rd     s    z_DefaultHttpxClient.__init__rj   rm   rn   rd   __classcell__r`   r`   rC  rc   r;    s   r;  c                   @  s   e Zd ZddddZdS )SyncHttpxClientWrapperr\   rg   c                 C  s0   | j r
d S z|   W n tk
r*   Y nX d S r_   )r   closer   rk   r`   r`   rc   __del__(  s    zSyncHttpxClientWrapper.__del__Nrj   rm   rn   rH  r`   r`   r`   rc   rF  '  s   rF  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	 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-d.d/d0Zed1d2d*d"d3d4d5d6d0Zed1dd7d*d"dd8d9d.d:d0Zd1dd7d*d"dd;d9d.d<d0Zd	d	d"d=dd>d?d@ZdAdBd*d"dCddDd	d4dEdFdGZdHdId"dJdKdLdMZei d1dNdd*dOd3d4dPdQdRZei dSdd*dOd+dTd-dUdVdRZei ddWdd*dOdd;d9dUdXdRZi d1ddYdd*dOdd;d9dUdZdRZedi dd1d[dd*d\dOd]d3d4d^d_d`Zedi ddadd*d\dOd]d+dTd-dbdcd`Zedi dddddd*d\dOd]dd;d9dbded`Zdi dd1ddfdd*d\dOd]dd;d9dbdgd`Zdi dhdd*d\dOd4didjdkZddi dldd*d\d]dOd4dmdndoZdi dhdd*d\dOd4didpdqZdi drdsddHdId\dOddJdtdudvZ  ZS )wr   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   http_clientr   r   rf   r   r   !float | Timeout | None | NotGivenzhttpx.Client | Noner   r   ru   r\   )	r   r   r   r   rK  r   r   r   r^   c          	   	     s   t |s"|r|jtkr|j}nt}|d k	rHt|tjsHtdt| t	 j
|tt||||||d |p|t|tt|d| _d S )NzOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got )r   r   r   r   r   r   r   r   r   )r1   r   HTTPX_DEFAULT_TIMEOUTr?   r   r{   Clientr   r   rA  rd   r   r#   rF  r   )	rb   r   r   r   r   rK  r   r   r   rC  r`   rc   rd   6  s*    
zSyncAPIClient.__init__rg   c                 C  s   | j jS r_   r   r   rk   r`   r`   rc   r   d  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   rG  rk   r`   r`   rc   rG  g  s    
zSyncAPIClient.closerR   r   c                 C  s   | S r_   r`   rk   r`   r`   rc   	__enter__q  s    zSyncAPIClient.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbr^   c                 C  s   |    d S r_   rG  rb   rX  rY  rZ  r`   r`   rc   __exit__t  s    zSyncAPIClient.__exit__r8   r   r^   c                 C  s   |S z#Hook for mutating the given optionsr`   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_request  s    	zSyncAPIClient._prepare_requestType[ResponseT]Literal[True]zType[_StreamT]rU   r  r   r  
stream_clsr^   c                C  s   d S r_   r`   rb   r  r   r  rg  r`   r`   rc   r     s    zSyncAPIClient.requestFr  Literal[False]r%   r  r   r  r^   c                C  s   d S r_   r`   rb   r  r   r  r`   r`   rc   r     s    r  rg  zType[_StreamT] | NonezResponseT | _StreamTc                C  s   d S r_   r`   rh  r`   r`   rc   r     s    ztype[_StreamT] | Nonec                C  s  |  ||}t|}|jd kr6|j dkr6|  |_d }|| j}d}t|d D ]H}t|}| 	|}|| }	| j
||d}
| |
 i }| jd k	r| j|d< |jd k	r|j|d< td|
j|
j d }z(| jj|
fd|p| j|
d	i|}W n tjk
rf } zLtjd
dd |	dkr@| j|||d d W Y qVtd t|
d	|W 5 d }~X Y nl tk
r } zLtjddd |	dkr| j|||d d W Y qVtd t|
d	|W 5 d }~X Y nX td|
j|
j|j|j|j z|  W n tjk
r } zztjddd |	dkr\| |j r\|j !  | j||||d W Y 2qV|j j"sp|j #  td | $|j d W 5 d }~X Y nX  qqV|d k	st%d| j&||||||dS Nr   r   r   r   authr>  zSending HTTP Request: %s %sr  )r   z"Encountered httpx.TimeoutExceptionT)exc_info)r   r   r   r   zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Response: %s %s "%i %s" %sz!Encountered httpx.HTTPStatusErrorzRe-raising status errorz0could not resolve response (should never happen))r  r   r   r  rg  r   )'r  r5   r   r   r   r8  r.  r   rangera  r  rc  r  r>  rN   r   rY   r   sendr  r{   TimeoutException_sleep_for_retryrK   r   rL   r   reason_phraser   raise_for_statusHTTPStatusErrorr5  r   rG  r   r   r   AssertionError_process_responserb   r  r   r  rg  Zinput_optionsr   r   r   r,  r   r  r  r`   r`   rc   r     s    











	



 httpx.Response | Noner   r   r   r   r^   c                C  s^   || }|dkrt d nt d| | |||r:|jnd }t d|j| t| d S Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)rN   r   r2  r   r~   rY   r(  sleeprb   r   r   r   r   r,  r   r`   r`   rc   rt  "  s    zSyncAPIClient._sleep_for_retryr   r   r   1type[Stream[Any]] | type[AsyncStream[Any]] | Noner  r   r   r  rg  r   r^   c          
      C  s   t |p
|}t|r~t|tr~|r6t|jjt	r~t|t
sTtdt
 d| td|}tt||| t|||||dS |tjkrt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  rg  r   r   r  )r   r  r  r  r<   ru   r   r   r   rC   r;   r   r   r%   r>   r{   Responseparse
rb   r  r   r   r  rg  r   originZresponse_clsZapi_responser`   r`   rc   ry  0  sL    




	
zSyncAPIClient._process_responsezType[object]zType[SyncPageT]rO   r   r   r   r^   c                   s.   ddd fdd}|_ j|ddS )NrO   r   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rb   r`   rc   r   l  s    z0SyncAPIClient._request_api_list.<locals>._parserFri  )r   r   )rb   r   r   r   r   r`   r  rc   r   f  s    zSyncAPIClient._request_api_listr   r  r*   pathr  r   r  r^   c                C  s   d S r_   r`   rb   r  r  r   r  r`   r`   rc   r   x  s    zSyncAPIClient.getr   ztype[_StreamT]r  r  r   r  rg  r^   c                C  s   d S r_   r`   rb   r  r  r   r  rg  r`   r`   rc   r     s    	r   rg  c                C  s   d S r_   r`   r  r`   r`   rc   r     s    	r   r  rg  c                C  s.   t jf d|d|}tt| j||||dS Nr   )r   rY   rm  )r8   	constructr   r%   r   rb   r  r  r   r  rg  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   post  s    
zSyncAPIClient.post)r   r   r   )r  r  r   r   r   r  rg  r^   c                C  s   d S r_   r`   rb   r  r  r   r   r   r  rg  r`   r`   rc   r    s    )r   r   r   rg  c                C  s   d S r_   r`   r  r`   r`   rc   r    s    )r   r   r   r  rg  c          	      C  s6   t jf d||t|d|}tt| j||||dS Nr  r   rY   r   r   rm  )r8   r  r   r   r%   r   )	rb   r  r  r   r   r   r  rg  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   rY   r   r8   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  )r8   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  r8   r  r   rb   r  r   r   r   r   r   r  r`   r`   rc   get_api_list   s    
zSyncAPIClient.get_api_list)rj   rm   rn   rp   r   rA   r-   rd   r   rG  rS  r]  ra  rc  r   r   rt  ry  r   r   r  r  r  r  r  rE  r`   r`   rC  rc   r   2  s   
&.
	w6	
 "" r   c                      s$   e Zd Zddd fddZ  ZS )_DefaultAsyncHttpxClientr   r\   r<  c                   s6   | dt | dt | dd t jf | d S r=  r?  rB  rC  r`   rc   rd     s    z!_DefaultAsyncHttpxClient.__init__rD  r`   r`   rC  rc   r    s   r  c                   @  s   e Zd ZdddddZdS )_DefaultAioHttpClientr   r\   )_kwargsr^   c                 K  s   t dd S )NzVTo use the aiohttp client you must have installed the package with the `aiohttp` extra)r   )rb   r  r`   r`   rc   rd     s    _DefaultAioHttpClient.__init__N)rj   rm   rn   rd   r`   r`   r`   rc   r    s   r  c                      s$   e Zd Zddd fddZ  ZS )r  r   r\   r<  c                   s6   | dt | dt | dd t jf | d S r=  r?  rB  rC  r`   rc   rd      s    r  rD  r`   r`   rC  rc   r    s   c                   @  s   e Zd ZddddZdS )AsyncHttpxClientWrapperr\   rg   c                 C  s:   | j r
d S zt |   W n tk
r4   Y nX d S r_   )r   asyncioZget_running_loopZcreate_taskacloser   rk   r`   r`   rc   rH  9  s    zAsyncHttpxClientWrapper.__del__NrI  r`   r`   r`   rc   r  8  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	 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-d.d/d0d1Zed,d"d2d3d4d5d6d1Zedd7d,d"d	d8d9d5d:d1Zd*dd;d,d"d	d8d9d5d<d1Zd
d
d"d=dd>d?d@ZdAdBd,d"dCd	dDd
d.dEdFdGZdHdId"dJdKdLdMZei d*dNdd,dOd-d.dPdQdRZei dSdd,dOd2d3d4dTdUdRZei ddVdd,dOd	d8d9dTdWdRZi d*ddXdd,dOd	d8d9dTdYdRZeddi d*dZdd,d[d\dOd-d.d]d^d_Zeddi d`dd,d[d\dOd2d3d4dadbd_Zeddi ddcdd,d[d\dOd	d8d9daddd_Zddi d*ddedd,d[d\dOd	d8d9dadfd_Zdi dgdd,d[dOd.dhdidjZddi d`dd,d[d\dOd.dkdldmZdi dgdd,d[dOd.dhdndoZdi dpdqddHdId[dOddJdrdsdtZ  ZS )ur   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   rJ  rf   r   ru   r   rL  zhttpx.AsyncClient | Noner   r   r\   )	r   r   r   r   r   rK  r   r   r^   c          	   	     s   t |s"|r|jtkr|j}nt}|d k	rHt|tjsHtdt| t	 j
||tt|||||d |p|t|tt|d| _d S )NzTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )r   r   r   r   r   r   r   rM  )r1   r   rN  r?   r   r{   AsyncClientr   r   rA  rd   r   r#   r  r   )	rb   r   r   r   r   r   rK  r   r   rC  r`   rc   rd   H  s*    
zAsyncAPIClient.__init__rg   c                 C  s   | j jS r_   rP  rk   r`   r`   rc   r   v  s    zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )rQ  N)r   r  rk   r`   r`   rc   rG  y  s    zAsyncAPIClient.closerR   r   c                   s   | S r_   r`   rk   r`   r`   rc   
__aenter__  s    zAsyncAPIClient.__aenter__rT  rU  rV  rW  c                   s   |   I d H  d S r_   r[  r\  r`   r`   rc   	__aexit__  s    zAsyncAPIClient.__aexit__r8   r^  c                   s   |S r_  r`   r`  r`   r`   rc   ra    s    zAsyncAPIClient._prepare_optionsr   r  c                   s   dS rb  r`   r  r`   r`   rc   rc    s    	zAsyncAPIClient._prepare_requestFri  rd  rj  r%   rk  c                  s   d S r_   r`   rl  r`   r`   rc   r     s    zAsyncAPIClient.requestre  ztype[_AsyncStreamT]rV   rf  c                  s   d S r_   r`   rh  r`   r`   rc   r     s    )rg  ztype[_AsyncStreamT] | NonezResponseT | _AsyncStreamTc                  s   d S r_   r`   rh  r`   r`   rc   r     s    rm  c                  s  | j d krtt I d H | _ | ||}t|}|jd krR|j dkrR|  |_d }|	| j
}d}t|d D ]z}t|}| |I d H }|| }	| j||d}
| |
I d H  i }| jd k	r| j|d< |jd k	r|j|d< td|
j|
j d }z0| jj|
fd|p| j|
d	i|I d H }W n tjk
r } zRtjd
dd |	dkrv| j|||d dI d H  W Y qrtd t|
d	|W 5 d }~X Y nr tk
r } zRtjddd |	dkr| j|||d dI d H  W Y qrtd t|
d	|W 5 d }~X Y nX td|
j|
j|j|j|j z|   W n tj!k
r } ztjddd |	dkr| "|j#r|j#$ I d H  | j||||dI d H  W Y 8qr|j#j%s|j#& I d H  td | '|j#d W 5 d }~X Y nX  qqr|d k	st(d| j)||||||dI d H S rn  )*r   r0   get_platformr  r5   r   r   r   r8  r.  r   rq  ra  r  rc  r  r>  rN   r   rY   r   rr  r  r{   rs  rt  rK   r   rL   r   ru  r   rv  rw  r5  r   r  r   Zareadr   rx  ry  rz  r`   r`   rc   r     s    









	

 r{  r|  c                  sd   || }|dkrt d nt d| | |||r:|jnd }t d|j| t|I d H  d S r}  )rN   r   r2  r   r~   rY   anyior~  r  r`   r`   rc   rt  6  s    zAsyncAPIClient._sleep_for_retryr   r   r   r  r  c          
        s   t |p
|}t|r~t|tr~|r6t|jjt	r~t|t
sTtdt
 d| td|}td||| t|||||dS |tjkrt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<   ru   r   r   r   rC   r=   r   r   r>   r{   r  r%   r  r  r`   r`   rc   ry  D  sL    




	
z AsyncAPIClient._process_responsers   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   z  s    z AsyncAPIClient._request_api_listr  r*   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     s    	r  c                  s   d S r_   r`   r  r`   r`   rc   r     s    	r  c                  s.   t jf d|d|}| j||||dI d H S r  r  r  r`   r`   rc   r     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    s    
zAsyncAPIClient.postr  )r  r  r   r   r   r  rg  r^   c                  s   d S r_   r`   rb   r  r  r   r   r   r  rg  r`   r`   rc   r    s    )r   r   r   rg  c                  s   d S r_   r`   r  r`   r`   rc   r    s    )r   r   r   r  rg  c          	        s<   t jf d||t|I d H d|}| j||||dI d H S r  r8   r  r   r   )	rb   r  r  r   r   r   r  rg  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)rj   rm   rn   rp   r   rA   r-   rd   r   rG  r  r  ra  rc  r   r   rt  ry  r   r   r  r  r  r  r  rE  r`   r`   rC  rc   r   D  s   
&.	|6	
 "" r   )queryextra_headersextra_query
extra_bodyr   r   r   zQuery | NonezHeaders | Noner  r   z'float | httpx.Timeout | None | NotGivenzPostParser | NotGivenr*   )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   rZ   r   r   r   )r   r&   r   r   r$   r1   )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ZdS )r   ru   rg   c                 C  s   dS )NTr`   rk   r`   r`   rc   __bool__<  s    zForceMultipartDict.__bool__N)rj   rm   rn   r  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 )
OtherPlatformrf   r\   namer^   c                 C  s
   || _ d S r_   r  rb   r  r`   r`   rc   rd   A  s    zOtherPlatform.__init__rg   c                 C  s   d| j  S )NzOther:r  rk   r`   r`   rc   __str__D  s    zOtherPlatform.__str__Nrj   rm   rn   rd   r   r  r`   r`   r`   rc   r  @  s   r  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformrg   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  iphoneZipadr  darwinr  windowsr  Zandroidr  linuxfreebsdr  openbsdr  r  )r   systemr   r   distroidr  )r  Zplatform_name	distro_idr`   r`   rc   r  X  s.    r  )maxsizerf   zPlatform | Noner  )r   r   r^   c                C  s&   d| t |p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)rf   r  get_architectureget_python_runtimeget_python_version)r   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 )
	OtherArchrf   r\   r  c                 C  s
   || _ d S r_   r  r  r`   r`   rc   rd     s    zOtherArch.__init__rg   c                 C  s   d| j  S )Nzother:r  rk   r`   r`   rc   r    s    zOtherArch.__str__Nr  r`   r`   r`   rc   r    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    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  sj   zt   } W n tk
r&   Y dS X | dkr4dS | dkr@dS | dkrLdS tjdkrZdS | rft| S dS )	Nr  )r  aarch64r  r  x86_64r  l        r  )r   machiner   r   sysr  r  )r  r`   r`   rc   r    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    )r   r	  r
  r`   r`   rc   
<dictcomp>  s     
  z#_merge_mappings.<locals>.<dictcomp>)rx   )r  r  Zmergedr`   r`   rc   r     s    r   )
__future__r   r  r[   r(  r6  r$  r  r  r   r   email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   r  r{   r  r   r   r    r   Z_qsr   _filesr   r   _typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   Z_utilsr.   r/   r0   r1   r2   r3   Z_compatr4   r5   r6   Z_modelsr7   r8   r9   r:   	_responser;   r<   r=   r>   
_constantsr?   r@   rA   rB   rC   rD   rE   Z
_streamingrF   rG   rH   rI   rJ   rK   rL   rM   	getLoggerrj   rN   rp   rO   rQ   rR   rS   rU   rV   Zhttpx._configrW   rN  ImportErrorrX   rq   r   r   r   rO  r  r   r   r   r;  ZDefaultHttpxClientrF  r   r  Zhttpx_aiohttpr  ZHttpxAiohttpClientZDefaultAsyncHttpxClientZDefaultAioHttpClientr  r   r  rf   r   r  r  r  r  r  r  r  r  r  r   r`   r`   r`   rc   <module>   s    DD $	3=1')   /   _	   W %	*	