
    _j+)                     n    S r SSKrSSKJrJrJr  SSKJrJrJ	r	  SSK
r
SSKJr  \" 5       r " S S5      rg)	z#
HTTP client utilities for v2 API.
    N)DictAnyOptional)urlparse
urlunparseurljoin   )get_versionc                      \ rS rSrSr   SS\\   S\S\\   S\S\4
S	 jjr	S
\S\4S jr
  SS\\   S\S\\\4   4S jjr    SS
\S\\\4   S\\\\4      S\\   S\\   S\\   S\R                   4S jjr    SS
\S\\\4   S\\\4   S\\\\4      S\\   S\\   S\\   S\R                   4S jjr    SS
\S\\\\4      S\\   S\\   S\\   S\R                   4S jjr    SS
\S\\\\4      S\\   S\\   S\\   S\R                   4S jjr    SS
\S\\\4   S\\\\4      S\\   S\\   S\\   S\R                   4S jjrSrg)
HttpClient   z0HTTP client with retry logic and error handling.Napi_keyapi_urltimeoutmax_retriesbackoff_factorc                 @    Xl         X l        X0l        X@l        XPl        g )N)r   r   r   r   r   )selfr   r   r   r   r   s         S/home/rurouni/.local/lib/python3.13/site-packages/firecrawl/v2/utils/http_client.py__init__HttpClient.__init__   s     &,    endpointreturnc                 4   [        U R                  5      n[        U5      nUR                  (       a  UR                  =(       d    SnUR                  =(       d    SUR                  =(       d    S:w  a8  [        UR                  =(       d    SUR                  USUR                  S45      $ [        UR                  =(       d    SUR                  USUR                  S45      $ U R                  R                  S5      (       a  U R                  OU R                   S3nUR                  S5      (       a[  [        SU 35      nUR                  =(       d    Sn[        UR                  =(       d    SUR                  USUR                  S45      $ [        XQ5      $ )N/ httpsz//zhttps:)r   r   netlocpathhostnamer   schemequeryendswith
startswithr   )r   r   baseepr    base_strep2s          r   
_build_urlHttpClient._build_url   s2   %h 9977>cD!rt}}':;!4;;#9'4;;bRTRZRZ\^"_``t{{5gt{{D"bhhXZ[\\ $(<<#8#8#=#=4<<dll^STCUt$$VH:./C88?sDt{{5gt{{D"ciiY[\]]x**r   idempotency_keyinclude_json_content_typec                 ~    0 nU(       a  SUS'   U R                   (       a  SU R                    3US'   U(       a  XS'   U$ )z!Prepare headers for API requests.zapplication/jsonContent-TypezBearer Authorizationzx-idempotency-key)r   )r   r,   r-   headerss       r   _prepare_headersHttpClient._prepare_headers4   sC     #%$&8GN#<<)0'?GO$+:'(r   datar1   retriesc                 n   Uc  U R                  5       nUc  U R                  nUc  U R                  nUc  U R                  n[	        U5      nS[
         3US'   U R                  U5      nSn	[        SU5      n
[        U
5       HS  n [        R                  " UUUUS9nUR                  S:X  a&  XS-
  :  a  [        R                  " USU-  -  5        MQ  Us  $    U	=(       d    [        S5      e! [        R                   a3  nUn	XS-
  :X  a  Ue[        R                  " USU-  -  5         SnAM  SnAff = f)	z%Make a POST request with retry logic.Npython-sdk@originr	   )r1   jsonr        z Unexpected error in POST request)r2   r   r   r   dictversionr*   maxrangerequestspoststatus_codetimesleepRequestException	Exceptionr   r   r4   r1   r   r5   r   payloadurllast_exceptionnum_attemptsattemptresponsees                 r   rA   HttpClient.postG   s<    ?++-G?llG?&&G!!00Nt*)'3ooh'1g\*G<#==# #	 ''3.!11

>Q'\#BC  +. M	*L MM ,, <!"Q..G

>Q'\:;;	<   AC-C--D4(D//D4filesc           	         U R                  SS9nU(       a  UR                  U5        UR                  SS5        UR                  SS5        Uc  U R                  nUc  U R                  nUc  U R
                  nU R                  U5      n	Sn
[        SU5      n[        U5       HT  n [        R                  " U	UUUUS9nUR                  S:X  a&  XS-
  :  a  [        R                  " US	U-  -  5        MR  Us  $    U
=(       d    [        S
5      e! [        R                   a3  nUn
XS-
  :X  a  Ue[        R                  " US	U-  -  5         SnAM  SnAff = f)z9Make a multipart/form-data POST request with retry logic.F)r-   r/   Nzcontent-typer	   )r1   r4   rQ   r   r:   r;   z*Unexpected error in multipart POST request)r2   updatepopr   r   r   r*   r>   r?   r@   rA   rB   rC   rD   rE   rF   )r   r   r4   rQ   r1   r   r5   r   multipart_headersrI   rJ   rK   rL   rM   rN   s                  r   post_multipartHttpClient.post_multipart{   sW    !11E1R$$W-nd3nd3?llG?&&G!!00Nooh'1g\*G<#==-# ''3.!11

>Q'\#BC  +, W	*V WW ,, <!"Q..G

>Q'\:;;	<s   'AD5DE#(EEc                 >   Uc  U R                  5       nUc  U R                  nUc  U R                  nUc  U R                  nU R	                  U5      nSn[        SU5      n[        U5       HR  n	 [        R                  " UUUS9n
U
R                  S:X  a&  XS-
  :  a  [        R                  " USU	-  -  5        MP  U
s  $    U=(       d    [        S5      e! [        R                   a3  nUnXS-
  :X  a  Ue[        R                  " USU	-  -  5         SnAM  SnAff = f)z$Make a GET request with retry logic.Nr	   r1   r   r:   r;   zUnexpected error in GET request)r2   r   r   r   r*   r>   r?   r@   getrB   rC   rD   rE   rF   r   r   r1   r   r5   r   rI   rJ   rK   rL   rM   rN   s               r   rZ   HttpClient.get   s    ?++-G?llG?&&G!!00Nooh'1g\*G<#<<## ''3.!11

>Q'\#BC  +, L	*K LL ,, <!"Q..G

>Q'\:;;	<   /A
C;CD)(DDc                 >   Uc  U R                  5       nUc  U R                  nUc  U R                  nUc  U R                  nU R	                  U5      nSn[        SU5      n[        U5       HR  n	 [        R                  " UUUS9n
U
R                  S:X  a&  XS-
  :  a  [        R                  " USU	-  -  5        MP  U
s  $    U=(       d    [        S5      e! [        R                   a3  nUnXS-
  :X  a  Ue[        R                  " USU	-  -  5         SnAM  SnAff = f)z'Make a DELETE request with retry logic.Nr	   rY   r:   r;   z"Unexpected error in DELETE request)r2   r   r   r   r*   r>   r?   r@   deleterB   rC   rD   rE   rF   r[   s               r   r_   HttpClient.delete   s    ?++-G?llG?&&G!!00Nooh'1g\*G<#??## ''3.!11

>Q'\#BC  +, O	*N OO ,, <!"Q..G

>Q'\:;;	<r]   c                 n   Uc  U R                  5       nUc  U R                  nUc  U R                  nUc  U R                  n[	        U5      nS[
         3US'   U R                  U5      nSn	[        SU5      n
[        U
5       HS  n [        R                  " UUUUS9nUR                  S:X  a&  XS-
  :  a  [        R                  " USU-  -  5        MQ  Us  $    U	=(       d    [        S5      e! [        R                   a3  nUn	XS-
  :X  a  Ue[        R                  " USU-  -  5         SnAM  SnAff = f)	z&Make a PATCH request with retry logic.Nr7   r8   r	   )r9   r1   r   r:   r;   z!Unexpected error in PATCH request)r2   r   r   r   r<   r=   r*   r>   r?   r@   patchrB   rC   rD   rE   rF   rG   s                 r   rb   HttpClient.patch  s;    ?++-G?llG?&&G!!00Nt*)'3ooh'1g\*G<#>> ##	 ''3.7A=M3MJJ~g>? +$ N	*M NN ,, <!"Q..G

>Q'\:;;	<rP   )r   r   r   r   r   )N   g      ?)NT)NNNN)__name__
__module____qualname____firstlineno____doc__r   strfloatintr   r*   boolr   r2   r   r@   ResponserA   rV   rZ   r_   rb   __static_attributes__ r   r   r   r      s*   : $( #-#- - %	-
 - -+3 +3 +0 *.*.!# $( 
c3h	. -1#'!%*.2N2N 38n2N $sCx.)	2N
 %2N #2N !2N 
		2Nr -1#'!%*.1X1X 38n1X CH~	1X
 $sCx.)1X %1X #1X !1X 
		1Xl -1#'!%*.-M-M $sCx.)-M %	-M
 #-M !-M 
		-Md -1#'!%*.-P-P $sCx.)-P %	-P
 #-P !-P 
		-Pf -1#'!%*.,O,O 38n,O $sCx.)	,O
 %,O #,O !,O 
		,O ,Or   r   )ri   rC   typingr   r   r   urllib.parser   r   r   r@   r
   r=   r   rp   r   r   <module>rs      s6     & & 6 6  $
-kO kOr   