o
    +i                    @  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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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+m,Z,m-Z- d dl)m.Z. d	d
l/m0Z0 d	dl1m2Z2 d	dl3m4Z4m5Z5 d	dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d	dlFmGZGmHZHmIZImJZJmKZKmLZL d	dlMmNZNmOZOmPZP d	dlQmRZRmSZSmTZTmUZU d	dlVmWZWmXZXmYZYmZZZ d	dl[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb d	dlcmdZdmeZemfZfmgZg d	dl0mhZhmiZimjZjmkZk d	dllmmZm d	dlnmoZo e
peqZrdesd< edddZtedddZuedZvedd d!Zwed"ede dZxed#efe dZyerjd d$lzm{Z{ e{Z|nzd d$lzm{Z| W n e}y   e;d%Z|Y nw G d&d' d'Z~G d(d) d)eReev ZG d*d+ d+eev eev ZG d,d- d-eeveuf ZG d.d/ d/eev eev Zed0ee'je'jf dZed1eede efe f dZG d2d3 d3eeef ZG d4d5 d5e'jZere'jZneZG d6d7 d7eZG d8d9 d9ee'jede f ZG d:d; d;e'jZzd dlZW n e}y*   G d<d= d=e'jZY n
w G d>d= d=ejZer?e'jZ	 e'jZneZeZG d?d@ d@eZG dAdB dBee'jefe f ZdddddeEeEdCdudSdTZG dUdV dVeedf ZG dWdX dXZeee#dY f Zdvd[d\ZeKdd]dwdcddZG dedf dfZeee#dg f ZdxdhdiZdxdjdkZdydmdnZdzdsdtZdS ){    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictListTypeTupleUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)Literaloverride
get_origin)URLProxyHTTPTransportAsyncHTTPTransport)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APIResponseValidationError)get_environment_proxies)LegacyAPIResponsezlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIG      @c                   @  sv   e Zd ZU dZded< ded< ded< edddZedddZedddZeeeddddZe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.
    URL | NotGivenurlQuery | NotGivenparamsBody | NotGivenjsonr   returnNonec                C     d S N selfrb   rk   rk   S/var/www/html/psymed-ai/venv/lib/python3.10/site-packages/anthropic/_base_client.py__init__      zPageInfo.__init__r&   c                C  ri   rj   rk   )rm   rd   rk   rk   rn   ro      rp   r$   c                C  ri   rj   rk   )rm   rf   rk   rk   rn   ro      rp   rb   rf   rd   c                C  s   || _ || _|| _d S rj   rq   )rm   rb   rf   rd   rk   rk   rn   ro      s   
strc                 C  sN   | j r| jj d| j  dS | jr| jj d| j dS | jj d| j dS )Nz(url=)z(json=z(params=)rb   	__class____name__rf   rd   rm   rk   rk   rn   __repr__   s
   zPageInfo.__repr__N)rb   r   rg   rh   )rd   r&   rg   rh   )rf   r$   rg   rh   )rb   ra   rf   re   rd   rc   rg   rh   rg   rr   )
ru   
__module____qualname____doc____annotations__r   ro   r2   r   rw   rk   rk   rk   rn   r`   w   s"   
 	r`   c                   @  s`   e Zd ZU dZe Zded< e Zded< ddd	ZdddZ	dddZ
dddZ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
    r=   _optionsType[_T]_modelrg   boolc                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)rm   itemsrk   rk   rn   has_next_page   s   zBasePage.has_next_pageOptional[PageInfo]c                 C  ri   rj   rk   rv   rk   rk   rn   r      s    zBasePage.next_page_infoIterable[_T]c                 C  ri   rj   rk   rv   rk   rk   rn   r         zBasePage._get_page_itemsrb   r   httpx.QueryParamsc                 C  s   t tt| jj|jS rj   )httpxQueryParamsr   r   r~   rd   mergerl   rk   rk   rn   _params_from_url   s   zBasePage._params_from_urlinfor`   c                 C  s   t | j}|  t|jtsi |j|j|_|S t|jts:| |j}|jj|d}t	|j|_t
||_|S t|jtsht|jsItd|jsTi |j|_|S t|js]tdi |j|j|_|S td)N)rd   z*Pagination is only supported with mappingszUnexpected PageInfo state)r:   r~   _strip_raw_response_header
isinstancerd   r)   rb   r   	copy_withdictrr   rf   r8   	TypeError	json_data
ValueError)rm   r   optionsrd   rb   rk   rk   rn   _info_to_options   s,   



zBasePage._info_to_optionsNrg   r   )rg   r   )rg   r   )rb   r   rg   r   )r   r`   rg   r=   )ru   ry   rz   r{   r   r~   r|   r   r   r   r   r   r   rk   rk   rk   rn   r}      s   
 



r}   c                   @  F   e Zd ZU e Zded< dd
dZdddZdddZ	dddZ
dS )BaseSyncPageSyncAPIClient_clientclientmodelr   r   r=   rg   rh   c                 C  s0   t st| dd d u ri | _|| _|| _|| _d S N__pydantic_private__r9   getattrr   r   r   r~   )rm   r   r   r   rk   rk   rn   _set_private_attributes   
   
z$BaseSyncPage._set_private_attributesIterator[_T]c                 c  s(    |   D ]}| D ]}|V  qqd S rj   
iter_pagesr   rm   pageitemrk   rk   rn   __iter__   s   zBaseSyncPage.__iter__rm   rV   Iterator[SyncPageT]c                 c  s&    | }	 |V  |  r| }nd S qrj   r   get_next_pagerm   r   rk   rk   rn   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   r   RuntimeErrorr   r   _request_api_listr   rt   rm   r   r   rk   rk   rn   r     s   
zBaseSyncPage.get_next_pageN)r   r   r   r   r   r=   rg   rh   )rg   r   )rm   rV   rg   r   )rm   rV   rg   rV   )ru   ry   rz   pydanticr   r   r|   r   r   r   r   rk   rk   rk   rn   r      s   
 


	r   c                   @  s4   e Zd ZdddZdddZdddZdddZdS )AsyncPaginatorr   AsyncAPIClientr   r=   page_clsType[AsyncPageT]r   r   rg   rh   c                 C  s   || _ || _|| _|| _d S rj   )r   r   r~   	_page_cls)rm   r   r   r   r   rk   rk   rn   ro     s   
zAsyncPaginator.__init__ Generator[Any, None, AsyncPageT]c                 C  s   |    S rj   )	_get_page	__await__rv   rk   rk   rn   r   %  s   zAsyncPaginator.__await__rX   c                   s0   d fdd}| j _ j j j I d H S )NresprX   rg   c                   s   | j  j j jd | S )N)r   r   r   )r   r   r~   r   r   rv   rk   rn   _parser)  s   z)AsyncPaginator._get_page.<locals>._parser)r   rX   rg   rX   )r~   post_parserr   requestr   )rm   r   rk   rv   rn   r   (  s   zAsyncPaginator._get_pageAsyncIterator[_T]c                 C s0   t t| I d H }|2 z	3 d H W }|V  q6 d S rj   )r   rX   r   rk   rk   rn   	__aiter__5  s   zAsyncPaginator.__aiter__N)
r   r   r   r=   r   r   r   r   rg   rh   )rg   r   )rg   rX   rg   r   )ru   ry   rz   ro   r   r   r   rk   rk   rk   rn   r     s
    


r   c                   @  r   )BaseAsyncPager   r   r   r   r   r   r=   rg   rh   c                 C  s0   t st| dd d u ri | _|| _|| _|| _d S r   r   )rm   r   r   r   rk   rk   rn   r   B  r   z%BaseAsyncPage._set_private_attributesr   c                 C s2   |   2 z3 d H W }| D ]}|V  qq6 d S rj   r   r   rk   rk   rn   r   O  s   zBaseAsyncPage.__aiter__rm   rX   AsyncIterator[AsyncPageT]c                 C s,   | }	 |V  |  r| I d H }nd S qrj   r   r   rk   rk   rn   r   T  s   zBaseAsyncPage.iter_pagesc                   s<   |   }|std| |}| jj| j| j|dI d H S r   r   r   rk   rk   rn   r   ]  s   
zBaseAsyncPage.get_next_pageN)r   r   r   r   r   r=   rg   rh   r   )rm   rX   rg   r   )rm   rX   rg   rX   )ru   ry   rz   r   r   r   r|   r   r   r   r   rk   rk   rk   rn   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dzddZd{d d!Zd|d%d&Z	d}d+d,Z
d-d.d~d3d4Zdd5d6Zdd8d9Zd-d.dd;d<Zdd@dAZddDdEZddGdHZddJdKZeddMdNZeddPdQZeddSdTZeddVdWZeddXdYZdd\d]Zedd^d_Zedd`daZejddcdaZddedfZddkdlZdddpdqZ	dddtduZ ddvdwZ!ddxdyZ"dS )
BaseClientr   r   rr   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutr   _strict_response_validation
str | None_idempotency_headerNztype[_DefaultStreamT] | None_default_stream_cls)r   r   custom_headerscustom_queryversionbase_url	str | URLfloat | Timeout | Noner   Mapping[str, str] | Noner   Mapping[str, object] | Nonerg   rh   c                C  s\   || _ | t|| _|| _|| _|pi | _|pi | _|| _d | _	d | _
|d u r,t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   _custom_headers_custom_queryr   r   	_platformr   )rm   r   r   r   r   r   r   r   rk   rk   rn   ro   v  s   

zBaseClient.__init__rb   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr   rl   rk   rk   rn   r     s   z"BaseClient._enforce_trailing_slashresponsehttpx.ResponserO   c                 C  s   |j r|jsd }d|j }n)|j }|}zt|}d|j d| }W n ty7   |p4d|j }Y nw | j|||dS )NzError code: z - )bodyr   )		is_closedis_stream_consumedstatus_codetextstriprf   loads	Exception_make_status_error)rm   r   r   err_msgerr_textrk   rk   rn    _make_status_error_from_response  s   

z+BaseClient._make_status_error_from_responser   r   object_exceptions.APIStatusErrorc                C  s   t  rj   )NotImplementedError)rm   r   r   r   rk   rk   rn   r     s   zBaseClient._make_status_errorr   retries_takenr   r=   r   httpx.Headersc          	      C  s   |j pi }tdt|jtrt|jjnt|ji| j|}| || t	
|}| j}|r:|jr:||vr:|j||< dd |D }d|vrKt||d< d|vrmt|jtrX| jn|j}t|trc|j}|d urmt||d< |S )Nzx-stainless-timeoutc                 S  s   g | ]}|  qS rk   )lower).0headerrk   rk   rn   
<listcomp>  s    z-BaseClient._build_headers.<locals>.<listcomp>zx-stainless-retry-countzx-stainless-read-timeout)headers_merge_mappingsr   r   r(   rr   readdefault_headers_validate_headersr   r'   r   idempotency_keyr)   )	rm   r   r   r   headers_dictr   idempotency_headerlower_custom_headersr   rk   rk   rn   _build_headers  s4   

	


zBaseClient._build_headersc                 C  s4   t |}|jr| 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   )rm   rb   	merge_urlmerge_raw_pathrk   rk   rn   _prepare_url  s
   zBaseClient._prepare_urlSSEDecoder | SSEBytesDecoderc                 C     t  S rj   )rL   rv   rk   rk   rn   _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 ur:|d u r%tt	|j}nt
|r0t||j}n
tdt| d| j||d}t| j|j}|d}|j}|d ur|drd	|vrb|d |ryt|srtd
t| d| ||d< |sttt }| |j}	d|	jv rd|	jddi|d< |j dk}
|
rt |t!r||d< n
t"|r|nd |d< ||d< n|dd  |dd  | j#j$d|t |j%t&r| j%n|j%|j|	|r| j'(tt)t*t+f |nd d|S )NzRequest options: %sT)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_sni_hostname-
extensionsgetcontentrf   files)r   r   methodrb   rd   rk   ),rU   isEnabledForloggingDEBUGdebugr;   r   
extra_jsonr   r$   r8   r   r   typer  default_queryrd   r  r  
startswithpopr3   r   _serialize_multipartformr0   ForceMultipartDictr
  rb   hostreplacer  r   r   bytesr6   r   build_requestr   r)   qs	stringifyr   rr   r   )rm   r   r   kwargsr   r   rd   content_typer  prepared_urlis_body_allowedrk   rk   rn   _build_request  sZ   






 
zBaseClient._build_requestr  Mapping[object, object]dict[str, object]c                 C  s^   | j j|dd}i }|D ] \}}||}|s|||< qt|r&|| q||g||< q|S )Nbrackets)array_format)r*  stringify_itemsr  r4   append)rm   r  r   
serializedkeyvalueexistingrk   rk   rn   r$  ;  s   

z#BaseClient._serialize_multipartformcast_totype[ResponseT]c                 C  sD   t |js|S t|j}|tt}t |r ||_ttt |S |S rj   )	r6   r   r   r#  rI   r2   r   r	   r*   )rm   r;  r   r   override_cast_tork   rk   rn   _maybe_override_cast_toY  s   

z"BaseClient._maybe_override_cast_tor   c                 C  s   |j tdkS )Nstream)r   r  rH   rm   r   rk   rk   rn   _should_stream_response_bodyj  s   z'BaseClient._should_stream_response_bodyr*   c             
   C  s   |d u r	t td S |tu rt t|S z,t|r(t|tr(t t|j||dW S | jr5t tt	||dW S t tt
||dW S  tjyR } zt||d|d }~ww )N)r   r  )type_r9  )r   r   )r   r*   r   inspectisclass
issubclassr1   buildr   r>   r?   r   ValidationErrorrR   )rm   r  r;  r   errrk   rk   rn   _process_response_datam  s   

z!BaseClient._process_response_datar!   c                 C  r  rj   r    rv   rk   rk   rn   r*       zBaseClient.qshttpx.Auth | Nonec                 C  ri   rj   rk   rv   rk   rk   rn   custom_auth     zBaseClient.custom_authdict[str, str]c                 C  s   i S rj   rk   rv   rk   rk   rn   auth_headers  rM  zBaseClient.auth_headersdict[str, str | Omit]c                 C  s"   dd| j d|  | j| jS )Nzapplication/json)Acceptr  z
User-Agent)
user_agentplatform_headersrO  r   rv   rk   rk   rn   r     s   zBaseClient.default_headersc                 C  s
   i | j S rj   )r   rv   rk   rk   rn   r!    s   zBaseClient.default_queryr   r'   c                 C     dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nrk   )rm   r   r   rk   rk   rn   r        	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )rt   ru   r   rv   rk   rk   rn   rR    s   zBaseClient.user_agentc                 C  s   | j S rj   )r   rv   rk   rk   rn   r     rJ  zBaseClient.base_url	URL | strc                 C  s"   |  t|tr	|nt|| _d S rj   )r   r   r   r   rl   rk   rk   rn   r     s   "Dict[str, str]c                 C  s   t | j| jdS )N)platform)rS  r   r   rv   rk   rk   rn   rS    s   zBaseClient.platform_headers
max_tokensmax_nonstreaming_tokens
int | Noner(   c                 C  s<   d}d}|| d }||ks|r||krt dt|ddS )Ni  iX  i  zStreaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-python#long-requests for more detailsr_   )connect)r   r(   )rm   rY  rZ  maximum_timedefault_timeexpected_timerk   rk   rn   _calculate_nonstreaming_timeout  s   z*BaseClient._calculate_nonstreaming_timeoutresponse_headersOptional[httpx.Headers]float | Nonec              	   C  s   |du rdS z| dd}t|d W S  ttfy   Y nw | d}zt|W S  ttfy4   Y nw tj|}|du rAd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)rm   ra  retry_ms_headerretry_headerretry_date_tuple
retry_daterk   rk   rn   _parse_retry_after_header  s&   

z$BaseClient._parse_retry_after_headerremaining_retriesre  c           
      C  s~   | | j}| |}|d urd|  k rdkr|S  t|| d}tttd| t}ddt   }|| }	|	dkr=|	S dS )Nr   <   rd  g       @r   g      ?)get_max_retriesr   ro  minrG   powrE   r   )
rm   rp  r   ra  r   retry_after
nb_retriessleep_secondsjitterr   rk   rk   rn   _calculate_retry_timeout  s   
z#BaseClient._calculate_retry_timeoutc                 C  s   |j d}|dkrtd dS |dkrtd dS |jdkr*td	|j dS |jd
kr8td	|j dS |jdkrFtd	|j dS |jdkrTt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  rU   r  r   )rm   r   should_retry_headerrk   rk   rn   _should_retry  s*   






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4rv   rk   rk   rn   _idempotency_key+  s   zBaseClient._idempotency_key)r   rr   r   r   r   r   r   r   r   r   r   r   r   r   rg   rh   )rb   r   rg   r   )r   r   rg   rO   )r   rr   r   r   r   r   rg   r   )r   r=   r   r   rg   r   )rb   rr   rg   r   )rg   r  )r   r=   r   r   rg   r  )r  r1  rg   r2  )r;  r<  r   r=   rg   r<  )r   r  rg   r   )r  r   r;  r<  r   r   rg   r*   )rg   r!   )rg   rK  )rg   rN  )rg   rP  )rg   r2  )r   r'   r   r'   rg   rh   rx   )rg   r   )rb   rV  rg   rh   )rg   rW  )rY  r   rZ  r[  rg   r(   rj   )ra  rb  rg   rc  )rp  r   r   r=   ra  rb  rg   re  )r   r   rg   r   )#ru   ry   rz   r|   r   rF   rD   ro   r   r   r   r  r
  r  r0  r$  r>  rA  rI  propertyr*  rL  rO  r   r!  r   rR  r   setterrS  r`  ro  ry  r}  r  rk   rk   rk   rn   r   l  sd   
 


	
"

U






&
#r   c                         e Zd Zd fddZ  ZS )_DefaultHttpxClientr,  r   rg   rh   c           
        b    dt   dt   dd d vrtjtjdfg}ttdd }|d ur2|tj|df nt	j
dkrFttd	d
}|tj|df ttdd }|d urY|tj|df ttdd }|d url|tj|df dd t  D } fdddD |d< fdd| D }tdi }	| di  | d< |	 d< t jdi   d S )Nr   limitsfollow_redirectsT	transportTCP_KEEPINTVLrq  darwinTCP_KEEPALIVE   TCP_KEEPCNT   TCP_KEEPIDLEc                 S  (   i | ]\}}||d u rd nt |dqS N)rb   r   r   r8  rb   rk   rk   rn   
<dictcomp>H     ( z0_DefaultHttpxClient.__init__.<locals>.<dictcomp>c                      i | ]}| v r| | qS rk   rk   r   argr,  rk   rn   r  J      verifycert	trust_envhttp1http2r  socket_optionsc                   0   i | ]\}}||d u rd nt dd|i qS Nproxyrk   )r   r   r8  r  transport_kwargsrk   rn   r  P      mountsrk   )
setdefaultrD   rJ   socket
SOL_SOCKETSO_KEEPALIVEr   r6  IPPROTO_TCPsysrX  rS   r   r   updater  superro   
rm   r,  r  r  r  r  r  	proxy_mapproxy_mountsdefault_transportrt   r,  r  rn   ro   0  <   


z_DefaultHttpxClient.__init__r,  r   rg   rh   ru   ry   rz   ro   __classcell__rk   rk   r  rn   r  /      r  c                   @     e Zd ZdddZdS )SyncHttpxClientWrapperrg   rh   c                 C  s.   | j rd S z|   W d S  ty   Y d S w rj   )r   closer   rv   rk   rk   rn   __del__m  s   zSyncHttpxClientWrapper.__del__Nrg   rh   ru   ry   rz   r  rk   rk   rk   rn   r  l      r  c                      s  e Zd ZU ded< dZded< eeddddd fddZdddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zedd:d;Zed<d=dd@d;Zed<ddAddDd;Zd<ddAddFd;ZddJdKZdLdMddPdQZddWdXZei d<dYdd\d]Zei d^dd`d]Zei ddaddbd]Zi d<ddcdddd]Zedi dd<deddjdkZedi ddlddmdkZedi dddnddodkZdi dd<ddpddqdkZdi drddsdtZddi duddvdwZdi drddxdyZdi dzd{dd}d~Z  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   http_clientr   r   r   rr   r   r   r   r   r   !float | Timeout | None | NotGivenr  httpx.Client | Noner   r   r   r   r   r   rg   rh   c          	   	     s   t |s|r|jtkr|j}nt}|d ur$t|tjs$t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   )r6   r   HTTPX_DEFAULT_TIMEOUTrD   r   r   Clientr   r   r  ro   r   r(   r  r   )	rm   r   r   r   r   r  r   r   r   r  rk   rn   ro   {  s*   
zSyncAPIClient.__init__c                 C     | j jS rj   r   r   rv   rk   rk   rn   r        zSyncAPIClient.is_closedc                 C  s   t | dr| j  dS dS )`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        r   N)hasattrr   r  rv   rk   rk   rn   r    s   
zSyncAPIClient.closerm   rY   c                 C  s   | S rj   rk   rv   rk   rk   rn   	__enter__  r   zSyncAPIClient.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rj   r  rm   r  r  r  rk   rk   rn   __exit__  s   zSyncAPIClient.__exit__r   r=   c                 C  s   |S z#Hook for mutating the given optionsrk   rm   r   rk   rk   rn   _prepare_options  rp   zSyncAPIClient._prepare_optionsr   r  c                 C  rT  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.
        Nrk   r@  rk   rk   rn   _prepare_request  rU  zSyncAPIClient._prepare_requestr;  Type[ResponseT]r?  Literal[True]
stream_clsType[_StreamT]r\   c                C  ri   rj   rk   rm   r;  r   r?  r  rk   rk   rn   r        zSyncAPIClient.requestFr?  Literal[False]r*   c                C  ri   rj   rk   rm   r;  r   r?  rk   rk   rn   r     s   r?  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  ri   rj   rk   r  rk   rk   rn   r     r  type[_StreamT] | Nonec                C  s  |  ||}t|}|jd u r|j dkr|  |_d }|| j}d}t|d D ]}t|}| 	|}|| }	| j
||d}
| |
 i }| jd urS| j|d< |jd ur]|j|d< td|
j|
j d }z| jj|
fd|pv| j|
d	i|}W nb tjy } z%tjd
dd |	dkr| j|||d d W Y d }~q+td t|
d	|d }~w ty } z%tjddd |	dkr| j|||d d W Y d }~q+td t|
d	|d }~ww td|
j|
j|j|j|j td|jd z|  W nK tjyI } z=tjddd |	dkr/|  |j!r/|j!"  | j||||d W Y d }~q+|j!j#s9|j!$  td | %|j!d d }~ww  |d usTJ 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request_id: %sz
request-idz!Encountered httpx.HTTPStatusErrorzRe-raising status errorz0could not resolve response (should never happen))r;  r   r   r?  r  r   )'r>  r:   r  r  r   r  rr  r   ranger  r0  r  rL  r  rU   r  rb   r   sendrA  r   TimeoutException_sleep_for_retryrP   r   rQ   r   reason_phraser   r  raise_for_statusHTTPStatusErrorr}  r   r  r   r   r   _process_responserm   r;  r   r?  r  input_optionsr   r   r   rp  r   r,  rH  rk   rk   rn   r     s   













r   r   httpx.Response | Nonec                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)rU   r  ry  r   r   rb   rj  sleeprm   r   r   r   r   rp  r   rk   rk   rn   r  h  s   zSyncAPIClient._sleep_for_retryr   r   r   1type[Stream[Any]] | type[AsyncStream[Any]] | Nonec          
      C  s   |j jtdkrttt|| |||||dS t|p|}t	|rVt
|trV|r2t|j jtrVt
|tsAtdt d| td|}tt||| t|||||dS |tjkr`tt|S t|| td|||||d}	t|j jtr|tt|	S |	 S )Nrz  rawr   r;  r?  r  r   r   !API Response types must subclass ; Received type[BaseAPIResponse[Any]]r<  )r   r   r  rH   r   r*   rT   r   rC  rD  rE  rA   r   r@   r   rC   r   Responseparse
rm   r;  r   r   r?  r  r   originresponse_clsapi_responserk   rk   rn   r  v  sf   




	
zSyncAPIClient._process_responser   Type[object]r   Type[SyncPageT]rV   c                   s(   d fdd}|_ j|ddS )	Nr   rV   rg   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   rm   rk   rn   r     s   z0SyncAPIClient._request_api_list.<locals>._parserFr  )r   rV   rg   rV   )r   r   )rm   r   r   r   r   rk   r  rn   r     s   zSyncAPIClient._request_api_listr   r?  pathr/   c                C  ri   rj   rk   rm   r  r;  r   r?  rk   rk   rn   r    r  zSyncAPIClient.getr   type[_StreamT]c                C  ri   rj   rk   rm   r  r;  r   r?  r  rk   rk   rn   r    rU  r   r  c                C  ri   rj   rk   r  rk   rk   rn   r    rU  r   r?  r  c                C  s.   t jdd|d|}tt| j||||dS Nr  )r  rb   r  rk   )r=   	constructr   r*   r   rm   r  r;  r   r?  r  optsrk   rk   rn   r    s   	)r   r   r  r?  r   Body | Noner  RequestFiles | Nonec                C  ri   rj   rk   )rm   r  r;  r   r   r  r?  rk   rk   rn   post  s   
zSyncAPIClient.post)r   r   r  c                C  ri   rj   rk   rm   r  r;  r   r   r  r?  r  rk   rk   rn   r       )r   r   r  r  c                C  ri   rj   rk   r  rk   rk   rn   r    r  )r   r   r  r?  r  c          	      C  s6   t jdd||t|d|}tt| j||||dS Nr  r  rb   r   r  r  rk   )r=   r  r"   r   r*   r   )	rm   r  r;  r   r   r  r?  r  r  rk   rk   rn   r     s   r   r   c                C  $   t jdd||d|}| ||S Npatchr  rb   r   rk   r=   r  r   rm   r  r;  r   r   r  rk   rk   rn   r"  0     zSyncAPIClient.patchr   r  r   c                C  s*   t jdd||t|d|}| ||S Nputr  rk   )r=   r  r"   r   rm   r  r;  r   r  r   r  rk   rk   rn   r)  ;  s   	zSyncAPIClient.putc                C  r   Ndeleter#  rk   r$  r%  rk   rk   rn   r,  I  r&  zSyncAPIClient.deleter  r   r   r  r  c                C  &   t jd|||d|}| |||S Nr#  rk   r=   r  r   rm   r  r   r   r   r   r  r  rk   rk   rn   get_api_listT     
zSyncAPIClient.get_api_list)r   rr   r   r   r   r   r   r  r  r  r   r   r   r   r   r   rg   rh   r   r  rm   rY   rg   rY   r  r  r  r  r  r  rg   rh   r   r=   rg   r=   r   r  rg   rh   )
r;  r  r   r=   r?  r  r  r  rg   r\   r;  r  r   r=   r?  r  rg   r*   )
r;  r  r   r=   r?  r   r  r  rg   r  )
r;  r  r   r=   r?  r   r  r  rg   r  
r   r   r   r   r   r=   r   r  rg   rh   r;  r  r   r=   r   r   r?  r   r  r  r   r   rg   r*   )r   r	  r   r
  r   r=   rg   rV   
r  rr   r;  r  r   r/   r?  r  rg   r*   )r  rr   r;  r  r   r/   r?  r  r  r  rg   r\   )r  rr   r;  r  r   r/   r?  r   r  r  rg   r  )r  rr   r;  r  r   r  r   r/   r  r  r?  r  rg   r*   )r  rr   r;  r  r   r  r   r/   r  r  r?  r  r  r  rg   r\   )r  rr   r;  r  r   r  r   r/   r  r  r?  r   r  r  rg   r  
r  rr   r;  r  r   r  r   r/   rg   r*   r  rr   r;  r  r   r  r  r  r   r/   rg   r*   )r  rr   r   r	  r   r
  r   r  r   r/   r  rr   rg   rV   )ru   ry   rz   r|   r   rF   r2   ro   r   r  r  r  r  r  r   r   r  r  r   r  r  r"  r)  r,  r2  r  rk   rk   r  rn   r   w  s   
 
.





	
x
D	
r   c                      r  )_DefaultAsyncHttpxClientr,  r   rg   rh   c           
        r  )Nr   r  r  Tr  r  rq  r  r  r  r  r  r  c                 S  r  r  r  r  rk   rk   rn   r  {  r  z5_DefaultAsyncHttpxClient.__init__.<locals>.<dictcomp>c                   r  rk   rk   r  r  rk   rn   r  }  r  r  r  c                   r  r  )r   r  r  rk   rn   r    r  r  rk   )r  rD   rJ   r  r  r  r   r6  r  r  rX  rS   r   r   r  r  r  ro   r  r  r  rn   ro   c  r  z!_DefaultAsyncHttpxClient.__init__r  r  rk   rk   r  rn   r>  b  r  r>  c                   @  s   e Zd ZdddZdS )	_DefaultAioHttpClient_kwargsr   rg   rh   c                 K  s   t d)NzVTo use the aiohttp client you must have installed the package with the `aiohttp` extra)r   )rm   r@  rk   rk   rn   ro     r  _DefaultAioHttpClient.__init__N)r@  r   rg   rh   )ru   ry   rz   ro   rk   rk   rk   rn   r?    r  r?  c                      r  )r?  r,  r   rg   rh   c                   s:   | dt | dt | dd t jdi | d S )Nr   r  r  Trk   )r  rD   rJ   r  ro   )rm   r,  r  rk   rn   ro     s   rA  r  r  rk   rk   r  rn   r?    r  c                   @  r  )AsyncHttpxClientWrapperrg   rh   c                 C  s8   | j rd S zt |   W d S  ty   Y d S w rj   )r   asyncioget_running_loopcreate_taskacloser   rv   rk   rk   rn   r    s   zAsyncHttpxClientWrapper.__del__Nr  r  rk   rk   rk   rn   rB    r  rB  c                      s  e Zd ZU ded< dZded< eeddddd} fddZd~ddZdddZ	dd!d"Z
dd)d*Zdd-d.Zdd1d2Zed3d4dd:d;Zedd@d;ZeddAddDd;Zd3ddEddFd;ZddJdKZdLdMddPdQZddWdXZei d3dYdd\d]Zei d^dd_d]Zei dd`ddad]Zi d3ddbddcd]Zeddi d3ddddidjZeddi dkddldjZeddi ddmddndjZddi d3ddoddpdjZdi dqddrdsZddi dkddtduZdi dqddvdwZdi dxdydd{d|Z  ZS )r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   r  r   rr   r   r   r   r   r   r   r   r  r  httpx.AsyncClient | Noner   r   r   r   rg   rh   c          	   	     s   t |s|r|jtkr|j}nt}|d ur$t|tjs$t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   r  )r6   r   r  rD   r   r   AsyncClientr   r   r  ro   r   r(   rB  r   )	rm   r   r   r   r   r   r  r   r   r  rk   rn   ro     s*   
zAsyncAPIClient.__init__c                 C  r  rj   r  rv   rk   rk   rn   r     r  zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )r  N)r   rF  rv   rk   rk   rn   r    s   zAsyncAPIClient.closerm   rY   c                   s   | S rj   rk   rv   rk   rk   rn   
__aenter__  s   zAsyncAPIClient.__aenter__r  r  r  r  r  r  c                   s   |   I d H  d S rj   r  r  rk   rk   rn   	__aexit__   s   zAsyncAPIClient.__aexit__r   r=   c                   s   |S r  rk   r  rk   rk   rn   r    s   zAsyncAPIClient._prepare_optionsr   r  c                   s   dS r  rk   r@  rk   rk   rn   r       	zAsyncAPIClient._prepare_requestFr  r;  r  r?  r  r*   c                     d S rj   rk   r  rk   rk   rn   r     s   zAsyncAPIClient.requestr  r  type[_AsyncStreamT]r]   c                  rL  rj   rk   r  rk   rk   rn   r   #     )r  type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  rL  rj   rk   r  rk   rk   rn   r   -  rN  r  c                  s  | j d u rtt I d H | _ | ||}t|}|jd u r*|j dkr*|  |_d }|	| j
}d}t|d D ]6}t|}| |I d H }|| }	| j||d}
| |
I d H  i }| jd urh| j|d< |jd urr|j|d< td|
j|
j d }z| jj|
fd|p| j|
d	i|I d H }W nh tjy } z(tjd
dd |	dkr| j|||d dI d H  W Y d }~q:td t|
d	|d }~w ty } z(tjddd |	dkr| j|||d dI d H  W Y d }~q:td t|
d	|d }~ww td|
j|
j|j|j|j td|j d z|!  W nT tj"yp } zFtjddd |	dkrS| #|j$rS|j$% I d H  | j||||dI d H  W Y d }~q:|j$j&s`|j$' I d H  td | (|j$d d }~ww  |d us{J d| j)||||||dI d H S r  )*r   r5   get_platformr>  r:   r  r  r   r  rr  r   r  r  r0  r  rL  r  rU   r  rb   r   r  rA  r   r  r  rP   r   rQ   r   r  r   r  r  r  r}  r   rF  r   areadr   r  r  rk   rk   rn   r   7  s   









r   r   r  c                  sf   || }|dkrt d nt d| | |||r|jnd }t d|j| t|I d H  d S r  )rU   r  ry  r   r   rb   anyior  r  rk   rk   rn   r    s   zAsyncAPIClient._sleep_for_retryr   r   r   r  c          
        s  |j jtdkrttt|| |||||dS t|p|}t	|rWt
|trW|r3t|j jtrWt
|tsBtdt d| td|}td||| t|||||dS |tjkratt|S t|| td|||||d}	t|j jtr}tt|	S |	 I d H S )Nrz  r  r   r  r  r*   r<  )r   r   r  rH   r   r*   rT   r   rC  rD  rE  rA   r   rB   r   rC   r   r  r  r  rk   rk   rn   r    sh   




	
z AsyncAPIClient._process_responser   r   r   r   AsyncPaginator[_T, AsyncPageT]c                 C  s   t | |||dS )N)r   r   r   r   )r   )rm   r   r   r   rk   rk   rn   r     s   z AsyncAPIClient._request_api_listr  r  r/   c                  rL  rj   rk   r  rk   rk   rn   r    rN  zAsyncAPIClient.getr  c                  rL  rj   rk   r  rk   rk   rn   r    rK  r  c                  rL  rj   rk   r  rk   rk   rn   r  #  rK  r  c                  s0   t jdd|d|}| j||||dI d H S r  r$  r  rk   rk   rn   r  .  s   	)r   r  r   r?  r   r  r  r  c                  rL  rj   rk   )rm   r  r;  r   r  r   r?  rk   rk   rn   r  :  s   
zAsyncAPIClient.postr'  c                  rL  rj   rk   rm   r  r;  r   r  r   r?  r  rk   rk   rn   r  F     )r   r  r   r  c                  rL  rj   rk   rU  rk   rk   rn   r  S  rV  )r   r  r   r?  r  c          	        s>   t jdd||t|I d H d|}| j||||dI d H S r  r=   r  r#   r   )	rm   r  r;  r   r  r   r?  r  r  rk   rk   rn   r  `  s   r  c                  ,   t jdd||d|}| ||I d H S r!  r$  r%  rk   rk   rn   r"  p     zAsyncAPIClient.patchc                  s8   t jdd||t|I d H d|}| ||I d H S r(  rW  r*  rk   rk   rn   r)  {  s   	zAsyncAPIClient.putc                  rX  r+  r$  r%  rk   rk   rn   r,    rY  zAsyncAPIClient.deleter  r-  r  c                C  r.  r/  r0  r1  rk   rk   rn   r2    r3  zAsyncAPIClient.get_api_list)r   rr   r   r   r   r   r   r   r   r  r  rG  r   r   r   r   rg   rh   r   r  r4  r5  r6  r7  r8  )
r;  r  r   r=   r?  r  r  rM  rg   r]   )
r;  r  r   r=   r?  r   r  rO  rg   rP  r9  r:  )r   r   r   r   r   r=   rg   rT  r;  )r  rr   r;  r  r   r/   r?  r  r  rM  rg   r]   )r  rr   r;  r  r   r/   r?  r   r  rO  rg   rP  )r  rr   r;  r  r   r  r  r  r   r/   r?  r  rg   r*   )r  rr   r;  r  r   r  r  r  r   r/   r?  r  r  rM  rg   r]   )r  rr   r;  r  r   r  r  r  r   r/   r?  r   r  rO  rg   rP  r<  r=  )r  rr   r   r   r   r   r   r  r   r/   r  rr   rg   rT  )ru   ry   rz   r|   r   rF   r2   ro   r   r  rI  rJ  r  r  r   r   r  r  r   r  r  r"  r)  r,  r2  r  rk   rk   r  rn   r     s   
 
.




	
}
D	
r   )queryextra_headersextra_query
extra_bodyr  r   r   rZ  Query | Noner[  Headers | Noner\  r]  r  r  r   r   'float | httpx.Timeout | None | NotGivenr   PostParser | NotGivenrg   r/   c                 C  s   i }|dur
||d< |durt t||d< | dur| |d< |dur-i |di ||d< t|ts6||d< |dur>||d< t|rF||d< |S )zECreate a dict of type RequestOptions without keys of NotGiven values.Nr   r  rd   r   r  r   )r   r+   r  r   r)   r6   )rZ  r[  r\  r]  r  r   r   r   rk   rk   rn   make_request_options  s    
rb  c                   @  r  )r%  rg   r   c                 C  rT  )NTrk   rv   rk   rk   rn   __bool__  r   zForceMultipartDict.__bool__Nr   )ru   ry   rz   rc  rk   rk   rk   rn   r%    r  r%  c                   @  $   e Zd Zd
ddZedddZd	S )OtherPlatformnamerr   rg   rh   c                 C  
   || _ d S rj   rf  rm   rf  rk   rk   rn   ro        
zOtherPlatform.__init__c                 C     d| j  S )NzOther:rh  rv   rk   rk   rn   __str__     zOtherPlatform.__str__Nrf  rr   rg   rh   rx   ru   ry   rz   ro   r   rl  rk   rk   rk   rn   re        
re  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformc                  C  s   zt   } t    }W n
 ty   Y dS w d|v s!d|v r#dS | dkr)dS | dkr/dS d	|v r5d
S | dkrKt }|dkrCdS |dkrIdS dS |rQt|S dS )Nrx  iphoneipadrv  r  rq  windowsrs  androidrw  linuxfreebsdrt  openbsdru  rr  )rX  systemr   r   distroidre  )r  platform_name	distro_idrk   rk   rn   rQ    s0   rQ  )maxsizer   rr   rX  Platform | NonerW  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)rr   rQ  get_architectureget_python_runtimeget_python_version)r   rX  rk   rk   rn   rS    s   rS  c                   @  rd  )	OtherArchrf  rr   rg   rh   c                 C  rg  rj   rh  ri  rk   rk   rn   ro     rj  zOtherArch.__init__c                 C  rk  )Nzother:rh  rv   rk   rk   rn   rl    rm  zOtherArch.__str__Nrn  rx   ro  rk   rk   rk   rn   r    rp  r  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w Nr  )rX  python_implementationr   rk   rk   rk   rn   r  &  
   
r  c                   C  r  r  )rX  python_versionr   rk   rk   rk   rn   r  -  r  r  Archc                  C  sh   zt   } W n
 ty   Y dS w | dv rdS | dkrdS | dkr%dS tjdkr,dS | r2t| S dS )	Nr  )r  aarch64r  r  x86_64r  l        r  )rX  machiner   r   r  r  r  )r  rk   rk   rn   r  4  s    
r  obj1Mapping[_T_co, Union[_T, Omit]]obj2Dict[_T_co, _T]c                 C  s   i | |}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 rk   )r   r%   )r   r8  r9  rk   rk   rn   r  W  s     z#_merge_mappings.<locals>.<dictcomp>)r   )r  r  mergedrk   rk   rn   r   N  s   r   )rZ  r^  r[  r_  r\  r^  r]  r  r  r   r   r`  r   ra  rg   r/   )rg   ry  )r   rr   rX  r  rg   rW  rx   )rg   r  )r  r  r  r  rg   r  )
__future__r   r  rf   rj  r~  rf  r  rC  rC  r  rX  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   typing_extensionsr   r   r   rS  r   r  r   r   r   r   r   r    r   _qsr!   _filesr"   r#   _typesr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   _utilsr3   r4   r5   r6   r7   r8   _compatr9   r:   r;   _modelsr<   r=   r>   r?   	_responser@   rA   rB   rC   
_constantsrD   rE   rF   rG   rH   rI   rJ   
_streamingrK   rL   rM   rN   rO   rP   rQ   rR   _utils._httpxrS   _legacy_responserT   	getLoggerru   rU   r|   rV   rX   rY   rZ   r\   r]   httpx._configr^   r  ImportErrorr`   r}   r   r   r   r  rH  r   r   r   r  DefaultHttpxClientr  r   r>  httpx_aiohttpr?  HttpxAiohttpClientDefaultAsyncHttpxClientDefaultAioHttpClientrB  r   rb  rr   r%  re  ry  rQ  rS  r  r  r  r  r  r   rk   rk   rk   rn   <module>   s    LD $	3=1')   F1   n1	   f%	
*	


