
    3 d                     @   d Z ddlZddlZddlZddlZddlZddlmZ 	 ddlm	Z	m
Z
 ddlmZ dZn# eef$ r  ej                    ZdZY nw xY w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 ddlmZ  ej        e          Z  e!            Z" G d dej#                  Z$dS )zU
Scrapy Telnet Console extension

See documentation in docs/topics/telnetconsole.rst
    N)protocol)manholetelnet)insultsTF)signals)NotConfigured)defers)print_engine_status)
listen_tcp)print_live_refsc                   B    e Zd Zd Zed             Zd Zd Zd Zd Z	dS )TelnetConsolec                    |j                             d          st          t          st          dt          z             || _        d| _        d |j                             d          D             | _        |j         d         | _	        |j         d         | _
        |j         d         | _        | j        s^t          j        t          j        d	                                        d
          | _        t"                              d| j                   | j        j                            | j        t&          j                   | j        j                            | j        t&          j                   d S )NTELNETCONSOLE_ENABLEDzUTELNETCONSOLE_ENABLED setting is True but required twisted modules failed to import:
Fc                 ,    g | ]}t          |          S  )int).0xs     8lib/python3.11/site-packages/scrapy/extensions/telnet.py
<listcomp>z*TelnetConsole.__init__.<locals>.<listcomp>1   s+     
 
 
CFF
 
 
    TELNETCONSOLE_PORTTELNETCONSOLE_HOSTTELNETCONSOLE_USERNAMETELNETCONSOLE_PASSWORD   utf8zTelnet Password: %s)settingsgetboolr   TWISTED_CONCH_AVAILABLE_TWISTED_CONCH_TRACEBACKcrawlernoisygetlist	portrangehostusernamepasswordbinasciihexlifyosurandomdecodeloggerinfor   connectstart_listeningengine_startedstop_listeningengine_stopped)selfr#   s     r   __init__zTelnetConsole.__init__'   sO   ''(?@@ 	 & 	.0HI   

 
#,445IJJ
 
 
 $%9:	()AB()AB} 	>$,RZ]];;BB6JJDMKK-t}===$$T%97;QRRR$$T%8':PQQQQQr   c                      | |          S Nr   )clsr#   s     r   from_crawlerzTelnetConsole.from_crawler?   s    s7||r   c                     t          | j        | j        |           | _        | j                                        }t
                              d|j        |j        dd| j        i           d S )Nz-Telnet console listening on %(host)s:%(port)d)r'   portr#   )extra)r   r&   r'   r=   getHostr/   r0   r#   )r6   hs     r   r2   zTelnetConsole.start_listeningC   sm    t~ty$??	I;VQV,,dl+ 	 	
 	
 	
 	
 	
r   c                 8    | j                                          d S r9   )r=   stopListeningr6   s    r   r4   zTelnetConsole.stop_listeningL   s    	!!!!!r   c                 p      G  fdd          }t          j        t           j         |                      S )Nc                   .    e Zd ZdZe fd            ZdS )&TelnetConsole.protocol.<locals>.PortalzAn implementation of IPortalc                 R   |j         j                             d          k    r-|                    j                            d                    st	          d          t          j        t          j        t          j
                                                  }|d         |d fS )Nr   zInvalid credentialsr   c                      d S r9   r   r   r   r   <lambda>z>TelnetConsole.protocol.<locals>.Portal.login.<locals>.<lambda>^   s     r   )r(   encodecheckPasswordr)   
ValueErrorr   TelnetBootstrapProtocolr   ServerProtocolr   Manhole_get_telnet_vars)self_credentialsmind
interfacesr   r6   s        r   loginz,TelnetConsole.protocol.<locals>.Portal.loginS   s      (DM,@,@,H,HH<#11$-2F2Fv2N2NOO< %%:;;;!9*GOT=R=R=T=T  #1x>>r   N)__name__
__module____qualname____doc__r	   rU   rC   s   r   PortalrF   P   s>        ..
? 
? 
? 
? V
? 
? 
?r   rZ   )r   TelnetTransportAuthenticatingTelnetProtocol)r6   rZ   s   ` r   r   zTelnetConsole.protocolO   sS    	? 	? 	? 	? 	? 	? 	? 	? 	? 	?  %f&I6688TTTr   c                 *     j         j         j         j        j         j         j        j         j          j         j         j         j         j         j         fdt          j        t          dd} j         j	        
                    t          |           |S )Nc                  6    t           j        j                  S r9   )r
   r#   enginerC   s   r   rI   z0TelnetConsole._get_telnet_vars.<locals>.<lambda>l   s    .t|/BCC r   zmThis is Scrapy telnet console. For more info see: https://docs.scrapy.org/en/latest/topics/telnetconsole.html)r_   spiderslotr#   
extensionsstatsr   estpprefshelp)telnet_vars)r#   r_   r`   ra   rb   rc   r   pprintr   r   send_catch_logupdate_telnet_vars)r6   rh   s   ` r   rP   zTelnetConsole._get_telnet_varsb   s     l)l)0L',|,1\'-CCCC$J
 
 	++,>K+XXXr   N)
rV   rW   rX   r7   classmethodr;   r2   r4   r   rP   r   r   r   r   r   &   s        R R R0   [
 
 
" " "U U U&    r   r   )%rY   r*   loggingr,   ri   	tracebacktwisted.internetr   twisted.conchr   r   twisted.conch.insultsr   r!   ImportErrorSyntaxError
format_excr"   scrapyr   scrapy.exceptionsr   scrapy.utils.decoratorsr	   scrapy.utils.enginer
   scrapy.utils.reactorr   scrapy.utils.trackrefr   	getLoggerrV   r/   objectrk   ServerFactoryr   r   r   r   <module>r~      s      				      % % % % % %$--------------"[! $ $ $3y355#$       + + + + + + * * * * * * 3 3 3 3 3 3 + + + + + + 1 1 1 1 1 1		8	$	$ VXX M M M M MH* M M M M Ms   / A
	A
