o
    j                     @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  d dl!m"Z"m#Z#m$Z$ d dl%Z%d dl&Z&d dl'Z'd dl(Z(d dl&m)Z)m*Z* d d	l(m+Z+ d
dl,m-Z- d
dl.m/Z/ d
dl0m1Z1m2Z2 d
dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d
dlEmFZFmGZGmHZHmIZI d
dlJmKZKmLZL d
dlMmNZNmOZOmPZPmQZQ d
dlRmSZSmTZTmUZUmVZV d
dlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ d
dl_m`Z`maZambZbmcZc d
dl-mdZdmeZemfZfmgZg d
dlhmiZi ejekZldemd< edddZnedddZoedZpedd d!Zqed"e`e dZred#ebe dZserZd d$ltmuZv nzd d$ltmuZv W n ewyp   e9d%ZvY nw G d&d' d'ZxG d(d) d)eNeep ZyG d*d+ d+eyep eep ZzG d,d- d-eepeof Z{G d.d/ d/eyep eep Z|ed0ee&j}e&j~f dZed1ee`e ebe f dZG d2d3 d3eeef ZG d4d5 d5e&j}ZG d6d7 d7ee&j}e`e f ZG d8d9 d9e&j~ZG d:d; d;ee&j~ebe f Zddddde4e4d<djdLdMZG dNdO dOZeee"dP f ZdkdRdSZe ddTdldXdYZG dZd[ d[Zeee"d\ f Zdmd]d^Zdmd_d`ZdndbdcZdodhdiZdS )p    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)	lru_cache)Literaloverride
get_origin)URLLimits)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)	NOT_GIVENBodyOmitQueryHeadersTimeoutNotGiven	ResponseT	Transport
AnyMapping
PostParserProxiesTypesRequestFilesHttpxSendArgsAsyncTransportRequestOptionsModelBuilderProtocol)is_dictis_listis_given
is_mapping)
model_copy
model_dump)GenericModelFinalRequestOptionsvalidate_typeconstruct_type)APIResponseBaseAPIResponseAsyncAPIResponseextract_response_type)DEFAULT_LIMITSDEFAULT_TIMEOUTMAX_RETRY_DELAYDEFAULT_MAX_RETRIESINITIAL_RETRY_DELAYRAW_RESPONSE_HEADEROVERRIDE_CAST_TO_HEADER)Stream
SSEDecoderAsyncStreamSSEBytesDecoder)APIStatusErrorAPITimeoutErrorAPIConnectionErrorAPIResponseValidationError)LegacyAPIResponsezlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIGg      @c                   @  sP   e Zd ZU dZded< ded< edd	d
Zeddd
Ze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.
    URL | NotGivenurlQuery | NotGivenparamsr   returnNonec                C     d S N selfr\   rc   rc   Y/var/www/html/fyndo/pharma/fyndo/venv/lib/python3.10/site-packages/openai/_base_client.py__init__{      zPageInfo.__init__r$   c                C  ra   rb   rc   )re   r^   rc   rc   rf   rg      rh   r\   r^   c                C  s   || _ || _d S rb   ri   )re   r\   r^   rc   rc   rf   rg      s   
N)r\   r   r_   r`   )r^   r$   r_   r`   )r\   r[   r^   r]   r_   r`   )__name__
__module____qualname____doc____annotations__r   rg   r!   rc   rc   rc   rf   rZ   r   s   
 
rZ   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
    r9   _optionsType[_T]_modelr_   boolc                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)re   itemsrc   rc   rf   has_next_page   s   zBasePage.has_next_pageOptional[PageInfo]c                 C  ra   rb   rc   re   rc   rc   rf   ru         zBasePage.next_page_infoIterable[_T]c                 C  ra   rb   rc   ry   rc   rc   rf   rt      rz   zBasePage._get_page_itemsr\   r   httpx.QueryParamsc                 C  s   t tt| jj|jS rb   )httpxQueryParamsr   r   rp   r^   mergerd   rc   rc   rf   _params_from_url   s   zBasePage._params_from_urlinforZ   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d)N)r^   zUnexpected PageInfo state)r6   rp   _strip_raw_response_header
isinstancer^   r'   r\   r   	copy_withdictstr
ValueError)re   r   optionsr^   r\   rc   rc   rf   _info_to_options   s   

zBasePage._info_to_optionsNr_   rs   )r_   rx   )r_   r{   )r\   r   r_   r|   )r   rZ   r_   r9   )rj   rk   rl   rm   r   rp   rn   rr   rw   ru   rt   r   r   rc   rc   rc   rf   ro      s   
 



ro   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modelrq   r   r9   r_   r`   c                 C  s   || _ || _|| _d S rb   rr   r   rp   )re   r   r   r   rc   rc   rf   _set_private_attributes      
z$BaseSyncPage._set_private_attributesIterator[_T]c                 c  s(    |   D ]}| D ]}|V  qqd S rb   
iter_pagesrt   re   pageitemrc   rc   rf   __iter__   s   zBaseSyncPage.__iter__re   rQ   Iterator[SyncPageT]c                 c  s&    | }	 |V  |  r| }nd S qrb   rw   get_next_pagere   r   rc   rc   rf   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   ru   RuntimeErrorr   r   _request_api_listrr   	__class__re   r   r   rc   rc   rf   r      s   
zBaseSyncPage.get_next_pageN)r   r   r   rq   r   r9   r_   r`   )r_   r   )re   rQ   r_   r   )re   rQ   r_   rQ   )rj   rk   rl   pydanticr   r   rn   r   r   r   r   rc   rc   rc   rf   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   r9   page_clsType[AsyncPageT]r   rq   r_   r`   c                 C  s   || _ || _|| _|| _d S rb   )rr   r   rp   	_page_cls)re   r   r   r   r   rc   rc   rf   rg      s   
zAsyncPaginator.__init__ Generator[Any, None, AsyncPageT]c                 C  s   |    S rb   )	_get_page	__await__ry   rc   rc   rf   r     s   zAsyncPaginator.__await__rS   c                   s0   d fdd}| j _ j j j I d H S )NresprS   r_   c                   s   | j  j j jd | S )N)r   r   r   )r   rr   rp   r   r   ry   rc   rf   _parser  s   z)AsyncPaginator._get_page.<locals>._parser)r   rS   r_   rS   )rp   post_parserr   requestr   )re   r   rc   ry   rf   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 rb   )r   rS   r   rc   rc   rf   	__aiter__  s   zAsyncPaginator.__aiter__N)
r   r   r   r9   r   r   r   rq   r_   r`   )r_   r   )r_   rS   r_   r   )rj   rk   rl   rg   r   r   r   rc   rc   rc   rf   r      s
    


r   c                   @  r   )BaseAsyncPager   r   r   rq   r   r   r9   r_   r`   c                 C  s   || _ || _|| _d S rb   r   )re   r   r   r   rc   rc   rf   r     r   z%BaseAsyncPage._set_private_attributesr   c                 C s2   |   2 z3 d H W }| D ]}|V  qq6 d S rb   r   r   rc   rc   rf   r   (  s   zBaseAsyncPage.__aiter__re   rS   AsyncIterator[AsyncPageT]c                 C s,   | }	 |V  |  r| I d H }nd S qrb   r   r   rc   rc   rf   r   -  s   zBaseAsyncPage.iter_pagesc                   s<   |   }|std| |}| jj| j| j|dI d H S r   r   r   rc   rc   rf   r   6  s   
zBaseAsyncPage.get_next_pageN)r   rq   r   r   r   r9   r_   r`   r   )re   rS   r_   r   )re   rS   r_   rS   )rj   rk   rl   r   r   r   rn   r   r   r   r   rc   rc   rc   rf   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ed< ded< ded< dZded< eedddd{d&d'Zd|d)d*Zd}d.d/Z	d~d4d5Z
dd:d;Zdd=d>Zdd?d@ZddBdCZddEdFZddJdKZddNdOZddQdRZddTdUZeddWdXZeddZd[Zedd]d^Zedd`daZddddeZeddfdgZeddhdiZejddkdiZddmdnZdddrdsZ	dddudvZddwdxZ ddydzZ!dS )
BaseClientr   r   r   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeouthttpx.Limits_limitsProxiesTypes | None_proxies!Transport | AsyncTransport | None
_transportrs   _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 | Nonelimits	transportproxiesr   Mapping[str, str] | Noner   Mapping[str, object] | Noner_   r`   c       
         C  sX   || _ | t|| _|| _|| _|| _|| _|| _|	pi | _	|
p"i | _
|| _d | _d S rb   )r   _enforce_trailing_slashr   r   r   r   r   r   r   _custom_headers_custom_queryr   r   )re   r   r   r   r   r   r   r   r   r   r   rc   rc   rf   rg   R  s   


zBaseClient.__init__r\   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithr   rd   rc   rc   rf   r   l  s   z"BaseClient._enforce_trailing_slashresponsehttpx.ResponserK   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stripjsonloads	Exception_make_status_error)re   r   r   err_msgerr_textrc   rc   rf    _make_status_error_from_responseq  s   

z+BaseClient._make_status_error_from_responser   r   object_exceptions.APIStatusErrorc                C  s   t  rb   )NotImplementedError)re   r   r   r   rc   rc   rf   r     s   zBaseClient._make_status_errorremaining_retriesOptional[int]r   r9   c                 C  s   |d ur|S | | jS rb   )get_max_retriesr   )re   r   r   rc   rc   rf   _remaining_retries  s   zBaseClient._remaining_retrieshttpx.Headersc                 C  sb   |j pi }t| j|}| || t|}| j}|r/|j dkr/||vr/|j	p,| 
 ||< |S )Nget)headers_merge_mappingsdefault_headers_validate_headersr}   r%   r   methodloweridempotency_key_idempotency_key)re   r   r   headers_dictr   idempotency_headerrc   rc   rf   _build_headers  s   

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   )re   r\   	merge_urlmerge_raw_pathrc   rc   rf   _prepare_url  s
   zBaseClient._prepare_urlSSEDecoder | SSEBytesDecoderc                 C     t  S rb   )rH   ry   rc   rc   rf   _make_sse_decoder  s   zBaseClient._make_sse_decoderhttpx.Requestc                 C  sH  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| |}t| j|j}|d}|d urt|drtd|vr]|d |rtt|smtd	t| d
| ||d< | jjd|t|jtr| jn|j|j| |j|r| j tt!t"t#f |nd ||j$d|S )NzRequest options: %sT)exclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`Content-Typezmultipart/form-databoundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.data)r   r   r   r\   r^   r   filesrc   )%rP   isEnabledForloggingDEBUGdebugr7   	json_data
extra_jsonr   r"   r5   r   r   typer   r   r^   r   
startswithpopr2   	TypeError_serialize_multipartformr   build_requestr   r   r'   r   r  r\   qs	stringifyr   r   r   r  )re   r   kwargsr  r   r^   content_typerc   rc   rf   _build_request  sB   




 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   r3   append)re   r  rv   
serializedkeyvalueexistingrc   rc   rf   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 rb   )	r4   r   r   r  rF   r!   r   r   r(   )re   r(  r   r   override_cast_torc   rc   rf   _maybe_override_cast_to  s   

z"BaseClient._maybe_override_cast_tor   c                 C  s   |j tdkS )Nstream)r   r   rE   re   r   rc   rc   rf   _should_stream_response_body  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_r&  )r   r   )r   r(   r   inspectisclass
issubclassr1   buildr   r:   r;   r   ValidationErrorrN   )re   r  r(  r   errrc   rc   rf   _process_response_data!  s   

z!BaseClient._process_response_datar   c                 C  r  rb   r   ry   rc   rc   rf   r  9     zBaseClient.qshttpx.Auth | Nonec                 C  ra   rb   rc   ry   rc   rc   rf   custom_auth=     zBaseClient.custom_authdict[str, str]c                 C  s   i S rb   rc   ry   rc   rc   rf   auth_headersA  r:  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_headersr<  r   ry   rc   rc   rf   r   E  s   zBaseClient.default_headersr   r%   c                 C     dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nrc   )re   r   r   rc   rc   rf   r   P     	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )r   rj   r   ry   rc   rc   rf   r?  [  s   zBaseClient.user_agentc                 C  s   | j S rb   )r   ry   rc   rc   rf   r   _  r7  zBaseClient.base_url	URL | strc                 C  s"   |  t|tr	|nt|| _d S rb   )r   r   r   r   rd   rc   rc   rf   r   c  s   "Dict[str, str]c                 C  s
   t | jS rb   )r@  r   ry   rc   rc   rf   r@  g     
zBaseClient.platform_headers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-msi  zretry-after)	r   floatr  r   emailutilsparsedate_tz	mktime_tztime)re   rF  retry_ms_headerretry_headerretry_date_tuple
retry_daterc   rc   rf   _parse_retry_after_headerj  s&   

z$BaseClient._parse_retry_after_headerrI  c           
      C  sx   | | j}| |}|d urd|  k rdkr|S  || }tttd| t}ddt   }|| }	|	dkr:|	S dS )Nr   <   g       @r   g      ?)r   r   rS  minrD   powrB   r   )
re   r   r   rF  r   retry_after
nb_retriessleep_secondsjitterr   rc   rc   rf   _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   rP   r  r   )re   r   should_retry_headerrc   rc   rf   _should_retry  s*   






zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4ry   rc   rc   rf   r     s   zBaseClient._idempotency_key)r   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   r`   )r\   r   r_   r   )r   r   r_   rK   )r   r   r   r   r   r   r_   r   )r   r   r   r9   r_   r   )r   r9   r_   r   )r\   r   r_   r   )r_   r  )r   r9   r_   r  )r  r  r_   r  )r(  r)  r   r9   r_   r)  )r   r  r_   rs   )r  r   r(  r)  r   r   r_   r(   )r_   r   )r_   r8  )r_   r;  )r_   r=  )r   r%   r   r%   r_   r`   r_   r   )r_   r   )r\   rC  r_   r`   )r_   rD  rb   )rF  rG  r_   rH  )r   r   r   r9   rF  rG  r_   rI  )r   r   r_   rs   )"rj   rk   rl   rn   r   rC   rA   rg   r   r   r   r   r   r  r  r  r  r+  r.  r6  propertyr  r9  r<  r   r   r?  r   setterr@  rS  r[  r_  r   rc   rc   rc   rf   r   E  sd   
 



	




:





&
#r   c                   @     e Zd ZdddZdS )SyncHttpxClientWrapperr_   r`   c                 C  s$   z|    W d S  ty   Y d S w rb   )closer   ry   rc   rc   rf   __del__  s
   zSyncHttpxClientWrapper.__del__Nr_   r`   rj   rk   rl   rh  rc   rc   rc   rf   rf        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 fdd Zdd!d"Zdd#d$Z	dd'd(Z
dd/d0Zdd3d4Zdd7d8Ze	dddBdCZe	ddDdEddHdCZe	ddDddIddLdCZ	ddDddIddNdCZddPdQZddTdUZddYdZZdd`daZei dDdbddedfZei dgddidfZei ddjddkdfZi dDddlddmdfZedi ddDdnddsdtZedi dduddvdtZedi dddwddxdtZdi ddDddyddzdtZdi d{dd|d}Zddi d~dddZdi d{dddZdi dddddZ  ZS )r   zhttpx.Clientr   Nztype[Stream[Any]] | Noner   r   r   r   r   r   http_clientr   r   r   r   r   r   r   r   r   !float | Timeout | None | NotGivenr   Transport | Noner   r   r   Limits | Nonerm  httpx.Client | Noner   r   r   r   r   rs   r_   r`   c                  s  |d urt jdtdd |d urtdnt}|d ur+t jdtdd |d ur+td|d ur?t jdtdd |d ur?tdt|sP|rN|jtkrN|j}nt}|d urct	|t
jsctd	t| t j||tt||||||
|	|d

 |pt|tt||||dd| _d S )NhThe `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead   category
stacklevelNThe `http_client` argument is mutually exclusive with `connection_pool_limits`[The `transport` argument is deprecated. The `http_client` argument should be passed insteadAThe `http_client` argument is mutually exclusive with `transport`YThe `proxies` argument is deprecated. The `http_client` argument should be passed instead?The `http_client` argument is mutually exclusive with `proxies`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   follow_redirects)warningswarnDeprecationWarningr   r@   r4   r   HTTPX_DEFAULT_TIMEOUTrA   r   r}   Clientr  r  superrg   r   r&   rf  r   )re   r   r   r   r   r   r   r   rm  r   r   r   r   rc   rf   rg     sl   zSyncAPIClient.__init__c                 C     | j jS rb   r   r   ry   rc   rc   rf   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   rg  ry   rc   rc   rf   rg  .  s   
zSyncAPIClient.closere   rT   c                 C  s   | S rb   rc   ry   rc   rc   rf   	__enter__8  rz   zSyncAPIClient.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rb   rg  re   r  r  r  rc   rc   rf   __exit__;  s   zSyncAPIClient.__exit__r   r9   c                 C  rA  z#Hook for mutating the given optionsNrc   re   r   rc   rc   rf   _prepare_optionsC  s   zSyncAPIClient._prepare_optionsr   r  c                 C  rA  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.
        Nrc   r-  rc   rc   rf   _prepare_requestJ  rB  zSyncAPIClient._prepare_requestr(  Type[ResponseT]r   r   r,  Literal[True]
stream_clsType[_StreamT]rW   c                C  ra   rb   rc   re   r(  r   r   r,  r  rc   rc   rf   r   U     
zSyncAPIClient.requestFr,  Literal[False]r(   c                C  ra   rb   rc   )re   r(  r   r   r,  rc   rc   rf   r   a  rB  r,  r  Type[_StreamT] | NoneResponseT | _StreamTc                C  ra   rb   rc   r  rc   rc   rf   r   l  r  type[_StreamT] | Nonec                C  s   | j |||||dS N)r(  r   r,  r  r   _requestr  rc   rc   rf   r   x  s   	
int | Nonec                C  s  |  ||}| | | ||}| |}| | i }| jd ur'| j|d< z| jj|fd|p5| j|di|}	W nf t	j
yo }
 z'tjddd |dkr`| j|||||d dW  Y d }
~
S td	 t|d|
d }
~
w ty }
 z'tjd
dd |dkr| j|||||d dW  Y d }
~
S td t|d|
d }
~
ww td|j|j|	j|	j z|	  W nL t	jy }
 z>tjddd |dkr| |
jr|
j  | j||||
jj||dW  Y d }
~
S |
jjs|
j  td | |
jd d }
~
ww | j|||	||dS Nauthr,  )r   z"Encountered httpx.TimeoutExceptionT)exc_infor   )r,  r  rF  zRaising timeout errorzEncountered ExceptionzRaising connection errorzHTTP Request: %s %s "%i %s"z!Encountered httpx.HTTPStatusErrorr  zRe-raising status error)r(  r   r   r,  r  )r+  r  r   r  r  r9  r   sendr.  r}   TimeoutExceptionrP   r  _retry_requestrL   r   rM   r   r\   r   reason_phraseraise_for_statusHTTPStatusErrorr_  r   rg  r   r   readr   _process_response)re   r(  r   r   r,  r  retriesr   r  r   r5  rc   rc   rf   r    s   	






	
	


zSyncAPIClient._requestrF  httpx.Headers | Nonec          	      C  sd   |d }|dkrt d nt d| | |||}t d|j| t| | j|||||dS Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)r   r(  r   r,  r  )rP   r  r[  r   r\   rN  sleepr  	re   r   r(  r   rF  r,  r  	remainingr   rc   rc   rf   r    s   

zSyncAPIClient._retry_requestr   r   1type[Stream[Any]] | type[AsyncStream[Any]] | Nonec          	   
   C  s   |j jtdkrttt|| ||||dS t|p|}t	|rIt
|trIt
|ts5tdt d| td|}tt||| t||||dS |tjkrStt|S t|| td||||d}t|j jtrntt|S | S )Nr\  rawr   r(  r,  r  r   !API Response types must subclass ; Received type[BaseAPIResponse[Any]]r)  )r   r   r   rE   r   r(   rO   r   r0  r1  r2  r=   r<   r  r?   r}   Responsers   parse	re   r(  r   r   r,  r  originresponse_clsapi_responserc   rc   rf   r    sR   	




zSyncAPIClient._process_responser   Type[object]r   Type[SyncPageT]rQ   c                   s(   d fdd}|_ j|ddS )	Nr   rQ   r_   c                   s   | j  d | S )N)r   r   r   )r   r   r   r   re   rc   rf   r   D  s   z0SyncAPIClient._request_api_list.<locals>._parserFr  )r   rQ   r_   rQ   )r   r   )re   r   r   r   r   rc   r  rf   r   >  s   zSyncAPIClient._request_api_listr   r,  pathr0   c                C  ra   rb   rc   re   r  r(  r   r,  rc   rc   rf   r   P  rB  zSyncAPIClient.getr   type[_StreamT]c                C  ra   rb   rc   re   r  r(  r   r,  r  rc   rc   rf   r   [  r  r   r  c                C  ra   rb   rc   r  rc   rc   rf   r   g  r  r   r,  r  c                C  s.   t jdd|d|}tt| j||||dS Nr   )r   r\   r  rc   )r9   	constructr   r(   r   re   r  r(  r   r,  r  optsrc   rc   rf   r   s  s   	)r   r   r  r,  r   Body | Noner  RequestFiles | Nonec                C  ra   rb   rc   )re   r  r(  r   r   r  r,  rc   rc   rf   post  s   zSyncAPIClient.post)r   r   r  c                C  ra   rb   rc   re   r  r(  r   r   r  r,  r  rc   rc   rf   r       )r   r   r  r  c                C  ra   rb   rc   r  rc   rc   rf   r    r  )r   r   r  r,  r  c          	      C  s6   t jdd||t|d|}tt| j||||dS Nr  r   r\   r  r  r  rc   )r9   r  r   r   r(   r   )	re   r  r(  r   r   r  r,  r  r  rc   rc   rf   r    s   r   r   c                C  $   t jdd||d|}| ||S Npatchr   r\   r  rc   r9   r  r   re   r  r(  r   r   r  rc   rc   rf   r       zSyncAPIClient.patchr   r  r   c                C  s*   t jdd||t|d|}| ||S Nputr  rc   )r9   r  r   r   re   r  r(  r   r  r   r  rc   rc   rf   r    s   	zSyncAPIClient.putc                C  r  Ndeleter  rc   r  r  rc   rc   rf   r    r  zSyncAPIClient.deleter   r   r   r   r   c                C  &   t jd|||d|}| |||S Nr  rc   r9   r  r   re   r  r   r   r   r   r   r  rc   rc   rf   get_api_list     
zSyncAPIClient.get_api_list)r   r   r   r   r   r   r   rn  r   ro  r   r   r   rp  rm  rq  r   r   r   r   r   rs   r_   r`   r   ri  re   rT   r_   rT   r  r  r  r  r  r  r_   r`   r   r9   r_   r`   r   r  r_   r`   rb   )r(  r  r   r9   r   r   r,  r  r  r  r_   rW   )
r(  r  r   r9   r   r   r,  r  r_   r(   )r(  r  r   r9   r   r   r,  rs   r  r  r_   r  )r(  r  r   r9   r   r   r,  rs   r  r  r_   r  )r(  r  r   r9   r   r  r,  rs   r  r  r_   r  )r   r9   r(  r  r   r   rF  r  r,  rs   r  r  r_   r  r(  r  r   r9   r   r   r,  rs   r  r  r_   r(   )r   r  r   r  r   r9   r_   rQ   
r  r   r(  r  r   r0   r,  r  r_   r(   )r  r   r(  r  r   r0   r,  r  r  r  r_   rW   )r  r   r(  r  r   r0   r,  rs   r  r  r_   r  )r  r   r(  r  r   r  r   r0   r  r  r,  r  r_   r(   )r  r   r(  r  r   r  r   r0   r  r  r,  r  r  r  r_   rW   )r  r   r(  r  r   r  r   r0   r  r  r,  rs   r  r  r_   r  
r  r   r(  r  r   r  r   r0   r_   r(   r  r   r(  r  r   r  r  r  r   r0   r_   r(   )r  r   r   r  r   r  r   r  r   r0   r   r   r_   rQ   )rj   rk   rl   rn   r   rC   r!   rg   r   rg  r  r  r  r  r   r   r  r  r  r   r   r  r  r  r  r  __classcell__rc   rc   r  rf   r     s   
 
U








]

9
r   c                   @  re  )AsyncHttpxClientWrapperr_   r`   c                 C  s.   zt  |   W d S  ty   Y d S w rb   )asyncioget_running_loopcreate_taskacloser   ry   rc   rc   rf   rh    s
   zAsyncHttpxClientWrapper.__del__Nri  rj  rc   rc   rc   rf   r    rk  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 fdd Zdd!d"Zdd#d$Z	dd'd(Z
dd/d0Zdd3d4Zdd7d8Zed9dd:ddBdCZeddDddIdCZedddJddMdCZd9dddNddOdCZddQdRZddUdVZddZd[ZddadbZei d9dcddfdgZei dhddidgZei ddjddkdgZi d9ddlddmdgZeddi d9dnddsdtZeddi duddvdtZeddi ddwddxdtZddi d9ddyddzdtZdi d{dd|d}Zddi dudd~dZdi d{dddZdi dddddZ  ZS )r   zhttpx.AsyncClientr   Nztype[AsyncStream[Any]] | Noner   rl  r   r   r   r   r   rs   r   r   r   rn  r   AsyncTransport | Noner   r   r   rp  rm  httpx.AsyncClient | Noner   r   r   r   r_   r`   c                  s  |d urt jdtdd |	d urtdnt}|d ur+t jdtdd |	d ur+td|d ur?t jdtdd |	d ur?tdt|sP|	rN|	jtkrN|	j}nt}|	d urct	|	t
jsctd	t|	 t j|||tt||||||
|d

 |	pt|tt||||dd| _d S )Nrr  rs  rt  rw  rx  ry  rz  r{  zTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )
r   r   r   r   r   r   r   r   r   r   Tr|  )r~  r  r  r   r@   r4   r   r  rA   r   r}   AsyncClientr  r  r  rg   r   r&   r  r   )re   r   r   r   r   r   r   r   r   rm  r   r   r  rc   rf   rg     sl   zAsyncAPIClient.__init__c                 C  r  rb   r  ry   rc   rc   rf   r   N  r  zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )r  N)r   r  ry   rc   rc   rf   rg  Q  s   zAsyncAPIClient.closere   rT   c                   s   | S rb   rc   ry   rc   rc   rf   
__aenter__X  s   zAsyncAPIClient.__aenter__r  r  r  r  r  r  c                   s   |   I d H  d S rb   r  r  rc   rc   rf   	__aexit__[  s   zAsyncAPIClient.__aexit__r   r9   c                      dS r  rc   r  rc   rc   rf   r  c  s   zAsyncAPIClient._prepare_optionsr   r  c                   r  r  rc   r-  rc   rc   rf   r  j     	zAsyncAPIClient._prepare_requestF)r,  r   r(  r  r,  r  r   r   r(   c                     d S rb   rc   )re   r(  r   r,  r   rc   rc   rf   r   u  r  zAsyncAPIClient.request)r   r  r  type[_AsyncStreamT]rX   c                  r  rb   rc   re   r(  r   r,  r  r   rc   rc   rf   r        
)r  r   type[_AsyncStreamT] | NoneResponseT | _AsyncStreamTc                  r  rb   rc   r  rc   rc   rf   r     r	  )r,  r  r   c                  s   | j |||||dI d H S r  r  r  rc   rc   rf   r     s   	r  c                  sR  |  ||}| |I d H  | ||}| |}| |I d H  i }| jd ur.| j|d< z| jj|fd|p<| j|di|I d H }	W nl t	j
y| }
 z*tjddd |dkrm| j|||||d dI d H W  Y d }
~
S 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 }
~
S td t|d|
d }
~
ww td|j|j|	j|	j z|	  W nV t	jy }
 zHtjddd |dkr| |
jr|
j I d H  | j||||
jj||dI d H W  Y d }
~
S |
jjs|
j I d H  td | |
jd d }
~
ww | j|||	||dI d H S r  )r+  r  r   r  r  r9  r   r  r.  r}   r  rP   r  r  rL   r   rM   r   r\   r   r  r  r  r_  r   r  r   r   areadr   r  )re   r(  r   r,  r  r   r  r   r  r   r5  rc   rc   rf   r    s   	



	
	

zAsyncAPIClient._requestrF  r  c          	        sr   |d }|dkrt d nt d| | |||}t d|j| t|I d H  | j|||||dI d H S r  )rP   r  r[  r   r\   anyior  r  r  rc   rc   rf   r    s   
zAsyncAPIClient._retry_requestr   r   r  c          	   
     s   |j jtdkrttt|| ||||dS t|p|}t	|rJt
|trJt
|ts6tdt d| td|}td||| t||||dS |tjkrTtt|S t|| td||||d}t|j jtrott|S | I d H S )Nr\  r  r  r  r  r(   r)  )r   r   r   rE   r   r(   rO   r   r0  r1  r2  r=   r>   r  r?   r}   r  rs   r  r  rc   rc   rf   r  #  sT   	




z AsyncAPIClient._process_responser   rq   r   r   AsyncPaginator[_T, AsyncPageT]c                 C  s   t | |||dS )N)r   r   r   r   )r   )re   r   r   r   rc   rc   rf   r   \  s   z AsyncAPIClient._request_api_listr  r  r0   c                  r  rb   rc   r  rc   rc   rf   r   d  r  zAsyncAPIClient.getr  c                  r  rb   rc   r  rc   rc   rf   r   o  r	  r  c                  r  rb   rc   r  rc   rc   rf   r   {  r	  r  c                  s0   t jdd|d|}| j||||dI d H S r  r  r  rc   rc   rf   r     s   	)r   r  r   r,  r   r  r  r  c                  r  rb   rc   )re   r  r(  r   r  r   r,  rc   rc   rf   r    s   zAsyncAPIClient.postr  c                  r  rb   rc   re   r  r(  r   r  r   r,  r  rc   rc   rf   r       )r   r  r   r  c                  r  rb   rc   r  rc   rc   rf   r    r  )r   r  r   r,  r  c          	        s>   t jdd||t|I d H d|}| j||||dI d H S r  r9   r  r    r   )	re   r  r(  r   r  r   r,  r  r  rc   rc   rf   r    s   r  c                  ,   t jdd||d|}| ||I d H S r  r  r  rc   rc   rf   r       zAsyncAPIClient.patchc                  s8   t jdd||t|I d H d|}| ||I d H S r  r  r  rc   rc   rf   r    s   	zAsyncAPIClient.putc                  r  r  r  r  rc   rc   rf   r    r  zAsyncAPIClient.deleter   r  r   c                C  r  r  r  r  rc   rc   rf   r    r  zAsyncAPIClient.get_api_list)r   r   r   r   r   rs   r   r   r   rn  r   r  r   r   r   rp  rm  r   r   r   r   r   r_   r`   r   ri  r  r  r  r  )
r(  r  r   r9   r,  r  r   r   r_   r(   )r(  r  r   r9   r,  r  r  r  r   r   r_   rX   )r(  r  r   r9   r,  rs   r  r
  r   r   r_   r  )r(  r  r   r9   r,  rs   r  r
  r   r  r_   r  )r   r9   r(  r  r   r   rF  r  r,  rs   r  r
  r_   r  r  )r   rq   r   r   r   r9   r_   r  r  )r  r   r(  r  r   r0   r,  r  r  r  r_   rX   )r  r   r(  r  r   r0   r,  rs   r  r
  r_   r  )r  r   r(  r  r   r  r  r  r   r0   r,  r  r_   r(   )r  r   r(  r  r   r  r  r  r   r0   r,  r  r  r  r_   rX   )r  r   r(  r  r   r  r  r  r   r0   r,  rs   r  r
  r_   r  r  r  )r  r   r   rq   r   r   r   r  r   r0   r   r   r_   r  )rj   rk   rl   rn   r   rC   r!   rg   r   rg  r  r  r  r  r   r   r  r  r  r   r   r  r  r  r  r  r  rc   rc   r  rf   r     s   
 
U







]

9
r   )queryextra_headersextra_query
extra_bodyr   r   r   r  Query | Noner  Headers | Noner  r  r  r   r   r   'float | httpx.Timeout | None | NotGivenr   PostParser | NotGivenr_   r0   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  r^   r   r   r   )r   r*   r   r   r'   r4   )r  r  r  r  r   r   r   r   rc   rc   rf   make_request_options  s    
r  c                   @  $   e Zd Zd
ddZedddZd	S )OtherPlatformnamer   r_   r`   c                 C  
   || _ d S rb   r  re   r  rc   rc   rf   rg   $  rE  zOtherPlatform.__init__c                 C     d| j  S )NzOther:r!  ry   rc   rc   rf   __str__'     zOtherPlatform.__str__Nr  r   r_   r`   rb  rj   rk   rl   rg   r   r$  rc   rc   rc   rf   r  #      
r  )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 )Nr0  iphoneipadr.  darwinr)  windowsr+  androidr/  linuxfreebsdr,  openbsdr-  r*  )platformsystemr   r   distroidr  )r;  platform_name	distro_idrc   rc   rf   get_platform;  s0   r@  )maxsizer   r   rD  c                 C  s"   d| t t t t t t dS )Npython)zX-Stainless-LangzX-Stainless-Package-VersionzX-Stainless-OSzX-Stainless-ArchzX-Stainless-RuntimezX-Stainless-Runtime-Version)r   r@  get_architectureget_python_runtimeget_python_version)r   rc   rc   rf   r@  e  s   r@  c                   @  r  )	OtherArchr  r   r_   r`   c                 C  r   rb   r!  r"  rc   rc   rf   rg   r  rE  zOtherArch.__init__c                 C  r#  )Nzother:r!  ry   rc   rc   rf   r$  u  r%  zOtherArch.__str__Nr&  rb  r'  rc   rc   rc   rf   rF  q  r(  rF  )x32x64armarm64unknownc                   C      zt  W S  ty   Y dS w NrK  )r:  python_implementationr   rc   rc   rc   rf   rD  }  
   
rD  c                   C  rL  rM  )r:  python_versionr   rc   rc   rc   rf   rE    rO  rE  Archc                  C  sr   zt  \} }t   }W n
 ty   Y dS w |dv rdS |dkr%dS |dkr+dS | dkr1dS |r7t|S dS )	NrK  )rJ  aarch64rJ  rI  x86_64rH  32bitrG  )r:  architecturemachiner   r   rF  )python_bitness_rV  rc   rc   rf   rC    s"   rC  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 rc   )r   r#   ).0r%  r&  rc   rc   rf   
<dictcomp>  s     z#_merge_mappings.<locals>.<dictcomp>)rv   )rY  r[  mergedrc   rc   rf   r     s   r   )r  r  r  r  r  r  r  r  r   r   r   r  r   r  r_   r0   )r_   r1  )r   r   r_   rD  rb  )r_   rQ  )rY  rZ  r[  rZ  r_   r\  )
__future__r   r   rN  r`  rJ  r  r0  r  r:  r~  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   	functoolsr   typing_extensionsr   r   r   r  r}   r<  r   r   r   r    r   _qsr   _filesr   r    _typesr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   _utilsr2   r3   r4   r5   _compatr6   r7   _modelsr8   r9   r:   r;   	_responser<   r=   r>   r?   
_constantsr@   rA   rB   rC   rD   rE   rF   
_streamingrG   rH   rI   rJ   rK   rL   rM   rN   _legacy_responserO   	getLoggerrj   rP   rn   rQ   rS   rT   rU   rW   rX   httpx._configrY   r  ImportErrorrZ   ro   r   r   r   r  r  r   r   r   rf  r   r  r   r  r  r1  r@  r@  rF  rQ  rD  rE  rC  r   rc   rc   rc   rf   <module>   s    DL$	#1.'&       	    %	
*	


