
    3 d                         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	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZ  e j        e          Z G d
 d          ZdS )    N)defaultdictdeque)AnyCallableDequeDictIterableTupleUnioncast)Deferred)Spider)NotConfigured)Settings)process_chainprocess_parallel)create_instanceload_objectc                       e Zd ZdZdZdeddfdZedede	fd            Z
eddefd	            Zed
             ZddZdedefdZdedefdZdedefdZdedefdZdS )MiddlewareManagerz/Base class for implementing middleware managerszfoo middlewaremiddlewaresreturnNc                 z    || _         t          t                    | _        |D ]}|                     |           d S N)r   r   r   methods_add_middleware)selfr   mws      1lib/python3.11/site-packages/scrapy/middleware.py__init__zMiddlewareManager.__init__   sP    &
  	  	% 	%B  $$$$	% 	%    settingsc                     t           r   )NotImplementedError)clsr"   s     r   _get_mwlist_from_settingsz+MiddlewareManager._get_mwlist_from_settings    s    !!r!   c                    |                      |          }g }g }|D ]}	 t          |          }t          |||          }|                    |           |                    |           N# t          $ rY}	|	j        rH|                    d          d         }
t                              d|
|	j        d         dd|i           Y d }	~	d }	~	ww xY wt          	                    d| j
        t          j        |          d	d|i            | | S )
N.zDisabled %(clsname)s: %(eargs)sr   )clsnameeargscrawler)extraz+Enabled %(componentname)ss:
%(enabledlist)s)componentnameenabledlist)r&   r   r   appendr   argssplitloggerwarninginfocomponent_namepprintpformat)r%   r"   r,   mwlistr   enabledclspathmwclsr   er*   s              r   from_settingszMiddlewareManager.from_settings$   sK   ..x88 	 	G#G,,$UHg>>""2&&&w''''    6 %mmC004GNN9$+afQi@@('2 #    	:!$!3%~g66  g& 	 	
 	
 	
 sK  s   A
A**
C4ACCc                 8    |                      |j        |          S r   )r>   r"   )r%   r,   s     r   from_crawlerzMiddlewareManager.from_crawlerB   s      !17;;;r!   c                     t          |d          r%| j        d                             |j                   t          |d          r'| j        d                             |j                   d S d S )Nopen_spiderclose_spider)hasattrr   r0   rB   
appendleftrC   )r   r   s     r   r   z!MiddlewareManager._add_middlewareF   ss    2}%% 	?L'..r~>>>2~&& 	EL(33BODDDDD	E 	Er!   
methodnamec                 t    t          t          t                   | j        |                   }t	          ||g|R  S r   )r   r	   r   r   r   r   rF   objr1   r   s        r   _process_parallelz#MiddlewareManager._process_parallelL   s5    x)4<
+CDD4t4444r!   c                 t    t          t          t                   | j        |                   }t	          ||g|R  S r   )r   r	   r   r   r   rH   s        r   _process_chainz MiddlewareManager._process_chainP   s5    x)4<
+CDDWc1D1111r!   spiderc                 .    |                      d|          S )NrB   rJ   r   rM   s     r   rB   zMiddlewareManager.open_spiderT   s    %%mV<<<r!   c                 .    |                      d|          S )NrC   rO   rP   s     r   rC   zMiddlewareManager.close_spiderW   s    %%nf===r!   r   )r   N)__name__
__module____qualname____doc__r6   r   r    classmethodr   listr&   r>   r@   r   strr   rJ   rL   r   rB   rC    r!   r   r   r      sV       99%N%S %T % % % % " "d " " " [" ! !X ! ! ! [!: < < [<E E E E5C 5 5 5 5 52 2X 2 2 2 2=& =X = = = =>6 >h > > > > > >r!   r   ) loggingr7   collectionsr   r   typingr   r   r   r   r	   r
   r   r   twisted.internet.deferr   scrapyr   scrapy.exceptionsr   scrapy.settingsr   scrapy.utils.deferr   r   scrapy.utils.miscr   r   	getLoggerrR   r3   r   rY   r!   r   <module>rd      s1     * * * * * * * * K K K K K K K K K K K K K K K K K K K K + + + + + +       + + + + + + $ $ $ $ $ $ > > > > > > > > : : : : : : : :		8	$	$G> G> G> G> G> G> G> G> G> G>r!   