
    !hU                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  \(       a   S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJr      SS jrSS jr " S S5      rg)    )annotations)TYPE_CHECKING)http)NotConfigured)global_object_nameto_bytes)request_httprepr)Self)RequestSpider)Crawler)Response)StatsCollectorc                &   SnU R                  5        HQ  u  p#[        U[        [        45      (       d  M"  U H)  nU[	        S5      [	        U5      -   [	        U5      -   -  nM+     MS     U[	        S5      [	        U R                  5       5      S-
  -  -   $ )Nr   s   : s   
   )items
isinstancelisttuplelenkeys)headerssizekeyvaluevs        i/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/downloadermiddlewares/stats.pyget_header_sizer      s|     Dmmo
edE]++E
SX-A66  & #g,#glln"5"9:::    c                l    [        [        [        R                  R	                  U S5      5      5      S-   $ )Nr      )r   r   r   	RESPONSESget)response_statuss    r   get_status_sizer%       s(    x**?C@ABRGGr   c                  |    \ 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r
g)DownloaderStats%   c                    Xl         g )Nstats)selfr+   s     r   __init__DownloaderStats.__init__&   s    %*
r   c                    UR                   R                  S5      (       d  [        eUR                  (       d   eU " UR                  5      $ )NDOWNLOADER_STATS)settingsgetboolr   r+   )clscrawlers     r   from_crawlerDownloaderStats.from_crawler)   s;    ''(:;;}}}7==!!r   c                    U R                   R                  SUS9  U R                   R                  SUR                   3US9  [        [	        U5      5      nU R                   R                  SX2S9  g )Nzdownloader/request_countspiderz downloader/request_method_count/zdownloader/request_bytes)r+   	inc_valuemethodr   r	   )r,   requestr9   reqlens       r   process_requestDownloaderStats.process_request0   sq     	

7G

.w~~.>? 	 	
 %g./

7Or   c                D   U R                   R                  SUS9  U R                   R                  SUR                   3US9  [        UR                  5      [        UR                  5      -   [        UR                  5      -   S-   nU R                   R                  SXCS9  U$ )Nzdownloader/response_countr8   z!downloader/response_status_count/   zdownloader/response_bytes)r+   r:   statusr   bodyr   r   r%   )r,   r<   responser9   reslens        r   process_response DownloaderStats.process_response;   s     	

8H

//@A& 	 	
 h../0hoo./  	 	

8&Pr   c                    [        UR                  5      nU R                  R                  SUS9  U R                  R                  SU 3US9  g )Nzdownloader/exception_countr8   z downloader/exception_type_count/)r   	__class__r+   r:   )r,   r<   	exceptionr9   ex_classs        r   process_exception!DownloaderStats.process_exceptionL   sT     &i&9&9:

9&I

.xj9& 	 	
 r   r*   N)r+   r   )r4   r   returnr
   )r<   r   r9   r   rN   Request | Response | None)r<   r   rD   r   r9   r   rN   zRequest | Response)r<   r   rJ   	Exceptionr9   r   rN   rO   )__name__
__module____qualname____firstlineno__r-   classmethodr5   r>   rF   rL   __static_attributes__ r   r   r'   r'   %   s    + " "		(.		"	*2<B	"+4>D	"r   r'   N)r   z6dict[str, list[str | bytes] | tuple[str | bytes, ...]]rN   int)r$   rX   rN   rX   )
__future__r   typingr   twisted.webr   scrapy.exceptionsr   scrapy.utils.pythonr   r   scrapy.utils.requestr	   typing_extensionsr
   scrapyr   r   scrapy.crawlerr   scrapy.httpr   scrapy.statscollectorsr   r   r%   r'   rW   r   r   <module>rd      sN    "    + < 1&&&$5;C;;H
/ /r   