
    iA                     |    d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
Z
ddlmZ  e            Z G d d          ZdS )	z#
HTTP client utilities for v2 API.
    N)DictAnyOptional)urlparse
urlunparseurljoin   )get_versionc                      e Zd ZdZ	 	 	 ddee         dedee         ded	ef
d
ZdedefdZ	ddee         de
eef         fdZ	 	 	 	 ddede
eef         dee
eef                  dee         dee         d	ee         dej        fdZ	 	 	 	 ddedee
eef                  dee         dee         d	ee         dej        fdZ	 	 	 	 ddedee
eef                  dee         dee         d	ee         dej        fdZdS )
HttpClientz0HTTP client with retry logic and error handling.N         ?api_keyapi_urltimeoutmax_retriesbackoff_factorc                 L    || _         || _        || _        || _        || _        d S N)r   r   r   r   r   )selfr   r   r   r   r   s         h/home/agentuser/.hermes/hermes-agent/venv/lib/python3.11/site-packages/firecrawl/v2/utils/http_client.py__init__zHttpClient.__init__   s/     &,    endpointreturnc                 J   t          | j                  }t          |          }|j        ri|j        pd}|j        pd|j        pdk    r&t          |j        pd|j        |d|j        df          S t          |j        pd|j        |d|j        df          S | j                            d          r| j        n	| j         d}|	                    d          rAt          d|           }|j        pd}t          |j        pd|j        |d|j        df          S t          ||          S )N/ httpsz//zhttps:)r   r   netlocpathhostnamer   schemequeryendswith
startswithr   )r   r   baseepr!   base_strep2s          r   
_build_urlzHttpClient._build_url   s;   %%h 9 	]7>cD!rt}':;;!4;#9'4;bRTRZ\^"_```t{5gt{D"bhXZ[\\\ $(<#8#8#=#=U4<<dlCUCUCUt$$ 	^.H..//C8?sDt{5gt{D"ciY[\]]]x***r   idempotency_keyc                 D    ddi}| j         rd| j          |d<   |r||d<   |S )z!Prepare headers for API requests.zContent-Typezapplication/jsonzBearer Authorizationzx-idempotency-key)r   )r   r,   headerss      r   _prepare_headerszHttpClient._prepare_headers4   sJ     .
 < 	@'?'?'?GO$ 	;+:G'(r   datar/   retriesc                 .   ||                                  }|| j        }|| j        }|| j        }dt           |d<   |                     |          }d}t          d|          }	t          |	          D ]}
	 t          j	        ||||          }|j
        dk    r$|
|	dz
  k     rt          j        |d|
z  z             J|c S # t          j        $ r1}|}|
|	dz
  k    r|t          j        |d|
z  z             Y d}~d}~ww xY w|pt          d          )	z%Make a POST request with retry logic.Nzpython-sdk@originr	   )r/   jsonr        z Unexpected error in POST request)r0   r   r   r   versionr+   maxrangerequestspoststatus_codetimesleepRequestException	Exception)r   r   r1   r/   r   r2   r   urllast_exceptionnum_attemptsattemptresponsees                r   r<   zHttpClient.postB   sr    ?++--G?lG?&G!!0N0w00Xooh''1g\** 	< 	<G<#=##	   '3..!111
>Q'\#BCCC , < < <!"lQ...G
>Q'\:;;;;;;;;	< M	*L M MMs   8AC?CD'C>>Dc                    ||                                  }|| j        }|| j        }|| j        }|                     |          }d}t          d|          }t          |          D ]}		 t          j        |||          }
|
j	        dk    r$|	|dz
  k     rt          j        |d|	z  z             I|
c S # t          j        $ r1}|}|	|dz
  k    r|t          j        |d|	z  z             Y d}~d}~ww xY w|pt          d          )z$Make a GET request with retry logic.Nr	   r/   r   r6   r7   zUnexpected error in GET request)r0   r   r   r   r+   r9   r:   r;   getr=   r>   r?   r@   rA   r   r   r/   r   r2   r   rB   rC   rD   rE   rF   rG   s               r   rJ   zHttpClient.getu   s^    ?++--G?lG?&G!!0Nooh''1g\** 	< 	<G<#<##   '3..!111
>Q'\#BCCC , < < <!"lQ...G
>Q'\:;;;;;;;;	< L	*K L LL   +AB51B55C5'C00C5c                    ||                                  }|| j        }|| j        }|| j        }|                     |          }d}t          d|          }t          |          D ]}		 t          j        |||          }
|
j	        dk    r$|	|dz
  k     rt          j        |d|	z  z             I|
c S # t          j        $ r1}|}|	|dz
  k    r|t          j        |d|	z  z             Y d}~d}~ww xY w|pt          d          )z'Make a DELETE request with retry logic.Nr	   rI   r6   r7   z"Unexpected error in DELETE request)r0   r   r   r   r+   r9   r:   r;   deleter=   r>   r?   r@   rA   rK   s               r   rN   zHttpClient.delete   s^    ?++--G?lG?&G!!0Nooh''1g\** 	< 	<G<#?##   '3..!111
>Q'\#BCCC , < < <!"lQ...G
>Q'\:;;;;;;;;	< O	*N O OOrL   )Nr   r   r   )NNNN)__name__
__module____qualname____doc__r   strfloatintr   r+   r   r0   r   r;   Responser<   rJ   rN    r   r   r   r      s{       :: $( #- -#- - %	-
 - - - - -+3 +3 + + + +,  cSVh    $ -1#'!%*.1N 1N1N 38n1N $sCx.)	1N
 %1N #1N !1N 
	1N 1N 1N 1Nl -1#'!%*.-M -M-M $sCx.)-M %	-M
 #-M !-M 
	-M -M -M -Md -1#'!%*.-P -P-P $sCx.)-P %	-P
 #-P !-P 
	-P -P -P -P -P -Pr   r   )rR   r>   typingr   r   r   urllib.parser   r   r   r;   r
   r8   r   rW   r   r   <module>rZ      s      & & & & & & & & & & 6 6 6 6 6 6 6 6 6 6  $ $ $ $ $ $
+--DP DP DP DP DP DP DP DP DP DPr   