
    3 dz                     `    d dl mZ d dlmZ d dlmZmZ d dlmZ d Z	d Z
 G d d          Zd	S )
    )http)NotConfigured)global_object_nameto_bytes)request_httpreprc                 N   d}|                                  D ]X\  }}t          |t          t          f          r7|D ]4}|t	          d          t	          |          z   t	          |          z   z  }5Y|t	          d          t	          |                                           dz
  z  z   S )Nr   s   : s   
   )items
isinstancelisttuplelenkeys)headerssizekeyvaluevs        Blib/python3.11/site-packages/scrapy/downloadermiddlewares/stats.pyget_header_sizer      s    Dmmoo 7 7
UedE]++ 	7 7 7E

SXX-A66#g,,#gllnn"5"5"9:::    c                 |    t          t          t          j                            | d                              dz   S )Nr      )r   r   r   	RESPONSESget)response_statuss    r   get_status_sizer      s/    x**?C@@AABBRGGr   c                   <    e Zd Zd Zed             Zd Zd Zd ZdS )DownloaderStatsc                     || _         d S )N)stats)selfr!   s     r   __init__zDownloaderStats.__init__   s    


r   c                 d    |j                             d          st           | |j                  S )NDOWNLOADER_STATS)settingsgetboolr   r!   )clscrawlers     r   from_crawlerzDownloaderStats.from_crawler   s4    ''(:;; 	 s7=!!!r   c                     | j                             d|           | j                             d|j         |           t          t	          |                    }| j                             d||           d S )Nzdownloader/request_countspiderz downloader/request_method_count/zdownloader/request_bytes)r!   	inc_valuemethodr   r   )r"   requestr-   reqlens       r   process_requestzDownloaderStats.process_request    s    
7GGG
?w~?? 	 	
 	
 	
 %g..//
7OOOOOr   c                 B   | j                             d|           | j                             d|j         |           t          |j                  t          |j                  z   t          |j                  z   dz   }| j                             d||           |S )Nzdownloader/response_countr,   z!downloader/response_status_count/   zdownloader/response_bytes)r!   r.   statusr   bodyr   r   r   )r"   r0   responser-   reslens        r   process_responsez DownloaderStats.process_response(   s    
8HHH
AAA& 	 	
 	
 	
 h.//0ho../  	 	
8&PPPr   c                     t          |j                  }| j                            d|           | j                            d| |           d S )Nzdownloader/exception_countr,   z downloader/exception_type_count/)r   	__class__r!   r.   )r"   r0   	exceptionr-   ex_classs        r   process_exceptionz!DownloaderStats.process_exception7   sd    %i&9::
9&III
9x99& 	 	
 	
 	
 	
 	
r   N)	__name__
__module____qualname__r#   classmethodr*   r2   r9   r>    r   r   r   r      sn           " " ["
P P P  
 
 
 
 
r   r   N)twisted.webr   scrapy.exceptionsr   scrapy.utils.pythonr   r   scrapy.utils.requestr   r   r   r   rC   r   r   <module>rH      s          + + + + + + < < < < < < < < 1 1 1 1 1 1; ; ;H H H
&
 &
 &
 &
 &
 &
 &
 &
 &
 &
r   