
    Fgz$              
          S SK Jr  S SKJrJr  SSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKJr  SSKJrJrJrJr  S SKJr  SSKJr  SSKrSrS	rS
r " S S5      r " S S5      r\" SS9S\\   S\S\\   S\\   4S j5       rg)   )version)ConnectionExceptionDeepLException    N)	lru_cache)DictOptionalTupleUnion)log_info)util   g      $@c                   F    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
 rS rSrg)_BackoffTimer   zImplements exponential-backoff strategy.
This strategy is based on the GRPC Connection Backoff Protocol:
https://github.com/grpc/grpc/blob/master/doc/connection-backoff.mdg      ?g      ^@gq=
ףp?g?c                     SU l         U R                  U l        [        R                  " 5       U R                  -   U l        g )Nr   )_num_retriesBACKOFF_INITIAL_backofftime	_deadlineselfs    b/Users/admin/workspace/ai/PDFMathTranslate/myenv/lib/python3.13/site-packages/deepl/http_client.py__init___BackoffTimer.__init__#   s-    ,,t}}4    c                     U R                   $ N)r   r   s    r   get_num_retries_BackoffTimer.get_num_retries(   s       r   c                 >    [        U R                  5       [        5      $ r   )maxget_time_until_deadlinemin_connection_timeoutr   s    r   get_timeout_BackoffTimer.get_timeout+   s    4//13IJJr   c                 Z    [        U R                  [        R                  " 5       -
  S5      $ )Ng        )r#   r   r   r   s    r   r$   %_BackoffTimer.get_time_until_deadline.   s    4>>DIIK/55r   c                 x   [         R                  " U R                  5       5        [        U R                  U R
                  -  U R                  5      U l        [         R                   " 5       U R                  SU R                  [        R                  " SS5      -  -   -  -   U l
        U =R                  S-  sl        g )Nr   )r   sleepr$   minr   BACKOFF_MULTIPLIERBACKOFF_MAXBACKOFF_JITTERrandomuniformr   r   r   s    r   sleep_until_deadline"_BackoffTimer.sleep_until_deadline1   s    

4//12 MMD333T5E5E
 t}}##fnnR&;;;(
 
 	Qr   )r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r/   r0   r.   r   r    r&   r$   r3   __static_attributes__ r   r   r   r      s9    J OKN5
!K6r   r   c                      \ rS rSr   SS\\\S4   S\S\\\S4   4S jjrS\S\4S	 jr	S
 r
 SS\S\S\\   S\\   S\S\S\\\\\R                   4   4   4S jjr SS\S\S\\   S\\   S\S\S\\\\\R                   4   4   4S jjr\4S\R(                  S\S\S\\\\\R                   4   4   4S jjrS rS\S\S\\   S\\   S\S\R(                  4S jrSrg)
HttpClientA   Nproxysend_platform_info
verify_sslc                 P   [         R                  " 5       U l        U(       a^  [        U[        5      (       a  XS.n[        U[
        5      (       d  [        S5      eU R                  R                  R                  U5        Ub  X0R                  l	        X l
        S U l        S U l        g )N)httphttpszhproxy may be specified as a URL string or dictionary containing URL strings for the http and https keys.)requestsSession_session
isinstancestrdict
ValueErrorproxiesupdateverify_send_platform_info_app_info_name_app_info_version)r   r?   r@   rA   s       r   r   HttpClient.__init__B   s     !((*%%%!&7eT** J  MM!!((/!#-MM #5 -104r   app_info_nameapp_info_versionc                     Xl         X l        U $ r   )rP   rQ   )r   rS   rT   s      r   set_app_infoHttpClient.set_app_infoX   s    +!1r   c                 8    U R                   R                  5         g r   )rG   closer   s    r   rY   HttpClient.close]   s    r   methodurldatajsonheadersstreamreturnc                    [        5       nU R                  " XX4U40 UD6n	  U R                  XUR                  5       S9n
SnU R                  XUR                  5       5      (       d  U
b  U
$ UeUb  [        S[        U5       35        [        SUR                  5       S-    SU SU SUR                  5       S	 S
3	5        UR                  5         M  ! [         a  nSn
Un SnANSnAff = f)zzMakes API request, retrying if necessary, and returns response.

Return and exceptions are the same as function request().r`   timeoutNz#Encountered a retryable-exception: zStarting retry r   z for request  z after sleeping for z.2fz	 seconds.)r   _prepare_request_internal_requestr&   	Exception_should_retryr    r   rI   r$   r3   )r   r[   r\   r]   r^   r_   r`   kwargsbackoffrequestresponse	exceptiones                r   request_with_backoffHttpClient.request_with_backoff`   s(     /''W
06
 11G4G4G4I 2  !	
 %%W%<%<%>  '#O#O$9#i.9IJ !'"9"9";a"?!@(!C5 4224S9D
 ((*;   	s    C 
C*C%%C*c                 N    U R                   " XX4U40 UD6nU R                  X5      $ )zMakes API request and returns response content.

Response is returned as HTTP status code and either content string (if
stream is False) or response (if stream is True).

If no response is received will raise ConnectionException.)rf   rg   )	r   r[   r\   r]   r^   r_   r`   rj   rl   s	            r   rl   HttpClient.request   s6    " ''W
06
 %%g66r   rl   rd   c                 `    U R                   R                  " U4X#S.UD6nU(       a  UR                  U4$  SUl        UR                  UR                  4UR                  5         $ ! UR                  5         f = f! [        R                  R                   a  nSU 3n[        USS9UeS nAf[        R                  R                   a  nSU 3n[        USS9UeS nAf[        R                  R                   a  nSU 3n[        USS9UeS nAf[         a  nS	U 3n[        USS9UeS nAff = f)
Nrc   zUTF-8zConnection failed: T)should_retryzRequest timed out: zRequest failed: FzUnexpected request failure: )rG   sendstatus_codeencodingtextrY   rE   
exceptionsConnectionErrorr   TimeoutRequestExceptionrh   )r   rl   r`   rd   rj   rm   ro   messages           r   rg   HttpClient._internal_request   s8   	J}})) &;AH ++X55%(/H%#//>NN$HNN$""22 	I+A3/G%gDAqH""** 	I+A3/G%gDAqH""33 	J(,G%gEBI 	J4QC8G%gEBI	JsR   3A; A& A; &A88A; ;D-B))!D-
C!D-;DD-D((D-c                     U[         :  a  gUc  UR                  $ Uu  pEU[        R                  R                  :H  =(       d    U[        R                  R
                  :  $ )NF)max_network_retriesru   rC   
HTTPStatusTOO_MANY_REQUESTSINTERNAL_SERVER_ERROR)r   rm   rn   num_retriesrw   _s         r   ri   HttpClient._should_retry   sU    --)))!doo??? 
4??@@@	
r   c           	          UR                  S[        [        U R                  U R                  U R
                  5      5        [        [        [        [        R                  R                  S5      5      5      S:  a  XFS'   OUb  [        R                  " U5      nSUS'   [        R                  " X4X5S.UD6R                  5       $ ! [          a  n[#        SU 35      UeS nAff = f)	Nz
User-Agent.)      r   r^   zapplication/jsonzContent-Type)r]   r_   z(Error occurred while preparing request: )
setdefault_generate_user_agent
user_agentrO   rP   rQ   tuplemapintrE   __version__splitjson_moduledumpsRequestpreparerh   r   )r   r[   r\   r]   r^   r_   rj   ro   s           r   rf   HttpClient._prepare_request   s    	$,,''**	 Sh2288=>?9L!%v! #((.*<'##"&;Agi  	 :1#>	s   CC 
C$CC$)rP   rQ   rO   rG   )NTN)F)r5   r6   r7   r8   r   r   rI   boolr   rV   rY   r	   rJ   r
   r   rE   Responserp   rl   r%   PreparedRequestfloatrg   ri   rf   r:   r;   r   r   r=   r=   A   s    )-#'-1	5T3_%5 !5 $T/*	5,#  
 /+/+ /+ tn	/+
 tn/+ /+ /+ 
sE#x00011	2/+p 77 7 tn	7
 tn7 7 7 
sE#x00011	274 0	J))J J 	J 
sE#x00011	2JB
"" " tn	"
 tn" " 
	!	!"r   r=   r   )maxsizeuser_agent_strr@   rS   rT   c                 ~   U (       a  U nO]S[         R                   3nU(       aC   US[        R                  " 5        S[        R                  " 5        S[        R
                   3-  nU(       a  U(       a  USU SU 3-  nU$ ! [         a/    [        R                  " S[        R                  " 5       -   5         NSf = f)Nzdeepl-python/z (z	) python/z
 requests/z.Exception when querying platform information:
re   /)r   VERSIONplatformpython_versionrE   r   rh   r   r   	traceback
format_exc)r   r@   rS   rT   library_info_strs        r   r   r      s     )*7??*;<
 **,- .&5578 9  ( 4 457  )aa0@/ABB  E**,-s   AB 6B<;B<) r   rz   r   r   rC   r   r1   rE   r   r   	functoolsr   typingr   r	   r
   r   r   r   deeplr^   r   r   r   r%   r   r=   rI   r   r   r;   r   r   <module>r      s   
  ;        / /    
  % %Pv vr 1SM C= sm	 r   