U
    ·ÜŸj© ã                
   @  s4  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z m!Z!m"Z" d dl#Z#d dl$Z$d dl%Z%d dl&Z&d dl$m'Z' d dl&m(Z( d	d
l)m*Z* d	dl+m,Z, d	dl-m.Z.m/Z/ d	dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d	dl@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d	dlHmIZImJZJmKZK 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< ek meAƒ ¡ eddd�Zneddd�ZoedƒZpeddd �Zqed!e_e d�Zred"eae d�Zse�r¸d d#ltmuZv n0zd d#ltmuZv W n ewk
�ræ   e6d$ƒZvY nX G d%d&„ d&ƒZxG d'd(„ d(eMeep ƒZyG d)d*„ d*eyep eep ƒZzG d+d,„ d,eepeof ƒZ{G d-d.„ d.eyep eep ƒ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 ƒZ�G d3d4„ d4e$j}ƒZ‚e�rÄe$j}Zƒne‚ZƒG d5d6„ d6eƒƒZ„G d7d8„ d8e�e$j}e_e f ƒZ…G d9d:„ d:e$j~ƒZ†e�re$j~Z‡ne†Z‡G d;d<„ d<e‡ƒZˆG d=d>„ d>e�e$j~eae f ƒZ‰ddddde1e1d?œd@dAd@dBdCdDdEdFdGœdHdI„ZŠG dJdK„ dKee‹df ƒZŒG dLdM„ dMƒZ�ee�e dN f ZŽdOdPœdQdR„Z�eFddS�dTdUdVdWœdXdY„ƒZ�G dZd[„ d[ƒZ‘ee‘e d\ f Z’dTdPœd]d^„Z“dTdPœd_d`„Z”dadPœdbdc„Z•dddddedfœdgdh„Z–dS )ié    )ÚannotationsN)ÚTracebackType)Úrandom)ÚTYPE_CHECKINGÚAnyÚDictÚTypeÚUnionÚGenericÚMappingÚTypeVarÚIterableÚIteratorÚOptionalÚ	GeneratorÚAsyncIteratorÚcastÚoverload)ÚLiteralÚoverrideÚ
get_origin)ÚURL)ÚPrivateAttré   )Ú_exceptions©ÚQuerystring)Úto_httpx_filesÚasync_to_httpx_files)Ú	NOT_GIVENÚBodyÚOmitÚQueryÚHeadersÚTimeoutÚNotGivenÚ	ResponseTÚ
AnyMappingÚ
PostParserÚRequestFilesÚHttpxSendArgsÚRequestOptionsÚHttpxRequestFilesÚModelBuilderProtocol)ÚSensitiveHeadersFilterÚis_dictÚis_listÚasyncifyÚis_givenÚ	lru_cacheÚ
is_mapping)ÚPYDANTIC_V2Ú
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                   @  sv   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eddœdd„ƒZ	dS )ÚPageInfoz€Stores 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©r[   Úreturnc                C  s   d S ©N© ©Úselfr[   ra   ra   ú7/tmp/pip-unpacked-wheel-2qj3ofc_/openai/_base_client.pyÚ__init__y   s    zPageInfo.__init__r"   )r\   r_   c                C  s   d S r`   ra   )rc   r\   ra   ra   rd   re   €   s    ©r[   r\   )r[   r\   r_   c                C  s   || _ || _d S r`   rf   )rc   r[   r\   ra   ra   rd   re   ‡   s    Ústr©r_   c                 C  s2   | j r| jj› d| j › d�S | jj› d| j› d�S )Nz(url=ú)z(params=)r[   Ú	__class__Ú__name__r\   ©rc   ra   ra   rd   Ú__repr__�   s    zPageInfo.__repr__N)
rk   Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   re   r   r   rm   ra   ra   ra   rd   rZ   p   s   
	ü	rZ   c                   @  sx   e Zd ZU dZeƒ Zded< eƒ Zded< ddœdd	„Zd
dœdd„Z	ddœdd„Z
dddœdd„Zdddœdd„ZdS )ÚBasePagea<  
    Defines the core interface for pagination.

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

    Methods:
        has_next_page(): Check if there is another page available
        next_page_info(): Get the necessary information to make a request for the next page
    r9   Ú_optionsúType[_T]Ú_modelÚboolrh   c                 C  s   |   ¡ }|sdS |  ¡ d k	S )NF)Ú_get_page_itemsÚnext_page_info)rc   Úitemsra   ra   rd   Úhas_next_page¦   s    zBasePage.has_next_pagezOptional[PageInfo]c                 C  s   d S r`   ra   rl   ra   ra   rd   rx   ¬   ó    zBasePage.next_page_infozIterable[_T]c                 C  s   d S r`   ra   rl   ra   ra   rd   rw   ®   s    zBasePage._get_page_itemsr   zhttpx.QueryParamsr^   c                 C  s   t  tt| jjƒ¡ |j¡S r`   )ÚhttpxZQueryParamsr   r   rs   r\   Úmergerb   ra   ra   rd   Ú_params_from_url±   s    zBasePage._params_from_urlrZ   )Úinfor_   c                 C  s|   t | jƒ}| ¡  t|jtƒs0|j|j–|_|S t|jtƒsp|  |j¡}|jj|d�}t	|jƒ|_t
|ƒ|_|S tdƒ‚d S )N)r\   zUnexpected PageInfo state)r6   rs   Z_strip_raw_response_headerÚ
isinstancer\   r%   r[   r~   Ú	copy_withÚdictrg   Ú
ValueError)rc   r   Úoptionsr\   r[   ra   ra   rd   Ú_info_to_optionsµ   s    

zBasePage._info_to_optionsN)rk   rn   ro   rp   r   rs   rq   ru   rz   rx   rw   r~   r…   ra   ra   ra   rd   rr   —   s   
rr   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Ú_clientrt   r9   r]   )ÚclientÚmodelr„   r_   c                 C  s0   t rt| dd ƒd kri | _|| _|| _|| _d S ©NÚ__pydantic_private__©r5   ÚgetattrrŒ   ru   rˆ   rs   )rc   r‰   rŠ   r„   ra   ra   rd   Ú_set_private_attributesÊ   s
    z$BaseSyncPage._set_private_attributeszIterator[_T]rh   c                 c  s&   |   ¡ D ]}| ¡ D ]
}|V  qqd S r`   ©Ú
iter_pagesrw   ©rc   ÚpageÚitemra   ra   rd   Ú__iter__ß   s    zBaseSyncPage.__iter__rQ   zIterator[SyncPageT]©rc   r_   c                 c  s&   | }|V  |  ¡ r| ¡ }qd S qd S r`   ©rz   Úget_next_page©rc   r“   ra   ra   rd   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„   ©rx   ÚRuntimeErrorr…   rˆ   Ú_request_api_listru   rj   ©rc   r   r„   ra   ra   rd   r˜   í   s    ÿ
zBaseSyncPage.get_next_pageN)rk   rn   ro   Úpydanticr   rˆ   rq   r�   r•   r‘   r˜   ra   ra   ra   rd   r†   Ç   s
   
	r†   c                   @  sL   e Zd Zddddddœdd„Zd	d
œdd„Zdd
œdd„Zdd
œdd„ZdS )ÚAsyncPaginatorÚAsyncAPIClientr9   úType[AsyncPageT]rt   r]   )r‰   r„   Úpage_clsrŠ   r_   c                 C  s   || _ || _|| _|| _d S r`   )ru   rˆ   rs   Ú	_page_cls)rc   r‰   r„   r£   rŠ   ra   ra   rd   re   ù   s    zAsyncPaginator.__init__z Generator[Any, None, AsyncPageT]rh   c                 C  s   |   ¡  ¡ S r`   )Ú	_get_pageÚ	__await__rl   ra   ra   rd   r¦     s    zAsyncPaginator.__await__rS   c                 ƒ  s4   dddœ‡ fdd„}|ˆ j _ˆ j ˆ jˆ j ¡I d H S )NrS   ©Úrespr_   c                   s   | j ˆ jˆ jˆ jd� | S )N)rŠ   r„   r‰   )r�   ru   rs   rˆ   ©r¨   rl   ra   rd   Ú_parser	  s    ýz)AsyncPaginator._get_page.<locals>._parser)rs   Úpost_parserrˆ   Úrequestr¤   )rc   rª   ra   rl   rd   r¥     s    zAsyncPaginator._get_pageúAsyncIterator[_T]c                 C s.   t t| I d H ƒ}|2 z3 d H W }|V  q6 d S r`   )r   rS   r’   ra   ra   rd   Ú	__aiter__  s    þzAsyncPaginator.__aiter__N)rk   rn   ro   re   r¦   r¥   r®   ra   ra   ra   rd   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ˆ   rt   r9   r]   )rŠ   r‰   r„   r_   c                 C  s0   t rt| dd ƒd kri | _|| _|| _|| _d S r‹   r�   )rc   rŠ   r‰   r„   ra   ra   rd   r�   "  s
    z%BaseAsyncPage._set_private_attributesr­   rh   c                 C s0   |   ¡ 2 z 3 d H W }| ¡ D ]
}|V  qq6 d S r`   r�   r’   ra   ra   rd   r®   /  s    zBaseAsyncPage.__aiter__rS   zAsyncIterator[AsyncPageT]r–   c                 C s,   | }|V  |  ¡ r"| ¡ I d H }qd S qd S r`   r—   r™   ra   ra   rd   r‘   4  s
    zBaseAsyncPage.iter_pagesc                 Ã  s:   |   ¡ }|stdƒ‚|  |¡}| jj| j| j|d�I d H S rš   r›   rž   ra   ra   rd   r˜   =  s    ÿ
zBaseAsyncPage.get_next_pageN)rk   rn   ro   rŸ   r   rˆ   rq   r�   r®   r‘   r˜   ra   ra   ra   rd   r¯     s
   
	r¯   Ú_HttpxClientTÚ_DefaultStreamTc                
   @  s<  e Zd ZU ded< ded< ded< ded< d	ed
< ded< ded< dZded< eedddœdddddddddœdd„Zdddœdd„Zddd œd!d"„Z	dd#dd$d%œd&d'„Z
d(d)œd*dd+d,œd-d.„Zdddœd/d0„Zd1d2œd3d4„Zd(d)œd*dd5d,œd6d7„Zd8d9d:œd;d<„Zd=d*d=d>œd?d@„Zd5ddAœdBdC„Zd#d=ddDdEœdFdG„ZedHd2œdIdJ„ƒZedKd2œdLdM„ƒZedNd2œdOdP„ƒZedQd2œdRdS„ƒZed9d2œdTdU„ƒZdVdVddWœdXdY„Zedd2œdZd[„ƒZedd2œd\d]„ƒZejd^ddœd_d]„ƒZd`d2œdadb„Zdpdcdddeœdfdg„Zdqdd*dcdhdiœdjdk„Zddd œdldm„Z dd2œdndo„Z!dS )rÚ
BaseClientr°   rˆ   rg   Ú_versionr   Ú	_base_urlÚintÚmax_retrieszUnion[float, Timeout, None]Útimeoutrv   Ú_strict_response_validationú
str | NoneÚ_idempotency_headerNztype[_DefaultStreamT] | NoneÚ_default_stream_cls)r¶   r·   Úcustom_headersÚcustom_queryú	str | URLzfloat | Timeout | NoneúMapping[str, str] | NoneúMapping[str, object] | Noner]   )ÚversionÚbase_urlr¸   r¶   r·   r¼   r½   r_   c                C  s\   || _ |  t|ƒ¡| _|| _|| _|p(i | _|p2i | _|| _d | _	d | _
|d krXtdƒ‚d S )NzÏmax_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 `openai.DEFAULT_MAX_RETRIES`)r³   Ú_enforce_trailing_slashr   r´   r¶   r·   Ú_custom_headersÚ_custom_queryr¸   rº   Ú	_platformÚ	TypeError)rc   rÁ   rÂ   r¸   r¶   r·   r¼   r½   ra   ra   rd   re   V  s    

ÿzBaseClient.__init__r^   c                 C  s"   |j  d¡r|S |j|j d d�S )Nó   /©Úraw_path)rÊ   Úendswithr�   rb   ra   ra   rd   rÃ   p  s    z"BaseClient._enforce_trailing_slashúhttpx.ResponserK   )Úresponser_   c                 C  s‚   |j r|jsd }d|j› �}nT|j ¡ }|}z t |¡}d|j› d|› �}W n$ tk
rp   |pjd|j› �}Y nX | j|||d�S )NzError code: z - )ÚbodyrÍ   )	Ú	is_closedZis_stream_consumedÚstatus_codeÚtextÚstripÚjsonÚloadsÚ	ExceptionÚ_make_status_error)rc   rÍ   rÎ   Úerr_msgZerr_textra   ra   rd   Ú _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 r`   )ÚNotImplementedError)rc   r×   rÎ   rÍ   ra   ra   rd   rÖ   ‹  s    zBaseClient._make_status_errorr   ©Úretries_takenr9   zhttpx.Headers)r„   rÜ   r_   c          	      C  sÐ   |j pi }t| j|ƒ}|  ||¡ t |¡}| j}|rf|j ¡ dkrf||krf|j	pX|  
¡ |_	|j	||< dd„ |D ƒ}d|krˆt|ƒ|d< d|krÌt|jtƒr¢| jn|j}t|tƒr¸|j}|d k	rÌt|ƒ|d< |S )NÚgetc                 S  s   g | ]}|  ¡ ‘qS ra   )Úlower)Ú.0Úheaderra   ra   rd   Ú
<listcomp>£  s     z-BaseClient._build_headers.<locals>.<listcomp>zx-stainless-retry-countzx-stainless-read-timeout)ÚheadersÚ_merge_mappingsÚdefault_headersÚ_validate_headersr|   r#   rº   ÚmethodrÞ   Úidempotency_keyÚ_idempotency_keyrg   r€   r·   r%   r$   Úread)	rc   r„   rÜ   r¼   Zheaders_dictrâ   Zidempotency_headerZlower_custom_headersr·   ra   ra   rd   Ú_build_headers”  s$    



zBaseClient._build_headersc                 C  s4   t |ƒ}|jr0| jj|j d¡ }| jj|d�S |S )z‹
        Merge a URL argument together with any 'base_url' on the client,
        to create the URL used for the outgoing request.
        rÈ   rÉ   )r   Zis_relative_urlrÂ   rÊ   Úlstripr�   )rc   r[   Z	merge_urlZmerge_raw_pathra   ra   rd   Ú_prepare_url¯  s
    zBaseClient._prepare_urlzSSEDecoder | SSEBytesDecoderrh   c                 C  s   t ƒ S r`   )rH   rl   ra   ra   rd   Ú_make_sse_decoder¼  s    zBaseClient._make_sse_decoderúhttpx.Requestc          
      C  sž  t  tj¡r t  dt|dd�¡ i }|j}|jd k	rt|d krJtt	|jƒ}n*t
|ƒr`t||jƒ}ntdt|ƒ› d�ƒ‚| j||d�}t| j|jƒ}| d¡}|j}|d k	�r| d¡�rd	|krÈ| d¡ |röt|ƒsètd
t|ƒ› d�ƒ‚|  |¡|d< |�stttƒ ƒ}|  |j¡}	d|	jk�r6d|	j dd¡i|d< | jjf |t |j!t"ƒ�rT| j!n|j!|j#|	|�r~| j$ %tt&t't(f |ƒ¡nd t)|ƒ�rŽ|nd |dœ|—ŽS )NzRequest options: %sT)Zexclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`rÛ   úContent-Typezmultipart/form-dataÚboundaryzGExpected query input to be a dictionary for multipart requests but got z	 instead.ÚdataÚ_Zsni_hostnameú-Ú
extensions)râ   r·   ræ   r[   r\   rÓ   Úfiles)*rP   ÚisEnabledForÚloggingÚDEBUGÚdebugr7   Ú	json_dataÚ
extra_jsonr   r    r4   rã   rœ   Útyperê   Údefault_queryr\   rÝ   rõ   Ú
startswithÚpopr/   rÇ   Ú_serialize_multipartformr,   ÚForceMultipartDictrì   r[   ÚhostÚreplacerˆ   Zbuild_requestr€   r·   r%   ræ   ÚqsZ	stringifyr   rg   r   r2   )
rc   r„   rÜ   Úkwargsrú   râ   r\   Úcontent_typerõ   Zprepared_urlra   ra   rd   Ú_build_request¿  sN    


ÿ"õôzBaseClient._build_requestzMapping[object, object]zdict[str, object])rñ   r_   c                 C  s^   | j j|dd�}i }|D ]@\}}| |¡}|s8|||< qt|ƒrL| |¡ q||g||< q|S )NZbrackets)Zarray_format)r  Zstringify_itemsrÝ   r0   Úappend)rc   rñ   ry   Ú
serializedÚkeyÚvalueÚexistingra   ra   rd   r   
  s    ü

z#BaseClient._serialize_multipartformútype[ResponseT])Úcast_tor„   r_   c                 C  sD   t |jƒs|S t|jƒ}| tt¡}t |ƒr@||_ttt |ƒS |S r`   )	r2   râ   r‚   rÿ   rE   r   r   r   r&   )rc   r  r„   râ   Zoverride_cast_tora   ra   rd   Ú_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Ý   rD   ©rc   r¬   ra   ra   rd   Ú_should_stream_response_body9  s    z'BaseClient._should_stream_response_bodyr&   )rñ   r  rÍ   r_   c             
   C  s´   |d krt td ƒS |tkr$t t|ƒS zXt |¡rPt|tƒrPt t|j||d�ƒW S | jrjt tt	||d�ƒW S t tt
||d�ƒW S  tjk
r® } zt||d�|‚W 5 d }~X Y nX d S )N)rÍ   rñ   )Útype_r  )rÍ   rÎ   )r   r&   rÙ   ÚinspectÚisclassÚ
issubclassr-   Úbuildr¸   r:   r;   rŸ   ZValidationErrorrN   )rc   rñ   r  rÍ   Úerrra   ra   rd   Ú_process_response_data<  s    

z!BaseClient._process_response_datar   c                 C  s   t ƒ S r`   r   rl   ra   ra   rd   r  T  s    zBaseClient.qszhttpx.Auth | Nonec                 C  s   d S r`   ra   rl   ra   ra   rd   Úcustom_authX  s    zBaseClient.custom_authzdict[str, str]c                 C  s   i S r`   ra   rl   ra   ra   rd   Úauth_headers\  s    zBaseClient.auth_headerszdict[str, str | Omit]c                 C  s   dd| j dœ|  ¡ | j| j–S )Nzapplication/json)ÚAcceptrï   z
User-Agent)Ú
user_agentÚplatform_headersr  rÄ   rl   ra   ra   rd   rä   `  s    ýúzBaseClient.default_headersc                 C  s   | j –S r`   )rÅ   rl   ra   ra   rd   rý   k  s    ÿzBaseClient.default_queryr#   )râ   r¼   r_   c                 C  s   dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        Nra   )rc   râ   r¼   ra   ra   rd   rå   q  s    	zBaseClient._validate_headersc                 C  s   | j j› d| j› �S )Nz/Python )rj   rk   r³   rl   ra   ra   rd   r  |  s    zBaseClient.user_agentc                 C  s   | j S r`   )r´   rl   ra   ra   rd   rÂ   €  s    zBaseClient.base_urlz	URL | strc                 C  s"   |   t|tƒr|nt|ƒ¡| _d S r`   )rÃ   r€   r   r´   rb   ra   ra   rd   rÂ   „  s    úDict[str, str]c                 C  s   t | j| jd�S )N)Úplatform)r  r³   rÆ   rl   ra   ra   rd   r  ˆ  s    zBaseClient.platform_headerszOptional[httpx.Headers]zfloat | None)Úresponse_headersr_   c              	   C  s¢   |dkrdS z|  dd¡}t|ƒd W S  ttfk
r>   Y nX |  d¡}z
t|ƒW S  ttfk
rl   Y nX tj |¡}|dkr†d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)rc   r"  Zretry_ms_headerZretry_headerÚretry_date_tupleÚ
retry_datera   ra   rd   Ú_parse_retry_after_headerŽ  s"    

z$BaseClient._parse_retry_after_headerr$  )Úremaining_retriesr„   r"  r_   c           
      C  s‚   |  | j¡}|  |¡}|d k	r:d|  k r2dkr:n n|S t|| dƒ}tttd|ƒ tƒ}ddtƒ   }|| }	|	dkr~|	S dS )Nr   é<   r#  g       @r   g      Ð?)Úget_max_retriesr¶   r,  ÚminrC   ÚpowrA   r   )
rc   r-  r„   r"  r¶   Úretry_afterZ
nb_retriesZsleep_secondsÚjitterr·   ra   ra   rd   Ú_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rŒt d	|j¡ dS |jdkr¨t 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Ð   )rc   rÍ   Zshould_retry_headerra   ra   rd   Ú_should_retryÈ  s*    






zBaseClient._should_retryc                 C  s   dt  ¡ › �S )Nzstainless-python-retry-)ÚuuidZuuid4rl   ra   ra   rd   rè   ë  s    zBaseClient._idempotency_key)N)N)"rk   rn   ro   rq   r»   rB   r@   re   rÃ   rØ   rÖ   rê   rì   rí   r  r   r  r  r  Úpropertyr  r  r  rä   rý   rå   r  rÂ   Úsetterr  r,  r4  r7  rè   ra   ra   ra   rd   r²   L  s`   
÷ 	üK
& ü#r²   c                      s$   e Zd Zdddœ‡ fdd„Z‡  ZS )Ú_DefaultHttpxClientr   r]   ©r  r_   c                   s6   |  dt¡ |  dt¡ |  dd¡ tƒ jf |Ž d S ©Nr·   ZlimitsZfollow_redirectsT©Ú
setdefaultr@   rF   Úsuperre   ©rc   r  ©rj   ra   rd   re   ð  s    z_DefaultHttpxClient.__init__©rk   rn   ro   re   Ú__classcell__ra   ra   rB  rd   r;  ï  s   r;  c                   @  s   e Zd Zddœdd„ZdS )ÚSyncHttpxClientWrapperr]   rh   c                 C  s0   | j r
d S z|  ¡  W n tk
r*   Y nX d S r`   )rÏ   ÚcloserÕ   rl   ra   ra   rd   Ú__del__  s    zSyncHttpxClientWrapper.__del__N©rk   rn   ro   rG  ra   ra   ra   rd   rE    s   rE  c                      sZ  e Zd ZU ded< dZded< eeddddœddd	d
ddddddœ	‡ fdd„Zddœdd„Zddœdd„Z	dddœdd„Z
dddddœd d!„Zd"d"d#œd$d%„Zd&dd'œd(d)„Zed{d*d"d+d,d-d.d/œd0d1„ƒZed|d2d3œd*d"d+d4d5d6œd7d1„ƒZed}d2dd8œd*d"d+dd9d:d/œd;d1„ƒZd~d2dd8œd*d"d+dd<d:d/œd=d1„Zd*d"d	dd<d:d>œd?d@„Zd"d*d	dAdd<d:dBœdCdD„ZdEdFœd*d"dGddHd	d5dIœdJdK„ZdLdMd"dNdOœdPdQ„Zei d2dRœdd*dSd4d5dTœdUdV„ƒZei dWœdd*dSd,dXd.dYœdZdV„ƒZei dd[œdd*dSdd<d:dYœd\dV„ƒZi d2dd]œdd*dSdd<d:dYœd^dV„Zedi dd2d_œdd*d`dSdad4d5dbœdcdd„ƒZedi ddeœdd*d`dSdad,dXd.dfœdgdd„ƒZedi dddhœdd*d`dSdadd<d:dfœdidd„ƒZdi dd2ddjœdd*d`dSdadd<d:dfœdkdd„Zdi dlœdd*d`dSd5dmœdndo„Zddi dpœdd*d`dadSd5dqœdrds„Zdi dlœdd*d`dSd5dmœdtdu„Zdi dvdwœddLdMd`dSddNdxœdydz„Z‡  ZS )r‡   zhttpx.Clientrˆ   Nztype[Stream[Any]] | Noner»   ©r¶   r·   Úhttp_clientr¼   r½   rg   r¾   rµ   ú!float | Timeout | None | NotGivenzhttpx.Client | Noner¿   rÀ   rv   r]   )	rÁ   rÂ   r¶   r·   rJ  r¼   r½   r¸   r_   c          	   	     s„   t |ƒs"|r|jtkr|j}nt}|d k	rHt|tjƒsHtdt|ƒ› �ƒ‚t	ƒ j
|tt|ƒ|||||d� |p|t|tt|ƒd�| _d S )NzOInvalid `http_client` argument; Expected an instance of `httpx.Client` but got )rÁ   r·   rÂ   r¶   r½   r¼   r¸   ©rÂ   r·   )r2   r·   ÚHTTPX_DEFAULT_TIMEOUTr@   r€   r|   ÚClientrÇ   rü   r@  re   r   r$   rE  rˆ   )	rc   rÁ   rÂ   r¶   r·   rJ  r¼   r½   r¸   rB  ra   rd   re     s*    ÿø
ýzSyncAPIClient.__init__rh   c                 C  s   | j jS r`   ©rˆ   rÏ   rl   ra   ra   rd   rÏ   @  s    zSyncAPIClient.is_closedc                 C  s   t | dƒr| j ¡  dS )ú`Close the underlying HTTPX client.

        The client will *not* be usable after this.
        rˆ   N)Úhasattrrˆ   rF  rl   ra   ra   rd   rF  C  s    
zSyncAPIClient.closerT   r–   c                 C  s   | S r`   ra   rl   ra   ra   rd   Ú	__enter__M  s    zSyncAPIClient.__enter__útype[BaseException] | NoneúBaseException | NoneúTracebackType | None©Úexc_typeÚexcÚexc_tbr_   c                 C  s   |   ¡  d S r`   ©rF  ©rc   rW  rX  rY  ra   ra   rd   Ú__exit__P  s    zSyncAPIClient.__exit__r9   ©r„   r_   c                 C  s   |S ©z#Hook for mutating the given optionsra   ©rc   r„   ra   ra   rd   Ú_prepare_optionsX  s    zSyncAPIClient._prepare_optionsrî   r  c                 C  s   dS ©a  This method is used as a callback for mutating the `Request` object
        after it has been constructed.
        This is useful for cases where you want to add certain headers based off of
        the request properties, e.g. `url`, `method` etc.
        Nra   r  ra   ra   rd   Ú_prepare_request_  s    	zSyncAPIClient._prepare_requestúType[ResponseT]úOptional[int]úLiteral[True]zType[_StreamT]rW   )r  r„   r-  r  Ú
stream_clsr_   c                C  s   d S r`   ra   ©rc   r  r„   r-  r  rf  ra   ra   rd   r¬   j  s    	zSyncAPIClient.requestF©r  úLiteral[False]r&   )r  r„   r-  r  r_   c                C  s   d S r`   ra   )rc   r  r„   r-  r  ra   ra   rd   r¬   u  s    ©r  rf  zType[_StreamT] | NonezResponseT | _StreamTc                C  s   d S r`   ra   rg  ra   ra   rd   r¬     s    	ztype[_StreamT] | Nonec                C  s2   |d k	r|  | j¡| }nd}| j|||||d�S ©Nr   )r  r„   r  rf  rÜ   ©r/  r¶   Ú_request)rc   r  r„   r-  r  rf  rÜ   ra   ra   rd   r¬   Š  s    	û)r  r„   rÜ   r  rf  r_   c                C  s€  t |ƒ}|  ||¡}|  |¡}| | j¡| }| j||d�}|  |¡ |jrT|j|_i }	| jd k	rl| j|	d< t	 
d|j|j¡ z(| jj|fd|pš| j|d�i|	—Ž}
W nÞ tjk
�r } zNt	j
ddd� |d	krð| j|||||d d
� W Y ¢S t	 
d¡ t|d�|‚W 5 d }~X Y np tk
�r„ } zPt	j
ddd� |d	k�r^| j|||||d d
� W Y ¢S t	 
d¡ t|d�|‚W 5 d }~X Y nX t	 
d|j|j|
j|
j|
j¡ t	 
d|
j d¡¡ z|
 ¡  W n¤ tjk
�rh } z‚t	j
ddd� |d	k�r,|  |j¡�r,|j ¡  | j||||jj||d� W Y ¢2S |jj�s@|j  ¡  t	 
d¡ |  !|j¡d ‚W 5 d }~X Y nX | j"|||
|||d�S )NrÛ   ÚauthzSending HTTP Request: %s %sr  ©r¬   ú"Encountered httpx.TimeoutExceptionT©Úexc_infor   ©rÜ   r  rf  r"  úRaising timeout errorúEncountered ExceptionúRaising connection errorzHTTP Response: %s %s "%i %s" %szrequest_id: %szx-request-idú!Encountered httpx.HTTPStatusError©rÜ   r"  r  rf  úRe-raising status error©r  r„   rÍ   r  rf  rÜ   )#r6   r  r`  r/  r¶   r  rb  rç   r  rP   rù   ræ   r[   rˆ   Úsendr  r|   ÚTimeoutExceptionÚ_retry_requestrL   rÕ   rM   rÐ   Úreason_phraserâ   rÝ   Úraise_for_statusÚHTTPStatusErrorr7  rÍ   rF  rÏ   ré   rØ   Ú_process_response)rc   r  r„   rÜ   r  rf  Úinput_optionsr-  r¬   r  rÍ   r  ra   ra   rd   rm     s¢    



ÿþý
ú	

ú	
ú
ú


 úzSyncAPIClient._requestúhttpx.Headers | None©r„   r  rÜ   r"  r  rf  r_   c          	      C  sp   |  | j¡| }|dkr$t d¡ nt d|¡ |  |||¡}t d|j|¡ t |¡ | j	|||d ||d�S ©Nr   z1 retry leftz%i retries leftz$Retrying request to %s in %f seconds)r„   r  rÜ   r  rf  )
r/  r¶   rP   rù   r4  r   r[   r)  Úsleeprm  ©	rc   r„   r  rÜ   r"  r  rf  r-  r·   ra   ra   rd   r}    s    

ûzSyncAPIClient._retry_requestr   rÛ   rÌ   ú1type[Stream[Any]] | type[AsyncStream[Any]] | None©r  r„   rÍ   r  rf  rÜ   r_   c          
      C  sê   |j j t¡dkr.ttt|| |||||d�ƒS t|ƒp8|}t 	|¡r–t
|tƒr–t
|tƒslt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 )Nr5  ©Úrawr‰   r  r  rf  r„   rÜ   ú!API Response types must subclass ú; Received útype[BaseAPIResponse[Any]]r  )r¬   râ   rÝ   rD   r   r&   rO   r   r  r  r  r=   r<   rÇ   r?   r|   ÚResponserv   Úparse©
rc   r  r„   rÍ   r  rf  rÜ   ÚoriginZresponse_clsZapi_responsera   ra   rd   r�  .  sX    
ùþ

ùþ

ù	
zSyncAPIClient._process_responsezType[object]zType[SyncPageT]rQ   ©rŠ   r“   r„   r_   c                   s.   dddœ‡ ‡‡fdd„}|ˆ_ ˆj|ˆdd�S )NrQ   r§   c                   s   | j ˆˆ ˆd� | S )N)r‰   rŠ   r„   )r�   r©   ©rŠ   r„   rc   ra   rd   rª   q  s    ýz0SyncAPIClient._request_api_list.<locals>._parserFrh  )r«   r¬   )rc   rŠ   r“   r„   rª   ra   r”  rd   r�   k  s    zSyncAPIClient._request_api_list©r„   r  r+   ©Úpathr  r„   r  r_   c                C  s   d S r`   ra   ©rc   r—  r  r„   r  ra   ra   rd   rÝ   }  s    zSyncAPIClient.get©r„   ztype[_StreamT]©r—  r  r„   r  rf  r_   c                C  s   d S r`   ra   ©rc   r—  r  r„   r  rf  ra   ra   rd   rÝ   ‡  s    	©r„   rf  c                C  s   d S r`   ra   r›  ra   ra   rd   rÝ   ’  s    	©r„   r  rf  c                C  s.   t jf d|dœ|—Ž}tt| j||||d�ƒS ©NrÝ   )ræ   r[   rj  )r9   Ú	constructr   r&   r¬   ©rc   r—  r  r„   r  rf  Úoptsra   ra   rd   rÝ   �  s    	)rÎ   r„   rõ   r  úBody | NoneúRequestFiles | None)r—  r  rÎ   r„   rõ   r  r_   c                C  s   d S r`   ra   )rc   r—  r  rÎ   r„   rõ   r  ra   ra   rd   Úpost«  s    
zSyncAPIClient.post)rÎ   r„   rõ   )r—  r  rÎ   r„   rõ   r  rf  r_   c                C  s   d S r`   ra   ©rc   r—  r  rÎ   r„   rõ   r  rf  ra   ra   rd   r¤  ·  s    )rÎ   r„   rõ   rf  c                C  s   d S r`   ra   r¥  ra   ra   rd   r¤  Ä  s    )rÎ   r„   rõ   r  rf  c          	      C  s6   t jf d||t|ƒdœ|—Ž}tt| j||||d�ƒS ©Nr¤  ©ræ   r[   rú   rõ   rj  )r9   rŸ  r   r   r&   r¬   )	rc   r—  r  rÎ   r„   rõ   r  rf  r¡  ra   ra   rd   r¤  Ñ  s       ÿÿ©rÎ   r„   ©r—  r  rÎ   r„   r_   c                C  s$   t jf d||dœ|—Ž}|  ||¡S ©NÚpatch©ræ   r[   rú   ©r9   rŸ  r¬   ©rc   r—  r  rÎ   r„   r¡  ra   ra   rd   r«  á  s    zSyncAPIClient.patch©rÎ   rõ   r„   ©r—  r  rÎ   rõ   r„   r_   c                C  s*   t jf d||t|ƒdœ|—Ž}|  ||¡S ©NÚputr§  )r9   rŸ  r   r¬   ©rc   r—  r  rÎ   rõ   r„   r¡  ra   ra   rd   r²  ì  s    	   ÿÿzSyncAPIClient.putc                C  s$   t jf d||dœ|—Ž}|  ||¡S ©NÚdeleter¬  r­  r®  ra   ra   rd   rµ  ú  s    zSyncAPIClient.deleterÝ   ©rÎ   r„   ræ   ©r—  rŠ   r“   rÎ   r„   ræ   r_   c                C  s&   t jf |||dœ|—Ž}|  |||¡S ©Nr¬  ©r9   rŸ  r�   ©rc   r—  rŠ   r“   rÎ   r„   ræ   r¡  ra   ra   rd   Úget_api_list  s    
zSyncAPIClient.get_api_list)N)N)N)N)rk   rn   ro   rq   r»   rB   r   re   rÏ   rF  rR  r\  r`  rb  r   r¬   rm  r}  r�  r�   rÝ   r¤  r«  r²  rµ  r»  rD  ra   ra   rB  rd   r‡     s´   
÷&.
 ü
 üú	 üù üùo'ø=ú	û
ùùø ù"÷"÷ úùúør‡   c                      s$   e Zd Zdddœ‡ fdd„Z‡  ZS )Ú_DefaultAsyncHttpxClientr   r]   r<  c                   s6   |  dt¡ |  dt¡ |  dd¡ tƒ jf |Ž d S r=  r>  rA  rB  ra   rd   re     s    z!_DefaultAsyncHttpxClient.__init__rC  ra   ra   rB  rd   r¼    s   r¼  c                   @  s   e Zd Zddœdd„ZdS )ÚAsyncHttpxClientWrapperr]   rh   c                 C  s:   | j r
d S zt ¡  |  ¡ ¡ W n tk
r4   Y nX d S r`   )rÏ   ÚasyncioÚget_running_loopÚcreate_taskÚacloserÕ   rl   ra   ra   rd   rG  (  s    zAsyncHttpxClientWrapper.__del__NrH  ra   ra   ra   rd   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œ	‡ fdd„Zd	dœdd„Zddœdd„Z	dddœdd„Z
dddddœd d!„Zd"d"d#œd$d%„Zd&dd'œd(d)„Zed*dd+œd,d"d-d.d/d0œd1d2„ƒZedd3œd,d"d4d5d.d6d7œd8d2„ƒZeddd9œd,d"d	d:d.d;d7œd<d2„ƒZd*ddd=œd,d"d	d:d.d;d7œd>d2„Zd,d"d	d:d
d;d?œd@dA„Zd"d,d
dBd	d:d;dCœdDdE„ZdFdGœd,d"dHd	dId
d/dJœdKdL„ZdMdNd"dOdPœdQdR„Zei d*dSœdd,dTd-d/dUœdVdW„ƒZei dXœdd,dTd4d5d6dYœdZdW„ƒZei dd[œdd,dTd	d:d;dYœd\dW„ƒZi d*dd]œdd,dTd	d:d;dYœd^dW„Zeddi d*d_œdd,d`dadTd-d/dbœdcdd„ƒZeddi deœdd,d`dadTd4d5d6dfœdgdd„ƒZeddi ddhœdd,d`dadTd	d:d;dfœdidd„ƒZddi d*ddjœdd,d`dadTd	d:d;dfœdkdd„Zdi dlœdd,d`dTd/dmœdndo„Zddi deœdd,d`dadTd/dpœdqdr„Zdi dlœdd,d`dTd/dmœdsdt„Zdi dudvœddMdNd`dTddOdwœdxdy„Z‡  ZS )zr¡   zhttpx.AsyncClientrˆ   Nztype[AsyncStream[Any]] | Noner»   rI  rg   r¾   rv   rµ   rK  zhttpx.AsyncClient | Noner¿   rÀ   r]   )	rÁ   rÂ   r¸   r¶   r·   rJ  r¼   r½   r_   c          	   	     s„   t |ƒs"|r|jtkr|j}nt}|d k	rHt|tjƒsHtdt|ƒ› �ƒ‚t	ƒ j
||tt|ƒ||||d� |p|t|tt|ƒd�| _d S )NzTInvalid `http_client` argument; Expected an instance of `httpx.AsyncClient` but got )rÁ   rÂ   r·   r¶   r½   r¼   r¸   rL  )r2   r·   rM  r@   r€   r|   ÚAsyncClientrÇ   rü   r@  re   r   r$   r½  rˆ   )	rc   rÁ   rÂ   r¸   r¶   r·   rJ  r¼   r½   rB  ra   rd   re   7  s*    ÿø
ýzAsyncAPIClient.__init__rh   c                 C  s   | j jS r`   rO  rl   ra   ra   rd   rÏ   e  s    zAsyncAPIClient.is_closedc                 Ã  s   | j  ¡ I dH  dS )rP  N)rˆ   rÁ  rl   ra   ra   rd   rF  h  s    zAsyncAPIClient.closerT   r–   c                 Ã  s   | S r`   ra   rl   ra   ra   rd   Ú
__aenter__o  s    zAsyncAPIClient.__aenter__rS  rT  rU  rV  c                 Ã  s   |   ¡ I d H  d S r`   rZ  r[  ra   ra   rd   Ú	__aexit__r  s    zAsyncAPIClient.__aexit__r9   r]  c                 Ã  s   |S r^  ra   r_  ra   ra   rd   r`  z  s    zAsyncAPIClient._prepare_optionsrî   r  c                 Ã  s   dS ra  ra   r  ra   ra   rd   rb  �  s    	zAsyncAPIClient._prepare_requestF)r  r-  rc  ri  rd  r&   )r  r„   r  r-  r_   c                Ã  s   d S r`   ra   )rc   r  r„   r  r-  ra   ra   rd   r¬   Œ  s    zAsyncAPIClient.request)r-  re  ztype[_AsyncStreamT]rX   )r  r„   r  rf  r-  r_   c                Ã  s   d S r`   ra   ©rc   r  r„   r  rf  r-  ra   ra   rd   r¬   –  s    	)rf  r-  ztype[_AsyncStreamT] | NonezResponseT | _AsyncStreamTc                Ã  s   d S r`   ra   rÅ  ra   ra   rd   r¬   ¡  s    	)r  rf  r-  c                Ã  s8   |d k	r|  | j¡| }nd}| j|||||d�I d H S rk  rl  )rc   r  r„   r  rf  r-  rÜ   ra   ra   rd   r¬   ¬  s    	û)r  r„   r  rf  rÜ   r_   c                Ã  sª  | j d krttƒƒ I d H | _ t|ƒ}|  ||¡}|  |¡I d H }| | j¡| }| j||d�}|  	|¡I d H  |j
r||j
|_
i }	| jd k	r”| j|	d< z.| jj|fd|p°| j|d�i|	—ŽI d H }
W nì tjk
�r: } zVtjddd� |dk�r| j|||||d d	�I d H  W Y ¢S t d
¡ t|d�|‚W 5 d }~X Y nv tk
�r® } zVtjddd� |dk�rˆ| j|||||d d	�I d H  W Y ¢S t d¡ t|d�|‚W 5 d }~X Y nX t d|j|j|
j|
j¡ z|
 ¡  W n¶ tjk
�rŒ } z”tjddd� |dk�rJ|  |j¡�rJ|j ¡ I d H  | j||||jj ||d�I d H  W Y ¢8S |jj!�sd|j "¡ I d H  t d¡ |  #|j¡d ‚W 5 d }~X Y nX | j$|||
|||d�I d H S )NrÛ   rn  r  ro  rp  Trq  r   rs  rt  ru  rv  zHTTP Request: %s %s "%i %s"rw  rx  ry  rz  )%rÆ   r1   Úget_platformr6   r  r`  r/  r¶   r  rb  rç   r  rˆ   r{  r  r|   r|  rP   rù   r}  rL   rÕ   rM   ræ   r[   rÐ   r~  r  r€  r7  rÍ   rÁ  râ   rÏ   ZareadrØ   r�  )rc   r  r„   r  rf  rÜ   r‚  r-  r¬   r  rÍ   r  ra   ra   rd   rm  Â  s     	


ÿþý
ú	

ú	
    ÿú

 úzAsyncAPIClient._requestrƒ  r„  c          	      Ã  s|   |  | j¡| }|dkr$t d¡ nt d|¡ |  |||¡}t d|j|¡ t |¡I d H  | j	|||d ||d�I d H S r…  )
r/  r¶   rP   rù   r4  r   r[   Úanyior†  rm  r‡  ra   ra   rd   r}  .  s    
ûzAsyncAPIClient._retry_requestr   rÛ   rÌ   rˆ  r‰  c          
      Ã  sð   |j j t¡dkr.ttt|| |||||d�ƒS t|ƒp8|}t 	|¡r–t
|tƒr–t
|tƒsltdt› d|› �ƒ‚td|ƒ}td||| t|ƒ||||d�ƒS |tjkrªtt|ƒS t|| td|ƒ||||d�}	t|j j t¡ƒrâtt|	ƒS |	 ¡ I d H S )Nr5  rŠ  rŒ  r�  rŽ  r&   r  )r¬   râ   rÝ   rD   r   r&   rO   r   r  r  r  r=   r>   rÇ   r?   r|   r�  rv   r�  r‘  ra   ra   rd   r�  K  sX    
ùþ

ùþ

ù	
z AsyncAPIClient._process_responsert   r¢   zAsyncPaginator[_T, AsyncPageT]r“  c                 C  s   t | |||d�S )N)r‰   r„   r£   rŠ   )r    )rc   rŠ   r“   r„   ra   ra   rd   r�   ˆ  s    z AsyncAPIClient._request_api_listr•  r+   r–  c                Ã  s   d S r`   ra   r˜  ra   ra   rd   rÝ   �  s    zAsyncAPIClient.getr™  rš  c                Ã  s   d S r`   ra   r›  ra   ra   rd   rÝ   š  s    	rœ  c                Ã  s   d S r`   ra   r›  ra   ra   rd   rÝ   ¥  s    	r�  c                Ã  s.   t jf d|dœ|—Ž}| j||||d�I d H S rž  r­  r   ra   ra   rd   rÝ   °  s    	)rÎ   rõ   r„   r  r¢  r£  )r—  r  rÎ   rõ   r„   r  r_   c                Ã  s   d S r`   ra   )rc   r—  r  rÎ   rõ   r„   r  ra   ra   rd   r¤  ¼  s    
zAsyncAPIClient.postr¯  )r—  r  rÎ   rõ   r„   r  rf  r_   c                Ã  s   d S r`   ra   ©rc   r—  r  rÎ   rõ   r„   r  rf  ra   ra   rd   r¤  È  s    )rÎ   rõ   r„   rf  c                Ã  s   d S r`   ra   rÈ  ra   ra   rd   r¤  Õ  s    )rÎ   rõ   r„   r  rf  c          	      Ã  s<   t jf d||t|ƒI d H dœ|—Ž}| j||||d�I d H S r¦  ©r9   rŸ  r   r¬   )	rc   r—  r  rÎ   rõ   r„   r  rf  r¡  ra   ra   rd   r¤  â  s       ÿÿr¨  r©  c                Ã  s*   t jf d||dœ|—Ž}|  ||¡I d H S rª  r­  r®  ra   ra   rd   r«  ò  s    zAsyncAPIClient.patchr°  c                Ã  s6   t jf d||t|ƒI d H dœ|—Ž}|  ||¡I d H S r±  rÉ  r³  ra   ra   rd   r²  ý  s    	   ÿÿzAsyncAPIClient.putc                Ã  s*   t jf d||dœ|—Ž}|  ||¡I d H S r´  r­  r®  ra   ra   rd   rµ    s    zAsyncAPIClient.deleterÝ   r¶  r·  c                C  s&   t jf |||dœ|—Ž}|  |||¡S r¸  r¹  rº  ra   ra   rd   r»    s    
zAsyncAPIClient.get_api_list)rk   rn   ro   rq   r»   rB   r   re   rÏ   rF  rÃ  rÄ  r`  rb  r   r¬   rm  r}  r�  r�   rÝ   r¤  r«  r²  rµ  r»  rD  ra   ra   rB  rd   r¡   3  s¬   
ö&.ú	ù
ùùl%ø=ú	û
ùùø ù"÷"÷ úùúør¡   )ÚqueryÚextra_headersÚextra_queryÚ
extra_bodyrç   r·   r«   zQuery | NonezHeaders | Noner¢  r¹   z'float | httpx.Timeout | None | NotGivenzPostParser | NotGivenr+   )rÊ  rË  rÌ  rÍ  rç   r·   r«   r_   c                 C  sŒ   i }|dk	r||d< |dk	r*t t|ƒ|d< | dk	r:| |d< |dk	rV| di ¡|–|d< t|tƒsh||d< |dk	rx||d< t|ƒrˆ||d< |S )zECreate a dict of type RequestOptions without keys of NotGiven values.Nrâ   rû   r\   r·   rç   r«   )r   r'   rÝ   r€   r%   r2   )rÊ  rË  rÌ  rÍ  rç   r·   r«   r„   ra   ra   rd   Úmake_request_options$  s     
rÎ  c                   @  s   e Zd Zddœdd„ZdS )r  rv   rh   c                 C  s   dS )NTra   rl   ra   ra   rd   Ú__bool__J  s    zForceMultipartDict.__bool__N)rk   rn   ro   rÏ  ra   ra   ra   rd   r  I  s   r  c                   @  s.   e Zd Zdddœdd„Zeddœdd„ƒZd	S )
ÚOtherPlatformrg   r]   ©Únamer_   c                 C  s
   || _ d S r`   ©rÒ  ©rc   rÒ  ra   ra   rd   re   O  s    zOtherPlatform.__init__rh   c                 C  s   d| j › �S )NzOther:rÓ  rl   ra   ra   rd   Ú__str__R  s    zOtherPlatform.__str__N©rk   rn   ro   re   r   rÕ  ra   ra   ra   rd   rÐ  N  s   rÐ  )ÚMacOSÚLinuxÚWindowsÚFreeBSDÚOpenBSDÚiOSÚAndroidÚUnknownÚPlatformrh   c                  C  s¨   zt  ¡  ¡ } t   ¡  ¡ }W n tk
r2   Y dS X d|ksDd|krHdS | dkrTdS | dkr`dS d	|krld
S | dkr˜t ¡ }|dkrˆdS |dkr”dS dS |r¤t|ƒS dS )NrÞ  ZiphoneZipadrÜ  Údarwinr×  ZwindowsrÙ  ZandroidrÝ  ÚlinuxZfreebsdrÚ  ZopenbsdrÛ  rØ  )r!  ÚsystemrÞ   rÕ   ÚdistroÚidrÐ  )râ  Zplatform_nameÚ	distro_idra   ra   rd   rÆ  f  s.    rÆ  )Úmaxsizerg   zPlatform | Noner   )rÁ   r!  r_   c                C  s&   d| t |ptƒ ƒt tƒ ƒtƒ tƒ dœS )NÚpython)zX-Stainless-LangzX-Stainless-Package-VersionzX-Stainless-OSzX-Stainless-ArchzX-Stainless-RuntimezX-Stainless-Runtime-Version)rg   rÆ  Úget_architectureÚget_python_runtimeÚget_python_version)rÁ   r!  ra   ra   rd   r  �  s    úr  c                   @  s.   e Zd Zdddœdd„Zeddœdd„ƒZd	S )
Ú	OtherArchrg   r]   rÑ  c                 C  s
   || _ d S r`   rÓ  rÔ  ra   ra   rd   re   �  s    zOtherArch.__init__rh   c                 C  s   d| j › �S )Nzother:rÓ  rl   ra   ra   rd   rÕ     s    zOtherArch.__str__NrÖ  ra   ra   ra   rd   rë  œ  s   rë  )Úx32Úx64ÚarmÚarm64Úunknownc                   C  s&   z
t  ¡ W S  tk
r    Y dS X d S ©Nrð  )r!  Úpython_implementationrÕ   ra   ra   ra   rd   ré  ¨  s    
ré  c                   C  s&   z
t  ¡ W S  tk
r    Y dS X d S rñ  )r!  Úpython_versionrÕ   ra   ra   ra   rd   rê  ¯  s    
rê  ÚArchc                  C  sj   zt  ¡  ¡ } W n tk
r&   Y dS X | dkr4dS | dkr@dS | dkrLdS tjdkrZdS | rft| ƒS dS )	Nrð  )rï  Úaarch64rï  rî  Úx86_64rí  l        rì  )r!  ÚmachinerÞ   rÕ   Úsysræ  rë  )r÷  ra   ra   rd   rè  ¶  s    
rè  zMapping[_T_co, Union[_T, Omit]]zDict[_T_co, _T])Úobj1Úobj2r_   c                 C  s   | |–}dd„ |  ¡ D ƒS )z¢Merge 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 ra   )r€   r!   )rß   r
  r  ra   ra   rd   Ú
<dictcomp>Ù  s     
  z#_merge_mappings.<locals>.<dictcomp>)ry   )rù  rú  Úmergedra   ra   rd   rã   Ð  s    rã   )—Ú
__future__r   rø  rÓ   r)  r8  r%  r¾  r  r÷   r!  Úemail.utilsÚtypesr   r   Útypingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   rÇ  r|   rã  rŸ   r   r   Ú r   Z_qsr   Ú_filesr   r   Ú_typesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   Ú_utilsr.   r/   r0   r1   r2   r3   r4   Ú_compatr5   r6   r7   Z_modelsr8   r9   r:   r;   Ú	_responser<   r=   r>   r?   Ú
_constantsr@   rA   rB   rC   rD   rE   rF   Z
_streamingrG   rH   rI   rJ   rK   rL   rM   rN   Z_legacy_responserO   Ú	getLoggerrk   rP   rq   Ú	addFilterrQ   rS   rT   rU   rW   rX   Zhttpx._configrY   rM  ÚImportErrorrZ   rr   r†   r    r¯   rN  rÂ  r°   r±   r²   r;  ZDefaultHttpxClientrE  r‡   r¼  ZDefaultAsyncHttpxClientr½  r¡   rÎ  rg   r  rÐ  rß  rÆ  r  rë  rô  ré  rê  rè  rã   ra   ra   ra   rd   Ú<module>   sÒ    DD$$	'01')   &    	   vø %	ÿÿÿ*	