
    3 d                     t    d Z ddlZddlmZ  ej        e          Z G d de          Z G d d          ZdS )zU
HttpError Spider Middleware

See documentation in docs/topics/spider-middleware.rst
    N)IgnoreRequestc                   "     e Zd ZdZ fdZ xZS )	HttpErrorzA non-200 response was filteredc                 H    || _          t                      j        |i | d S N)responsesuper__init__)selfr   argskwargs	__class__s       Blib/python3.11/site-packages/scrapy/spidermiddlewares/httperror.pyr
   zHttpError.__init__   s,     $)&)))))    )__name__
__module____qualname____doc__r
   __classcell__)r   s   @r   r   r      s>        ))* * * * * * * * *r   r   c                   6    e Zd Zed             Zd Zd Zd ZdS )HttpErrorMiddlewarec                 "     | |j                   S r   )settings)clscrawlers     r   from_crawlerz HttpErrorMiddleware.from_crawler   s    s7#$$$r   c                 n    |                     d          | _        |                    d          | _        d S )NHTTPERROR_ALLOW_ALLHTTPERROR_ALLOWED_CODES)getboolhandle_httpstatus_allgetlisthandle_httpstatus_list)r   r   s     r   r
   zHttpErrorMiddleware.__init__   s6    %-%5%56K%L%L"&.&6&67P&Q&Q###r   c                     d|j         cxk    rdk     rn nd S |j        }|                    dd          rd S d|v r	|d         }n| j        rd S t	          |d| j                  }|j         |v rd S t          |d          )N   i,  r!   Fr#   zIgnoring non-200 response)statusmetagetr!   getattrr#   r   )r   r   spiderr'   allowed_statusess        r   process_spider_inputz(HttpErrorMiddleware.process_spider_input   s    (/ 	 	 	 	C 	 	 	 	 	F}88+U33 	F#t+ 	#$<=' 	F&0$2M    ?.. 	F"=>>>r   c                    t          |t                    ri|j        j                            d           |j        j                            d|j                    t                              dd|id|i           g S d S )Nz httperror/response_ignored_countz(httperror/response_ignored_status_count/zNIgnoring response %(response)r: HTTP status code is not handled or not allowedr   r*   )extra)
isinstancer   r   stats	inc_valuer&   loggerinfo)r   r   	exceptionr*   s       r   process_spider_exceptionz,HttpErrorMiddleware.process_spider_exception0   s    i++ 
	N **+MNNNN **L8?LL   KK`X&(    
 I
	 
	r   N)r   r   r   classmethodr   r
   r,   r5    r   r   r   r      s]        % % [%R R R? ? ?$    r   r   )	r   loggingscrapy.exceptionsr   	getLoggerr   r2   r   r   r7   r   r   <module>r;      s    
  + + + + + +		8	$	$* * * * * * * *& & & & & & & & & &r   