
    i              	          d dl mZmZmZmZmZmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ  ed          Zd	ed
ede	fdZdee         dee         deeee
f                  fdZd
edefdZd
edeeef         fdZdS )    )DictAnyUnionListTypeVarType   )SearchRequest
SearchDataDocumentSearchResultWebSearchResultNewsSearchResultImages)AsyncHttpClient)handle_response_error)normalize_document_input)validate_scrape_optionsprepare_scrape_optionsTclientrequestreturnc                   K   t          |          }	 |                     d|           d{V }|j        dk    rt          |d           |                                }|                    d          st          |d           |                    di           pi }t                      }d|v r t          |d         t                    |_	        d|v r t          |d         t                    |_        d	|v r t          |d	         t                    |_        |S # t          $ r5}t          |d
          rt          t!          |d
          d           |d}~ww xY w)a
  
    Async search for documents.

    Args:
        client: Async HTTP client instance
        request: Search request

    Returns:
        SearchData with search results grouped by source type

    Raises:
        FirecrawlError: If the search operation fails
    z
/v2/searchN   searchsuccessdatawebnewsimagesresponse)_prepare_search_requestpoststatus_coder   jsongetr   _transform_arrayr   r   r   r   r   r    	Exceptionhasattrgetattr)r   r   request_datar!   response_datar   outerrs           i/home/agentuser/.hermes/hermes-agent/venv/lib/python3.11/site-packages/firecrawl/v2/methods/aio/search.pyr   r      sg     " +733L\<@@@@@@@@3&&!(H555   ++ 	6!(H555  ,,2llD==&tE{ODDCGT>>'V6FGGCHt)$x.:LMMCJ
   3
## 	F!'#z":":HEEE	s   DD 
E!0EEarrresult_typec           
      R   g }| D ]}|r~t          |t                    rid|v sd|v sd|v sd|v sd|v sd|v sd|v sd|v r-|                    t          d
i t	          |                     f|                     |d
i |           |                     ||	                     |S )a  
    Transforms an array of items into a list of result_type or Document.
    If the item dict contains any of the special keys, it is treated as a Document.
    Otherwise, it is treated as result_type.
    If the item is not a dict, it is wrapped as result_type with url=item.
    markdownhtmlrawHtmllinks
screenshotchangeTrackingsummaryr%   )url )
isinstancedictappendr   r   )r0   r1   resultsitems       r/   r'   r'   8   s     )+G 2 2 	2JtT** 	2d""$T!!4$$ D((T!!$xII*B4*H*HIIJJJJ{{22T223333NN;;40001111N    c                    | j         r| j                                         st          d          | j        4| j        dk    rt          d          | j        dk    rt          d          | j        4| j        dk    rt          d          | j        dk    rt          d	          | j        ph d
}| j        D ]d}t          |t                    r||vrt          d| d|           1t          |d          r#|j	        |vrt          d|j	         d|           e| j
        St          | j
        t                    r*t          | j
                                                  dk    rt          d          | j        St          | j        t                    r*t          | j                                                  dk    rt          d          | j        t          | j                   | S )z
    Validate and normalize search request.

    Args:
        request: Search request to validate

    Returns:
        Validated request

    Raises:
        ValueError: If request is invalid
    zQuery cannot be emptyNr   zLimit must be positived   zLimit cannot exceed 100zTimeout must be positivei z*Timeout cannot exceed 300000ms (5 minutes)>   r   r   r    zInvalid source type: z. Valid types: typez#Location must be a non-empty stringztbs must be a non-empty string)querystrip
ValueErrorlimittimeoutsourcesr<   strr)   rD   locationlentbsscrape_optionsr   )r   valid_sourcessources      r/   _validate_search_requestrR   S   s    = 2 3 3 5 5 20111} =A5666=36777"?a7888?V##IJJJ"111o 	j 	jF&#&& j..$%cV%c%cTa%c%cddd /(( j;m33$%hV[%h%hYf%h%hiii#'*C00 	DC8H8N8N8P8P4Q4QUV4V4VBCCC{'+s++ 	?s7;3D3D3F3F/G/G1/L/L=>>>) 6777NrA   c                    t          |           }|                    dd          }d|vr|j        
|j        |d<   d|vr|j        
|j        |d<   |j         |j        |d<   |                    dd           |j        1t          |j                  }|r||d<   |                    d	d           t          |d
d          x}Jt          |          
                                r)t          |j                  
                                |d
<   |S )z
    Prepare a search request payload.

    Args:
        request: Search request

    Returns:
        Request payload dictionary
    T)exclude_noneby_aliasrH   NrI   ignoreInvalidURLsignore_invalid_urlsscrapeOptionsrO   integration)rR   
model_dumprH   rI   rW   poprO   r   r*   rK   rF   rY   )r   validated_requestr   scrape_datavs        r/   r"   r"      s*    199''TD'IIDd06B)/W!2!:!F+3Y,8$5$I !&---'3,->-MNN 	0$/D!!4(((&t<<<IcRSffllnnI!"3"?@@FFHH]KrA   N)typingr   r   r   r   r   r   typesr
   r   r   r   r   r   utils.http_client_asyncr   utils.error_handlerr   utils.normalizer   utils.validationr   r   r   r   r'   rR   rK   r"   r;   rA   r/   <module>re      s   8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8                7 6 6 6 6 6 8 8 8 8 8 8 7 7 7 7 7 7 O O O O O O O OGCLL%%% % % % %N$s) $q' d5HCU>V    61m 1 1 1 1 1f] tCH~      rA   