
    Ng                    D   d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZmZ d dlmZmZ e	r4d dlmZmZ d d	lmZ d d
lmZmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z%  ed      Z& ejN                  e(      Z) ed      Z* ed      Z+ G d d      Z,y)    )annotationsN)defaultdictdeque)TYPE_CHECKINGAnyTypeVarcast)NotConfiguredScrapyDeprecationWarning)process_chainprocess_parallel)build_from_crawlerload_object)CallableIterable)Deferred)Concatenate	ParamSpecSelf)Spider)Crawler)BaseSettingsSettings_P_T_T2c                      e Zd ZdZdZddZedd       Zedd       Z	eddd       Z
edd       Zeddd	       Zdd
Z	 	 	 	 	 	 	 	 ddZddZddZddZy)MiddlewareManagerz/Base class for implementing middleware managerszfoo middlewarec                j    || _         t        t              | _        |D ]  }| j	                  |        y N)middlewaresr   r   methods_add_middleware)selfr!   mws      1lib/python3.12/site-packages/scrapy/middleware.py__init__zMiddlewareManager.__init__(   s5    &  	 B  $     c                    t         r    )NotImplementedError)clssettingss     r&   _get_mwlist_from_settingsz+MiddlewareManager._get_mwlist_from_settings2   s    !!r(   c                    t        | d      r| j                  |      }d}n	 |        }d}|t        | j                   d| d      t	        t
        |      S )Nfrom_settings__new__.z returned None)hasattrr/   	TypeError__qualname__r	   r   )objclsr,   instancemethod_names       r&   _build_from_settingsz&MiddlewareManager._build_from_settings6   s_    6?+++H5H)KxH#Kv2231[MPQQB!!r(   Nc                x    t        j                  | j                   dt        d       | j	                  ||      S )Nz;.from_settings() is deprecated, use from_crawler() instead.   )category
stacklevel)warningswarn__name__r   _from_settings)r+   r,   crawlers      r&   r/   zMiddlewareManager.from_settingsB   s8    ||nWX-	

 !!(G44r(   c                :    | j                  |j                  |      S r    )r@   r,   )r+   rA   s     r&   from_crawlerzMiddlewareManager.from_crawlerK   s    !!'"2"2G<<r(   c                   | j                  |      }g }g }|D ]U  }	 t        |      }|t        ||      }nt        j	                  ||      }|j                  |       |j                  |       W t        j                  d| j                  t        j                  |      dd|i        | | S # t        $ r@}	|	j                  r*t        j                  d||	j                  d   dd|i       Y d }	~	d }	~	ww xY w)NzDisabled %(clspath)s: %(eargs)sr   )clspatheargsrA   )extraz+Enabled %(componentname)ss:
%(enabledlist)s)componentnameenabledlist)r-   r   r   r   r8   appendr
   argsloggerwarninginfocomponent_namepprintpformat)
r+   r,   rA   mwlistr!   enabledrE   mwclsr%   es
             r&   r@   z MiddlewareManager._from_settingsO   s    ..x8G#G,&+E7;B*??xPB""2&w' " 	:!$!3!3%~~g6 g& 	 	
 K  ! ! 66NN9$+affQi@('2 # s   AB//	C886C33C8c                    t        |d      r(| j                  d   j                  |j                         t        |d      r)| j                  d   j	                  |j
                         y y )Nopen_spiderclose_spider)r2   r"   rJ   rW   
appendleftrX   )r$   r%   s     r&   r#   z!MiddlewareManager._add_middlewareo   sQ    2}%LL'..r~~>2~&LL(33BOOD 'r(   c                N    t        d| j                  |         }t        ||g| S )Nz,Iterable[Callable[Concatenate[_T, _P], _T2]])r	   r"   r   r$   
methodnameobjrK   r"   s        r&   _process_parallelz#MiddlewareManager._process_parallelu   s0     :DLL<T
  4t44r(   c                N    t        d| j                  |         }t        ||g| S )Nz+Iterable[Callable[Concatenate[_T, _P], _T]])r	   r"   r   r[   s        r&   _process_chainz MiddlewareManager._process_chain}   s.    94<<
;S
 Wc1D11r(   c                &    | j                  d|      S )NrW   r^   r$   spiders     r&   rW   zMiddlewareManager.open_spider   s    %%mV<<r(   c                &    | j                  d|      S )NrX   rb   rc   s     r&   rX   zMiddlewareManager.close_spider   s    %%nf==r(   )r!   r   returnNone)r,   r   rf   z	list[Any])r5   ztype[_T]r,   r   rf   r   r    )r,   r   rA   zCrawler | Nonerf   r   )rA   r   rf   r   )r%   r   rf   rg   )r\   strr]   r   rK   r   rf   zDeferred[list[_T2]])r\   rh   r]   r   rK   r   rf   zDeferred[_T])rd   r   rf   zDeferred[list[None]])r?   
__module__r4   __doc__rO   r'   classmethodr-   staticmethodr8   r/   rC   r@   r#   r^   r`   rW   rX    r(   r&   r   r   #   s    9%N% " " 	" 	" 5 5 = = ! !>E55$&5/25	52=>r(   r   )-
__future__r   loggingrP   r=   collectionsr   r   typingr   r   r   r	   scrapy.exceptionsr
   r   scrapy.utils.deferr   r   scrapy.utils.miscr   r   collections.abcr   r   twisted.internet.deferr   typing_extensionsr   r   r   scrapyr   scrapy.crawlerr   scrapy.settingsr   r   r   	getLoggerr?   rL   r   r   r   rm   r(   r&   <module>r|      sx    "    * 4 4 E > =2/ ?>&6	4B 
		8	$T]end> d>r(   