
    !h                        S r SSKJr  SSKrSSKJr  SSKJrJr  SSK	J
r
JrJr  SSKJr  \(       a  SSKJr  SS	KJr  SS
KJr  SSKJr  \R.                  " \5      r " S S5      rg)zCloseSpider is an extension that forces spiders to be closed after certain
conditions are met.

See documentation in docs/topics/extensions.rst
    )annotationsN)defaultdict)TYPE_CHECKINGAny)RequestSpidersignals)NotConfigured)Failure)Self)Crawler)Responsec                      \ rS rSrSS jr\SS j5       rSS jrSS jrSS jr	SS jr
SS jrSS	 jrSS
 jrSS jrSrg)CloseSpider   c                   Xl         UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      UR                  R                  S5      S.U l        [        U R                  R                  5       5      (       d  [        e[        [        5      U l
        U R                  R                  S5      (       a2  UR                  R                  U R                  [        R                  S	9  U R                  R                  S
5      (       d   U R                  R                  S5      (       a2  UR                  R                  U R                   [        R"                  S	9  U R                  R                  S5      (       a2  UR                  R                  U R$                  [        R$                  S	9  U R                  R                  S5      (       d   U R                  R                  S5      (       a2  UR                  R                  U R&                  [        R&                  S	9  U R                  R                  S5      (       a  U R                  S   U l        SU l        UR                  R                  U R,                  [        R$                  S	9  UR                  R                  U R.                  [        R&                  S	9  UR                  R                  U R0                  [        R0                  S	9  g )NCLOSESPIDER_TIMEOUTCLOSESPIDER_ITEMCOUNTCLOSESPIDER_PAGECOUNTCLOSESPIDER_ERRORCOUNTCLOSESPIDER_TIMEOUT_NO_ITEMCLOSESPIDER_PAGECOUNT_NO_ITEM)timeout	itemcount	pagecount
errorcounttimeout_no_itempagecount_no_itemr   )signalr   r   r   r   r   r   )crawlersettingsgetfloatgetintclose_onanyvaluesr
   r   intcountergetr	   connecterror_countspider_error
page_countresponse_receivedspider_openeditem_scrapedr   items_in_periodspider_opened_no_itemitem_scraped_no_itemspider_closed)selfr    s     d/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/extensions/closespider.py__init__CloseSpider.__init__   sm    ' ''001FG ))001HI ))001HI!**112JK&//667TU!(!1!1!8!8/"	)
 4=='')**.9#.>==\**OO##D$4$4W=Q=Q#R==[))T]]->->?R-S-SOO##DOOG<U<U#V==Y''OO##D$6$6w?T?T#U==[))T]]->->?R-S-SOO##D$5$5g>R>R#S==.//(,6G(HD ()D OO##**73H3H $  OO##))'2F2F $  	 2 27;P;PQ    c                    U " U5      $ )N )clsr    s     r6   from_crawlerCloseSpider.from_crawlerE   s    7|r9   c                    U R                   S==   S-  ss'   U R                   S   U R                  S   :X  aD  U R                  R                  (       d   eU R                  R                  R	                  US5        g g )Nr      closespider_errorcountr(   r$   r    engineclose_spider)r5   failureresponsespiders       r6   r+   CloseSpider.error_countI   sd    \"a'"<<%|)DD<<&&&&LL,,V5MN Er9   c                   U R                   S==   S-  ss'   U R                   S==   S-  ss'   U R                   S   U R                  S   :X  aD  U R                  R                  (       d   eU R                  R                  R	                  US5        g U R                  S   (       ae  U R                   S   U R                  S   :  aD  U R                  R                  (       d   eU R                  R                  R	                  US5        g g g )Nr   r@   pagecount_since_last_itemclosespider_pagecountr   closespider_pagecount_no_itemrB   )r5   rF   requestrG   s       r6   r-   CloseSpider.page_countO   s    [!Q&!01Q61<<$k(BB<<&&&&LL,,V5LM==,-LL45}}012 <<&&&&LL,,V5TU	2 .r9   c                    SSK Jn  U R                  R                  (       d   eUR	                  U R
                  S   U R                  R                  R                  USS9U l        g )Nr   )reactorr   closespider_timeout)reason)twisted.internetrP   r    rC   	callLaterr$   rD   task)r5   rG   rP   s      r6   r/   CloseSpider.spider_opened]   sT    ,||""""%%MM)$LL,,(	 & 
	r9   c                   U R                   S==   S-  ss'   SU R                   S'   U R                   S   U R                  S   :X  aD  U R                  R                  (       d   eU R                  R                  R	                  US5        g g )Nr   r@   r   rJ   closespider_itemcountrB   r5   itemrG   s      r6   r0   CloseSpider.item_scrapedh   ss    [!Q&!4501<<$k(BB<<&&&&LL,,V5LM Cr9   c                    [        U SS 5      nU(       a%  UR                  5       (       a  UR                  5         [        U SS 5      nU(       a#  UR                  (       a  UR	                  5         g g g )NrU   task_no_item)getattractivecancelrunningstop)r5   rG   rU   r]   s       r6   r4   CloseSpider.spider_closedo   sR    tVT*DKKMMKKMt^T:L00 1<r9   c                    SSK Jn  UR                  U R                  U5      U l        U R                  R                  U R                  SS9  [        R                  SU R                   S35        g )Nr   )rU   F)nowz2Spider will stop when no items are produced after 	 seconds.)	rS   rU   LoopingCall_count_items_producedr]   startr   loggerinfo)r5   rG   rU   s      r6   r2   !CloseSpider.spider_opened_no_itemx   sa    ) ,,T-G-GP 4 4%@@##$I/	
r9   c                .    U =R                   S-  sl         g )Nr@   )r1   rY   s      r6   r3    CloseSpider.item_scraped_no_item   s    !r9   c                    U R                   S:  a  SU l         g [        R                  SU R                   S35        U R                  R
                  (       d   eU R                  R
                  R                  US5        g )Nr@   r   z8Closing spider since no items were produced in the last rf   closespider_timeout_no_item)r1   rj   rk   r   r    rC   rD   )r5   rG   s     r6   rh   !CloseSpider._count_items_produced   sj    1$#$D KKJ''(	3 <<&&&&LL,,V5RSr9   )r$   r(   r    r1   rU   r]   r   N)r    r   )r    r   returnr   )rE   r   rF   r   rG   r   rr   None)rF   r   rM   r   rG   r   rr   rs   )rG   r   rr   rs   )rZ   r   rG   r   rr   rs   )__name__
__module____qualname____firstlineno__r7   classmethodr=   r+   r-   r/   r0   r4   r2   r3   rh   __static_attributes__r;   r9   r6   r   r      sI    %RN  OV	
N 	
"	Tr9   r   )__doc__
__future__r   loggingcollectionsr   typingr   r   scrapyr   r   r	   scrapy.exceptionsr
   twisted.python.failurer   typing_extensionsr   scrapy.crawlerr   scrapy.httpr   	getLoggerrt   rj   r   r;   r9   r6   <module>r      sR    #  # % + + +. '&$ 
		8	$rT rTr9   