
    !h                       S r SSKJr  SSKrSSKJr  SSKJr  SSK	J
r
JrJrJrJr  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KJr  \R6                  " \5      r\\
4         SS jjr\\
4         SS jjr\\4SS jjr g)z)Helper functions for working with signals    )annotationsN)Sequence)Any)	Anonymousr   
disconnectgetAllReceiversliveReceivers)robustApply)DeferredDeferredList)Failure)StopDownload)maybeDeferred_coro)failure_to_exc_infoc           	        UR                  SS5      n[        U[        5      (       a  [        U5      OU4nU[        4-  nUR                  S5      n/ n[        [        X5      5       HW  n [        U/UQ7XS.UD6n[        U[        5      (       a  [        R                  SSU0SU0S9  Un	UR                  Xy45        MY     U$ ! U a    [        5       n	 N*[         a'    [        5       n	[        R                  SSU0S	SU0S
9   NYf = f)zhLike pydispatcher.robust.sendRobust but it also logs errors and returns
Failures instead of exceptions.
dont_log spidersignalsenderz9Cannot return deferreds from signal handler: %(receiver)sreceiver)extra,Error caught on signal handler: %(receiver)sTexc_infor   )pop
isinstancer   tupler   getr	   r   r
   r   loggererrorr   	Exceptionappend)
r   r   	argumentsnamedr   r   	responsesr   responseresults
             Z/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/utils/signal.pysend_catch_logr+      s,    yyR(H",Xx"@"@uXxkHHYYx F35I!/&"AB	"9B!'FKH (H--O*#V,    F(+,1 C2   	YF 	YFLL>X&(	  	s   +?CD-DDc                t  ^
^^ SU
U4S jjnUR                  SS5      m
UR                  S5      m/ n[        [        X5      5       HQ  m[	        [
        T/UQ7XS.UD6nUR                  UT5        UR                  U4S j5      nUR                  U5        MS     [        U5      nUR                  S 5      n	U	$ )	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b  [        U R                  T5      (       d#  [        R                  SSU0[	        U 5      ST0S9  U $ )Nr   r   r   r   )r   valuer!   r"   r   )failurerecvr   r   s     r*   logerror)send_catch_log_deferred.<locals>.logerrorP   sL    :gmmX#F#FLL>T",W5(	       r   Nr   r   c                   > TU 4$ )Nr   )r)   r   s    r*   <lambda>)send_catch_log_deferred.<locals>.<lambda>d   s    r3   c                6    U  Vs/ s H  oS   PM	     sn$ s  snf )N   r   )outxs     r*   r5   r6   l   s    3'3aqT3''s   )r/   r   r0   r   returnr   )r   r    r	   r   r   r
   
addErrbackaddBothr$   r   addCallback)r   r   r%   r&   r1   dfdsdd2dld3r   r   r   s             @@@r*   send_catch_log_deferredrD   E   s      yyT*HYYx F8:D!/&"AB!3"
BK"
*0"
OT"
 	
Xx(45II5
 	B C 
d	B68nn'7B Ir3   c                N    [        [        X5      5       H  n[        X US9  M     g)zKDisconnect all signal handlers. Useful for cleaning up after running
tests
r   N)r	   r   r   )r   r   r   s      r*   disconnect_allrF   q   s#     "/&"AB86: Cr3   )
r   	TypingAnyr   rG   r%   rG   r&   rG   r;   z!list[tuple[TypingAny, TypingAny]])
r   rG   r   rG   r%   rG   r&   rG   r;   z+Deferred[list[tuple[TypingAny, TypingAny]]])r   rG   r   rG   r;   None)!__doc__
__future__r   loggingcollections.abcr   typingr   rG   pydispatch.dispatcherr   r   r   r	   pydispatch.robustapplyr
   twisted.internet.deferr   r   twisted.python.failurer   scrapy.exceptionsr   scrapy.utils.deferr   scrapy.utils.logr   	getLogger__name__r!   r+   rD   rF   r   r3   r*   <module>rW      s    / "  $ #  / 9 * * 1 0			8	$ !''' ' 	'
 ''V !))) ) 	)
 1)X (+ ;r3   