
    _jr7                        S SK JrJrJrJr  SSKJrJrJrJ	r	J
r
JrJrJrJrJrJr  SSKJr  SSKJr  SSKJr  SSKJr  S SKrS	\S
\4S jrS\\\      S
\\	   4S jrS\\\4   S
\\\4   4S jrS\S	\S
\4S jr S SS.S\S\S\\   S\\    S
\4
S jjjr!SS.S\S\S\\    S
\4S jjr" S SS.S\S\S\\	   S\\   S\\    S
\\	   4S jjjr#S\S\S
\$4S jr%S\S	\
S
\4S jr&S\S\S
\4S jr'S\S
\4S jr(g)!    )OptionalDictAnyList   )CrawlRequestCrawlJobCrawlResponseDocumentCrawlParamsRequestCrawlParamsDataWebhookConfigCrawlErrorsResponseActiveCrawlsResponseActiveCrawlPaginationConfig)handle_response_error)prepare_scrape_options)AsyncHttpClient)normalize_document_inputNrequestreturnc                    U R                   (       a  U R                   R                  5       (       d  [        S5      eU R                  b  U R                  S::  a  [        S5      eSU R                   0nU R                  (       a  U R                  US'   U R
                  b   [        U R
                  5      nU(       a  X!S'   U R                  bK  [        U R                  [        5      (       a  U R                  US'   OU R                  R                  SS	9US'   U R                  SSS
9nUR                  SS 5        UR                  SS 5        UR                  SS 5        SSSSSSSSSSSSSSSS.nUR                  5        H  u  pVXS;   d  M  UR                  U5      X'   M!     UR                  U5        [        U SS 5      b&  [        [        U S5      5      R                  5       US'   U$ )NURL cannot be emptyr   zLimit must be positiveurlpromptscrapeOptionswebhookT)exclude_none)r   exclude_unsetscrape_optionsincludePathsexcludePathsmaxDiscoveryDepthsitemapignoreQueryParametersdeduplicateSimilarURLscrawlEntireDomainallowExternalLinksallowSubdomainsignoreRobotsTxtrobotsUserAgentdelaymaxConcurrencyregexOnFullURLzeroDataRetention)include_pathsexclude_pathsmax_discovery_depthr%   ignore_query_parametersdeduplicate_similar_urlscrawl_entire_domainallow_external_linksallow_subdomainsignore_robots_txtrobots_user_agentr-   max_concurrencyregex_on_full_urlzero_data_retentionintegration)r   strip
ValueErrorlimitr   r!   r   r   
isinstancestr
model_dumppopitemsupdategetattr)r   dataoptsrequest_datafield_mappingssnakecamels          S/home/rurouni/.local/lib/python3.13/site-packages/firecrawl/v2/methods/aio/crawl.py_prepare_crawl_requestrP      s   ;;gkk//11.//}} W]]a%71227;;D~~ X)%g&<&<=$(!"goos++%ooDO%oo88d8KDO%%4t%LLUD!Xt$%t,''2#:$<2 4-..+-2N" ',,. &**51DK / 	KKwt,8!''="ABHHJ]K    	data_listc                     / nU =(       d    /  H?  n[        U[        5      (       d  M  [        U5      nUR                  [	        S0 UD65        MA     U$ )N )rB   dictr   appendr   )rR   	documentsdoc_data
normalizeds       rO   _parse_crawl_documentsrZ   F   sL     "IOOh%%1(;JX3
34 $ rQ   bodyc                 d   U R                  S5      (       d  [        U R                  SS5      5      eU R                  S5      U R                  SS5      U R                  SS5      U R                  SS5      U R                  S	5      U R                  S
5      [        U R                  S/ 5      5      S.$ )NsuccesserrorUnknown error occurredstatus	completedr   totalcreditsUsed	expiresAtnextrI   r`   ra   rb   credits_used
expires_atre   rI   )get	ExceptionrZ   )r[   s    rO   _parse_crawl_status_responserk   O   s    88I*BCDD ((8$XXk1-'1%2hh{+ &txx';< rQ   clientc                 b  #    [        U5      nU R                  SU5      I Sh  vN nUR                  S:  a  [        US5        UR	                  5       nUR                  S5      (       a(  [        UR                  S5      UR                  S5      S9$ [        UR                  S	S
5      5      e N7f)a"  
Start a crawl job for a website.

Args:
    client: Async HTTP client instance
    request: CrawlRequest containing URL and options
    
Returns:
    CrawlResponse with job information
    
Raises:
    ValueError: If request is invalid
    Exception: If the crawl operation fails to start
z	/v2/crawlN  zstart crawlr]   idr   )ro   r   r^   r_   )rP   poststatus_coder   jsonri   r
   rj   )rl   r   payloadresponser[   s        rO   start_crawlru   ^   s      %W-G[[g66Hs"h6==?Dxx	DHHUODD
DHHW&>?
@@ 7s   !B/B-B
B/request_timeoutjob_idpagination_configrw   c          
        #    U R                  SU 3US9I Sh  vN nUR                  S:  a  [        US5        UR                  5       n[	        U5      nUS   nU(       a  UR
                  OSnU(       a"  US   (       a  [        U US   UUUS	9I Sh  vN n[        US
   US   US   US   US   U(       d  US   US9$ SUS9$  N N37f)a  
Get the status of a crawl job.

Args:
    client: Async HTTP client instance
    job_id: ID of the crawl job
    pagination_config: Optional configuration for pagination limits
    request_timeout: Timeout (in seconds) for each individual HTTP request. When auto-pagination 
        is enabled (default) and there are multiple pages of results, this timeout applies to 
        each page request separately, not to the entire operation
    
Returns:
    CrawlJob with job information
    
Raises:
    Exception: If the status check fails

/v2/crawl/timeoutNrn   zget crawl statusrI   Tre   rv   r`   ra   rb   rg   rh   rf   )ri   rq   r   rr   rk   auto_paginate_fetch_all_pages_asyncr	   )	rl   rx   ry   rw   rt   r[   rs   rW   r~   s	            rO   get_crawl_statusr   w   s     0 ZZ*VH 5ZOOHs"h(:;==?D*40GI 8I%33dM0FO+
 
	 x +&g^,<($1WV_  8< ' P
s"   C	CA9C	C2C	C	next_urlc          
         #    U R                  XS9I Sh  vN nUR                  S:  a  [        US5        UR                  5       n[	        U5      n[        US   US   US   US   US	   US
   US   S9$  N_7f)a{  
Fetch a single page of crawl results using the provided next URL.

Args:
    client: Async HTTP client instance
    next_url: Opaque next URL from a prior crawl status response
    request_timeout: Timeout (in seconds) for the HTTP request

Returns:
    CrawlJob with the page data and next URL (if any)

Raises:
    Exception: If the request fails or returns an error response
r|   Nrn   zget crawl status pager`   ra   rb   rg   rh   re   rI   rf   )ri   rq   r   rr   rk   r	   )rl   r   rw   rt   r[   rs   s         rO   get_crawl_status_pager      s     ( ZZZBBHs"h(?@==?D*40Gx +&g^,<(V_V_  Cs   A7A5A A7initial_documentsc                  #    UR                  5       nUnSnU(       a  UR                  OSnU(       a  UR                  OSn	U(       a  UR                  OSn
[        R
                  " 5       nU(       a  Ub  Xx:  a   U$ U
b  [        R
                  " 5       U-
  U
:  a   U$ U R                  XdS9I Sh  vN nUR                  S:  a4  SSKnUR                  S5      nUR                  SSUR                  0S9   U$ UR                  5       n [        U5      nUS	    H(  nU	b  [        U5      U	:  a    OUR                  U5        M*     U	b  [        U5      U	:  a   U$ US
   nUS-  nU(       a  M  U$  N! [         a     U$ f = f7f)a  
Fetch all pages of crawl results asynchronously.

Args:
    client: Async HTTP client instance
    next_url: URL for the next page
    initial_documents: Documents from the first page
    pagination_config: Optional configuration for pagination limits
    request_timeout: Optional timeout (in seconds) for the underlying HTTP request
    
Returns:
    List of all documents from all pages
r   Nr|   rn   	firecrawlzFailed to fetch next pagerq   )extrarI   re      )copy	max_pagesmax_resultsmax_wait_timetime	monotonicri   rq   logging	getLoggerwarningrr   rk   rj   lenrV   )rl   r   r   ry   rw   rW   current_url
page_countr   r   r   
start_timert   r   logger	page_datapage_payloaddocuments                     rO   r   r      s    * "&&(IKJ 0A!++dI3D#//$K7H%33dM!J
!z'>H E %DNN,<z,I]+ZB =  KII3&&&{3FNN6}hNbNb>cNd. + MMO		7	BL
 %V,H'c)n.KX&	 - ##i.K*G  #6*a
K +N = J  	" %	s>   B/F1E12AFE3 AF/F3
F=F FFc                    #    U R                  SU 35      I Sh  vN nUR                  S:  a  [        US5        UR                  5       nUR	                  S5      S:H  $  ND7f)z
Cancel a crawl job.

Args:
    client: Async HTTP client instance
    job_id: ID of the crawl job
    
Returns:
    True if cancellation was successful
    
Raises:
    Exception: If the cancellation operation fails
r{   Nrn   zcancel crawlr`   	cancelled)deleterq   r   rr   ri   )rl   rx   rt   r[   s       rO   cancel_crawlr     s[      ]]Zx#899Hs"h7==?D88H,,	 :s   A!AAA!c                    #    UR                   (       a  UR                   R                  5       (       d  [        S5      eUR                  (       a  UR                  R                  5       (       d  [        S5      eUR                   UR                  S.nU R	                  SU5      I Sh  vN nUR
                  S:  a  [        US5        UR                  5       nUR                  S5      (       d  [        UR                  S	S
5      5      eUR                  S0 5      n0 nSSSSSSSSSSSSSSS.nUR                  5        H  u  pX;   d  M  XX   Xi'   M     SU;   a	  US   n
XS'   SU;   a  US   US'   [        S0 UD6$  N7f)aA  
Preview crawl parameters before starting a crawl job.

Args:
    client: Async HTTP client instance
    request: CrawlParamsRequest containing URL and prompt
    
Returns:
    CrawlParamsData containing crawl configuration
    
Raises:
    ValueError: If request is invalid
    Exception: If the parameter preview fails
r   zPrompt cannot be empty)r   r   z/v2/crawl/params-previewNrn   zcrawl params previewr]   r^   r_   rI   r1   r2   r3   r%   r4   r5   r6   r7   r8   r9   r:   r;   r!   r=   )r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r.   r   r0   r   r   rT   )r   r?   r@   r   rp   rq   r   rr   ri   rj   rF   r   )rl   r   rs   rt   r[   params_data	convertedmappingrN   rM   wks              rO   crawl_params_previewr   0  ss     ;;gkk//11.//>>!5!5!7!7122kkW^^<G[[!;WEEHs"h(>?==?D88I*BCDD((62&K "I''2!:"<24-..+)2G   *1I ( K#!)D#I	)'Y''A Fs   B%E>'E<(BE>
3E>crawl_idc                 D  #    U R                  SU S35      I Sh  vN nUR                  S:  a  [        US5        UR                  5       nUR                  SU5      nUR                  S/ 5      UR                  SUR                  S	/ 5      5      S
.n[	        S0 UD6$  N7f)z
Get errors from a crawl job.

Args:
    client: Async HTTP client instance
    crawl_id: ID of the crawl job
    
Returns:
    CrawlErrorsResponse with errors and robots blocked
    
Raises:
    Exception: If the error check operation fails
r{   z/errorsNrn   zcheck crawl errorsrI   errorsrobotsBlockedrobots_blocked)r   r   rT   )ri   rq   r   rr   r   )rl   r   rt   r[   rs   rY   s         rO   get_crawl_errorsr   g  s      ZZ*XJg >??Hs"h(<===?Dhhvt$G++h+!++ow{{CSUW7XYJ ,,, @s   B BBB c                 z  #    U R                  S5      I Sh  vN nUR                  S:  a  [        US5        UR                  5       nUR                  S5      (       d  [	        UR                  SS5      5      eUR                  S/ 5      n/ nU H|  n[        U[        5      (       d  M  UR                  UR                  S	5      UR                  S
UR                  S5      5      UR                  S5      UR                  S5      S.5        M~     [        SU Vs/ s H  n[        S0 UD6PM     snS9$  GNs  snf 7f)z
Get active crawl jobs.

Args:
    client: Async HTTP client instance
    
Returns:
    ActiveCrawlsResponse with active crawl jobs
    
Raises:
    Exception: If the active crawl jobs operation fails
z/v2/crawl/activeNrn   zget active crawlsr]   r^   r_   crawlsro   teamIdteam_idr   options)ro   r   r   r   T)r]   r   rT   )
ri   rq   r   rr   rj   rB   rU   rV   r   r   )rl   rt   r[   	crawls_inrY   cncs          rO   get_active_crawlsr     s     ZZ 233Hs"h(;<==?D88I*BCDD2&IJaeeDk55155+;<uuU|55+	    R\5]R\Bk6GB6GR\5]^^! 4  6^s)   D;D3BD;)A0D;D6
.D;6D;)N))typingr   r   r   r   typesr   r	   r
   r   r   r   r   r   r   r   r   utils.error_handlerr   utils.validationr   utils.http_client_asyncr   utils.normalizer   r   rU   rP   rZ   rC   rk   ru   floatr   r   r   boolr   r   r   r   rT   rQ   rO   <module>r      s   , ,    9 6 6 7 -L -T -`htCy&9 d8n tCH~ $sCx. Ao A A A8 593
 (,333   013
 e_3 3t (,	!!! e_	!
 !P 59	G (,GGG H~G   01	G e_G 
(^GT- - - -*4( 4(AS 4(Xg 4(n-? -c -FY -4_O _8L _rQ   