
    3 d1
                     H    d Z ddlmZ ddlmZ ddlmZ  G d d          ZdS )zCloseSpider is an extension that forces spiders to be closed after certain
conditions are met.

See documentation in docs/topics/extensions.rst
    )defaultdict)signals)NotConfiguredc                   H    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
dS )	CloseSpiderc                    || _         |j                            d          |j                            d          |j                            d          |j                            d          d| _        t          | j                                                  st          t          t                    | _
        | j                            d          r+|j                            | j        t          j                   | j                            d          r+|j                            | j        t          j                   | j                            d	          r+|j                            | j        t          j                   | j                            d
          r+|j                            | j        t          j                   |j                            | j        t          j                   d S )NCLOSESPIDER_TIMEOUTCLOSESPIDER_ITEMCOUNTCLOSESPIDER_PAGECOUNTCLOSESPIDER_ERRORCOUNT)timeout	itemcount	pagecount
errorcountr   )signalr   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_scrapedspider_closed)selfr   s     =lib/python3.11/site-packages/scrapy/extensions/closespider.py__init__zCloseSpider.__init__   s    '001FGG )001HII )001HII!*112JKK	
 
 4=''))** 	 "3''=\** 	SO##D$4W=Q#RRR=[)) 	WO##DOG<U#VVV=Y'' 	VO##D$6w?T#UUU=[)) 	TO##D$5g>R#SSS 27;PQQQQQ    c                      | |          S )N )clsr   s     r%   from_crawlerzCloseSpider.from_crawler'   s    s7||r'   c                     | j         dxx         dz  cc<   | j         d         | j        d         k    r"| j        j                            |d           d S d S )Nr      closespider_errorcountr   r   r   engineclose_spider)r$   failureresponsespiders       r%   r   zCloseSpider.error_count+   sj    \"""a'"""<%|)DD 	OL,,V5MNNNNN	O 	Or'   c                     | j         dxx         dz  cc<   | j         d         | j        d         k    r"| j        j                            |d           d S d S )Nr   r-   closespider_pagecountr/   )r$   r3   requestr4   s       r%   r   zCloseSpider.page_count0   j    [!!!Q&!!!<$k(BB 	NL,,V5LMMMMM	N 	Nr'   c                     ddl m} |                    | j        d         | j        j        j        |d          | _        d S )Nr   )reactorr   closespider_timeout)reason)twisted.internetr:   	callLaterr   r   r0   r1   task)r$   r4   r:   s      r%   r!   zCloseSpider.spider_opened5   sO    ,,,,,,%%M)$L,(	 & 
 
			r'   c                     | j         dxx         dz  cc<   | j         d         | j        d         k    r"| j        j                            |d           d S d S )Nr   r-   closespider_itemcountr/   )r$   itemr4   s      r%   r"   zCloseSpider.item_scraped?   r8   r'   c                     t          | dd          }|r*|                                r|                                 d S d S d S )Nr?   F)getattractivecancel)r$   r4   r?   s      r%   r#   zCloseSpider.spider_closedD   sO    tVU++ 	DKKMM 	KKMMMMM	 	 	 	r'   N)__name__
__module____qualname__r&   classmethodr+   r   r   r!   r"   r#   r)   r'   r%   r   r      s        R R R2   [O O O
N N N

 
 
N N N
    r'   r   N)__doc__collectionsr   scrapyr   scrapy.exceptionsr   r   r)   r'   r%   <module>rO      sy     $ # # # # #       + + + + + +: : : : : : : : : :r'   