a
    !f                  
   @  s^  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  d dl!m"Z"m#Z# d dl$Z$d dl%Z%d dl&Z&d dl'Z'd dl%m(Z(m)Z) d d	l'm*Z* d
dl+m,Z, d
dl-m.Z. d
dl/m0Z0m1Z1 d
dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d
dlFmGZGmHZHmIZI d
dlJmKZKmLZL d
dlMmNZNmOZOmPZPmQZQ d
dlRmSZS d
dlTmUZUmVZVmWZWmXZXmYZY d
dlZm[Z[m\Z\ d
dl,m]Z]m^Z^m_Z_m`Z` eaebZcdedd< edddZeedddZfedZgeddd Zhed!e[e dZied"e\e dZjerd d#lkmlZm n.zd d#lkmlZm W n eny   e9d$ZmY n0 G d%d& d&ZoG d'd( d(eNee7 ZpG d)d* d*epe7 ee7 ZqG d+d, d,ee7eff ZrG d-d. d.epe7 ee7 Zsed/ee%jte%juf dZved0ee[e e\e f dZwG d1d2 d2eevewf ZxG d3d4 d4exe%jte[e f ZyG d5d6 d6exe%jue\e f Zzddddde3e3d7d8d9d8d:d;d<d=d>d?d@dAZ{G dBdC dCZ|ee|e"dD f Z}dEdFdGdHZ~G dIdJ dJZeee"dK f ZdLdFdMdNZdOdOdPdQdRdSZG dTdU dUeEZdS )V    )annotationsN)TracebackType)random)TYPE_CHECKINGAnyDictTypeUnionGenericMappingTypeVarIterableIteratorOptional	GeneratorAsyncIteratorcastoverload)	lru_cache)Literaloverride)URLLimits)PrivateAttr   )_exceptionsQuerystring)to_httpx_filesasync_to_httpx_files)	NOT_GIVENBodyOmitQueryModelTHeadersTimeoutNotGiven	ResponseT	Transport
AnyMapping
PostParserProxiesTypesRequestFilesAsyncTransportRequestOptionsUnknownResponseModelBuilderProtocolBinaryResponseContent)is_dictis_given
is_mapping)
model_copy
model_dump)GenericModelFinalRequestOptionsvalidate_typeconstruct_type)APIResponse)DEFAULT_LIMITSDEFAULT_TIMEOUTDEFAULT_MAX_RETRIESRAW_RESPONSE_HEADERSTREAMED_RAW_RESPONSE_HEADER)StreamAsyncStream)APIStatusErrorAPITimeoutErrorAPIConnectionErrorAPIResponseValidationErrorzlogging.Loggerlog	SyncPageTzBaseSyncPage[Any])bound
AsyncPageTzBaseAsyncPage[Any]_T_T_coT)	covariant_StreamT_AsyncStreamT)DEFAULT_TIMEOUT_CONFIGg      @c                   @  sd   e Zd ZU dZded< ded< edddd	d
Zeddddd
Zeeddddddd
ZdS )PageInfozStores the necesary 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rS   returnc                C  s   d S N selfrS   rY   rY   T/var/www/html/python-backend/venv/lib/python3.9/site-packages/openai/_base_client.py__init__u   s    zPageInfo.__init__r#   )rT   rW   c                C  s   d S rX   rY   )r[   rT   rY   rY   r\   r]   }   s    rS   rT   )rS   rT   rW   c                C  s   || _ || _d S rX   r^   )r[   rS   rT   rY   rY   r\   r]      s    N)__name__
__module____qualname____doc____annotations__r   r]   r    rY   rY   rY   r\   rR   l   s   

rR   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[ModelT]_modelboolrW   c                 C  s   |   }|sdS |  d uS )NF)_get_page_itemsnext_page_info)r[   itemsrY   rY   r\   has_next_page   s    zBasePage.has_next_pagezOptional[PageInfo]c                 C  s   d S rX   rY   r[   rY   rY   r\   rk      s    zBasePage.next_page_infozIterable[ModelT]c                 C  s   d S rX   rY   rn   rY   rY   r\   rj      s    zBasePage._get_page_itemsr   zhttpx.QueryParamsrV   c                 C  s   t tt| jj|jS rX   )httpxZQueryParamsr   r   re   rT   mergerZ   rY   rY   r\   _params_from_url   s    zBasePage._params_from_urlrR   )inforW   c                 C  s   t | j}|  t|jts4i |j|j|_|S t|jtst| |j}|jj|d}t	|j|_t
||_|S tdd S )N)rT   zUnexpected PageInfo state)r6   re   Z_strip_raw_response_header
isinstancerT   r'   rS   rq   	copy_withdictstr
ValueError)r[   rr   optionsrT   rS   rY   rY   r\   _info_to_options   s    

zBasePage._info_to_optionsN)r_   r`   ra   rb   r   re   rc   rg   rm   rk   rj   rq   ry   rY   rY   rY   r\   rd      s   
rd   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_clientrf   r9   rU   )clientmodelrx   rW   c                 C  s   || _ || _|| _d S rX   rg   r|   re   )r[   r}   r~   rx   rY   rY   r\   _set_private_attributes   s    z$BaseSyncPage._set_private_attributeszIterator[ModelT]ri   c                 c  s&   |   D ]}| D ]
}|V  qqd S rX   
iter_pagesrj   r[   pageitemrY   rY   r\   __iter__   s    zBaseSyncPage.__iter__rI   zIterator[SyncPageT]r[   rW   c                 c  s&   | }|V  |  r| }qd S qd S rX   rm   get_next_pager[   r   rY   rY   r\   r      s
    
zBaseSyncPage.iter_pagesc                 C  s4   |   }|std| |}| jj| j| j|dS NzYNo next page expected; please check `.has_next_page()` before calling `.get_next_page()`.)r   rx   rk   RuntimeErrorry   r|   _request_api_listrg   	__class__r[   rr   rx   rY   rY   r\   r      s    
zBaseSyncPage.get_next_pageN)r_   r`   ra   pydanticr   r|   rc   r   r   r   r   rY   rY   rY   r\   rz      s
   
	rz   c                   @  sL   e Zd ZddddddddZd	d
ddZdd
ddZdd
ddZdS )AsyncPaginatorAsyncAPIClientr9   Type[AsyncPageT]rf   rU   )r}   rx   page_clsr~   rW   c                 C  s   || _ || _|| _|| _d S rX   )rg   r|   re   	_page_cls)r[   r}   rx   r   r~   rY   rY   r\   r]      s    zAsyncPaginator.__init__z Generator[Any, None, AsyncPageT]ri   c                 C  s   |    S rX   )	_get_page	__await__rn   rY   rY   r\   r      s    zAsyncPaginator.__await__rK   c                   s4   ddd fdd}| j _ j j j I d H S )NrK   resprW   c                   s   | j  j j jd | S )N)r~   rx   r}   )r   rg   re   r|   r   rn   rY   r\   _parser   s    z)AsyncPaginator._get_page.<locals>._parser)re   post_parserr|   requestr   )r[   r   rY   rn   r\   r      s    zAsyncPaginator._get_pageAsyncIterator[ModelT]c                 C s.   t t| I d H }|2 z3 d H W }|V  q6 d S rX   )r   rK   r   rY   rY   r\   	__aiter__  s    zAsyncPaginator.__aiter__N)r_   r`   ra   r]   r   r   r   rY   rY   rY   r\   r      s   r   c                   @  s`   e Zd ZU e Zded< dddddddZd	d
ddZdddddZ	dddddZ
dS )BaseAsyncPager   r|   rf   r9   rU   )r~   r}   rx   rW   c                 C  s   || _ || _|| _d S rX   r   )r[   r~   r}   rx   rY   rY   r\   r     s    z%BaseAsyncPage._set_private_attributesr   ri   c                 C s0   |   2 z 3 d H W }| D ]
}|V  qq6 d S rX   r   r   rY   rY   r\   r   "  s    zBaseAsyncPage.__aiter__rK   zAsyncIterator[AsyncPageT]r   c                 C s,   | }|V  |  r"| I d H }qd S qd S rX   r   r   rY   rY   r\   r   '  s
    zBaseAsyncPage.iter_pagesc                   s:   |   }|std| |}| jj| j| j|dI d H S r   r   r   rY   rY   r\   r   0  s    
zBaseAsyncPage.get_next_pageN)r_   r`   ra   r   r   r|   rc   r   r   r   r   rY   rY   rY   r\   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ddddddddddd Zddd!d"d#Zd$d%d&d'd(Z	dd)d$d*d+d,d-Z
d.d/dd0d1d2Zd/d3d4d5d6Zddd!d7d8Zd/d9d4d:d;Zd<d=d>d?d@ZdAd/d$ddBdCdDdEdFZd)dGd$dCdHdIdJZd9ddKdLdMZedNdOdPdQZedRdOdSdTZedUdOdVdWZedXdOdYdZZd[d[dd\d]d^ZeddOd_d`ZeddOdadbZejdcdd!dddbZeddedfdOdgdhZdrdd/didjdkdldmZd$dd&dndoZddOdpdqZ dS )s
BaseClientr   r|   rv   _versionr   	_base_urlintmax_retrieszUnion[float, Timeout, None]timeoutzhttpx.Limits_limitsProxiesTypes | None_proxiesz!Transport | AsyncTransport | None
_transportrh   _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] | NonerU   )versionbase_urlr   r   r   limits	transportproxiesr   r   rW   c       
         C  sX   || _ | t|| _|| _|| _|| _|| _|| _|	p:i | _	|
pDi | _
|| _d | _d S rX   )r   _enforce_trailing_slashr   r   r   r   r   r   r   _custom_headers_custom_queryr   r   )r[   r   r   r   r   r   r   r   r   r   r   rY   rY   r\   r]   L  s    

zBaseClient.__init__rV   c                 C  s"   |j dr|S |j|j d dS )N   /raw_path)r   endswithrt   rZ   rY   rY   r\   r   f  s    z"BaseClient._enforce_trailing_slashhttpx.ResponserD   responserW   c                 C  s   |j r|jsd }d|j }nR|j }|}z t|}d|j d| }W n" tyn   |phd|j }Y n0 | j|||dS )NzError code: z - )bodyr   )		is_closedZis_stream_consumedstatus_codetextstripjsonloads	Exception_make_status_error)r[   r   r   err_msgZerr_textrY   rY   r\    _make_status_error_from_responsek  s    

z+BaseClient._make_status_error_from_responseobjectz_exceptions.APIStatusError)r   r   r   rW   c                C  s
   t  d S rX   )NotImplementedError)r[   r   r   r   rY   rY   r\   r     s    zBaseClient._make_status_errorOptional[int]r9   )remaining_retriesrx   rW   c                 C  s   |d ur|S | | jS rX   )get_max_retriesr   )r[   r   rx   rY   rY   r\   _remaining_retries  s    zBaseClient._remaining_retrieszhttpx.Headersrx   rW   c                 C  sj   |j pi }t| j|}| || t|}| j}|rf|j dkrf||vrf|j	s\| 
 |_	|j	||< |S )Nget)headers_merge_mappingsdefault_headers_validate_headersro   r%   r   methodloweridempotency_key_idempotency_key)r[   rx   r   Zheaders_dictr   Zidempotency_headerrY   rY   r\   _build_headers  s    



zBaseClient._build_headersc                 C  s4   t |}|jr0| jj|jd }| jj|dS |S )z
        Merge a URL argument together with any 'base_url' on the client,
        to create the URL used for the outgoing request.
        r   r   )r   Zis_relative_urlr   r   lstriprt   )r[   rS   Z	merge_urlZmerge_raw_pathrY   rY   r\   _prepare_url  s
    zBaseClient._prepare_urlhttpx.Requestc                 C  s4  t tjr t dt|dd i }|j}|jd urt|d u rJtt	|j}n*t
|r`t||j}ntdt| d| |}t| j|j}|ddkr|d |rt|stdt| d	| ||d
< | jjf |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)Zexclude_unsetzUnexpected JSON data type, z , cannot merge with `extra_body`Content-Typezmultipart/form-datazGExpected query input to be a dictionary for multipart requests but got z	 instead.data)r   r   r   rS   rT   r   files)$rH   isEnabledForloggingDEBUGdebugr7   	json_data
extra_jsonr   r!   r5   r   r   typer   r   rT   r   popr3   	TypeError_serialize_multipartformr|   Zbuild_requestrs   r   r'   r   r   rS   qs	stringifyr   rv   r   r   )r[   rx   kwargsr   r   rT   rY   rY   r\   _build_request  s>    



"zBaseClient._build_requestzMapping[object, object]zdict[str, object])r   rW   c                 C  sF   | j j|dd}i }|D ](\}}||v r8td| d|||< q|S )NZbrackets)Zarray_formatzDuplicate key encountered: z!; This behaviour is not supported)r   Zstringify_itemsrw   )r[   r   rl   Z
serializedkeyvaluerY   rY   r\   r     s    
z#BaseClient._serialize_multipartformType[ResponseT]z1type[Stream[Any]] | type[AsyncStream[Any]] | Noner(   )cast_torx   r   stream
stream_clsrW   c                C  s8   t || ||||d}|jjtdkr0tt|S | S )N)rawr}   r   r   r   rx   true)r<   r   r   r   r@   r   r(   parse)r[   r   rx   r   r   r   Zapi_responserY   rY   r\   _process_response  s    		
zBaseClient._process_responseztype[ResponseT])r   r   r   rW   c             
   C  s   |d u rt td S |tu 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y } zt||d|W Y d }~n
d }~0 0 d S )N)r   r   )type_r   )r   r   )r   r(   r0   inspectisclass
issubclassr1   buildr   r:   r;   r   ZValidationErrorrG   )r[   r   r   r   errrY   rY   r\   _process_response_data	  s    

z!BaseClient._process_response_datar   rW   c                C  s   |j tdkrdS dS )Nr   TF)r   r   rA   r[   r   rY   rY   r\   _should_stream_response_body!  s    z'BaseClient._should_stream_response_bodyr   ri   c                 C  s   t  S rX   r   rn   rY   rY   r\   r   '  s    zBaseClient.qszhttpx.Auth | Nonec                 C  s   d S rX   rY   rn   rY   rY   r\   custom_auth+  s    zBaseClient.custom_authzdict[str, str]c                 C  s   i S rX   rY   rn   rY   rY   r\   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   rn   rY   rY   r\   r   3  s    zBaseClient.default_headersr%   )r   r   rW   c                 C  s   dS )zaValidate the given default headers and custom headers.

        Does nothing by default.
        NrY   )r[   r   r   rY   rY   r\   r   >  s    	zBaseClient._validate_headersc                 C  s   | j j d| j S )Nz/Python )r   r_   r   rn   rY   rY   r\   r  I  s    zBaseClient.user_agentc                 C  s   | j S rX   )r   rn   rY   rY   r\   r   M  s    zBaseClient.base_urlz	URL | strc                 C  s"   |  t|tr|nt|| _d S rX   )r   rs   r   r   rZ   rY   rY   r\   r   Q  s    )maxsizezDict[str, str]c                 C  s(   d| j 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   rv   get_platformget_architectureplatformpython_implementationpython_versionrn   rY   rY   r\   r  U  s    zBaseClient.platform_headerszOptional[httpx.Headers]float)r   rx   response_headersrW   c                 C  s   | | j}zr|d urx|d}zt|}W q| tyt   tj|}|d u rTd}ntj|}t	|t

  }Y q|0 nd}W n ty   d}Y n0 d|  k rdkrn n|S d}	d}
|| }t|	td| |
}dd	t   }|| }|dkr|S dS )
Nzretry-afterr   <   g      ?g       @g       @r   g      ?)r   r   r   r  r   emailutilsparsedate_tz	mktime_tzr   timeminpowr   )r[   r   rx   r  r   Zretry_headerretry_afterretry_date_tuple
retry_dateZinitial_retry_delayZmax_retry_delayZ
nb_retriesZsleep_secondsjitterr   rY   rY   r\   _calculate_retry_timeout`  s0    

z#BaseClient._calculate_retry_timeoutc                 C  s`   |j d}|dkrdS |dkr$dS |jdkr2dS |jdkr@dS |jdkrNdS |jd	kr\dS dS )
Nzx-should-retryr   TfalseFi  i  i  i  )r   r   r   )r[   r   Zshould_retry_headerrY   rY   r\   _should_retry  s    



zBaseClient._should_retryc                 C  s   dt   S )Nzstainless-python-retry-)uuiduuid4rn   rY   rY   r\   r     s    zBaseClient._idempotency_key)N)!r_   r`   ra   rc   r   r?   r>   r]   r   r   r   r   r   r   r   r   r   r  r	  propertyr   r
  r  r   r   r  r   setterr   r  r%  r'  r   rY   rY   rY   r\   r   ?  s`   
&	6
 -r   c                      sN  e Zd ZU ded< ded< dZded< eedddddddd	d
dddddddd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dxd.d&d/d0d1d2d3d4d5Zedyd6d7d.d&d/d8d9d:d;d5Zedzd6dd<d.d&d/dd=d>d3d?d5Zd{d6dd<d.d&d/dd@d>d3dAd5Zd.d&dBdd@d>d3dCdDZd&d.ddEdd@d>dFdGdHZdIdJd&dKdLdMdNZei d6dOd	d.dPd8d9dQdRdSZei dTd	d.dPd0dUd2dVdWdSZei ddXd	d.dPdd@d>dVdYdSZi d6ddZd	d.dPdd@d>dVd[dSZedi dd6d\d	d.d]dPd^d8d9d_d`daZedi ddbd	d.d]dPd^d0dUd2dcdddaZedi ddded	d.d]dPd^dd@d>dcdfdaZdi dd6ddgd	d.d]dPd^dd@d>dcdhdaZdi did	d.d]dPd9djdkdlZddi dmd	d.d]d^dPd9dndodpZdi did	d.d]dPd9djdqdrZdi dsdtd	dIdJd]dPd	dKdudvdwZ  ZS )|r{   zhttpx.Clientr|   rh   _has_custom_http_clientNztype[Stream[Any]] | Noner   r   r   r   r   r   http_clientr   r   rv   r   r   !float | Timeout | None | NotGivenzTransport | Noner   Limits | Nonezhttpx.Client | Noner   r   rU   )r   r   r   r   r   r   r   r.  r   r   r   rW   c                  s   |d ur*t jdtdd |d ur.tdnt}|d urVt jdtdd |d urVtd|d ur~t jdtdd |d ur~tdt|s|r|jtkr|j}nt}t	 j
||tt||||||
|	|d	
 |ptj|tt||||d
| _t|| _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`)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )warningswarnDeprecationWarningrw   r=   r4   r   HTTPX_DEFAULT_TIMEOUTr>   superr]   r   r&   ro   Clientr|   rh   r,  )r[   r   r   r   r   r   r   r   r.  r   r   r   r   rY   r\   r]     sb    
zSyncAPIClient.__init__ri   c                 C  s   | j jS rX   r|   r   rn   rY   rY   r\   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|   closern   rY   rY   r\   rF    s    
zSyncAPIClient.closerL   r   c                 C  s   | S rX   rY   rn   rY   rY   r\   	__enter__  s    zSyncAPIClient.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbrW   c                 C  s   |    d S rX   rF  r[   rL  rM  rN  rY   rY   r\   __exit__  s    zSyncAPIClient.__exit__r9   r   c                 C  s   dS z#Hook for mutating the given optionsNrY   r[   rx   rY   rY   r\   _prepare_options  s    zSyncAPIClient._prepare_optionsr   r  c                 C  s   dS a  This method is used as a callback for mutating the `Request` object
        after it has been constructed.
        This is useful for cases where you want to add certain headers based off of
        the request properties, e.g. `url`, `method` etc.
        NrY   r  rY   rY   r\   _prepare_request!  s    	zSyncAPIClient._prepare_requestr   r   Literal[True]zType[_StreamT]rO   )r   rx   r   r   r   rW   c                C  s   d S rX   rY   r[   r   rx   r   r   r   rY   rY   r\   r   ,  s    
zSyncAPIClient.requestFr   Literal[False]r(   )r   rx   r   r   rW   c                C  s   d S rX   rY   )r[   r   rx   r   r   rY   rY   r\   r   8  s    	r   r   zType[_StreamT] | NonezResponseT | _StreamTc                C  s   d S rX   rY   rX  rY   rY   r\   r   C  s    
ztype[_StreamT] | Nonec                C  s   | j |||||dS N)r   rx   r   r   r   _requestrX  rY   rY   r\   r   O  s    	
int | Nonec          
      C  s  |  | | ||}| |}| | d }zH| jj|| j|pJ| j|dd}t	d|j
|j|j|j |  W n tjy }	 zr|dkr| |	jr|	j  | j||||	jj||dW  Y d }	~	S |	jjs|	j  | |	jd W Y d }	~	nd }	~	0  tjy }	 zf|d ur(|  |dkrd| j||||||d urP|jnd dW  Y d }	~	S t|d|	W Y d }	~	nd }	~	0  ty }	 zf|d ur|  |dkr| j||||||d ur|jnd dW  Y d }	~	S t|d|	W Y d }	~	n
d }	~	0 0 | j|||||dS N)r   )authr   zHTTP Request: %s %s "%i %s"r   r[  )r   r   r  )r   rx   r   r   r   )rT  r   r   rV  r|   sendr
  r	  rH   r   r   rS   r   reason_phraseraise_for_statusro   HTTPStatusErrorr'  r   rF  _retry_requestr   r   readr   TimeoutExceptionrE   r   rF   r   )
r[   r   rx   r   r   r   retriesr   r   r  rY   rY   r\   r^  `  s|    	




$

	 

	"zSyncAPIClient._requesthttpx.Headers | Nonerx   r   r   r  r   r   rW   c          	      C  sD   |d }|  |||}td|j| t| | j|||||dS Nr   z$Retrying request to %s in %f seconds)rx   r   r   r   r   )r%  rH   rr   rS   r  sleepr^  	r[   rx   r   r   r  r   r   	remainingr   rY   rY   r\   rf    s    

zSyncAPIClient._retry_requestrf   zType[SyncPageT]rI   r~   r   rx   rW   c                   s.   ddd fdd}|_ j|ddS )NrI   r   c                   s   | j  d | S )N)r}   r~   rx   )r   r   r~   rx   r[   rY   r\   r     s    z0SyncAPIClient._request_api_list.<locals>._parserFrY  )r   r   )r[   r~   r   rx   r   rY   rq  r\   r     s    zSyncAPIClient._request_api_listrx   r   r/   pathr   rx   r   rW   c                C  s   d S rX   rY   r[   rt  r   rx   r   rY   rY   r\   r     s    	zSyncAPIClient.getrx   ztype[_StreamT]rt  r   rx   r   r   rW   c                C  s   d S rX   rY   r[   rt  r   rx   r   r   rY   rY   r\   r     s    
rx   r   c                C  s   d S rX   rY   rx  rY   rY   r\   r     s    
rx   r   r   c                C  s.   t jf d|d|}tt| j||||dS Nr   )r   rS   r[  )r9   	constructr   r(   r   r[   rt  r   rx   r   r   optsrY   rY   r\   r     s    	)r   rx   r   r   Body | NoneRequestFiles | None)rt  r   r   rx   r   r   rW   c                C  s   d S rX   rY   )r[   rt  r   r   rx   r   r   rY   rY   r\   post  s    zSyncAPIClient.post)r   rx   r   )rt  r   r   rx   r   r   r   rW   c                C  s   d S rX   rY   r[   rt  r   r   rx   r   r   r   rY   rY   r\   r    s    )r   rx   r   r   c                C  s   d S rX   rY   r  rY   rY   r\   r  ,  s    )r   rx   r   r   r   c          	      C  s6   t jf d||t|d|}tt| j||||dS Nr  r   rS   r   r   r[  )r9   r|  r   r   r(   r   )	r[   rt  r   r   rx   r   r   r   r~  rY   rY   r\   r  :  s    r   rx   rt  r   r   rx   rW   c                C  s$   t jf d||d|}| ||S Npatchr   rS   r   r9   r|  r   r[   rt  r   r   rx   r~  rY   rY   r\   r  J  s    zSyncAPIClient.patchr   r   rx   rt  r   r   r   rx   rW   c                C  s*   t jf d||t|d|}| ||S Nputr  )r9   r|  r   r   r[   rt  r   r   r   rx   r~  rY   rY   r\   r  U  s    	zSyncAPIClient.putc                C  s$   t jf d||d|}| ||S Ndeleter  r  r  rY   rY   r\   r  c  s    zSyncAPIClient.deleter   r   rx   r   rt  r~   r   r   rx   r   rW   c                C  s&   t jf |||d|}| |||S Nr  r9   r|  r   r[   rt  r~   r   r   rx   r   r~  rY   rY   r\   get_api_listn  s    
zSyncAPIClient.get_api_list)N)N)N)N)r_   r`   ra   rc   r   r?   r    r]   r   rF  rG  rQ  rT  rV  r   r   r^  rf  r   r   r  r  r  r  r  __classcell__rY   rY   rB  r\   r{     s   
,P
  
  T
 "" r{   c                      sP  e Zd ZU ded< ded< dZded< eedddddddd	d
dddddddd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/d0d&d1d2d3d4d5d6Zedd7d0d&d8d9d2d:d;d<d6Zeddd=d0d&dd>d2d?d;d@d6Zd.dddAd0d&dd>d2d?d;dBd6Zd0d&dd>dCd?d;dDdEZd&d0ddFdd>d?dGdHdIZdJdKd&dLdMdNdOZei d.dPd	d0dQd1d3dRdSdTZei dUd	d0dQd8d9d:dVdWdTZei ddXd	d0dQdd>d?dVdYdTZi d.ddZd	d0dQdd>d?dVd[dTZeddi d.d\d	d0d]d^dQd1d3d_d`daZeddi dbd	d0d]d^dQd8d9d:dcdddaZeddi dded	d0d]d^dQdd>d?dcdfdaZddi d.ddgd	d0d]d^dQdd>d?dcdhdaZdi did	d0d]dQd3djdkdlZddi dbd	d0d]d^dQd3dmdndoZdi did	d0d]dQd3djdpdqZdi drdsd	dJdKd]dQd	dLdtdudvZ  ZS )wr   zhttpx.AsyncClientr|   rh   r,  Nztype[AsyncStream[Any]] | Noner   r-  rv   r   r   r/  zAsyncTransport | Noner   r0  zhttpx.AsyncClient | Noner   r   rU   )r   r   r   r   r   r   r   r   r.  r   r   rW   c                  s   |d ur*t jdtdd |	d ur.tdnt}|d urVt jdtdd |	d urVtd|d ur~t jdtdd |	d ur~tdt|s|	r|	jtkr|	j}nt}t	 j
|||tt||||||
|d	
 |	ptj|tt||||d
| _t|	| _d S )Nr1  r2  r3  r6  r7  r8  r9  r:  )
r   r   r   r   r   r   r   r   r   r   r;  )r<  r=  r>  rw   r=   r4   r   r?  r>   r@  r]   r   r&   ro   AsyncClientr|   rh   r,  )r[   r   r   r   r   r   r   r   r   r.  r   r   rB  rY   r\   r]     sb    
zAsyncAPIClient.__init__ri   c                 C  s   | j jS rX   rC  rn   rY   rY   r\   r     s    zAsyncAPIClient.is_closedc                   s   | j  I dH  dS )rD  N)r|   aclosern   rY   rY   r\   rF    s    zAsyncAPIClient.closerL   r   c                   s   | S rX   rY   rn   rY   rY   r\   
__aenter__  s    zAsyncAPIClient.__aenter__rH  rI  rJ  rK  c                   s   |   I d H  d S rX   rO  rP  rY   rY   r\   	__aexit__  s    zAsyncAPIClient.__aexit__r9   r   c                   s   dS rR  rY   rS  rY   rY   r\   rT    s    zAsyncAPIClient._prepare_optionsr   r  c                   s   dS rU  rY   r  rY   rY   r\   rV    s    	zAsyncAPIClient._prepare_requestF)r   r   r   rZ  r   r(   )r   rx   r   r   rW   c                  s   d S rX   rY   )r[   r   rx   r   r   rY   rY   r\   r     s    	zAsyncAPIClient.request)r   rW  ztype[_AsyncStreamT]rP   )r   rx   r   r   r   rW   c                  s   d S rX   rY   r[   r   rx   r   r   r   rY   rY   r\   r     s    
)r   r   ztype[_AsyncStreamT] | NonezResponseT | _AsyncStreamTc                  s   d S rX   rY   r  rY   rY   r\   r     s    
)r   r   r   c                  s   | j |||||dI d H S r\  r]  r  rY   rY   r\   r     s    	r_  c          
        sV  |  |I d H  | ||}| |}| |I d H  d }zN| jj|| j|pV| j|ddI d H }t	d|j
|j|j|j |  W n tjy* }	 z|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  | |	jd W Y d }	~	n d }	~	0  tjy }	 zr|d urT| I d H  |dkr| j||||||d ur||jnd dI d H W  Y d }	~	S t|d|	W Y d }	~	nd }	~	0  ty@ }	 zr|d ur| I d H  |dkr | j||||||d ur|jnd dI d H W  Y d }	~	S t|d|	W Y d }	~	n
d }	~	0 0 | j|||||dS r`  )rT  r   r   rV  r|   rb  r
  r	  rH   r   r   rS   r   rc  rd  ro   re  r'  r   r  rf  r   r   areadr   rh  rE   r   rF   r   )
r[   r   rx   r   r   r   ri  r   r   r  rY   rY   r\   r^  ,  s|    	

$

	 

	"zAsyncAPIClient._requestrj  rk  c          	        sP   |d }|  |||}td|j| t|I d H  | j|||||dI d H S rl  )r%  rH   rr   rS   anyiorm  r^  rn  rY   rY   r\   rf    s    
zAsyncAPIClient._retry_requestrf   r   z"AsyncPaginator[ModelT, AsyncPageT]rp  c                 C  s   t | |||dS )N)r}   rx   r   r~   )r   )r[   r~   r   rx   rY   rY   r\   r     s    z AsyncAPIClient._request_api_listrr  r/   rs  c                  s   d S rX   rY   ru  rY   rY   r\   r     s    	zAsyncAPIClient.getrv  rw  c                  s   d S rX   rY   rx  rY   rY   r\   r     s    
ry  c                  s   d S rX   rY   rx  rY   rY   r\   r     s    
rz  c                  s.   t jf d|d|}| j||||dI d H S r{  r  r}  rY   rY   r\   r     s    	)r   r   rx   r   r  r  )rt  r   r   r   rx   r   rW   c                  s   d S rX   rY   )r[   rt  r   r   r   rx   r   rY   rY   r\   r    s    zAsyncAPIClient.postr  )rt  r   r   r   rx   r   r   rW   c                  s   d S rX   rY   r[   rt  r   r   r   rx   r   r   rY   rY   r\   r    s    )r   r   rx   r   c                  s   d S rX   rY   r  rY   rY   r\   r    s    )r   r   rx   r   r   c          	        s<   t jf d||t|I d H d|}| j||||dI d H S r  r9   r|  r   r   )	r[   rt  r   r   r   rx   r   r   r~  rY   rY   r\   r    s    r  r  c                  s*   t jf d||d|}| ||I d H S r  r  r  rY   rY   r\   r    s    zAsyncAPIClient.patchr  c                  s6   t jf d||t|I d H d|}| ||I d H S r  r  r  rY   rY   r\   r    s    	zAsyncAPIClient.putc                  s*   t jf d||d|}| ||I d H S r  r  r  rY   rY   r\   r  !  s    zAsyncAPIClient.deleter   r  r  c                C  s&   t jf |||d|}| |||S r  r  r  rY   rY   r\   r  ,  s    zAsyncAPIClient.get_api_list)r_   r`   ra   rc   r   r?   r    r]   r   rF  r  r  rT  rV  r   r   r^  rf  r   r   r  r  r  r  r  r  rY   rY   rB  r\   r   |  s   
,P
T
 "" 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   rW   c                 C  s   i }|dur||d< |dur*t t||d< | dur:| |d< |durZi |di ||d< t|tsl||d< |dur|||d< t|r||d< |S )zECreate a dict of type RequestOptions without keys of NotGiven values.Nr   r   rT   r   r   r   )r   r*   r   rs   r'   r4   )r  r  r  r  r   r   r   rx   rY   rY   r\   make_request_options;  s     
r  c                   @  s.   e Zd ZdddddZeddddZd	S )
OtherPlatformrv   rU   namerW   c                 C  s
   || _ d S rX   r  r[   r  rY   rY   r\   r]   a  s    zOtherPlatform.__init__ri   c                 C  s   d| j  S )NzOther:r  rn   rY   rY   r\   __str__d  s    zOtherPlatform.__str__Nr_   r`   ra   r]   r   r  rY   rY   rY   r\   r  `  s   r  )MacOSLinuxWindowsFreeBSDOpenBSDiOSAndroidUnknownPlatformri   c                  C  s   t   } t    }d|v s(d|v r,dS | dkr8dS | dkrDdS d|v rPd	S | d
kr|t }|dkrldS |dkrxdS dS |rt|S dS )NiphoneZipadr  darwinr  windowsr  Zandroidr  linuxZfreebsdr  Zopenbsdr  r  r  )r  systemr   distroidr  )r  Zplatform_name	distro_idrY   rY   r\   r  x  s(    r  c                   @  s.   e Zd ZdddddZeddddZd	S )
	OtherArchrv   rU   r  c                 C  s
   || _ d S rX   r  r  rY   rY   r\   r]     s    zOtherArch.__init__ri   c                 C  s   d| j  S )Nzother:r  rn   rY   rY   r\   r    s    zOtherArch.__str__Nr  rY   rY   rY   r\   r    s   r  )x32x64armarm64unknownArchc                  C  sX   t  \} }t   }|dv r$dS |dkr0dS |dkr<dS | dkrHdS |rTt|S dS )	N)r  aarch64r  r  x86_64r  32bitr  r  )r  architecturemachiner   r  )Zpython_bitness_r  rY   rY   r\   r    s    r  zMapping[_T_co, Union[_T, Omit]]zDict[_T_co, _T])obj1obj2rW   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 rY   )rs   r"   ).0r   r   rY   rY   r\   
<dictcomp>      z#_merge_mappings.<locals>.<dictcomp>)rl   )r  r  mergedrY   rY   r\   r     s    r   c                   @  s  e Zd ZU ded< dddddZeeddd	d
ZeeddddZeeddddZ	eeddddZ
edddddZeddddZed>dddddZed?dddd d!Zeddd"d#Zed@dddd$d%Zedd&d'd(dd)d*d+Zeddd,d-Zeddd.d/ZedAdd0dd1d2ZedBdd3dd4d5Zed3dd6d7ZedCdd0dd8d9Zedd&d'd(dd)d:d;Zeddd<d=ZdS )DHttpxBinaryResponseContentr   r   rU   r   c                 C  s
   || _ d S rX   )r   )r[   r   rY   rY   r\   r]     s    z#HttpxBinaryResponseContent.__init__bytesri   c                 C  s   | j jS rX   )r   contentrn   rY   rY   r\   r    s    z"HttpxBinaryResponseContent.contentrv   c                 C  s   | j jS rX   )r   r   rn   rY   rY   r\   r     s    zHttpxBinaryResponseContent.textzOptional[str]c                 C  s   | j jS rX   )r   encodingrn   rY   rY   r\   r    s    z#HttpxBinaryResponseContent.encodingc                 C  s   | j jS rX   )r   charset_encodingrn   rY   rY   r\   r    s    z+HttpxBinaryResponseContent.charset_encodingr   )r   rW   c                 K  s   | j jf i |S rX   )r   r   )r[   r   rY   rY   r\   r     s    zHttpxBinaryResponseContent.jsonc                 C  s
   | j  S rX   )r   rg  rn   rY   rY   r\   rg    s    zHttpxBinaryResponseContent.readNr   zIterator[bytes])
chunk_sizerW   c                 C  s   | j |S rX   )r   
iter_bytesr[   r  rY   rY   r\   r    s    z%HttpxBinaryResponseContent.iter_byteszIterator[str]c                 C  s   | j |S rX   )r   	iter_textr  rY   rY   r\   r    s    z$HttpxBinaryResponseContent.iter_textc                 C  s
   | j  S rX   )r   
iter_linesrn   rY   rY   r\   r    s    z%HttpxBinaryResponseContent.iter_linesc                 C  s   | j |S rX   )r   iter_rawr  rY   rY   r\   r    s    z#HttpxBinaryResponseContent.iter_raw)r  zstr | os.PathLike[str]r_  )filer  rW   c                C  sL   t |dd,}| j|D ]}|| qW d    n1 s>0    Y  d S Nwb)mode)openr   r  write)r[   r  r  fr   rY   rY   r\   stream_to_file  s    z)HttpxBinaryResponseContent.stream_to_filec                 C  s
   | j  S rX   )r   rF  rn   rY   rY   r\   rF  
  s    z HttpxBinaryResponseContent.closec                   s   | j  I d H S rX   )r   r  rn   rY   rY   r\   r    s    z HttpxBinaryResponseContent.areadzAsyncIterator[bytes]c                   s   | j |S rX   )r   aiter_bytesr  rY   rY   r\   r    s    z&HttpxBinaryResponseContent.aiter_byteszAsyncIterator[str]c                   s   | j |S rX   )r   
aiter_textr  rY   rY   r\   r    s    z%HttpxBinaryResponseContent.aiter_textc                   s
   | j  S rX   )r   aiter_linesrn   rY   rY   r\   r    s    z&HttpxBinaryResponseContent.aiter_linesc                   s   | j |S rX   )r   	aiter_rawr  rY   rY   r\   r    s    z$HttpxBinaryResponseContent.aiter_rawc             	     s   t |}|jddI d H 4 I d H B}| j|2 z3 d H W }||I d H  q26 W d   I d H  q|1 I d H sr0    Y  d S r  )r  Pathr  r   r  r  )r[   r  r  rt  r  r   rY   rY   r\   astream_to_file"  s    
z*HttpxBinaryResponseContent.astream_to_filec                   s   | j  I d H S rX   )r   r  rn   rY   rY   r\   r  .  s    z!HttpxBinaryResponseContent.aclose)N)N)N)N)N)N)r_   r`   ra   rc   r]   r*  r   r  r   r  r  r   rg  r  r  r  r  r  rF  r  r  r  r  r  r  r  rY   rY   rY   r\   r    s\   

r  )
__future__r   osr   r  r(  r  r  r   r  r<  email.utilstypesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   	functoolsr   Ztyping_extensionsr   r   r  ro   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.   r/   r0   r1   r2   _utilsr3   r4   r5   Z_compatr6   r7   Z_modelsr8   r9   r:   r;   	_responser<   
_constantsr=   r>   r?   r@   rA   Z
_streamingrB   rC   rD   rE   rF   rG   	getLoggerr_   rH   rc   rI   rK   rL   rM   rO   rP   Zhttpx._configrQ   r?  ImportErrorrR   rd   rz   r   r   rA  r  r   r   r   r{   r   r  r  r  r  r  r  r  r   r  rY   rY   rY   r\   <module>   s   DT#1.'&  p   R   D %	&	