B
    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 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l.m/Z/m0Z0 d	dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d	dlCmDZDmEZEmFZFmGZGmHZH d	dlImJZJmKZK d	dlLmMZMmNZNmOZOmPZP d	dlQmRZRmSZSmTZTmUZU d	dlVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z] d	dl^m_Z_m`Z`maZambZb d	dl+mcZcmdZdmeZemfZf d	dlgmhZh eiejZkdeld< edddZmedddZnedZoeddd Zped!e_e dZqed"eae dZrerd d#lsmtZu n0yd d#lsmtZu W n evk
r   e7d$ZuY nX G d%d& d&ZwG d'd( d(eMeeo ZxG d)d* d*exeo eeo ZyG d+d, d,eeoenf ZzG d-d. d.exeo eeo Z{ed/ee$j|e$j}f dZ~ed0ee_e eae f dZG d1d2 d2ee~ef ZG d3d4 d4e$j|Zere$j|ZneZG d5d6 d6eZG d7d8 d8ee$j|e_e f ZG d9d: d:e$j}Zer
e$j}ZneZG d;d< d<eZG d=d> d>ee$j}eae f Zddddde2e2d?d@dAd@dBdCdDdEdFdGdHdIZG dJdK dKZeee dL f ZdMdNdOdPZeGddQdRdSdTdUdVZG dWdX dXZeee dY f ZdRdNdZd[ZdRdNd\d]Zd^dNd_d`ZdadadbdcdddeZdS )f    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)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	lru_cache
is_mapping)
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APIResponseValidationError)LegacyAPIResponsez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^   Y/home/ankuromar296_gmail_com/.local/lib/python3.7/site-packages/anthropic/_base_client.py__init__z   s    zPageInfo.__init__r"   )r[   r]   c            C  s   d S )Nr^   )r_   r[   r^   r^   r`   ra      s    )rZ   r[   )rZ   r[   r]   c            C  s   || _ || _d S )N)rZ   r[   )r_   rZ   r[   r^   r^   r`   ra      s    N)__name__
__module____qualname____doc____annotations__r   ra   r   r^   r^   r^   r`   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
    r8   _optionszType[_T]_modelbool)r]   c             C  s   |   }|sdS |  d k	S )NF)_get_page_itemsnext_page_info)r_   itemsr^   r^   r`   has_next_page   s    zBasePage.has_next_pagezOptional[PageInfo]c             C  s   d S )Nr^   )r_   r^   r^   r`   rl      s    zBasePage.next_page_infozIterable[_T]c             C  s   d S )Nr^   )r_   r^   r^   r`   rk      s    zBasePage._get_page_itemsr   zhttpx.QueryParams)rZ   r]   c             C  s   t tt| jj|jS )N)httpxZQueryParamsr   r   rh   r[   merge)r_   rZ   r^   r^   r`   _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)r5   rh   Z_strip_raw_response_header
isinstancer[   r%   rZ   rq   	copy_withdictstr
ValueError)r_   rr   optionsr[   rZ   r^   r^   r`   _info_to_options   s    

zBasePage._info_to_optionsN)rb   rc   rd   re   r   rh   rf   ri   rn   rl   rk   rq   ry   r^   r^   r^   r`   rg      s   

rg   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_clientzType[_T]r8   r\   )clientmodelrx   r]   c             C  s   || _ || _|| _d S )N)ri   r|   rh   )r_   r}   r~   rx   r^   r^   r`   _set_private_attributes   s    z$BaseSyncPage._set_private_attributeszIterator[_T])r]   c             c  s.   x(|   D ]}x| D ]
}|V  qW q
W d S )N)
iter_pagesrk   )r_   pageitemr^   r^   r`   __iter__   s    zBaseSyncPage.__iter__rP   zIterator[SyncPageT])r_   r]   c             c  s*   | }x |V  |  r| }qd S qW d S )N)rn   get_next_page)r_   r   r^   r^   r`   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   rx   )rl   RuntimeErrorry   r|   _request_api_listri   	__class__)r_   rr   rx   r^   r^   r`   r      s    
zBaseSyncPage.get_next_pageN)rb   rc   rd   pydanticr   r|   rf   r   r   r   r   r^   r^   r^   r`   rz      s
   
	rz   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   zType[AsyncPageT]zType[_T]r\   )r}   rx   page_clsr~   r]   c             C  s   || _ || _|| _|| _d S )N)ri   r|   rh   	_page_cls)r_   r}   rx   r   r~   r^   r^   r`   ra      s    zAsyncPaginator.__init__z Generator[Any, None, AsyncPageT])r]   c             C  s   |    S )N)	_get_page	__await__)r_   r^   r^   r`   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~   rx   r}   )r   ri   rh   r|   )r   )r_   r^   r`   _parser  s
    
z)AsyncPaginator._get_page.<locals>._parser)rh   post_parserr|   requestr   )r_   r   r^   )r_   r`   r     s    zAsyncPaginator._get_pagezAsyncIterator[_T]c          	   C sF   t t| I d H }x0|2 y3 d H }W n
 tk
s6X |V  q   Y  W d S )N)r   rR   StopAsyncIteration)r_   r   r   r^   r^   r`   	__aiter__  s
    zAsyncPaginator.__aiter__N)rb   rc   rd   ra   r   r   r   r^   r^   r^   r`   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|   zType[_T]r8   r\   )r~   r}   rx   r]   c             C  s   || _ || _|| _d S )N)ri   r|   rh   )r_   r~   r}   rx   r^   r^   r`   r     s    z%BaseAsyncPage._set_private_attributeszAsyncIterator[_T])r]   c          	   C sL   xF|   2 y3 d H }W n
 tk
s<X x| D ]
}|V  q,W q
   Y  W d S )N)r   r   rk   )r_   r   r   r^   r^   r`   r   '  s    "zBaseAsyncPage.__aiter__rR   zAsyncIterator[AsyncPageT])r_   r]   c             C s0   | }x&|V  |  r$| I d H }qd S qW d S )N)rn   r   )r_   r   r^   r^   r`   r   ,  s    zBaseAsyncPage.iter_pagesc               s:   |   }|std| |}| jj| j| j|dI d H S )NzYNo next page expected; please check `.has_next_page()` before calling `.get_next_page()`.)r   rx   )rl   r   ry   r|   r   ri   r   )r_   rr   rx   r^   r^   r`   r   5  s    
zBaseAsyncPage.get_next_pageN)rb   rc   rd   r   r   r|   rf   r   r   r   r   r^   r^   r^   r`   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|   rv   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutzhttpx.Limits_limitszProxiesTypes | None_proxiesz!Transport | AsyncTransport | None
_transportrj   _strict_response_validationz
str | None_idempotency_headerNztype[_DefaultStreamT] | None_default_stream_cls)r   r   custom_headerscustom_queryz	str | URLzfloat | Timeout | NonezMapping[str, str] | NonezMapping[str, object] | Noner\   )versionbase_urlr   r   r   limits	transportproxiesr   r   r]   c   
         C  sh   || _ | t|| _|| _|| _|| _|| _|| _|	p:i | _	|
pDi | _
|| _d | _|d krdt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 `anthropic.DEFAULT_MAX_RETRIES`)r   _enforce_trailing_slashr   r   r   r   r   r   r   _custom_headers_custom_queryr   r   	TypeError)r_   r   r   r   r   r   r   r   r   r   r   r^   r^   r`   ra   Q  s    

zBaseClient.__init__)rZ   r]   c             C  s"   |j dr|S |j|j d dS )N   /)raw_path)r   endswithrt   )r_   rZ   r^   r^   r`   r   p  s    z"BaseClient._enforce_trailing_slashzhttpx.ResponserJ   )responser]   c             C  s   |j r|jsd }d|j }nT|j }|}y 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stripjsonloads	Exception_make_status_error)r_   r   r   err_msgZerr_textr^   r^   r`    _make_status_error_from_responseu  s    

z+BaseClient._make_status_error_from_responseobjectz_exceptions.APIStatusError)r   r   r   r]   c            C  s
   t  d S )N)NotImplementedError)r_   r   r   r   r^   r^   r`   r     s    zBaseClient._make_status_errorzOptional[int]r8   )remaining_retriesrx   r]   c             C  s   |d k	r|S | | jS )N)get_max_retriesr   )r_   r   rx   r^   r^   r`   _remaining_retries  s    zBaseClient._remaining_retrieszhttpx.Headers)rx   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_headersro   r#   r   methodloweridempotency_key_idempotency_key)r_   rx   r   Zheaders_dictr   Zidempotency_headerr^   r^   r`   _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   lstriprt   )r_   rZ   Z	merge_urlZmerge_raw_pathr^   r^   r`   _prepare_url  s
    zBaseClient._prepare_urlzSSEDecoder | SSEBytesDecoder)r]   c             C  s   t  S )N)rG   )r_   r^   r^   r`   _make_sse_decoder  s    zBaseClient._make_sse_decoderz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)Zexclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`z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debugr6   	json_data
extra_jsonr   r    r4   r   r   typer   r   r[   r   
startswithpopr0   r   _serialize_multipartformr|   Zbuild_requestrs   r   r%   r   r   rZ   qs	stringifyr   rv   r   r   )r_   rx   kwargsr   r   r[   content_typer^   r^   r`   _build_request  s<    




"zBaseClient._build_requestzMapping[object, object]zdict[str, object])r   r]   c             C  sb   | j j|dd}i }xH|D ]@\}}||}|s:|||< qt|rN|| q||g||< qW |S )NZbrackets)Zarray_format)r   Zstringify_itemsr   r1   append)r_   r   rm   Z
serializedkeyvalueexistingr^   r^   r`   r     s    

z#BaseClient._serialize_multipartformztype[ResponseT])cast_torx   r]   c             C  sD   t |js|S t|j}|tt}t |r@||_ttt |S |S )N)	r2   r   ru   r   rD   r   r   r   r&   )r_   r   rx   r   Zoverride_cast_tor^   r^   r`   _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   rC   )r_   r   r^   r^   r`   _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 yRt|rNt|trNt t|j||dS | jrft tt	||dS t tt
||dS  tjk
r } zt||d|W d 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   )r_   r   r   r   errr^   r^   r`   _process_response_data%  s    

z!BaseClient._process_response_datar   c             C  s   t  S )N)r   )r_   r^   r^   r`   r   =  s    zBaseClient.qszhttpx.Auth | Nonec             C  s   d S )Nr^   )r_   r^   r^   r`   custom_authA  s    zBaseClient.custom_authzdict[str, str]c             C  s   i S )Nr^   )r_   r^   r^   r`   auth_headersE  s    zBaseClient.auth_headerszdict[str, str | Omit]c             C  s   dd| j d|  | j| jS )Nzapplication/json)AcceptzContent-Typez
User-Agent)
user_agentplatform_headersr   r   )r_   r^   r^   r`   r   I  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^   )r_   r   r   r^   r^   r`   r   T  s    	zBaseClient._validate_headersc             C  s   | j j d| j S )Nz/Python )r   rb   r   )r_   r^   r^   r`   r   _  s    zBaseClient.user_agentc             C  s   | j S )N)r   )r_   r^   r^   r`   r   c  s    zBaseClient.base_urlz	URL | strc             C  s"   |  t|tr|nt|| _d S )N)r   rs   r   r   )r_   rZ   r^   r^   r`   r   g  s    zDict[str, str]c             C  s
   t | jS )N)r   r   )r_   r^   r^   r`   r   k  s    zBaseClient.platform_headerszOptional[httpx.Headers]zfloat | None)response_headersr]   c          	   C  s   |dkrdS y| dd}t|d S  ttfk
r<   Y nX | d}yt|S  ttfk
rh   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   rw   emailutilsparsedate_tz	mktime_tztime)r_   r   Zretry_ms_headerZretry_headerretry_date_tuple
retry_dater^   r^   r`   _parse_retry_after_headern  s"    
z$BaseClient._parse_retry_after_headerr   )r   rx   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   minrB   powr@   r   )
r_   r   rx   r   r   retry_afterZ
nb_retriesZsleep_secondsjitterr   r^   r^   r`   _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   )r_   r   Zshould_retry_headerr^   r^   r`   _should_retry  s*    






zBaseClient._should_retryc             C  s   dt   S )Nzstainless-python-retry-)uuiduuid4)r_   r^   r^   r`   r     s    zBaseClient._idempotency_key)N)N)"rb   rc   rd   rf   r   rA   r?   ra   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^   r`   r   D  sP   
(	:&#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   r   follow_redirectsT)
setdefaultr?   rE   superra   )r_   r   )r   r^   r`   ra     s    z_DefaultHttpxClient.__init__)rb   rc   rd   ra   __classcell__r^   r^   )r   r`   r    s   r  c               @  s   e Zd ZddddZdS )SyncHttpxClientWrapperr\   )r]   c             C  s&   y|    W n tk
r    Y nX d S )N)closer   )r_   r^   r^   r`   __del__  s    zSyncHttpxClientWrapper.__del__N)rb   rc   rd   r  r^   r^   r^   r`   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/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   rv   z	str | URLr   z!float | Timeout | None | NotGivenzTransport | NonezProxiesTypes | NonezLimits | Nonezhttpx.Client | NonezMapping[str, str] | NonezMapping[str, object] | Nonerj   r\   )r   r   r   r   r   r   r   r  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}|d k	rt	|t
jstd	t| t j||tt||||||
|	|d

 |p
t|tt||||dd| _d S )NzhThe `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead   )category
stacklevelzNThe `http_client` argument is mutually exclusive with `connection_pool_limits`z[The `transport` argument is deprecated. The `http_client` argument should be passed insteadzAThe `http_client` argument is mutually exclusive with `transport`zYThe `proxies` argument is deprecated. The `http_client` argument should be passed insteadz?The `http_client` argument is mutually exclusive with `proxies`zOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got )
r   r   r   r   r   r   r   r   r   r   T)r   r   r   r   r   r  )warningswarnDeprecationWarningrw   rE   r2   r   HTTPX_DEFAULT_TIMEOUTr?   rs   ro   Clientr   r   r  ra   r   r$   r  r|   )r_   r   r   r   r   r   r   r   r  r   r   r   )r   r^   r`   ra     s^    
zSyncAPIClient.__init__)r]   c             C  s   | j jS )N)r|   r   )r_   r^   r^   r`   r   C  s    zSyncAPIClient.is_closedc             C  s   t | dr| j  dS )z`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        r|   N)hasattrr|   r  )r_   r^   r^   r`   r  F  s    
zSyncAPIClient.closerS   )r_   r]   c             C  s   | S )Nr^   )r_   r^   r^   r`   	__enter__P  s    zSyncAPIClient.__enter__ztype[BaseException] | NonezBaseException | NonezTracebackType | None)exc_typeexcexc_tbr]   c             C  s   |    d S )N)r  )r_   r   r!  r"  r^   r^   r`   __exit__S  s    zSyncAPIClient.__exit__r8   )rx   r]   c             C  s   dS )z#Hook for mutating the given optionsNr^   )r_   rx   r^   r^   r`   _prepare_options[  s    zSyncAPIClient._prepare_optionszhttpx.Request)r   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^   r^   r`   _prepare_requestb  s    	zSyncAPIClient._prepare_requestzType[ResponseT]zOptional[int]zLiteral[True]zType[_StreamT]rV   )r   rx   r   r   
stream_clsr]   c            C  s   d S )Nr^   )r_   r   rx   r   r   r&  r^   r^   r`   r   m  s    
zSyncAPIClient.requestF)r   zLiteral[False]r&   )r   rx   r   r   r]   c            C  s   d S )Nr^   )r_   r   rx   r   r   r^   r^   r`   r   y  s    	)r   r&  zType[_StreamT] | NonezResponseT | _StreamTc            C  s   d S )Nr^   )r_   r   rx   r   r   r&  r^   r^   r`   r     s    
ztype[_StreamT] | Nonec            C  s   | j |||||dS )N)r   rx   r   r&  r   )_request)r_   r   rx   r   r   r&  r^   r^   r`   r     s    	z
int | Nonec            C  s2  |  ||}| | | ||}| |}| | i }| jd k	rN| j|d< td|j|j	 y(| j
j|fd|p|| j|di|}	W n tjk
r }
 zFtjddd |dkr| j|||||d d	S td
 t|d|
W d d }
~
X Y nh tk
rT }
 zHtjddd |dkr.| j|||||d d	S td t|d|
W d d }
~
X Y nX td|j|j	|	j|	j|	j y|	  W n tjk
r }
 zztjddd |dkr| |
jr|
j  | j||||
jj||dS |
jjs|
j  td | |
jd W d d }
~
X Y nX | j|||	||dS )NauthzSending HTTP Request: %s %sr   )r   z"Encountered httpx.TimeoutExceptionT)exc_infor   )r   r&  r   zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Response: %s %s "%i %s" %sz!Encountered httpx.HTTPStatusError)r   r&  zRe-raising status error)r   rx   r   r   r&  )r   r$  r   r   r%  r   rO   r   r   rZ   r|   sendr   ro   TimeoutException_retry_requestrK   r   rL   r   reason_phraser   raise_for_statusHTTPStatusErrorr  r   r  r   readr   _process_response)r_   r   rx   r   r   r&  retriesr   r   r   r   r^   r^   r`   r'    s    	











 zSyncAPIClient._requestzhttpx.Headers | None)rx   r   r   r   r   r&  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)rx   r   r   r   r&  )rO   r   r  rr   rZ   r   sleepr'  )	r_   rx   r   r   r   r   r&  	remainingr   r^   r^   r`   r,    s    

zSyncAPIClient._retry_requestzhttpx.Responsez1type[Stream[Any]] | type[AsyncStream[Any]] | None)r   rx   r   r   r&  r]   c      	   
   C  s   |j jtdkr,ttt|| ||||dS t|p6|}t	|rt
|trt
|tsjt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 )Nr  )rawr}   r   r   r&  rx   z!API Response types must subclass z; Received ztype[BaseAPIResponse[Any]]ztype[ResponseT])r   r   r   rC   r   r&   rN   r   r   r   r   r<   r;   r   r>   ro   Responserj   parse)	r_   r   rx   r   r   r&  originresponse_clsapi_responser^   r^   r`   r1  $  sH    	






zSyncAPIClient._process_responsezType[object]zType[SyncPageT]rP   )r~   r   rx   r]   c               s.   ddd fdd}|_ j|ddS )NrP   )r   r]   c               s   | j  d | S )N)r}   r~   rx   )r   )r   )r~   rx   r_   r^   r`   r   c  s
    z0SyncAPIClient._request_api_list.<locals>._parserF)r   )r   r   )r_   r~   r   rx   r   r^   )r~   rx   r_   r`   r   ]  s    zSyncAPIClient._request_api_list)rx   r   r.   )pathr   rx   r   r]   c            C  s   d S )Nr^   )r_   r;  r   rx   r   r^   r^   r`   r   o  s    	zSyncAPIClient.get)rx   ztype[_StreamT])r;  r   rx   r   r&  r]   c            C  s   d S )Nr^   )r_   r;  r   rx   r   r&  r^   r^   r`   r   z  s    
)rx   r&  c            C  s   d S )Nr^   )r_   r;  r   rx   r   r&  r^   r^   r`   r     s    
)rx   r   r&  c            C  s.   t jf d|d|}tt| j||||dS )Nr   )r   rZ   )r   r&  )r8   	constructr   r&   r   )r_   r;  r   rx   r   r&  optsr^   r^   r`   r     s    	)r   rx   r   r   zBody | NonezRequestFiles | None)r;  r   r   rx   r   r   r]   c            C  s   d S )Nr^   )r_   r;  r   r   rx   r   r   r^   r^   r`   post  s    zSyncAPIClient.post)r   rx   r   )r;  r   r   rx   r   r   r&  r]   c            C  s   d S )Nr^   )r_   r;  r   r   rx   r   r   r&  r^   r^   r`   r>    s    )r   rx   r   r&  c            C  s   d S )Nr^   )r_   r;  r   r   rx   r   r   r&  r^   r^   r`   r>    s    )r   rx   r   r   r&  c      	      C  s6   t jf d||t|d|}tt| j||||dS )Nr>  )r   rZ   r   r   )r   r&  )r8   r<  r   r   r&   r   )	r_   r;  r   r   rx   r   r   r&  r=  r^   r^   r`   r>    s    )r   rx   )r;  r   r   rx   r]   c            C  s$   t jf d||d|}| ||S )Npatch)r   rZ   r   )r8   r<  r   )r_   r;  r   r   rx   r=  r^   r^   r`   r?    s    zSyncAPIClient.patch)r   r   rx   )r;  r   r   r   rx   r]   c            C  s*   t jf d||t|d|}| ||S )Nput)r   rZ   r   r   )r8   r<  r   r   )r_   r;  r   r   r   rx   r=  r^   r^   r`   r@    s    	zSyncAPIClient.putc            C  s$   t jf d||d|}| ||S )Ndelete)r   rZ   r   )r8   r<  r   )r_   r;  r   r   rx   r=  r^   r^   r`   rA    s    zSyncAPIClient.deleter   )r   rx   r   )r;  r~   r   r   rx   r   r]   c            C  s&   t jf |||d|}| |||S )N)r   rZ   r   )r8   r<  r   )r_   r;  r~   r   r   rx   r   r=  r^   r^   r`   get_api_list  s    
zSyncAPIClient.get_api_list)N)N)N)N)rb   rc   rd   rf   r   rA   r   ra   r   r  r  r#  r$  r%  r   r   r'  r,  r1  r   r   r>  r?  r@  rA  rB  r  r^   r^   )r   r`   r{     s   
.I
 
d9  	"$$	"
r{   c                  s$   e Zd Zddd fddZ  ZS )_DefaultAsyncHttpxClientr   r\   )r   r]   c               s6   | dt | dt | dd t jf | d S )Nr   r   r  T)r  r?   rE   r  ra   )r_   r   )r   r^   r`   ra     s    z!_DefaultAsyncHttpxClient.__init__)rb   rc   rd   ra   r  r^   r^   )r   r`   rC    s   rC  c               @  s   e Zd ZddddZdS )AsyncHttpxClientWrapperr\   )r]   c             C  s0   yt  |   W n tk
r*   Y nX d S )N)asyncioget_running_loopcreate_taskacloser   )r_   r^   r^   r`   r     s    zAsyncHttpxClientWrapper.__del__N)rb   rc   rd   r  r^   r^   r^   r`   rD    s   rD  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   )r   r   r   r   r   r  r   r   rv   z	str | URLrj   r   z!float | Timeout | None | NotGivenzAsyncTransport | NonezProxiesTypes | NonezLimits | Nonezhttpx.AsyncClient | NonezMapping[str, str] | NonezMapping[str, object] | Noner\   )r   r   r   r   r   r   r   r   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}|	d k	rt	|	t
jstd	t|	 t j|||tt||||||
|d

 |	p
t|tt||||dd| _d S )NzhThe `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed insteadr  )r  r  zNThe `http_client` argument is mutually exclusive with `connection_pool_limits`z[The `transport` argument is deprecated. The `http_client` argument should be passed insteadzAThe `http_client` argument is mutually exclusive with `transport`zYThe `proxies` argument is deprecated. The `http_client` argument should be passed insteadz?The `http_client` argument is mutually exclusive with `proxies`zTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )
r   r   r   r   r   r   r   r   r   r   T)r   r   r   r   r   r  )r  r  r  rw   rE   r2   r   r  r?   rs   ro   AsyncClientr   r   r  ra   r   r$   rD  r|   )r_   r   r   r   r   r   r   r   r   r  r   r   )r   r^   r`   ra   ,  s^    
zAsyncAPIClient.__init__)r]   c             C  s   | j jS )N)r|   r   )r_   r^   r^   r`   r     s    zAsyncAPIClient.is_closedc               s   | j  I dH  dS )z`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        N)r|   rH  )r_   r^   r^   r`   r    s    zAsyncAPIClient.closerS   )r_   r]   c               s   | S )Nr^   )r_   r^   r^   r`   
__aenter__  s    zAsyncAPIClient.__aenter__ztype[BaseException] | NonezBaseException | NonezTracebackType | None)r   r!  r"  r]   c               s   |   I d H  d S )N)r  )r_   r   r!  r"  r^   r^   r`   	__aexit__  s    zAsyncAPIClient.__aexit__r8   )rx   r]   c               s   dS )z#Hook for mutating the given optionsNr^   )r_   rx   r^   r^   r`   r$    s    zAsyncAPIClient._prepare_optionszhttpx.Request)r   r]   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^   r^   r`   r%    s    	zAsyncAPIClient._prepare_requestF)r   r   zType[ResponseT]zLiteral[False]zOptional[int]r&   )r   rx   r   r   r]   c              s   d S )Nr^   )r_   r   rx   r   r   r^   r^   r`   r     s    	zAsyncAPIClient.request)r   zLiteral[True]ztype[_AsyncStreamT]rW   )r   rx   r   r&  r   r]   c              s   d S )Nr^   )r_   r   rx   r   r&  r   r^   r^   r`   r     s    
)r&  r   ztype[_AsyncStreamT] | NonezResponseT | _AsyncStreamTc              s   d S )Nr^   )r_   r   rx   r   r&  r   r^   r^   r`   r     s    
)r   r&  r   c              s   | j |||||dI d H S )N)r   rx   r   r&  r   )r'  )r_   r   rx   r   r&  r   r^   r^   r`   r     s    	z
int | Nonec              sR  |  ||}| |I d H  | ||}| |}| |I d H  i }| jd k	rZ| j|d< y.| jj|fd|pv| j|di|I d H }	W n t	j
k
r }
 zLtjddd |dkr| j|||||d dI d H S td	 t|d|
W d d }
~
X Y nn tk
r` }
 zNtjd
dd |dkr:| j|||||d dI d H S td t|d|
W d d }
~
X Y nX td|j|j|	j|	j y|	  W n t	jk
r6 }
 ztjddd |dkr| |
jr|
j I d H  | j||||
jj||dI d H S |
jjs|
j I d H  td | |
jd W d d }
~
X Y nX | j|||	||dI d H S )Nr(  r   )r   z"Encountered httpx.TimeoutExceptionT)r)  r   )r   r&  r   zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Request: %s %s "%i %s"z!Encountered httpx.HTTPStatusError)r   r&  zRe-raising status error)r   rx   r   r   r&  )r   r$  r   r   r%  r   r|   r*  r   ro   r+  rO   r   r,  rK   r   rL   r   rZ   r   r-  r.  r/  r  r   rH  r   r   Zareadr   r1  )r_   r   rx   r   r&  r   r2  r   r   r   r   r^   r^   r`   r'    s|    	







 zAsyncAPIClient._requestzhttpx.Headers | None)rx   r   r   r   r   r&  r]   c      	        sp   |d }|dkrt d nt d| | |||}t d|j| t|I d H  | j|||||dI d H S )Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)rx   r   r   r   r&  )rO   r   r  rr   rZ   anyior3  r'  )	r_   rx   r   r   r   r   r&  r4  r   r^   r^   r`   r,  9  s    
zAsyncAPIClient._retry_requestzhttpx.Responsez1type[Stream[Any]] | type[AsyncStream[Any]] | None)r   rx   r   r   r&  r]   c      	   
     s   |j jtdkr,ttt|| ||||dS t|p6|}t	|rt
|trt
|tsjt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  )r5  r}   r   r   r&  rx   z!API Response types must subclass z; Received ztype[BaseAPIResponse[Any]]r&   ztype[ResponseT])r   r   r   rC   r   r&   rN   r   r   r   r   r<   r=   r   r>   ro   r6  rj   r7  )	r_   r   rx   r   r   r&  r8  r9  r:  r^   r^   r`   r1  V  sH    	






z AsyncAPIClient._process_responsezType[_T]zType[AsyncPageT]zAsyncPaginator[_T, AsyncPageT])r~   r   rx   r]   c             C  s   t | |||dS )N)r}   rx   r   r~   )r   )r_   r~   r   rx   r^   r^   r`   r     s    z AsyncAPIClient._request_api_list)rx   r   r.   )r;  r   rx   r   r]   c              s   d S )Nr^   )r_   r;  r   rx   r   r^   r^   r`   r     s    	zAsyncAPIClient.get)rx   )r;  r   rx   r   r&  r]   c              s   d S )Nr^   )r_   r;  r   rx   r   r&  r^   r^   r`   r     s    
)rx   r&  c              s   d S )Nr^   )r_   r;  r   rx   r   r&  r^   r^   r`   r     s    
)rx   r   r&  c              s.   t jf d|d|}| j||||dI d H S )Nr   )r   rZ   )r   r&  )r8   r<  r   )r_   r;  r   rx   r   r&  r=  r^   r^   r`   r     s    	)r   r   rx   r   zBody | NonezRequestFiles | None)r;  r   r   r   rx   r   r]   c              s   d S )Nr^   )r_   r;  r   r   r   rx   r   r^   r^   r`   r>    s    zAsyncAPIClient.post)r   r   rx   )r;  r   r   r   rx   r   r&  r]   c              s   d S )Nr^   )r_   r;  r   r   r   rx   r   r&  r^   r^   r`   r>    s    )r   r   rx   r&  c              s   d S )Nr^   )r_   r;  r   r   r   rx   r   r&  r^   r^   r`   r>    s    )r   r   rx   r   r&  c      	        s<   t jf d||t|I d H d|}| j||||dI d H S )Nr>  )r   rZ   r   r   )r   r&  )r8   r<  r   r   )	r_   r;  r   r   r   rx   r   r&  r=  r^   r^   r`   r>    s    )r   rx   )r;  r   r   rx   r]   c              s*   t jf d||d|}| ||I d H S )Nr?  )r   rZ   r   )r8   r<  r   )r_   r;  r   r   rx   r=  r^   r^   r`   r?    s    zAsyncAPIClient.patch)r;  r   r   r   rx   r]   c              s6   t jf d||t|I d H d|}| ||I d H S )Nr@  )r   rZ   r   r   )r8   r<  r   r   )r_   r;  r   r   r   rx   r=  r^   r^   r`   r@  
  s    	zAsyncAPIClient.putc              s*   t jf d||d|}| ||I d H S )NrA  )r   rZ   r   )r8   r<  r   )r_   r;  r   r   rx   r=  r^   r^   r`   rA    s    zAsyncAPIClient.deleter   )r   rx   r   )r;  r~   r   r   rx   r   r]   c            C  s&   t jf |||d|}| |||S )N)r   rZ   r   )r8   r<  r   )r_   r;  r~   r   r   rx   r   r=  r^   r^   r`   rB  #  s    
zAsyncAPIClient.get_api_list)rb   rc   rd   rf   r   rA   r   ra   r   r  rJ  rK  r$  r%  r   r   r'  r,  r1  r   r   r>  r?  r@  rA  rB  r  r^   r^   )r   r`   r   (  s   
.H  	
]9  	"$$	"
r   )queryextra_headersextra_query
extra_bodyr   r   r   zQuery | NonezHeaders | NonezBody | Nonez
str | Nonez'float | httpx.Timeout | None | NotGivenzPostParser | NotGivenr.   )rM  rN  rO  rP  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   rs   r%   r2   )rM  rN  rO  rP  r   r   r   rx   r^   r^   r`   make_request_options1  s     
rQ  c               @  s.   e Zd ZdddddZeddddZd	S )
OtherPlatformrv   r\   )namer]   c             C  s
   || _ d S )N)rS  )r_   rS  r^   r^   r`   ra   W  s    zOtherPlatform.__init__)r]   c             C  s   d| j  S )NzOther:)rS  )r_   r^   r^   r`   __str__Z  s    zOtherPlatform.__str__N)rb   rc   rd   ra   r   rT  r^   r^   r^   r`   rR  V  s   rR  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatform)r]   c              C  s   yt   } t    }W n tk
r0   dS X d|ksBd|krFdS | dkrRdS | dkr^dS d	|krjd
S | dkrt }|dkrdS |dkrdS dS |rt|S dS )Nr\  iphoneZipadrZ  darwinrU  windowsrW  Zandroidr[  linuxfreebsdrX  openbsdrY  rV  )platformsystemr   r   distroidrR  )re  Zplatform_name	distro_idr^   r^   r`   get_platformn  s.    ri  )maxsizerv   zDict[str, str])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)rv   ri  get_architectureget_python_runtimeget_python_version)r   r^   r^   r`   r     s    r   c               @  s.   e Zd ZdddddZeddddZd	S )
	OtherArchrv   r\   )rS  r]   c             C  s
   || _ d S )N)rS  )r_   rS  r^   r^   r`   ra     s    zOtherArch.__init__)r]   c             C  s   d| j  S )Nzother:)rS  )r_   r^   r^   r`   rT    s    zOtherArch.__str__N)rb   rc   rd   ra   r   rT  r^   r^   r^   r`   ro    s   ro  )x32x64armarm64unknownc               C  s"   yt  S  tk
r   dS X d S )Nrt  )rd  python_implementationr   r^   r^   r^   r`   rm    s    rm  c               C  s"   yt  S  tk
r   dS X d S )Nrt  )rd  python_versionr   r^   r^   r^   r`   rn    s    rn  Archc              C  sr   yt  \} }t   }W n tk
r0   dS X |dkr>dS |dkrJdS |dkrVdS | dkrbdS |rnt|S dS )	Nrt  )rs  aarch64rs  rr  x86_64rq  32bitrp  )rd  architecturemachiner   r   ro  )Zpython_bitness_r|  r^   r^   r`   rl    s     rl  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^   )rs   r!   ).0r   r   r^   r^   r`   
<dictcomp>  s    z#_merge_mappings.<locals>.<dictcomp>)rm   )r~  r  mergedr^   r^   r`   r     s    r   )
__future__r   r   r   r	  r   rE  r   r   rd  r  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   rL  ro   rf  r   r   r   r    r   Z_qsr   _filesr   r   _typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   _utilsr0   r1   r2   r3   r4   _compatr5   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   Z_legacy_responserN   	getLoggerrb   rO   rf   rP   rR   rS   rT   rV   rW   Zhttpx._configrX   r  ImportErrorrY   rg   rz   r   r   r  rI  r   r   r   r  ZDefaultHttpxClientr  r{   rC  ZDefaultAsyncHttpxClientrD  r   rQ  rR  r]  ri  r   ro  rw  rm  rn  rl  r   r^   r^   r^   r`   <module>   s    DL$	#1.'&       %	    "	
*	