
    Jbif1                        d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	Z	ddl
mZmZmZmZmZ dZd	Zh d
ZdZ G d d          ZdS )z!Async HTTP client for Honcho SDK.    )annotationsN)AsyncIterator)Anycast   )ConnectionErrorRateLimitErrorServerErrorTimeoutErrorcreate_error_from_responseg      N@   >             g      ?c                  f   e Zd ZU dZ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edddddAdZdBdZdCdZ	dDdZ
ddddd dEd'Zdddd(dFd)Zddddd dGd*Zddddd dGd+Zddddd dGd,Zddddd dGd-Zddddd dHd/Zddddd0dId4ZdJd5ZdKdLd7ZdMd9ZdNd<ZdOd=ZdKdPd@ZdS )QAsyncHonchoHTTPClientzJAsync HTTP client for the Honcho API with retry logic and timeout support.strbase_url
str | Noneapi_keyfloattimeoutintmax_retriesdict[str, str]default_headersdict[str, Any] | Nonedefault_querybool_owns_clientzhttpx.AsyncClient_clientN)r   r   r   r   r    http_clientdict[str, str] | Noner$   httpx.AsyncClient | NonereturnNonec                  |                     d          | _        || _        || _        || _        ddi|pi | _        || _        |d u | _        |p,t          j	        | j        t          j
        |                    | _        d S )N/Content-Typezapplication/json)r   r   )rstripr   r   r   r   r   r    r"   httpxAsyncClientTimeoutr#   )selfr   r   r   r   r   r    r$   s           R/DATA/AppData/hermes/venv/lib/python3.11/site-packages/honcho/http/async_client.py__init__zAsyncHonchoHTTPClient.__init__%   s     !,,&. 
$" 
 +'4/" 
e&7]M'**'
 '
 '
    c                Z   K   | j         r!| j                                         d{V  dS dS )z#Close the HTTP client if we own it.N)r"   r#   acloser0   s    r1   closezAsyncHonchoHTTPClient.close@   sG       	(,%%'''''''''''	( 	(r3   'AsyncHonchoHTTPClient'c                
   K   | S N r6   s    r1   
__aenter__z AsyncHonchoHTTPClient.__aenter__E   s      r3   argsr   c                >   K   |                                   d {V  d S r:   )r7   )r0   r=   s     r1   	__aexit__zAsyncHonchoHTTPClient.__aexit__H   s,      jjllr3   bodyqueryheadersr   methodpathrA   rB   rC   float | Nonec                 K   |                      |          }|                     |          }||n| j        }	i | j        pi |pi pd}
d}d}|| j        k    r#	 | j                            ||||nd|                     |
          ||	           d{V }|j        r|j	        }|sdS |
                                S |                     |          }|                     |          }t          |j        |                    d          p	d|j         ||          }|j        t           v rB|| j        k     r7|}t#          j        |                     ||                     d{V  |dz  }|# t(          j        t(          j        t(          j        f$ r}t1          |t(          j                  rt3          d|	 d	          }nt5          d
|           }|| j        k     r:|}t#          j        |                     |                     d{V  |dz  }Y d}~||d}~wt2          t4          t6          t8          f$ r  t:          $ r3}t=          |d          r t5          t?          |                    |d}~ww xY w|r|t5          d          )zAMake an HTTP request with automatic retries and timeout handling.Nr   jsonparamsrC   r   messageHTTP )rA   retry_afterr   zRequest timed out after szConnection error: statuszRequest failed after retries) 
_build_url_build_headersr   r    r   r#   request_clean_query_params
is_successtextrI   _parse_error_body_parse_retry_afterr   status_codegetRETRY_STATUS_CODESasynciosleep_get_retry_delayr-   TimeoutExceptionNetworkErrorRemoteProtocolError
isinstancer   r   r	   r
   	Exceptionhasattrr   )r0   rD   rE   rA   rB   rC   r   urlrequest_headersrequest_timeoutmerged_query
last_errorattemptresponserU   
error_bodyrM   errores                      r1   rR   zAsyncHonchoHTTPClient.requestK   s5      ood##--g66%,%8''dlF4-3F"FN$'+
)))>5!%!5!5!%!1t33LAA++ "6 " "       & +#=D $#t#==??* "33H==
"55h??2(NN9--O1O9M1O1O# +	   (,>>>$"222!&J!-(=(=g{(S(STTTTTTTTTqLG &") # # #
 a!788 F()VO)V)V)VWWEE+,D,D,DEEET---!&J!-(=(=g(F(FGGGGGGGGGqLGHHHH" />;O    5 5 51h'' %c!ff--14	5  	<===s?   AE. )E. =B-E. ,E. .&I9A?HH*I9.I44I9rB   rC   r   c               F   K   |                      d||||           d{V S )zMake a GET request.GETrn   NrR   )r0   rE   rB   rC   r   s        r1   rY   zAsyncHonchoHTTPClient.get   sL       \\4ugw " 
 
 
 
 
 
 
 
 	
r3   c               H   K   |                      d|||||           d{V S )zMake a POST request.POSTr@   Nrq   r0   rE   rA   rB   rC   r   s         r1   postzAsyncHonchoHTTPClient.post   sN       \\Dt5'7 " 
 
 
 
 
 
 
 
 	
r3   c               H   K   |                      d|||||           d{V S )zMake a PUT request.PUTr@   Nrq   rt   s         r1   putzAsyncHonchoHTTPClient.put   sN       \\4d%' " 
 
 
 
 
 
 
 
 	
r3   c               H   K   |                      d|||||           d{V S )zMake a PATCH request.PATCHr@   Nrq   rt   s         r1   patchzAsyncHonchoHTTPClient.patch   sN       \\TE7G " 
 
 
 
 
 
 
 
 	
r3   c               H   K   |                      d|||||           d{V S )zMake a DELETE request.DELETEr@   Nrq   rt   s         r1   deletezAsyncHonchoHTTPClient.delete   sN       \\dUGW " 
 
 
 
 
 
 
 
 	
r3   AsyncIterator[bytes]c                K   |                      |          }i |                     |          ddi}||n| j        }	i | j        pi |pi pd}
| j                            ||||nd|                     |
          ||	          4 d{V 	 }|j        sc|                                 d{V  | 	                    |          }t          |j        |                    d          p	d|j         |          |                                2 3 d{V }|W V  6 	 ddd          d{V  dS # 1 d{V swxY w Y   dS )z?Make a streaming request that yields raw bytes for SSE parsing.Acceptztext/event-streamNrH   rK   rL   rA   )rP   rQ   r   r    r#   streamrS   rT   areadrV   r   rX   rY   aiter_bytes)r0   rD   rE   rA   rB   rC   r   rd   re   rf   rg   rj   rk   chunks                 r1   r   zAsyncHonchoHTTPClient.stream   sL      ood##
!!'**
)
 
 &-%8''dlF4-3F"FN$<&&)t++L99## ' 
 
 	 	 	 	 	 	 	 	 & nn&&&&&&&&&!33H==
0(NN9--O1O9M1O1O#     (3355       e  65%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A?D.DD..
D8;D8)datarB   rC   r   filesdict[str, Any]r   c                 K   |                      |          }|                     |          }|                    dd           ||n| j        }	i | j        pi |pi pd}
| j                            ||||                     |
          ||	           d{V }|j        sI| 	                    |          }t          |j        |                    d          p	d|j         |          |j        }|sdS |                                S )z6Make a multipart form data request (for file uploads).r+   N)r   r   rJ   rC   r   rK   rL   r   )rP   rQ   popr   r    r#   ru   rS   rT   rV   r   rX   rY   rU   rI   )r0   rE   r   r   rB   rC   r   rd   re   rf   rg   rj   rk   rU   s                 r1   uploadzAsyncHonchoHTTPClient.upload  sP      ood##--g66ND111%,%8''dlF4-3F"FN$**++L99## + 
 
 
 
 
 
 
 
 " 	//99J,$y))K-KX5I-K-K    } 	4}}r3   c                Z    |                     d          r| j         | S | j         d| S )zBuild the full URL from path.r*   )
startswithr   )r0   rE   s     r1   rP   z AsyncHonchoHTTPClient._build_url9  s?    ??3 	,m+T+++-(($(((r3   extrac                n    i | j         }| j        rd| j         |d<   |r|                    |           |S )z%Build request headers including auth.zBearer Authorization)r   r   update)r0   r   rC   s      r1   rQ   z$AsyncHonchoHTTPClient._build_headers?  sM    *T)*< 	@'?'?'?GO$ 	"NN5!!!r3   rJ   c                F    |dS d |                                 D             S )z%Remove None values from query params.Nc                    i | ]
\  }}|||S r:   r;   ).0kvs      r1   
<dictcomp>z=AsyncHonchoHTTPClient._clean_query_params.<locals>.<dictcomp>Q  s    AAAA1=1===r3   )items)r0   rJ   s     r1   rS   z)AsyncHonchoHTTPClient._clean_query_paramsK  s*     >4AAAAAAr3   rj   httpx.Responsec                   	 |                                 }t          |t                    rjt          t          t          t
          f         |          }d|                    d          p)|                    d          p|                    d          i|S dt	          |          iS # t          $ r dd|j         icY S w xY w)zParse error body from response.rK   detailrl   rL   )	rI   ra   dictr   r   r   rY   rb   rX   )r0   rj   rA   	body_dicts       r1   rV   z'AsyncHonchoHTTPClient._parse_error_bodyS  s    	? D$%% ,0c3h,F,F	y}}X66  . }}Y// . }}W--  	  s4yy)) 	? 	? 	?=x';==>>>>	?s   BB& B& &B?>B?c                f   |j                             d          }|sdS 	 t          |          S # t          $ r Y nw xY w	 ddl}ddlm} ddlm} t          | ||                    }|	                                }t          d||                                z
            S # t          $ r Y dS w xY w)zParse Retry-After header.zRetry-AfterNr   )datetime)parsedate_to_datetimeg        )rC   rY   r   
ValueErrortimer   email.utilsr   r   	timestampmaxrb   )r0   rj   headerr   r   r   dtr   s           r1   rW   z(AsyncHonchoHTTPClient._parse_retry_afterc  s    !%%m44 	4	==  	 	 	D	
	KKK))))))999999*?*?*G*GHHB!||~~IsI		3444 	 	 	44	s   / 
<< A!B" "
B0/B0ri   rM   c                $    ||S t           d|z  z  S )z"Calculate delay before next retry.Nr   )INITIAL_RETRY_DELAY)r0   ri   rM   s      r1   r]   z&AsyncHonchoHTTPClient._get_retry_delay{  s    ""aj11r3   )r   r   r   r   r   r   r   r   r   r%   r    r   r$   r&   r'   r(   )r'   r(   )r'   r8   )r=   r   r'   r(   )rD   r   rE   r   rA   r   rB   r   rC   r%   r   rF   r'   r   )
rE   r   rB   r   rC   r%   r   rF   r'   r   )rE   r   rA   r   rB   r   rC   r%   r   rF   r'   r   )rD   r   rE   r   rA   r   rB   r   rC   r%   r   rF   r'   r   )rE   r   r   r   r   r   rB   r   rC   r%   r   rF   r'   r   )rE   r   r'   r   r:   )r   r%   r'   r   )rJ   r   r'   r   )rj   r   r'   r   )rj   r   r'   rF   )ri   r   rM   rF   r'   r   )__name__
__module____qualname____doc____annotations__DEFAULT_TIMEOUTDEFAULT_MAX_RETRIESr2   r7   r<   r?   rR   rY   ru   rx   r{   r~   r   r   rP   rQ   rS   rV   rW   r]   r;   r3   r1   r   r      s        TTMMMNNN####(((( #(.15/304
 
 
 
 
 
6( ( ( (
       '+)- $W> W> W> W> W> W>z (,)- $
 
 
 
 
 
" '+)- $
 
 
 
 
 
$ '+)- $
 
 
 
 
 
$ '+)- $
 
 
 
 
 
$ '+)- $
 
 
 
 
 
& '+)- $& & & & & &Z '+'+)- $& & & & & &P) ) ) )
 
 
 
 
B B B B? ? ? ?    02 2 2 2 2 2 2r3   r   )r   
__future__r   r[   collections.abcr   typingr   r   r-   
exceptionsr   r	   r
   r   r   r   r   rZ   r   r   r;   r3   r1   <module>r      s    ' ' " " " " " "  ) ) ) ) ) )                        ...  g2 g2 g2 g2 g2 g2 g2 g2 g2 g2r3   