
    Sj              	           d Z 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mZ ddlmZmZ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df      fdZd	e	d
e	fdZd	e	d
eeef   fdZy)z,
Search functionality for Firecrawl v2 API.
    )DictAnyUnionListTypeVarType   )SearchRequest
SearchDataDocumentSearchResultWebSearchResultNewsSearchResultImages)normalize_document_input_map_search_result_keys)
HttpClienthandle_response_errorvalidate_scrape_optionsprepare_scrape_optionsTclientrequestreturnc                 $   t        |      }	 | j                  d|      }|j                  dk7  rt        |d       |j	                         }|j                  d      st        |d       |j                  di       xs i }t               }d|v rt        |d   t              |_	        d|v rt        |d   t              |_        d|v rt        |d   t              |_        |S # t        $ r)}t        |d	      rt        t!        |d	      d       |d
}~ww xY w)a  
    Search for documents.
    
    Args:
        client: HTTP client instance
        request: Search request
        
    Returns:
        SearchData with search results grouped by source type
        
    Raises:
        FirecrawlError: If the search operation fails
    z
/v2/search   searchsuccessdatawebnewsimagesresponseN)_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           N/root/.hermes/venv/lib/python3.12/site-packages/firecrawl/v2/methods/search.pyr   r      s   " +73L;;|\:3&!(H5   +!(H5  ,2lD=&tE{ODCGT>'V6FGCHt)$x.:LMCJ
  3
#!'#z":HE	s   CC 	D&$D

Darrresult_typer   c           
         g }| D ]  }|rt        |t              rd|v sd|v sd|v sd|v sd|v sd|v sd|v sd|v r$|j                  t        di t	        |             Yd	}|t
        k(  rd
}n|t        k(  rd}n|t        k(  rd}|r$t        ||      }|j                   |di |       |j                   |di |       |j                   ||              |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&   Nr!   r    r   )url )	
isinstancedictappendr   r   r   r   r   r   )r1   r2   resultsitemresult_type_namenormalized_items         r0   r(   r(   5   s     +-G 2JtT*d"$T!4$ D(T!$xI*B4*HIJ#' "44'/$ $44'-$ O3',$#&=dDT&UONN;#A#ABNN;#6#67NN;40192: N    c                    | j                   r| j                   j                         st        d      | j                  4| j                  dk  rt        d      | j                  dkD  rt        d      | j                  4| j                  dk  rt        d      | j                  dkD  rt        d      | j
                  qh d	}| j
                  D ]^  }t        |t              r||vst        d
| d|       t        |d      s6|j                  |vsEt        d
|j                   d|        | j                  qh d}| j                  D ]^  }t        |t              r||vst        d| d|       t        |d      s6|j                  |vsEt        d|j                   d|        | j                  Kt        | j                  t              r&t        | j                  j                               dk(  rt        d      | j                  Kt        | j                  t              r&t        | j                  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 emptyr   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: type>   pdfgithubresearchzInvalid category type: z#Location must be a non-empty stringztbs must be a non-empty string)querystrip
ValueErrorlimittimeoutsourcesr=   strr*   rG   
categorieslocationlentbsscrape_optionsr   )r   valid_sourcessourcevalid_categoriescategorys        r0   _validate_search_requestr[   \   s[    == 3 3 5011 }} ==A566==3677 "??a788??V#IJJ "1oo 	jF&#&.$'<VHOTaSb%cdd(;;m3$'<V[[MYfXg%hii	j %8** 	qH(C(#33$'>xjXhWi%jkk6*==(88$'>x}}o_]m\n%opp	q #'**C0C8H8H8N8N8P4QUV4VBCC {{'++s+s7;;3D3D3F/G1/L=>> ) 6 67NrD   c                    t        |       }|j                  dd      }d|vr|j                  |j                  |d<   d|vr|j                  |j                  |d<   |j                  !|j                  |d<   |j                  dd       |j                  .t        |j                        }|r||d<   |j                  d	d       t        |d
d      }| t        |      j                         }|r||d
<   |S )z
    Prepare a search request payload.
    
    Args:
        request: Search request
        
    Returns:
        Request payload dictionary
    T)exclude_noneby_aliasrN   NrO   ignoreInvalidURLsignore_invalid_urlsscrapeOptionsrV   integration)r[   
model_dumprN   rO   r`   poprV   r   r+   rQ   rL   )r   validated_requestr   scrape_dataintegration_valueintegration_strs         r0   r#   r#      s    19''TD'ID d066B)//W!2!:!:!F+33Y ,,8$5$I$I !&- ''3,->-M-MN$/D!!4(   1=$G$/0668"1DKrD   N)__doc__typingr   r   r   r   r   r   typesr
   r   r   r   r   r   utils.normalizer   r   utilsr   r   r   r   r   r   r(   r[   rQ   r#   r<   rD   r0   <module>rn      s    9 8 n n O f fCL''' 'R%$s) %$q' %d5JCW>X %NCm C CL)] )tCH~ )rD   