
    3 d                         d Z ddlZddlZddlmZmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ej        e          Zeefd
ZeefdZeefdZdS )z)Helper functions for working with signals    N)	AnonymousAny
disconnectgetAllReceiversliveReceivers)robustApply)DeferredDeferredList)Failure)StopDownload)maybeDeferred_coro)failure_to_exc_infoc           	         |                     dd          }t          |t          j        j                  rt          |          n|f}|t          fz  }|                    dd          }g }t          t          ||                     D ]}	 t          |g|R | |d|}t          |t                    r!t                              dd|id|i           |}	nT# |$ r t                      }	Y n?t          $ r3 t                      }	t                              d	d|id
d|i           Y nw xY w|                    ||	f           |S )zpLike pydispatcher.robust.sendRobust but it also logs errors and returns
    Failures instead of exceptions.
    dont_log spiderNsignalsenderz9Cannot return deferreds from signal handler: %(receiver)sreceiver)extra,Error caught on signal handler: %(receiver)sTexc_infor   )pop
isinstancecollectionsabcSequencetupler   getr   r   r   r	   loggererrorr   	Exceptionappend)
r   r   	argumentsnamedr   r   	responsesr   responseresults
             3lib/python3.11/site-packages/scrapy/utils/signal.pysend_catch_logr,      s    yyR((H h 899	h[ 
 HYYx&&FI!/&&"A"ABB - -	"9B !' FK H (H-- O*#V,      FF  	 	 	YYFFF 	 	 	YYFLL>X&(	      	 	(F+,,,,s   A	CD(,9D('D(c                   	 	fd}|                     dd          |                    dd          	g }t          t          ||                     D ]^t	          t
          g|R | |d|}|                    |           |                    fd           |                    |           _t          |          }|
                    d            |S )zLike send_catch_log but supports returning deferreds on signal handlers.
    Returns a deferred that gets fired once all signal handlers deferreds were
    fired.
    c                     t          | j                  s/t                              dd|it	          |           di           | S )Nr   r   r   r   )r   valuer"   r#   r   )failurerecvr   r   s     r+   logerrorz)send_catch_log_deferred.<locals>.logerrorE   s^     	:gmX#F#F 	LL>T",W55(	         r   Nr   r   c                     | fS )Nr   )r*   r   s    r+   <lambda>z)send_catch_log_deferred.<locals>.<lambda>W   s    (F!3 r3   c                     d | D             S )Nc                     g | ]
}|d          S )   r   ).0xs     r+   
<listcomp>z=send_catch_log_deferred.<locals>.<lambda>.<locals>.<listcomp>Z   s    111qt111r3   r   )outs    r+   r5   z)send_catch_log_deferred.<locals>.<lambda>Z   s    11S111 r3   )r   r!   r   r   r   r   
addErrbackaddBothr%   r
   addCallback)
r   r   r&   r'   r2   dfdsdr   r   r   s
          @@@r+   send_catch_log_deferredrB   ?   s         yyT**HYYx&&FD!/&&"A"ABB  
BK
 
*0
 
OT
 
 	
Xx(((			3333444ATAMM11222Hr3   c                 j    t          t          ||                     D ]}t          || |           dS )zSDisconnect all signal handlers. Useful for cleaning up after running
    tests
    r   N)r   r   r   )r   r   r   s      r+   disconnect_allrD   ^   sG     "/&&"A"ABB ; ;8F6:::::; ;r3   )__doc__collections.abcr   loggingpydispatch.dispatcherr   r   r   r   r   pydispatch.robustapplyr   twisted.internet.deferr	   r
   twisted.python.failurer   scrapy.exceptionsr   scrapy.utils.deferr   scrapy.utils.logr   	getLogger__name__r"   r,   rB   rD   r   r3   r+   <module>rQ      sH   / /                   / . . . . . 9 9 9 9 9 9 9 9 * * * * * * * * * * * * 1 1 1 1 1 1 0 0 0 0 0 0		8	$	$ i % % % %P $'y    > c ; ; ; ; ; ;r3   