
    "eE                        d dl m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 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 dlZd dlZd dlZd d	lmZmZmZmZmZmZmZ d
 Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d'dZ'd Z(d Z)ererejT                  Z+nd dlm*Z+ d(dZ,d Z-d Z.d Z/d)dZ0d Z1d Z2d Z3d Z4 G d d e5      Z6 G d! d"e5      Z7d)d#Z8 G d$ d%e5      Z9d& Z:y)*    )nested_scopesN)	pydev_log)thread	threading)_pydev_saved_modules)import_module)module_from_specspec_from_file_locationquote)USE_CUSTOM_SYS_CURRENT_FRAMESIS_PYPYSUPPORT_GEVENTGEVENT_SUPPORT_NOT_SET_MSGGENERATED_LEN_ATTR_NAME PYDEVD_WARN_SLOW_RESOLVE_TIMEOUTget_global_debuggerc                     t         j                  d   x}t         j                  |<   ||_        t        |d      r|j                  nd }t        d| |      }t        |      }|t         j                  d<   |S )N__main__
__loader__)loader)sysmodules__name__hasattrr   r
   r	   )filemodule_namemr   specs        =/usr/lib/python3/dist-packages/_pydevd_bundle/pydevd_utils.pysave_main_moduler!      sf     $';;z#::AK AJ$Q5Q\\4F":tFCDACKK
H    c                      t        t        d      r(t        j                         t        j                         u S t	        t        j                         t        j
                        S Nmain_thread)r   r   current_threadr%   
isinstance_MainThread r"   r    is_current_thread_main_threadr*   $   sE    y-('')Y-B-B-DDD)224i6K6KLLr"   c                      t        t        d      rt        j                         S t        j                         D ]   } t	        | t        j
                        s| c S  y r$   )r   r   r%   	enumerater'   r(   )ts    r    get_main_threadr.   +   sM    y-($$&&$$& 	A!Y223	 r"   c                     t        |       r	 t        |       }|S y # t        $ r Y nw xY w| j                  d      }|dk7  s'| d|dz
   }	 t        |      }|S # t        $ r Y y w xY w)N(r      )	is_stringfloat
ValueErrorfind)xnlys       r    	to_numberr;   5   s    |	aAH   		 FF3K7!AE
A!H s    	''
A 	A#"A#c                 T    t         | k(  rt        |       }|d}d|fS dt        |       fS )Nir2   r1   )r   r;   	to_string)r7   	as_numbers     r    compare_object_attrs_keyr?   I   s7    !#aL	 I9~IaL!!r"   c                 "    t        | t              S Nr'   strr7   s    r    r3   r3   T   s    ar"   c                 <    t        | t              r| S t        |       S rA   rB   rD   s    r    r=   r=   X   s    !S1vr"   c                  :    t         rt        j                          y y rA   )	traceback	print_excr)   r"   r    rH   rH   _   s     r"   c                     t        | |      S rA   r   )ssafes     r    quote_smartrL   d   s    D>r"   c                    d }t        | j                        dkD  r| j                  d   }||j                  v r|j                  |   }t        j                  |      r|}n$t        |d      r|j                  }nt        |      }| j                  }t        ||      rRt        ||      }d }t        |d      r|j                  }nt        |d      r|j                  }|r|| k(  r|j                  }|S )Nr   	__class__	func_code__code__)lenco_varnamesf_localsinspectisclassr   rN   typeco_namegetattrrO   rP   r   )	codeframeclsnamefirst_arg_namefirst_arg_objfirst_arg_class	func_namemethodrO   s	            r    get_clsname_for_codera   h   s    G
4q  ))!,U^^+!NN>:M}-"/=+6&3&=&=O&*=&9OI	2 )< 	6;/ & 0 0IVZ0 &Id!2-66GNr"   c                  v    t        j                         } | D cg c]  }|st        |dd      r| c}S c c}w )Nis_pydev_daemon_threadF)r   r,   rX   )threadsr-   s     r    get_non_pydevd_threadsre      s3    !!#GX!!GA7OQV,WAXXXs   666)_current_framesc           
         | t         j                  } i }	 t        j                  }|t        j
                  } |       D ]=  }t        |dd      }|j                  d|j                  d|d|f||j                  <   ? 	 | j                  d       | j                  d       | j                  d	       | j                          t               j                         D ]-  \  }}|j                  ||df      \  }}|s|r#| j                  d
       | j                  d|       | j                  d       t        t        j                   |            D ]  \  }	\  }
}}}| j                  d|
||fz         |r"| j                  d|j#                         z         |	dk(  sLd|j$                  v s[| j                  d       	 | j                  t'        |j$                  d                | j                  d        | j                          0 | j                  d       | j                          y#  Y xY w#  | j                  dt)        |j$                  d                Y ~xY w)z%
    Helper to dump thread info.
    Nrc   Fz  (daemon: z, pydevd thread: )zP===============================================================================
zThreads running
zP================================= Thread Dump =================================
zQ
-------------------------------------------------------------------------------
z Thread z

z File "%s", line %d, in %s
z   %s
r   selfz	   self: zUnable to get str of: 
zP
=============================== END Thread Dump ===============================)r   stderrr    pydevd_saved_threading_enumerater   r,   rX   namedaemonidentwriteflush_tid_to_frame_for_dump_threadsitemsgetrG   extract_stackstriprS   rC   rV   )streamshow_pydevd_threads&thread_id_to_name_and_is_pydevd_threadthreading_enumerater-   is_pydevd_thread	thread_idrZ   rm   ifilenamelinenolines                r    dump_threadsr      s&    ~-/*2SS&"+"5"5$& 	A&q*BEJ9:K[\ ?2177;	 LLde
LL$%
LLde
LLN:<BBD 	5!G!K!KIXachWi!j"'7jkT+,V1:9;R;RSX;Y1Z 	#-A-&$LL78VT:RRSY$**,78Av&ENN2[)_LLU^^F%;!<= T"	# 	-0 LLde
LLNC4_LLtENNSYDZ?[!]^s   A)H. ?'H6.H36,I$c                     g }d}| D ]M  }|dk(  r|dz  }|dk(  r|dz  }|dk(  r!dj                  |      j                         c S |j                  |       O t        d      )Nr   {r2   }r1    z Unbalanced braces in expression.)joinrv   appendSyntaxError)	char_iter
expressionlevelcs       r    _extract_variable_nested_bracesr      sv    JE 8QJE8QJEB;77:&,,..! 8
99r"   c                     g }g }t        |       }|D ]I  }|dk(  r1t        |      }|s|j                  d       |j                  |       9|j                  |       K dj                  |      }||fS )Nr   z%sr   )iterr   r   r   )log_messager   expression_varsr   r   expression_vars         r    _extract_expression_listr      s~    JO[!I !8<YGN!!$'&&~6a ! $J&&r"   c                     	 t        |       \  }}|st        |      S t        |      dz   dj                  d |D              z   dz   S # t        $ r t        d| z        cY S w xY w)NzUnbalanced braces in: %sz % (z, c              3   2   K   | ]  }t        |        y wrA   )rC   ).0r7   s     r    	<genexpr>z8convert_dap_log_message_to_expression.<locals>.<genexpr>   s     0QAQ0Qs   z,))r   r   reprr   )r   r   r   s      r    %convert_dap_log_message_to_expressionr      su    @&>{&K#
O J
f$tyy0Q0Q'QQTXXX  @.+>??@s   A A! A!c                 .   | | nt         j                  } t        sWt         j                  j	                  d      }|6	 |j
                  }|r't         j                  j                  t        d       yy# t        $ r t        j                  d       Y yw xY w)z
    When debugging with gevent check that the gevent flag is used if the user uses the gevent
    monkey-patching.

    :return bool:
        Returns True if a message had to be shown to the user and False otherwise.
    zgevent.monkeyz*Error checking for gevent monkey-patching.Frj   T)r   rk   r   r   rt   savedAttributeErrorr   exception_oncerp   r   )rw   gevent_monkeyr   s      r    notify_about_gevent_if_neededr      s     )VszzF8$%++
 

  +E!GH " (()UVs   A3 3BBc                 ,    	 t        | |       y#  Y yxY w)NTFrX   objrm   s     r    hasattr_checkedr     s     T
 	s    c                 *    	 t        | |      S #  Y y xY wrA   r   r   s     r    getattr_checkedr     s    sD!!    c                 ,    	 t        |       S #  g cY S xY wrA   )dir)r   s    r    dir_checkedr     s    3x	s   
 c                 *    	 t        | |      S #  Y yxY wNF)r'   )r   clss     r    isinstance_checkedr   &  s    #s##r   c                   ,    e Zd ZddgZd Zd Zd Zd Zy)ScopeRequestvariable_referencescopec                 ,    |dv sJ || _         || _        y )N)globalslocals)r   r   )ri   r   r   s      r    __init__zScopeRequest.__init__1  s     ----"4
r"   c                     t        |t              r4| j                  |j                  k(  xr | j                  |j                  k(  S yr   r'   r   r   r   ri   os     r    __eq__zScopeRequest.__eq__6  ;    a&**a.B.BB\tzzUVU\U\G\\r"   c                     | |k(   S rA   r)   r   s     r    __ne__zScopeRequest.__ne__<      19}r"   c                 D    t        | j                  | j                  f      S rA   hashr   r   ri   s    r    __hash__zScopeRequest.__hash__?      T,,djj9::r"   N)r   
__module____qualname__	__slots__r   r   r   r   r)   r"   r    r   r   -  s     %w/I
;r"   r   c                   ^    e Zd ZdZdZdZdZdZeeeegZg dZ	d Z
d Zd	 Zd
 Zd Zd Zd Zy)
DAPGrouperz
    Note: this is a helper class to group variables on the debug adapter protocol (DAP). For
    the xml protocol the type is just added to each variable and the UI can group/hide it as needed.
    zspecial variableszprotected variableszfunction variableszclass variables)r   r   contents_debug_adapter_protocolc                 @    t        |       | _        || _        g | _        y rA   )idr   r   r   )ri   r   s     r    r   zDAPGrouper.__init__W  s    "$T(
/1,r"   c                      | j                   d d  S rA   )r   r   s    r    #get_contents_debug_adapter_protocolz.DAPGrouper.get_contents_debug_adapter_protocol\  s    33A66r"   c                     t        |t              r4| j                  |j                  k(  xr | j                  |j                  k(  S yr   r   r   s     r    r   zDAPGrouper.__eq___  r   r"   c                     | |k(   S rA   r)   r   s     r    r   zDAPGrouper.__ne__e  r   r"   c                 D    t        | j                  | j                  f      S rA   r   r   s    r    r   zDAPGrouper.__hash__h  r   r"   c                      yNr   r)   r   s    r    __repr__zDAPGrouper.__repr__k      r"   c                      yr   r)   r   s    r    __str__zDAPGrouper.__str__n  r   r"   N)r   r   r   __doc__SCOPE_SPECIAL_VARSSCOPE_PROTECTED_VARSSCOPE_FUNCTION_VARSSCOPE_CLASS_VARSSCOPES_SORTEDr   r   r   r   r   r   r   r   r)   r"   r    r   r   C  sa    
 -0.( 		M SI2
7;r"   r   c                 j   | t        j                         } t        j                  d       d}	 t        j
                  dk(  r9t	        j                  t	        j                         t        j                         d}n>t        j
                  dk(  r+t        j                  j                  j                  d       d}|sA	 t        t         d	      rt!        j"                          y| j$                  j'                          yy#  t        j                  d       Y ]xY w#  t        j                  d
       Y yxY w)a  
    Generates a KeyboardInterrupt in the main thread by sending a Ctrl+C
    or by calling thread.interrupt_main().

    :param main_thread:
        Needed because Jython needs main_thread._thread.interrupt() to be called.

    Note: if unable to send a Ctrl+C, the KeyboardInterrupt will only be raised
    when the next Python instruction is about to be executed (so, it won't interrupt
    a sleep(1000)).
    NzInterrupt main thread.FposixTntr   z0Error interrupting main thread (using fallback).interrupt_mainz(Error on interrupt main thread fallback.)r   r%   r   debugosrm   killgetpidsignalSIGINTctypeswindllkernel32CtrlRoutine	exceptionr   r   r   _thread	interrupt)r%   calleds     r    interrupt_main_threadr   r  s     ++-OO,-F!P77g GGBIIK/FWW_ MM""..q1 F 		L v/0%%'##--/ P 	NO	L JKs   B
C= <$D !D =DD2c                   <    e Zd ZefdZd	dZd Zd Zd Zd Z	d Z
y)
Timerc                 D    || _         t        j                         | _        y rA   )min_difftime
_curr_time)ri   r   s     r    r   zTimer.__init__  s     ))+r"   c                     | j                   }t        j                         x}| _         ||z
  }|| j                  k\  rt        d||fz         y y )Nz	%s: %.2fs)r   r   r   print)ri   msgoldnewdiffs        r    
print_timezTimer.print_time  sH    oo $		+doSy4== +d+, !r"   c                    | j                   }t        j                         x}| _         ||z
  }|| j                  k\  rKt               }|> ||g| }|j                  j                  |j                  j                  |             y y y rA   )r   r   r   r   writeradd_commandcmd_factorymake_warning_message)ri   compute_msgargsr   r   r   py_dbr   s           r    _report_slowzTimer._report_slow  s}    oo $		+doSy4== ')E !$..(():):)O)OPS)TU ! !r"   c                 @    | j                  | j                  |||       y rA   )r  _compute_repr_slow)ri   attrs_tab_separated	attr_name	attr_types       r     report_if_compute_repr_attr_slowz&Timer.report_if_compute_repr_attr_slow  s    $113F	S\]r"   c                     	 |j                   }|rd|j                  dd      |||t        fz  S d|||t        fz  S #  Y 1xY w)Nzpydevd warning: Computing repr of %s.%s (%s) was slow (took %.2fs).
Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)
	.zpydevd warning: Computing repr of %s (%s) was slow (took %.2fs)
Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)
)r   replacer   )ri   r   r
  r  r  s        r    r	  zTimer._compute_repr_slow  sx    	!**I Z $++D#6	9dTtvv vZ 9d,LNN N	s   ; ?c                 >    | j                  | j                  ||       y rA   )r  _compute_get_attr_slow)ri   r   r  s      r    report_if_getting_attr_slowz!Timer.report_if_getting_attr_slow  s    $55sIFr"   c                 D    	 |j                   }d|||t        fz  S #  Y xY w)Nzpydevd warning: Getting attribute %s.%s was slow (took %.2fs)
Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)
)r   r   )ri   r   r   r  s       r    r  zTimer._compute_get_attr_slow  s9    	,,CVi'GHI 	I	s    N)zElapsed:)r   r   r   r   r   r   r  r  r	  r  r  r)   r"   r    r   r     s-     @ &-V^N$GIr"   r   c                 X   d| vrt        d|       | j                  dd      \  }}	 	 t        |      }	 |j                  d      D ]  }t	        ||      } |S #  t        d|       xY w# t         $ r2 d|vrt        d|       |j                  dd      \  }}|dz   |z   }Y nw xY w)Nr  z*Unable to import module with attr access: r2   )ImportErrorrsplitr   splitrX   )import_with_attr_accessr   r  modattrnew_attr_parts         r    import_attr_from_moduler    s    
))Lceff4;;CCK
	o,Co%OOC0 -D!#t,C-
o!Tk"mnn  	8+%!Tk"mnn)4););C)C&K%+i7I	8 s   A- #A A*-8B('B()/)NTrA   );
__future__r   rG   warnings_pydev_bundler   "_pydev_bundle._pydev_saved_modulesr   r   r   r   r   r   	importlibr   importlib.utilr	   r
   urllib.parser   r   rT   r   _pydevd_bundle.pydevd_constantsr   r   r   r   r   r   r   r!   r*   r.   r;   r?   r3   r=   rH   rL   ra   re   rf   rr   r   r   r   r   r   r   r   r   r   objectr   r   r   r   r  r)   r"   r    <module>r)     s    $   # @ .  	  # D    
  
M("
:Y
 !W &)%8%8"a3l:'$Y4;6 ;,, ,^>LB7IF 7Itor"   