
    !h?	                        S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSKJr  SSKJr  SSKJr  \(       a  SSKJr  SS	KJr  SS
KJr  \R.                  " \5      r " S S5      r " S S5      rg)zR
Extensions for debugging Scrapy

See documentation in docs/topics/extensions.rst
    )annotationsN)Pdb)TYPE_CHECKING)format_engine_status)format_live_refs)	FrameType)Self)Crawlerc                  F    \ rS rSrSS jr\S	S j5       rS
S jrSS jrSr	g)StackTraceDump!   c                    Xl          [        R                  " [        R                  U R                  5        [        R                  " [        R                  U R                  5        g ! [
         a     g f = fN)crawlersignalSIGUSR2dump_stacktraceSIGQUITAttributeError)selfr   s     ^/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/extensions/debug.py__init__StackTraceDump.__init__"   sN     '	MM&..$*>*>?MM&..$*>*>? 		s   AA' '
A43A4c                    U " U5      $ r    )clsr   s     r   from_crawlerStackTraceDump.from_crawler+   s    7|    c                    U R                   R                  (       d   eU R                  5       [        U R                   R                  5      [	        5       S.n[
        R                  SUSU R                   0S9  g )N)
stackdumpsenginestatusliverefszRDumping stack trace and engine status
%(enginestatus)s
%(liverefs)s
%(stackdumps)sr   )extra)r   engine_thread_stacksr   r   loggerinfo)r   signumframelog_argss       r   r   StackTraceDump.dump_stacktrace/   sg    ||""""--/01D1DE(*

 	=dll+	 	 	
r   c           	     j   [         R                  " 5        Vs0 s H  oR                  UR                  _M     nnSn[        R
                  " 5       R                  5        HK  u  pEUR                  US5      nSR                  [        R                  " U5      5      nUSU SU SU S3-  nMM     U$ s  snf )N z
# Thread: (z)

)	threading	enumerateidentnamesys_current_framesitemsgetjoin	tracebackformat_stack)r   thid2namedumpsid_r*   r4   dumps           r   r&   StackTraceDump._thread_stacks=   s    /8/B/B/DE/D88RWW$/DE--/557JC;;sB'D77911%89Dz$qSb99E 8  Fs    B0)r   N)r   r
   )r   r
   returnr	   r)   intr*   zFrameType | NonerB   None)rB   str)
__name__
__module____qualname____firstlineno__r   classmethodr   r   r&   __static_attributes__r   r   r   r   r   !   s%      
r   r   c                  (    \ rS rSrSS jrSS jrSrg)DebuggerG   c                    [         R                  " [        5         [        R                  " [        R                  U R
                  5        S S S 5        g ! , (       d  f       g = fr   )
contextlibsuppressr   r   r   _enter_debugger)r   s    r   r   Debugger.__init__H   s4      0MM&..$*>*>? 100s   0A
A"c                \    U(       d   e[        5       R                  UR                  5        g r   )r   	set_tracef_back)r   r)   r*   s      r   rS   Debugger._enter_debuggerM   s    u%r   r   N)rB   rE   rC   )rG   rH   rI   rJ   r   rS   rL   r   r   r   rN   rN   G   s    @
&r   rN   )__doc__
__future__r   rQ   loggingr   r5   r1   r:   pdbr   typingr   scrapy.utils.enginer   scrapy.utils.trackrefr   typesr   typing_extensionsr	   scrapy.crawlerr
   	getLoggerrG   r'   r   rN   r   r   r   <module>rd      sb    #    
      4 2 '& 
		8	$# #L& &r   