
    "eb)                    n   d Z ddlZddl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mZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlZdd	lmZ dd
lmZmZm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl
m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2Z2ddl3Z3ddl4Z4ddl5m6Z6m7Z7 ddl8Z8ddl9m:Z:m;Z;m<Z< ddl9m=Z= ddl9m>Z> ddl9m?Z? ddl@Z@ddlAZAddlBmCZDmEZEmFZFmGZGmHZHmIZImJZJ ddlKmLZLmMZM ddlNmOZP ddlKmQZQ ddlRmSZS ddl9mTZT ddlUmVZVmWZW ddlXmYZY ddlZ e	j                  e	j                  e	j                  e	j                  e	j                  e	j                  f\  Z[Z\Z]Z^Z_Zerese	j                  Z`ese	j                  Za G d  d!e,      Zb G d" d#e,      Zc G d$ d%e,      Zdd& Zed' Zfd( Zgd)Zhd*Zi G d+ d,ej      Zk G d- d.ek      Zld/ Zmd0 Zn G d1 d2ek      Zod3 Zpd4 Zq G d5 d6ek      Zred7        Zs G d8 d9ek      Zt G d: d;ek      Zud< Zvd= Zwd> Zxed?        Zyd@ ZzdA Z{dB Z|dcdCZ}da~dD ZdE ZedF        ZdG ZdH ZdddIZdJ ZdK ZdedLZ G dM dNek      Z G dO dPek      Z G dQ dRek      Z G dS dTek      Z G dU dVek      Z G dW dXek      Z G dY dZek      Z G d[ d\ek      Z G d] d^e,      Z G d_ d`e      Z G da dbe      Zy)fa   pydevd - a debugging daemon
This is the daemon you launch for python remote debugging.

Protocol:
each command has a format:
    id	sequence-num	text
    id: protocol command number
    sequence-num: each request has a sequence number. Sequence numbers
    originating at the debugger are odd, sequence numbers originating
    at the daemon are even. Every response uses the same sequence number
    as the request.
    payload: it is protocol dependent. When response is a complex structure, it
    is returned as XML. Each attribute value is urlencoded, and then the whole
    payload is urlencoded again to prevent stray characters corrupting protocol/xml encodings

    Commands:

    NUMBER   NAME                     FROM*     ARGUMENTS                     RESPONSE      NOTE
100 series: program execution
    101      RUN                      JAVA      -                             -
    102      LIST_THREADS             JAVA                                    RETURN with XML listing of all threads
    103      THREAD_CREATE            PYDB      -                             XML with thread information
    104      THREAD_KILL              JAVA      id (or * to exit)             kills the thread
                                      PYDB      id                            nofies JAVA that thread was killed
    105      THREAD_SUSPEND           JAVA      XML of the stack,             suspends the thread
                                                reason for suspension
                                      PYDB      id                            notifies JAVA that thread was suspended

    106      CMD_THREAD_RUN           JAVA      id                            resume the thread
                                      PYDB      id 	 reason                  notifies JAVA that thread was resumed

    107      STEP_INTO                JAVA      thread_id
    108      STEP_OVER                JAVA      thread_id
    109      STEP_RETURN              JAVA      thread_id

    110      GET_VARIABLE             JAVA      thread_id 	 frame_id 	      GET_VARIABLE with XML of var content
                                                FRAME|GLOBAL 	 attributes*

    111      SET_BREAK                JAVA      file/line of the breakpoint
    112      REMOVE_BREAK             JAVA      file/line of the return
    113      CMD_EVALUATE_EXPRESSION  JAVA      expression                    result of evaluating the expression
    114      CMD_GET_FRAME            JAVA                                    request for frame contents
    115      CMD_EXEC_EXPRESSION      JAVA
    116      CMD_WRITE_TO_CONSOLE     PYDB
    117      CMD_CHANGE_VARIABLE
    118      CMD_RUN_TO_LINE
    119      CMD_RELOAD_CODE
    120      CMD_GET_COMPLETIONS      JAVA

    200      CMD_REDIRECT_OUTPUT      JAVA      streams to redirect as string -
                                                'STDOUT' (redirect only STDOUT)
                                                'STDERR' (redirect only STDERR)
                                                'STDOUT STDERR' (redirect both streams)

500 series diagnostics/ok
    501      VERSION                  either      Version string (1.0)        Currently just used at startup
    502      RETURN                   either      Depends on caller    -

900 series: errors
    901      ERROR                    either      -                           This is reserved for unexpected errors.

    * JAVA - remote debugger, the java end
    * PYDB - pydevd, the python end
    N)_queue)time)	threading)socket)DebugInfoHolder
IS_WINDOWS	IS_JYTHONIS_WASMIS_PY36_OR_GREATER	STATE_RUNASYNC_EVAL_TIMEOUT_SECget_global_debuggerGetGlobalDebuggerset_global_debuggersilence_warnings_decoratorfilter_all_warningsIS_PY311_OR_GREATER)	overrides)extract_token_and_qualifier)VariablesResponseBodySetVariableResponseBodyStepInTargetStepInTargetsResponseBody)pydevd_base_schemapydevd_schema)
NetCommand)ExceptionOnEvaluate)ForkSafeLockNULL)PyDBDaemonThread)pydevd_find_thread_by_idresume_threads)
PYDEV_FILE)
quote_plusunquote_plus)pydevd_vars	pydevd_iopydevd_reload)pydevd_bytecode_utils)
pydevd_xml)pydevd_vm_type)quote_smartcompare_object_attrs_keynotify_about_gevent_if_neededisinstance_checkedScopeRequestgetattr_checkedTimer)	pydev_logfsnotify)	exception)_pydev_completer)get_exception_traceback_str)pydevd_console)disable_trace_thread_modulesenable_trace_thread_modules)StringIO)*c                       e Zd ZdZddZddZd Z eej                        d        Z	d Z
d Z eej                        d        Zd	 Zd
 Zy)ReaderThreadzA reader thread reads and dispatches commands in an infinite loop c                     |J t        j                  | |       || _        || _        d| _        d| _        || _         || j                        j                  | _        y )N    zpydevd.Reader)	r    __init__(_ReaderThread__terminate_on_socket_closesock_buffernameprocess_net_command
_from_jsonprocess_net_command_json)selfrC   py_dbPyDevJsonCommandProcessorrF   terminate_on_socket_closes         </usr/lib/python3/dist-packages/_pydevd_bundle/pydevd_comm.pyrA   zReaderThread.__init__   sZ    !!$.+D(	#	#6 (A$//(R(k(k%r@   c                 F    t        j                  ||| j                        S )N)on_dict_loaded)r   	from_json_on_dict_loaded)rI   json_msgupdate_ids_from_daps      rM   rG   zReaderThread._from_json   s    !++H6IZ^ZnZnoor@   c                 \    | j                   j                  D ]  }|j                  |        y N)rJ   dap_messages_listenersafter_receive)rI   dctlisteners      rM   rQ   zReaderThread._on_dict_loaded   s)    

99 	(H""3'	(r@   c                 .    t        j                  |        y rU   )r    do_kill_pydev_threadrI   s    rM   r[   z!ReaderThread.do_kill_pydev_thread   s    --d3r@   c                 X   	 t        | j                        }||k(  r| j                  }d| _        |S ||kD  r%| j                  d | }| j                  |d  | _        |S 	 | j                  j                  t	        ||z
  d            }|sy| xj                  |z  c_        # t
        $ r Y yw xY w)Nr@      )lenrD   rC   recvmaxOSError)rI   size
buffer_lenretrs        rM   _readzReaderThread._read   s    T\\*JT!ll"
D ll5D)#||DE2
IINN3tj'8$#?@ LLAL%   s   (B 	B)(B)c                     	 | j                   j                  d      }|dk7  r*|dz  }| j                   d | }| j                   |d  | _         |S 	 | j                  j                  d      }|sy| xj                   |z  c_         # t        $ r Y yw xY w)N   
   r^   r@   )rD   findrC   r`   rb   )rI   ire   rf   s       rM   
_read_linezReaderThread._read_line   s    !!%(ABwQll2A&#||AB/
		t,A !   s   B 	BBc                 R   	 d}	 	 t                | j                         }t        |      dk(  r<t        j                  d       | j                          	 t        j                  d       y | j                  rs|j                  d      r-t        |j                         j                  dd      d         }|dk7  r|dk(  r| j                  |      }d}t        |      dk(  r<t        j                  d	       | j                          	 t        j                  d       y | j                  r&| j                  | j                  |       D|j                  d
      r|d d }n-|j                  d      r|d d }n|j                  d      r|d d }t!        |d      r|j#                  d      }t$        j&                  dk\  rt        j                  d|       |j                  dd      }	 t        |d         }t$        j&                  dk\  r4t        j                  dt(        j+                  t-        |      d      |       | j/                  |t        |d         |d          Y#  | j                  st                | j                          Y t        j                  d       y xY w#  t0        t        t        d|       Y `xY w#  | j                  st0        t        
t                | j                          Y nxY w	 t        j                  d       y # t        j                  d       w xY w)Nrj   r   z7ReaderThread: empty contents received (len(line) == 0).zReaderThread: exits   Content-Length:   :rk   s   
z@ReaderThread: empty contents received (len(json_contents) == 0).s   

ri      decodeutf-8   zdebugger: received >>%s<<
	   zReceived command: %s %s
z???zCan't process net command: %s.)r.   rn   r_   r3   debug_terminate_on_socket_close_kill_received
startswithintstripsplitrg   rH   rJ   endswithpydev_log_exceptionhasattrrs   r   DEBUG_TRACE_LEVELID_TO_MEANINGgetstrprocess_commandsys)rI   content_lenlinejson_contentsargscmd_ids         rM   _on_runzReaderThread._on_run   s   T	2K113??,D4yA~!(ab779L OO01I ** '9:&)$**,*<*<T1*Ea*H&I "b(7?,0JJ{,CM*,K"=1Q6 )0r s $ ? ? A &f OO01c  $22 ( !99$**mT   ==1#'9D!]]51#'9D!]]51#'9D 4*;;w/D"449OO$A4Hzz$*T a\F&88A=!(C]EVEVWZ[aWbdiEjlpq((T!WtAwGK b..+-7798 OO01T+>+J+,LdS	.&&?':'F')++--OO01IOO01s   J? AI *I 6J? 7=I 4J? 5AI I (J? *I J? AI AJ? %A7J  J? (JJ? J?  J<:J? ?4K53L L&c                 R    | j                   r| j                  j                          y y rU   )rB   rJ   #dispose_and_kill_all_pydevd_threadsr\   s    rM   ry   z'ReaderThread._terminate_on_socket_close+  s     ++JJ::< ,r@   c                 @    | j                  | j                  |||       y rU   )rF   rJ   )rI   r   seqtexts       rM   r   zReaderThread.process_command/  s      VS$?r@   NT)F)__name__
__module____qualname____doc__rA   rG   rQ   r   r    r[   rg   rn   r   ry   r    r@   rM   r>   r>      sn    K	lp( 4454 64**"" ''(U2 )U2n=@r@   r>   c                   r    e Zd Zd Z eej                        d        Z eej                        d        Zy)FSNotifyThreadc                     t        j                  | |       || _        d| _        t	        j
                         | _        || _        y )Nzpydevd.FSNotifyThread)r    rA   apirE   r4   Watcherwatcher
watch_dirs)rI   rJ   r   r   s       rM   rA   zFSNotifyThread.__init__5  s7    !!$.+	'')$r@   c                 X   	 t        j                  ddj                  t        | j                              z         | j
                  j                  | j                         | j                  s| j
                  j                         D ]w  \  }}|t        j                  j                  k(  r?t        j                  d|       | j                  j                  | j                  dd |       bt        j                  d|       y | j                  sy y #  t        j                  d       Y y xY w)Nz0Watching directories for code reload:
---
%s
---
zModified: %srj   z%Ignored (add or remove) change in: %sz<Error when waiting for filesystem changes in FSNotifyThread.)r3   infojoinsortedr   r   set_tracked_pathsrz   iter_changesr4   Changemodifiedr   request_reload_coderJ   r5   )rI   change_enumchange_paths      rM   r   zFSNotifyThread._on_run<  s    	`NNPTXT]T]^deietet^uTvwx LL**4??;))040I0I0K ],K"hoo&>&>>!~{C44TZZT;W!'NP[\] ))	` ^_s   DD D)c                 b    | j                   j                          t        j                  |        y rU   )r   disposer    r[   r\   s    rM   r[   z#FSNotifyThread.do_kill_pydev_threadO  s     --d3r@   N)r   r   r   rA   r   r    r   r[   r   r@   rM   r   r   3  sI    % ''(` )`$ 4454 64r@   r   c                       e Zd ZdZddZd Z eej                        d        Zd Z	 eej                        d        Z
y)	WriterThreadz; writer thread writes out the commands in an infinite loop c                     t        j                  | |       || _        || _        d| _        t        j                         | _        t        j                         dk(  rd| _
        y d| _
        y )Nzpydevd.Writerpythonr   皙?)r    rA   rC   (_WriterThread__terminate_on_socket_closerE   r   Queue
_cmd_queuer+   get_vm_typetimeout)rI   rC   rJ   rL   s       rM   rA   zWriterThread.__init__X  sT    !!$.	+D(#	 ,,.%%'83DLDLr@   c                 V    | j                   s| j                  j                  |d       yy)z cmd is NetCommand FN)rz   r   put)rI   cmds     rM   add_commandzWriterThread.add_commandc  s$    ""OOU+ #r@   c                    	 	 	 	 | j                   j                  dd      }	 |j                  6| j                  j                  D ]  }|j                  |j                          t                |j                  | j                         |j                   t"        k(  rt        j                  d       n't$        n t%        j&                  | j(                         t        j                  d       y# t        j                  $ rd | j                  rTt        j                  d       	 | j                  j                  t               n#  Y nxY wY t        j                  d       yY cw xY w#  Y t        j                  d       yxY w# t*        $ rF | j,                  r7| j                  j/                          t0        j2                  dkD  r
t5                Y w xY w# t        j                  d       w xY w)z just loop and write responses Tr   z4WriterThread: kill_received (sock.shutdown(SHUT_WR))zWriterThread: exitNzWriterThread: CMD_EXIT receivedr   )r   r   r   Emptyrz   r3   rx   rC   shutdownSHUT_WRas_dictrJ   rV   before_sendr.   sendidCMD_EXITr   sleepr   	Exceptionr   r   r   r   r   )rI   r   rY   s      rM   r   zWriterThread._on_runh  s   2	2%"oo11$<6 ;;*$(JJ$E$E : ,,S[[9: ./#66X%OO$EF<

4<<(U b OO01[ "<< %..%OO,bc% $		 2 27 ;% $ #8 OO015 %'%( * OO01  	*//

>>@"44q8')		* OO01s}   F C/ B8F /4E&$EE&EE&E) "E) #F %E&&E) )F+F F AGG GG G.c                 6    | j                   j                         S rU   )r   emptyr\   s    rM   r   zWriterThread.empty  s    $$&&r@   c                     | j                   s@| j                  j                  j                  | j                        }| j	                  |       t        j                  |        y rU   )rz   rJ   cmd_factorymake_exit_commandr   r    r[   )rI   exit_cmds     rM   r[   z!WriterThread.do_kill_pydev_thread  sE    ""zz--??

KHX&--d3r@   Nr   )r   r   r   r   rA   r   r   r    r   r   r[   r   r@   rM   r   r   U  sU    E	,
 ''(52 )52n' 4454 64r@   r   c                 P   	 t        t        t        t              }t        r"t
        s|j                  t        t        d       n!t        s|j                  t        t        d       |j                  | |f       |j                  d        |S # t        $ r j                           w xY w)Nrk   )r   AF_INETSOCK_STREAMIPPROTO_TCPr   r	   
setsockopt
SOL_SOCKETSO_EXCLUSIVEADDRUSEr
   SO_REUSEADDRbind
settimeoutr   close)hostportservers      rM   create_server_socketr     s    k:ij*=qAj,:T4L!$
 M	  s   BB
 
B%c                     t        d|       }	 |j                  d       |j                         \  }}t        j                  d       |j                          |S #  t        j                  d|         xY w)z4 binds to a port, waits for the debugger to connect  )r   r   rk   zConnection acceptedzCould not bind to port: %s
)r   listenacceptr3   r   r   r5   )r   s
new_socket_addrs       rM   start_serverr     se    "40A		HHJ
E,-		:DAs   A
A A3c                    t        j                  d| |       t        t        t              }	 |j                  t        t        j                  d       	 |j                  t        j                  t        j                  d       	 |j                  t        j                  t        j                  d       	 |j                  t        j                  t        j                  d       	 t        t         j"                  j%                  dd            }|j'                  |       |j)                  | |f       |j'                  d       t        j                  d       |S # t        t        f$ r Y w xY w# t        t        f$ r Y w xY w# t        t        f$ r Y w xY w# t        t        f$ r Y w xY w#  t        j*                  d	| |        xY w)
z connects to a host/port zConnecting to %s:%srk   ru      PYDEVD_CONNECT_TIMEOUT
   Nz
Connected.zCould not connect to %s: %s)r3   r   r   r   r   r   r   socket_moduleSO_KEEPALIVEAttributeErrorrb   r   TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNTr|   osenvironr   r   connectr5   )r   r   r   r   s       rM   start_clientr     sr   NN($5w$A	Z!;!;Q?	]..0J0JAN	]..0K0KQO	]..0I0I1M
bjjnn%=rBC	W			4,	T|$- G$  G$  G$  G$ 94FsT   %E /E. /F 3/F #A4F- E+*E+.F ?F FFF*)F*-Grk   rw   c                   .    e Zd ZdZddZd Zd Zd ZeZy)InternalThreadCommandz internal commands are generated/executed by the debugger.

    The reason for their existence is that some commands have to be executed
    on specific threads. These are the InternalThreadCommands that get
    get posted to PyDB.
    Nc                 <    || _         || _        || _        || _        y rU   )	thread_idmethodr   kwargsrI   r   r   r   r   s        rM   rA   zInternalThreadCommand.__init__  s    "	r@   c                 `    | j                   |k(  xs | j                   j                  d|z         S )zABy default, it must be in the same thread to be executed
        |)r   r   rI   r   s     rM   can_be_executed_byz(InternalThreadCommand.can_be_executed_by  s+     ~~*Vdnn.E.EcIo.VVr@   c                     	 | j                   + | j                   |g| j                  i | j                   nt        d      	 d | _        d | _        y # d | _        d | _        w xY w)Nzyou have to override do_it)r   r   r   NotImplementedErrorrI   dbgs     rM   do_itzInternalThreadCommand.do_it  sd    	{{&C;$));t{{;)*FGG < DIDK DIDKs   AA A$c                 V    d| j                   d| j                  d| j                  dS )NzInternalThreadCommands(z, ))r   r   r   r\   s    rM   __str__zInternalThreadCommand.__str__  s    7;{{DIIt{{[[r@   rU   )	r   r   r   r   rA   r   r  r  __repr__r   r@   rM   r   r     s$    W
\ Hr@   r   c                        e Zd ZddZd Zd Zy)!InternalThreadCommandForAnyThreadNc                 t    |dk(  sJ t        j                  | ||g|i | d| _        t               | _        y )Nr<   F)r   rA   executedr   lockr   s        rM   rA   z*InternalThreadCommandForAnyThread.__init__  s<    C&&tYPPP N	r@   c                      yNTr   r   s     rM   r   z4InternalThreadCommandForAnyThread.can_be_executed_by'  s    r@   c                     | j                   5  | j                  r
	 d d d        y d| _        d d d        t        j                  | |       y # 1 sw Y    xY wr  )r
  r	  r   r  r   s     rM   r  z'InternalThreadCommandForAnyThread.do_it*  sM    YY 	!}}	! 	! !DM	!
 	##D#.	! 	!s   A
A

ArU   )r   r   r   rA   r   r  r   r@   rM   r  r    s    #/r@   r  c                     | j                   j                  |d      }| j                  | j                  j                  |       y y )Nrw   )r   make_io_messagewriterr   )rJ   r   r   s      rM   _send_io_messager  3  s;    



+
+Aq
1C||  %  r@   c                     	 d}|@|}|t         j                  vr,d|v r(|j                  d      d   }|t         j                  v r|}i }t         j                  j                  |      }|||f|t	        |      <   |rt        j                  |      }t         j                  j                         j                         D ]S  \  }}t        |d      }||j                  d      r|d d }t        j                  |      |k(  sD||f|t	        |      <   U |s>|r|rt        | d|d|d       n|rt        | d	|d       nm|rkt        | d
|d       nZ|j                         D ]G  \  }}t        | d|z   dz          d}t        j                  |      rt        | d       <t        | d       I | j                  j!                  ||      }	| j"                  j%                  |	       y #  t'        j(                  d       Y y xY w)NF.rj   __file__)z.pycz.pyoz#code reload: Unable to find module z to reload for path: r   z7code reload: Unable to find module to reload for path: z.code reload: Unable to find module to reload: z&code reload: Start reloading module: "z" ... 
Tzcode reload: reload finished
z9code reload: reload finished without applying any change
zError reloading code)r   modulesr~   r   r   pydevd_file_utilsnormcasecopyitemsr1   r   r  valuesr(   xreloadr   make_reloaded_code_messager  r   r3   r5   )
r   r   module_namefilenamefound_module_to_reloadnew_module_namemodules_to_reloadmodulefr   s
             rM   internal_reload_coder$  9  s   14!&"%K#++-+%&1&7&7&<R&@O&#++5&5--3[,Abj)(11(;H'*{{'7'7'9'?'?'A N#V#FJ7=zz"23crF(11!4@9?8M)"V*5N !K juw  'A  B go&qr ^i&kl
 (9'?'?'A h# &NQ\&\_i&ij)-& ((0$S*JK$S*fgh oo88>TU

s#423s   CG$ .G$  C#G$ $G=c                   x    e Zd ZdZddZ eej                        d        Z eej                        d        Zy)InternalGetThreadStackaB  
    This command will either wait for a given thread to be paused to get its stack or will provide
    it anyways after a timeout (in which case the stack will be gotten but local variables won't
    be available and it'll not be possible to interact with the frame as it's not actually
    stopped in a breakpoint).
    c	                     t         j                  | |       t        j                  |      | _        t        j
                         |z   | _        || _        d | _        || _	        || _
        || _        || _        y rU   )r   rA   weakrefref_py_dbr   _timeoutr   _cmd_fmt_start_frame_levels_set_additional_thread_info)	rI   r   r   rJ   set_additional_thread_infofmtr   start_framelevelss	            rM   rA   zInternalGetThreadStack.__init__v  sc    &&tY7kk%(		g-		' ,F(r@   c           
         t        j                          | j                  k\  }| j                         }t        | j                        }d }|r/t        |dd       s"| j                  |      }|j                  |      }	 |j                  j                  || j                  | j                  || j                  | | j                  | j                        | _        d }d }| j                  d uxs |S # d }d }w xY w)Npydev_do_not_trace)must_be_suspendedr3  r4  )r   r+  r*  r!   r   getattrr0  get_topmost_framer   make_get_thread_stack_messager   r-  r.  r/  r,  )rI   
_thread_id	timed_outrJ   tframeadditional_infos          rM   r   z)InternalGetThreadStack.can_be_executed_by  s    IIK4==0	$T^^4WQ 4d;">>qAO#55a8E	))GGtxx		YbUbpt  qB  qB  KO  KW  KW H XDI EAyy$1	1 EAs   ;AC, ,C2c                 v    | j                   -|j                  j                  | j                          d | _         y y rU   )r,  r  r   r   s     rM   r  zInternalGetThreadStack.do_it  s.    99 JJ""499-DI !r@   N)g      ?r   r   )	r   r   r   r   rA   r   r   r   r  r   r@   rM   r&  r&  n  sM    F $7782 92$ $**+ ,r@   r&  c                     t        |      }|( ||      }||_        ||_        d |_        t        |_        | j                  rt        d|       y y Nr<   )except_thread)r!   pydev_original_step_cmdpydev_step_cmdpydev_step_stopr   pydev_statestepping_resumes_all_threadsr"   )rJ   r   r   r1  thread_to_stepr   s         rM   internal_step_in_threadrJ    sT    -i8N!).9'-$$#$))s.9 *r@   c                     t        |      }|P ||      }t        |_        t        |_        d |_        t        |      |_        t        |      |_        t        |_	        | j                  rt        d|       y y rB  )r!   CMD_SMART_STEP_INTOrD  rE  rF  r|   pydev_smart_parent_offsetpydev_smart_child_offsetr   rG  rH  r"   )rJ   r   offsetchild_offsetr1  rI  r   s          rM   internal_smart_step_intorQ    sm    -i8N!).9':$1#),V&(+L(9%$))s.9 *r@   c                       e Zd ZddZd Zy)InternalSetNextStatementThreadc                 J    || _         || _        || _        || _        || _        y)z
        cmd_id may actually be one of:

        CMD_RUN_TO_LINE
        CMD_SET_NEXT_STATEMENT
        CMD_SMART_STEP_INTO
        N)r   r   r   r   	func_name)rI   r   r   r   rU  r   s         rM   rA   z'InternalSetNextStatementThread.__init__  s'     #	"r@   c                 Z   t        | j                        }||j                  }| j                  |_        | j                  |_        d |_        t        | j                        |_	        | j                  |_        t        | j                        |_        d|_        d|_        t"        |_        y y Nrj   )r!   r   r?  r   rD  rE  rF  r|   r   pydev_next_linerU  pydev_func_namer   r   pydev_messagerM  rN  r   rG  )rI   r   r=  r   s       rM   r  z$InternalSetNextStatementThread.do_it  s    $T^^4=$$D+/;;D("&++D#'D #&tyy>D #'>>D !$TXXD-/D*,.D)(D r@   N)r   r   r   r   rA   r  r   r@   rM   rS  rS    s    #)r@   rS  c                    |j                   }|j                  }d}t        |t              r|}|j                  }|j
                  }t        |d      r|j                         }g }	 	 | j                  j                  |      }|j                  ||      D ]#  }|j                  |j                  |             % 	 t+        |      }t-        j.                  |d
|i      }| j0                  j3                  t5        t6        d|d             y# t        $ r Y \w xY w#  	 t        j                         \  }	}
}dj!                  t#        j$                  |	|
|            }d|dddg}n #  d	}t'        j(                  |       g }Y nxY wY xY w)z.
        :param VariablesRequest request:
    Nto_dict)r2  scoper2  r   z<error>r   )rE   valuetypevariablesReferencezA<Internal error - unable to get traceback when getting variables>bodyr   Tis_json)	argumentsrb  r/   r0   variable_referenceformatr   r]  suspended_frames_managerget_variableget_children_variablesappendget_var_dataKeyErrorr   exc_infor   	tracebackformat_exceptionr3   r5   r   r   build_responser  r   r   
CMD_RETURN)rJ   requestrg  variables_referencer^  r2  	variablesvariable	child_varexcexc_typetberrrc  variables_responses                  rM   internal_get_variable_jsonr    s   
 !!I#66E-|<#1DD


CsIkkmI	B55BBCVWH &<<E<R B	  !7!7C!7!@AB" !+D+::7FSW=Y	LLZ
A7ISWXY-  		
	 #C2'')44S(BGHC!!&'	 I	UC$IsC   %D  :D 	DD DD FAE$#F$F?Fc                   &    e Zd ZdZd Zed        Zy)InternalGetVariable gets the value of a variable c                 J    || _         || _        || _        || _        || _        y rU   )sequencer   frame_idr^  
attributes)rI   r   r   r  r^  attrss         rM   rA   zInternalGetVariable.__init__
  s%    " 
r@   c                    	 t               }|j                  d       t        j                  || j                  | j
                  | j                  | j                        \  }}|i }t        |      }|dk(  s0|j                  j                  dk(  st        st        |t              }t               }|D ]i  }||   }t        j                   |      }	|j                  t        j"                  |||	             |j%                  | j                  |t'        |             k |j                  d       |j(                  j+                  | j,                  |j/                               }
|j1                          |j2                  j5                  |
       y# t6        $ rO |j(                  j9                  | j,                  dt;                     }
|j2                  j5                  |
       Y yw xY w)' Converts request into python variable <xml>NOrderedDict)keyevaluate_full_value</xml>zError resolving variables )r;   writer&    resolve_compound_variable_fieldsr   r  r^  r  list	__class__r   r   r   r-   r2   r*   should_evaluate_full_value
var_to_xml report_if_compute_repr_attr_slowra  r   make_get_variable_messager  getvaluer   r  r   r   make_error_messager7   )rI   r   xml	type_nameval_dictkeystimerkvalr  r   s              rM   r  zInternalGetVariable.do_it  s   	(*CIIg"-"N"NT^^T]]DJJ#QIx >D.(2D2D2M2MQ^2^btd(@AGE Vqk&0&K&KC&P#		*//QL_`a66t4PS9U	V IIh//;;DMM3<<>ZCIIKJJ""3' 	(//44A\A^`bCJJ""3'	(s   FF AG&%G&Nr   r   r   r   rA   r   r  r   r@   rM   r  r    s    (   (  (r@   r  c                       e Zd Zd Zd Zy)InternalGetArrayc                 
   || _         || _        || _        |	| _        |
j	                  d      d   | _        |
| _        t        |      | _        t        |      | _	        t        |      | _
        t        |      | _        || _        y )Nrv   rj   )r  r   r  r^  r~   rE   r  r|   roffsetcoffsetrowscolsri  )rI   r   r  r  r  r  ri  r   r  r^  r  s              rM   rA   zInternalGetArray.__init__5  sm    " 
KK%b)	
7|7|I	I	r@   c           	         	 |j                  | j                  | j                        }t        j                  | j
                  |j                  |j                  |      }t        j                  || j
                  | j                  | j                  | j                  | j                  | j                        }|j                  j                  | j                   |      }|j"                  j%                  |       y #  |j                  j'                  | j                   dt)               z         }|j"                  j%                  |       Y y xY w)N)rJ   zError resolving array: )
find_framer   r  r&   eval_in_contextrE   	f_globalsf_localstable_like_struct_to_xmlr  r  r  r  ri  r   make_get_array_messager  r  r   r  r7   )rI   r   r>  varr  r   s         rM   r  zInternalGetArray.do_itB  s    	(NN4>>4==AE--dii%..`cdC66sDIIt||UYUaUacgclclnrnwnwy}  zE  zE  FC//88LCJJ""3'	(//44T]]D]`{`}D}~CJJ""3's   C5C8 8AENr[  r   r@   rM   r  r  3  s    	(r@   r  c                    	 | j                  ||      }|t        j                  ||||       }nd}d}	|	t        j                  |d      z  }	|	dz  }	| j
                  j                  ||	      }
| j                  j                  |
       y# t        $ rK | j
                  j                  |d|d|dt                     }
| j                  j                  |
       Y yw xY w)z! Changes the value of a variable Nr  r   r  zError changing variable attr:z expression:z traceback:)r  r&   change_attr_expressionr*   r  r   make_variable_changed_messager  r   r   r  r7   )r   r   r   r  r^  attrr`  r>  resultr  r   s              rM   internal_change_variabler  N  s    $y(3 77tUCPFFz$$VR00xoo;;CE

s# $oo00vz  }B  D_  Da  7b  c

s#$s   BB	 	ACCc           	         |j                   }|j                  }d}t        |t              r|}|j                  }|j
                  }t        |d      r|j                         }	 | j                  j                  |      }|t        | |ddd|d       y|j                  |j                  |j                  | |      }|t        | |ddd	|j                  d       y|j                  |      }t!        |d
   |d   |j#                  d      |j#                  d      |j#                  d            }	t%        j&                  |d|	i      }
| j(                  j+                  t-        t.        d|
d             y# t        $ r d}Y 
w xY w)a  
    The pydevd_vars.change_attr_expression(thread_id, frame_id, attr, value, dbg) can only
    deal with changing at a frame level, so, currently changing the contents of something
    in a different scope is currently not supported.

    :param SetVariableRequest request:
    Nr]  r   Fz-Unable to find variable container to change: r  )r`  successmessager_  zUnable to change: r`  ra  rb  namedVariablesindexedVariables)r`  ra  rb  r  r  rc  rd  r   Tre  )rg  rb  r/   r0   rh  ri  r   r]  rj  rk  ro  _write_variable_responsechange_variablerE   r`  rn  r   r   r   rs  r  r   r   rt  )rJ   ru  rg  rv  r^  r2  rx  ry  var_datarc  r~  s              rM   internal_change_variable_jsonr  `  s    !!I#66E-|<#1DD


CsIkkm11>>?RS  7"e  tG  >I	J((%UX(YI 7"eXaXfXf=h	j%%#%.H"wf#<<(<=||$45!&89D ,::7FSW=Y	LLZ
A7ISWXY1  s   "E9 9FFc                     t        d      }t        j                  ||d|d      }t        t        d|d      }| j
                  j                  |       y )Nr   Frc  r  r  rd  r   Tre  )r   r   rs  r   rt  r  r   )rJ   ru  r`  r  r  rc  r~  r   s           rM   r  r    sS    "2&D+:: Z$6
EC	LLS!r@   c                    	 | j                  ||      }|wt        j                         }d}|t        j                  |j
                  |      z  }~|dz  }| j                  j                  ||      }| j                  j                  |       y| j                  j                  |d|d|      }| j                  j                  |       y#  | j                  j                  |d|d|      }| j                  j                  |       Y yxY w)r  Nr  r  Frame not found:  from thread: Error resolving frame: )r  pydevconsoleget_ipython_hidden_varsr*   frame_vars_to_xmlr  r   make_get_frame_messager  r   r  )r   r   r   r  r>  	hidden_nsr  r   s           rM   internal_get_framer    s    $y(3$<<>IC://	JJC8OC//88cBCJJ""3' //44Sckmv:wxCJJ""3'$oo00emox6yz

s#s   B
C =C ?Dc                 p   	 t        |      }| j                  ||      }||>| j                  j                  |d|d|      }	| j                  j                  |	       y t        g }
n)t        j                  |t        |      t        |            }
 ||      }t        |
      |_
        d}|
D ]  }|j                  r|j                  D ]v  }|dt        |j                        dt        |j                        j!                         d|j"                  d|j$                  d|j$                  d	|j&                  d
z  }x |dt        |j                        dt        |j                        j!                         d|j"                  d|j$                  d|j&                  d
z  } |dz  }t)        t*        ||      }	| j                  j                  |	       y #  t-        j.                  d       | j                  j                  |d|d|      }	| j                  j                  |	       Y y xY w)Nr  r  r  z<variant name="z" isVisited="" line="z
" offset="z" childOffset="z" callOrder="z"/>z" childOffset="-1" callOrder="r  +Error calculating Smart Step Into Variants.z2Error getting smart step into variants for frame: )r!   r  r   r  r  r   r)   "calculate_smart_step_into_variantsr|   tuplepydev_smart_step_into_variantschildren_variantsquoterE   r   
is_visitedlowerr   rO  
call_orderr    CMD_GET_SMART_STEP_INTO_VARIANTSr3   r5   )r   r   r   r  
start_lineend_liner1  threadr>  r   variantsr   r  variantchild_variants                  rM   %internal_get_smart_step_into_variantsr    s   3$))4y(3>U]//44Sckmv:wxCJJ""3' (H,OOPUWZ[eWfhklthuvH)&1 /4Ho+ 	G((%,%>%> 
M m001M445;;=%**%,,%00 C
 ',,'**+113LLNN&& 	, 	x93D

s#$IJoo00$% 	

s#s   AG !E=G AH5c                    	 t        |      }| j                  ||      }||Ut        g       }t        j                  ||ddd      }	t        t        d|	d      }
| j                  j                  |
       y d}d}t        g }nt        j                  |||      } ||      }g }t        j                  d      }i }|D ]F  }|j                  r|j                  r|j                  D ]  }t        |      }|j                   d	kD  r7|j#                  t%        ||j&                  d
|j                   d             n&|j#                  t%        ||j&                               |||<   t)        |      dk\  s  t        |      }|j                   d	kD  r7|j#                  t%        ||j&                  d
|j                   d             n&|j#                  t%        ||j&                               |||<   t)        |      dk\  sG n t+        |      |_        ||_        t        |      }t        j                  |d|i      }t        t        d|d      }
| j                  j                  |
       y # t0        $ r|}t3        j4                  d       t        g       }t        j                  ||dt7        |      d      }	t        t        d|	d      }
| j                  j                  |
       Y d }~y d }~ww xY w)NFz<Thread to get step in targets seems to have resumed already.r  rd  r   Tre  irk   z (call r  )r   label   )targetsrc  r  )r!   r  r   r   rs  r   rt  r  r   r)   r  	itertoolscountr  r  nextr  rm  r   rE   r_   r  r  $target_id_to_smart_step_into_variantr   r3   r5   r   )r   r   r   r  ru  r1  r  r>  rc  r~  r   r  r  r  r   r  countertarget_id_to_variantr  r  	target_idresponsees                          rM   !internal_get_step_in_targets_jsonr    s   I$))4y(3>U],R0D!3!B!B $]" Z,>MCJJ""3'
 (H,OOPUWacklH)&1//!$! 	G%%,,)0)B)B 
"$(M	(33a7#NN<9^k^p^pr  sK  sK  ML  ,N  O#NN<9ML^L^+_`:G,Y7w<2-!
" !%WI))A-|yZaZfZfhohzhzH{'}~|y'UV6=(37|r)/	4 /4Ho+4H1(9%44Wfd^TQ$?

s# $IJ(,/>> q6 Q(:DI

s##$s5   A5I4 8AI4 B%I4 6BI4 A-I4 4	K9=A2K44K9c                 P   	 | j                  ||      }|v|j                  }d}	 t        j                  |      }|D ]  \  }}	|d|	fz  z  } 	 ~|dz  }| j
                  j                  ||      }
| j                  j                  |
       y| j
                  j                  |d|d|      }
| j                  j                  |
       y#  |d|j                  fz  z  }Y xY w#  | j
                  j                  |d|d|      }
| j                  j                  |
       Y yxY w)z= gets the valid line numbers for use with set next statement Nr  z<line>%d</line>r  r  r  r  )
r  f_codedisfindlinestartsf_linenor   'make_get_next_statement_targets_messager  r   r  )r   r   r   r  r>  coder  
linestarts_r   r   s              rM   #internal_get_next_statement_targetsr  9  s   $y(3<<DC7 //5

  * 7GAt,w66C78OC//II#sSCJJ""3'//44Sckmv:wxCJJ""3'=(ENN+<<<$oo00emox6yz

s#s(   "C$ C
 AC$ =C$ 
C!C$ $?D%c                    t        |t              }|r|j                  }|s]t        j                  |d      }t        j                  |d|i      }| j                  j                  t        t        d|d             y t        j                  |d      }t        j                  ||d|d      }| j                  j                  t        t        d|d             y )	Nr   r  rb  rc  rd  Tre  Fr  )
isinstancer   r  r   EvaluateResponseBodyr   rs  r  r   r   rt  )rJ   ru  r  error_messageis_errorrc  r~  s          rM   _evaluate_responser  T  s    &"56H11TUV/>>wPVW[}]  J;MW[!\]11TUV/>>w5]PD E  J;MW[!\]r@   c                 .   |j                   }|j                  }|j                  }|j                  }|j                  }t        |d      r|j                         }t        }|dk(  r!| j                  st        j                         }n
t               }|5  d}	|$t        d }
t         |
             at        }d}	d}n| j                  ||      }t        j                   | ||d      }t#        |t$              }|r|dk(  rt'        | |d	d
       	 ddd       y|dk(  rH|j(                  j*                  j,                  d|j(                  }t'        | |||       	 ddd       y	 t        j.                  |       d}	|dk(  r7t1        | ||j2                  |j(                  |j4                         	 ddd       y|	r2	 t        j                   | ||d       t'        | |d	       	 ddd       y| j>                  jA                  |      }|t'        | |d	d|d       	 ddd       yi }|dk(  rtC        dddd      }|dk(  r|tE        jF                  d	d      }n|jI                  |||      } |jJ                  d"||d|}tE        jF                  |d   |jM                  dd      |jM                  d      |jM                  d      |jM                  d      |jM                  d            }tO        jP                  |d|i       }| jR                  jU                  tW        tX        d|d!             ddd       y# t6        $ r	 |dk(  }	Y w xY w# t6        t8        f$ r* t1        | |gt;        j<                           Y ddd       yw xY w# 1 sw Y   yxY w)#z)
    :param EvaluateRequest request:
    r]  replFNc               3   8   K   t        j                          y wrU   )r   	_getframer   r@   rM   __create_framez9internal_evaluate_expression_json.<locals>.__create_frame  s     --/)s   Tis_exechoverr   z%Exception occurred during evaluation.r  r  watch: )r  Thread id:  is not current thread id.	clipboardl            )maxstring_outermaxstring_innermaxother_outermaxother_innerr   r  r>  )r2  contextr`  rb  ra  presentationHintr  r  )r  rb  ra  r  r  r  rc  rd  re  r   )-rg  
expressionframeIdr  ri  r   r]  r   is_output_redirectedr'   +redirect_stream_to_pydb_io_messages_contextr   _global_framer  r  r&   evaluate_expressionr/   r   r  r  r  r   compile_as_eval#_evaluate_response_return_exceptionetyper|  r   KeyboardInterruptr   rp  rj  get_frame_trackerdictr   r  obtain_as_variablern  r   r   rs  r  r   r   rt  )rJ   ru  r   rg  r  r  r  r2  ctxtry_execr  r>  eval_resultr  msgframe_trackersafe_repr_custom_attrsrc  rx  r  r~  s                        rM   !internal_evaluate_expression_jsonr&  f  s    !!I%%J  HG


CsIkkm
C&))GGIC "#	 Z^$* !%^%5 6!EHK$$Y9E%99%
\abK)+7JKHg%&ugbPwx-Z^ Z^. ' $**44=={?Q?QTC&ugcQTU;Z^ Z^B	##33J? $)"f,?wP[PaPacncucu  xC  xF  xF  G"UZ^ Z^X //ujRVW
 ugb9iZ^ Z^n 66HHS ugbu~  IA  BwZ^ Z^z "$k!%) ' '&&	&" f!4 55#$D %77
KW\7]H,x,,`g`I_`H 55(#+<<0Da#H\\&)!).@!A'||,<=!).@!AD 0>>wPVW[}]  J;MW[!\]uZ^ Z^F % 5#*f#45 01 3E7TS\\^TcZ^ Z^^_Z^ Z^so   A;NAN#L:85N6N9MN*1N$DN:MNMN.N=NNNNc                 N   	 |}|}|r=| j                  |j                        t        k(  r|j                  }|j                  }|r=||}dj	                  t        j                  |||            }d }d }d }d }d }t        | |||       y #  d}t        j                  |       Y +xY w)Nr   zE<Internal error - unable to get traceback when evaluating expression>r  )
get_file_typetb_framer#   tb_nextr   rq  rr  r3   r5   r  )rJ   ru  r{  rz  
initial_tbr|  temp_tbr}  s           rM   r  r    s    ! ""7#3#34
B__ooG 
 :Bggi003CD 
 ugcE!UC s   AB	 4B	 	B$c                    	 | j                  ||      }|7t        j                  | |||      }	|dk7  rt        j                  |||| |	       nd}	d}
|
t	        j
                  |	||      z  }
|
dz  }
| j                  j                  ||
      }| j                  j                  |       y#  t               }| j                  j                  |d|z         }| j                  j                  |       Y yxY w)r  Nr   r  r  Error evaluating expression )r  r&   r  r  r*   r  r    make_evaluate_expression_messager  r   r7   r  )r   r   r   r  r  r  trim_if_too_bigattr_to_set_resultr>  r  r  r   rz  s                rM   internal_evaluate_expressionr2    s    $y(3 44S%WUF!R'225:LjZ]_efFz$$VZIIxoo>>sCH

s#$)+oo006TWZ6Z[

s#s   B%B( (AC0c                     t        j                  dd      }t        j                  ||d|d      }| j                  j                  t        t        d|d             y )	Nr   r   r  Fr  rd  Tre  )r   SetExpressionResponseBodyr   rs  r  r   r   rt  )rJ   ru  r  r  rc  r~  s         rM   _set_expression_responser5    sV    22"QRSD+::7uL@ A	LLZ
A7ISWXYr@   c           
         |j                   }|j                  }|j                  }|j                  }|j                  }t        |d      r|j                         }| j                  ||      }|d|d}	t        j                  | ||	d      }
t        |
t              }|rt        | ||
d|	       y | j                  j                  |      }|t        | ||
d|d	       y t        j                  | ||d
      }
|j                  ||
|      }|j!                  |      }t#        j$                  |d   |j'                  dd      |j'                  d      |j'                  d      |j'                  d      |j'                  d            }t)        j*                  |d|i      }| j,                  j/                  t1        t2        d|d             y )Nr]  z = (r  Tr  zError executing: )r  r	  r
  Fr  r_  r`  rb  r   ra  r  r  r  )r`  rb  ra  r  r  r  rc  rd  re  )rg  r  r  r`  ri  r   r]  r  r&   r  r  r   r5  rj  r  r  rn  r   r4  r   r   rs  r  r   r   rt  )rJ   ru  r   rg  r  r  r`  r2  r>  	exec_coder  r  r$  rx  r  rc  r~  s                    rM   internal_set_expression_jsonr8    s    !!I%%J  HOOE


CsIkkmY1E)51I,,UE9dSF&"56H `iGkl 22DDYOM t}G  	A ,,UE:uUF//
F%/PH$$$-H22w#<<(<a@\\&!!&89||$45!&89D ,::7FSW=Y	LLZ
A7ISWXYr@   c           	         	 d}	 d}|dk\  rt        |||      }	|	d   }|r|dz  }|	d   }| j                  ||      }
|
]t        j                  |
|      }| j                  j                  ||||t        |      z
        }| j                  j                  |       n=| j                  j                  |d|d|      }| j                  j                  |       | t        j                  j                  |       yy# | t        j                  j                  |       w w xY w#  t               }t        j                  j                  |d	       | j                  j                  |d
|z         }| j                  j                  |       Y yxY w)z
    Note that if the column is >= 0, the act_tok is considered text and the actual
    activation token/qualifier is computed in this command.
    Nr   r   r  rk   )startz+internal_get_completions: Frame not found: r  r   r.  )r   r  r6   generate_completionsr   make_get_completions_messager_   r  r   r  r   pathremover7   stderrr  )r   r   r   r  act_tokr   columnremove_path	qualifiertoken_and_qualifierr>  completionsr   rz  s                 rM   internal_get_completionsrF  C  s}   
!$	-I{&A'4QW&X#-a0sNG/2	NN9h7E .CCE7S
 ooBBivI7N C P

&&s+oo88  BJ  LU  ?V  W

&&s+ &, '{&, '$)+

3)oo006TWZ6Z[

s#s$   D" CC; !D" ;$DD" "A(Fc                    	 | j                  ||      }t        j                  ||||      }t        j                  t        |d            }d|z  }| j                  j                  ||      }| j                  j                  |       y#  t               }	| j                  j                  |d|	z         }| j                  j                  |       Y yxY w)z@ Fetch the variable description stub from the debug console
    z/>_= 	z,<xml><var name="" type="" value="%s"/></xml>zError in fetching descriptionN)r  r8   get_descriptionr*   make_valid_xml_valuer  r   make_get_description_messager  r   r7   r  )
r   r   r   r  r  r>  descriptiondescription_xmlr   rz  s
             rM   internal_get_descriptionrM  l  s    
$y(3$44UIxQ[\ 55eK6STH;Voo::3P

s#$)+oo006UX[6[\

s#s   BB ACc                     ||      }|j                  |      }d}	d}
g }d}d}|j	 	 | j                  j                  |      }|Ht        |      r<g }d}|s|j                  }|	 |j
                  }|s|j                  }|	 t        |      } || |      D ]n  \	  }}}}}}}}}t        j                  ||      }t        |dd      s | j                  r| j                  ||d      rP|r|}	|dz  }|j                  |||||f       p |
s
|r|d   d   }
t        rt!        j"                         }|| d D ]g  \  }}}}}t!        j$                  ||||      }|3|j&                  |_        |j(                  |_        |j*                  |_        |j                  |       i dj-                  |j/                               }n/dj-                  t!        j0                  d || d D                    }	 |j                  j
                  }|j                  j2                  } | d	vrt5        | t              sd
} | dz   |z   }||d|j                  dz  }||j<                  z  }|j                  |       |j>                  }||sn|t        |      r<d}dj-                  tA        |            }!|sd}|sd}|	r	|d|	dz  }|jB                  tD        k(  rtF        jH                  jJ                  }"ntF        jH                  jL                  }"tG        jN                  |ddtG        jP                  |||"tG        jR                  |||!|
                  }#|#S #  	 |j                  }n#  	 t        |      }n#  Y nxY wY nxY wY 	xY w#  Y xY w# t6        $ r d}t9        j:                  d       Y qw xY w#  t9        j:                  d       Y :xY w# d}w xY w)z'
    :return ExceptionInfoResponse
    r   NIS_PLUGIN_FRAMEFz (Current frame)r   )r   c              3   &   K   | ]	  }|d d   y wrW  r   ).0xs     rM   	<genexpr>z0build_exception_info_response.<locals>.<genexpr>  s     Bha1Sb6Bhs   )__main__builtinsz	<unknown>r  z<unable to get exception type>zError getting exception type.r  r   z'Error on build_exception_info_response.zexception: type unknownzexception: no descriptionzH       (note: full exception trace is shown but execution is paused at: r  TexceptionInfo)r  typeName
stackTracesource)exceptionIdrK  	breakModedetails)request_seqr  commandrc  )*r9  rj  get_frames_listr_   r{  r   r   r   exc_desc	linecachegetliner8  is_files_filter_enabledapply_files_filterrm  r   rq  StackSummaryFrameSummary
end_linenocolno	end_colnor   ri  format_listr   r  r   r3   r5   exc_context_msgchained_frames_listreversedstop_reasonCMD_STEP_CAUGHT_EXCEPTIONr   ExceptionBreakModeALWAYS	UNHANDLEDExceptionInfoResponseExceptionInfoResponseBodyExceptionDetails)$r   r   r  r]  r1  iter_visible_frames_info
max_framesr?  topmost_framecurrent_paused_frame_namesource_pathstack_str_lstrE   rK  frames_listframesr>  r{  r`  r  method_nameoriginal_filenamefilename_in_utf8lineno_applied_mappingshow_as_current_frameline_col_info	line_textstack_summaryframe_summary	stack_strstypesmodfull_stack_str
break_moder  s$                                       rM   build_exception_info_responser  |  sE    18O#55f=M "KMDK V	!SO!::JJ9U!-#k2BF E#.#7#7#/	-'/'<'< '#.#7#7#/%.1(m
 1kBi  Z%6GIY[acs  vK  MZ %.$5$56G$P	  'u.?G"::s?U?UV[]npu?v (08C5'+==K'7iYf&ghi '6&,Qil*(1(>(>(@_egqfqfr_s @[,fk9m,5,B,BCSU[]hox,yM,8;H;S;S 86C6I6I 3:G:Q:Q 7)00?@ %'GGM,@,@,B$C	 %'GGI,A,ABhSY[eZeZfSgBh,i$j		M + 4 4 A A*33>>'??#-dC#8'2$(3J$6E
 uk6J6J!KKI!<!<<I!((3"-"A"AK"*+] "-#k2Bf !MWWXm45N(1 az||66"55<<
"55??
2244# !22#)"		
	H$ OW-!-+3+<+<D!-%-/28}%-(,% $V % M @!++,KLMO##$MN Ms   >N/ (M 4N/ N  EN/ 0A
N :AN/ M=MM=M7"M.-M7.M20M75M=:N/  NN/  N,(N/ +N,,N/ /O	O Oc           	          	 t        | |||j                  |||      }| j
                  j                  t        t        d|d             y#  t               }t        j                  |d|i d      }Y VxY w)z Fetch exception details
    F)r  r  rc  rd  r   Tre  N)	r  r   r7   r   rs  r  r   r   rt  )	r   ru  r   r  rw  r1  rv  r  rz  s	            rM   #internal_get_exception_details_jsonr    s~    0iVp  sK  MW  X JJ:j!XtLM)+%44WF
 s   A
 
'A3c                       e Zd ZdZd Zd Zy)InternalGetBreakpointExceptionzJ Send details of exception raised while evaluating conditional breakpoint c                 <    d| _         || _        || _        || _        y Nr   )r  r   
stacktracer{  )rI   r   r{  r  s       rM   rA   z'InternalGetBreakpointException.__init__  s    "$ r@   c                    	 d}t         j                  }| j                  D ]n  \  }}}}t        s0t	        |d      r$|j                  t              j                  d      }|d| j                  d ||      d|d ||      d ||      d	z  }p |d
z  }|j                  j                  | j                  | j                  dz   |z         }|j                  j                  |       y #  t               }	t         j"                  j%                  |	d       |j                  j'                  | j                  d|	z         }|j                  j                  |       Y y xY w)Nr  rs   rt   z<frame thread_id = "z" file="r  z" name="z" obj="z" />r  rv   r   zError Sending Exception: )r*   rI  r  filesystem_encoding_is_utf8r   rs   file_system_encodingencoder   r   &make_send_breakpoint_exception_messager  r{  r  r   r7   r   r?  r  r  )
rI   r   	callstack	makeValidr  r   
methodname	methodobjr   rz  s
             rM   r  z$InternalGetBreakpointException.do_it  s1   	(I"77I9= 5$
I2wx7R  (/CDKKGTH'+~~y7JDR[\fRgirs|i} 	 !I//HHX\XeXehlXloxXxyCJJ""3'	(-/CJJs_-//44T]]D_beDefCJJ""3's   C%C( (A2ENr   r   r   r   rA   r  r   r@   rM   r  r    s    T!(r@   r  c                       e Zd ZdZd Zd Zy)InternalSendCurrExceptionTraceN Send details of the exception that was caught and where we've broken in.
    c                 <    d| _         || _        || _        || _        y)zK
        :param arg: exception type, description, traceback object
        r   N)r  r   curr_frame_idarg)rI   r   r  r  s       rM   rA   z'InternalSendCurrExceptionTrace.__init__;  s!     "*r@   c                    	  |j                   j                  || j                  | j                  | j                  g| j
                   }| `|j                  j                  |       y #  t               }t        j                  j                  |d       |j                   j                  | j                  d|z         }|j                  j                  |       Y y xY w)Nr   z'Error Sending Current Exception Trace: )r   &make_send_curr_exception_trace_messager  r   r  r  r  r   r7   r   r?  r  r  rI   r   r   rz  s       rM   r  z$InternalSendCurrExceptionTrace.do_itD  s    	(H#//HHdmm]a]k]kmqmm  L  CG  CK  CK  LCJJ""3'	(-/CJJs_-//44T]]DmpsDstCJJ""3's   A%A( (A2CNr  r   r@   rM   r  r  7  s    	(r@   r  c                       e Zd ZdZd Zd Zy)'InternalSendCurrExceptionTraceProceededr  c                      d| _         || _        y r  )r  r   r   s     rM   rA   z0InternalSendCurrExceptionTraceProceeded.__init__T  s    "r@   c                    	 |j                   j                  | j                  | j                        }|j                  j                  |       y #  t               }t        j                  j                  |d       |j                   j                  | j                  d|z         }|j                  j                  |       Y y xY w)Nr   z1Error Sending Current Exception Trace Proceeded: )r   0make_send_curr_exception_trace_proceeded_messager  r   r  r   r7   r   r?  r  r  r  s       rM   r  z-InternalSendCurrExceptionTraceProceeded.do_itX  s    	(//RRSWS`S`bfbpbpqCJJ""3'	(-/CJJs_-//44T]]Dwz}D}~CJJ""3's   AA A2CNr  r   r@   rM   r  r  P  s    #(r@   r  c                       e Zd ZdZddZd Zy)!InternalEvaluateConsoleExpressionz0 Execute the given command in the debug console c                 J    || _         || _        || _        || _        || _        y rU   )r  r   r  r   buffer_output)rI   r   r   r  r   r  s         rM   rA   z*InternalEvaluateConsoleExpression.__init__f  s&    " 	*r@   c                    	 |j                  | j                  | j                        }|vt        j                  || j                  | j                  | j
                  | j                        }|j                  j                  | j                  |j                               }n|ddlm}  |       }|j                  t        j                  d| j                  d| j                  d       |j                  j                  | j                  |j                               }|j"                  j%                  |       y#  t!               }|j                  j                  | j                  d|z         }Y SxY w)z Create an XML for console output, error and more (true/false)
        <xml>
            <output message=output_message></output>
            <error message=error_message></error>
            <more>true/false</more>
        </xml>
        Nr   )ConsoleMessagez2Select the valid frame in the debug view (thread: z	, frame: z	 invalid)r.  )r  r   r  r8   execute_console_commandr   r  r   make_send_console_messager  to_xml_pydevd_bundle.pydevd_consoler  add_console_messageCONSOLE_ERRORr  r7   r  r   )rI   r   r>  console_messager   r  rz  s          rM   r  z'InternalEvaluateConsoleExpression.do_itm  s   	jNN4>>4==AE "0"H"H4>>4==$))TEWEW#Y oo??OeOeOghH"0"233"00bfbpbprvrr  A oo88H^H^H`a 	

s#	j-/C//44T]]DbehDhiCs   DD8 85E/Nr   r  r   r@   rM   r  r  c  s    :+$r@   r  c                       e Zd ZdZd Zd Zy)InternalRunCustomOperationz+ Run a custom command on an expression
    c	                     || _         || _        || _        || _        || _        || _        t        |      | _        || _        y rU   )	r  r   r  r^  r  styler%   code_or_filefnname)	rI   r   r   r  r^  r  r  encoded_code_or_filer  s	            rM   rA   z#InternalRunCustomOperation.__init__  sA    " 


()=>r@   c           
         	 t        j                  || j                  | j                  | j                  | j
                  | j                  | j                  | j                        }t        |      }|j                  j                  | j                  |      }|j                  j                  |       y #  t               }|j                  j!                  | j                  d|z         }|j                  j                  |       Y y xY w)Nz!Error in running custom operation)r&   custom_operationr   r  r^  r  r  r  r  r$   r   make_custom_operation_messager  r  r   r7   r  )rI   r   res
resEncodedr   rz  s         rM   r  z InternalRunCustomOperation.do_it  s    		(..sDNNDMMSWS]S]_c_i_i.2jj$:K:KT[[ZC#CJ//??zZCJJ""3'	(-/C//44T]]DgjmDmnCJJ""3's   B.B1 1ADNr  r   r@   rM   r  r    s    
(r@   r  c                       e Zd ZdZd Zd Zy)InternalConsoleGetCompletionsz0 Fetch the completions in the debug console
    c                 <    || _         || _        || _        || _        y rU   )r  r   r  r@  )rI   r   r   r  r@  s        rM   rA   z&InternalConsoleGetCompletions.__init__  s    " r@   c                    	 |j                  | j                  | j                        }t        j                  || j
                        }|j                  j                  | j                  |      }|j                  j                  |       y#  t               }|j                  j                  | j                  d|z         }|j                  j                  |       Y yxY w)z6 Get completions and write back to the client
        zError in fetching completionsN)r  r   r  r8   get_completionsr@  r   r  r  r  r   r7   r  )rI   r   r>  completions_xmlr   rz  s         rM   r  z#InternalConsoleGetCompletions.do_it  s    	(NN4>>4==AE,<<UDLLQO//;;DMM?[CJJ""3'	(-/C//44T]]DcfiDijCJJ""3's   BB
 
ACNr  r   r@   rM   r  r    s    (r@   r  c                       e Zd ZdZd Zd Zy)InternalConsoleExecr  c                 <    || _         || _        || _        || _        y rU   )r  r   r  r  )rI   r   r   r  r  s        rM   rA   zInternalConsoleExec.__init__  s    " $r@   c                 Z   	 	 t                t        j                  | j                  | j                  | j
                  |      }d}|t        j                  |d      z  }|dz  }|j                  j                  | j                  |      }|j                  j                  |       t%                t        j                  j'                          t        j(                  j'                          y#  t               }t        j                  j!                  |d       |j                  j#                  | j                  d|z         }|j                  j                  |       Y xY w# t%                t        j                  j'                          t        j(                  j'                          w xY w)r  r  r   r  r   z$Error evaluating console expression N)r9   r  console_execr   r  r  r*   r  r   r/  r  r  r   r7   r   r?  r  r  r:   flushstdout)rI   r   r  r  r   rz  s         rM   r  zInternalConsoleExec.do_it  s/   	,,.%224>>4==RVRaRacfgz,,VR88xooFFt}}VYZ

&&s+ ()JJJJ,13

  31oo88HnqtHtu

&&s+')JJJJs   B!C+ +A2EE" "AF*Nr  r   r@   rM   r  r    s    (%r@   r  c                   &    e Zd ZdZd Zed        Zy)InternalLoadFullValuez%
    Loads values asynchronously
    c                 <    || _         || _        || _        || _        y rU   )r  r   r  vars)rI   r   r   r  r  s        rM   rA   zInternalLoadFullValue.__init__  s    " 	r@   c                 r   	 g }| j                   D ]  }|j                         }t        |      dkD  s"d|v r|j                  dd      \  }}|d   }n|d}}|}t	        j
                  || j                  | j                  ||      }|j                  ||f        t        ||| j                  |      }|j                          y#  t               }	t        j                  j                  |	d       |j                   j#                  | j                  d|	z        }
|j$                  j'                  |
       Y yxY w)z4Starts a thread that will load values asynchronouslyr   rv   rk   Nr   zError evaluating variable %s )r  r}   r_   r~   r&   getVariabler   r  rm  GetValueAsyncThreadDebugr  r:  r7   r   r?  r  r   r  r  r   )rI   r   var_objectsrx  r^  r  rE   var_objr=  rz  r   s              rM   r  zInternalLoadFullValue.do_it  s   	(K II 
8#>>+x=1$x''/~~dA'>u$Qx(0$u$)55c4>>4==Z_afgG&&7
8 )c4==+NAGGI	(-/CJJs_-//44T]]DcfiDijCJJ""3's   /C BC A2D6Nr  r   r@   rM   r  r    s       (  (r@   r  c                   L    e Zd ZdZd Zd Z eej                        d        Zy)AbstractGetValueAsyncThreadzQ
    Abstract class for a thread, which evaluates values for async variables
    c                     t        j                  | |       || _        || _        || _        t        j                         | _        y rU   )r    rA   frame_accessorr   var_objsr   Eventcancel_event)rI   rJ   r  r   r  s        rM   rA   z$AbstractGetValueAsyncThread.__init__	  s7    !!$.,#%OO-r@   c                     t               rU   )r   rI   r  s     rM   send_resultz'AbstractGetValueAsyncThread.send_result  s    !##r@   c                    t        j                          }t               }|j                  d       | j                  D ]h  \  }}t        j                          }||z
  t        kD  s| j
                  j                         r n)|j                  t        j                  ||d             j |j                  d       | j                  |       |j                          y )Nr  Tr  r  )r   r;   r  r  r   r  is_setr*   r  r  r   )rI   r:  r  r  rE   current_times         rM   r   z#AbstractGetValueAsyncThread._on_run  s    		j		'#}} 	VOWd99;Le#&<<@Q@Q@X@X@ZIIj++GTtTU		V
 			(		r@   N)	r   r   r   r   rA   r  r   r    r   r   r@   rM   r  r    s1    .$ ''( )r@   r  c                       e Zd ZdZd Zy)r  z
    A thread for evaluation async values, which returns result for debugger
    Create message and send it via writer thread
    c                     | j                   d| j                   j                  j                  | j                  |j	                               }| j                   j
                  j                  |       y y rU   )r  r   make_load_full_value_messager   r  r  r   )rI   r  r   s      rM   r  z$GetValueAsyncThreadDebug.send_result(  sY    *%%11NNtxxY\YeYeYghC&&2237 +r@   Nr   r   r   r   r  r   r@   rM   r  r  "  s    
8r@   r  c                       e Zd ZdZd Zy)GetValueAsyncThreadConsolez}
    A thread for evaluation async values, which returns result for Console
    Send result directly to Console's server
    c                     | j                   5| j                   j                  | j                  |j                                y y rU   )r  ReturnFullValuer   r  r  s     rM   r  z&GetValueAsyncThreadConsole.send_result4  s3    *//#,,.I +r@   Nr  r   r@   rM   r  r  .  s    
Jr@   r  )r   )rj   rj   )NN)r   ra  r   _pydev_bundle.pydev_importsr   "_pydev_bundle._pydev_saved_modulesr   r   r   r   _pydevd_bundle.pydevd_constantsr   r   r	   r
   r   r   r   r   r   r   r   r   r   _pydev_bundle.pydev_overrider   r(  _pydev_bundle._pydev_completerr   +_pydevd_bundle._debug_adapter.pydevd_schemar   r   r   r   _pydevd_bundle._debug_adapterr   r   !_pydevd_bundle.pydevd_net_commandr   _pydevd_bundle.pydevd_xmlr   r   r   #_pydevd_bundle.pydevd_daemon_threadr    &_pydevd_bundle.pydevd_thread_lifecycler!   r"   &_pydevd_bundle.pydevd_dont_trace_filesr#   r  r  r  urllib.parser$   r%   r  _pydevd_bundler&   r'   r(   r)   r*   r+   r   rq  _pydevd_bundle.pydevd_utilsr,   r  r-   r.   r/   r0   r1   r2   _pydev_bundler3   r4   _pydev_bundle.pydev_logr5   r   r6   pydevd_tracingr7   r8   _pydev_bundle.pydev_monkeyr9   r:   ior;   $_pydevd_bundle.pydevd_comm_constantsr   r   r   r   r   r   r   r>   r   r   r   r   r   INTERNAL_TERMINATE_THREADINTERNAL_SUSPEND_THREADobjectr   r  r  r$  r&  rJ  rQ  rS  r  r  r  r  r  r  r  r  r  r  r  r  r&  r  r2  r5  r8  rF  rM  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r@   rM   <module>r	     s  ?B  	 . 3 8 FJ J J J 3  FE E K 8 9 > @ [ = 
   1  @ @ 0 % ) 
 \ \ \ - D * 6 ) `  3 B >gz; i';; --Ln@# n@b4% 4DU4# U4p" %P    F  F/(= /,&24j-2 -`
::)%: )@ )Z )ZX)(/ )(X(, (6$$.Zb
" $ $,4$nJ$Z$6^ q^hF> $ $,Z)ZX&$R$ GTN(%: (D(%: (2(.C (&$$(= $$N(!6 (6($9 (0/ D"(1 "(J"2 <	8: 	8J!< Jr@   