debugpy 1.8.5__zip → 1.8.7__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. {debugpy-1.8.5/src/debugpy.egg-info → debugpy-1.8.7}/PKG-INFO +1 -1
  2. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py +19 -21
  3. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py +30 -30
  4. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py +3 -1
  5. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +43 -0
  6. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py +35 -32
  7. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py +83 -84
  8. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py +92 -99
  9. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py +2 -3
  10. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py +51 -27
  11. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py +11 -7
  12. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py +6 -5
  13. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py +34 -38
  14. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py +71 -69
  15. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py +1 -3
  16. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py +0 -1
  17. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py +14 -16
  18. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py +81 -93
  19. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py +3 -3
  20. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py +9 -8
  21. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py +33 -25
  22. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py +183 -170
  23. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py +33 -29
  24. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py +6 -4
  25. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py +19 -18
  26. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py +3 -3
  27. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py +165 -138
  28. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +77 -0
  29. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py +35 -36
  30. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py +22 -23
  31. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py +37 -57
  32. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py +54 -52
  33. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py +28 -37
  34. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py +56 -53
  35. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +604 -0
  36. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json +551 -445
  37. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py +25 -29
  38. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +17458 -0
  39. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py +11 -12
  40. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py +18 -19
  41. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +41 -0
  42. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +328 -0
  43. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py +263 -214
  44. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py +7 -10
  45. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py +187 -92
  46. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py +105 -0
  47. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py +46 -51
  48. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py +239 -176
  49. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py +370 -297
  50. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py +78 -86
  51. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py +55 -59
  52. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py +194 -58
  53. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py +2 -3
  54. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py +18 -23
  55. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py +159 -127
  56. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py +10 -12
  57. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +55527 -0
  58. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd +15 -0
  59. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx +803 -511
  60. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py +18 -7
  61. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py +32 -24
  62. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py +11 -13
  63. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py +16 -16
  64. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py +27 -2
  65. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py +1 -1
  66. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py +4 -5
  67. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py +8 -10
  68. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py +50 -45
  69. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py +462 -407
  70. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py +69 -61
  71. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py +14 -16
  72. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py +27 -25
  73. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py +40 -42
  74. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +200 -0
  75. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py +20 -19
  76. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py +199 -108
  77. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py +121 -73
  78. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +208 -0
  79. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py +206 -159
  80. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py +346 -334
  81. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py +75 -80
  82. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py +35 -35
  83. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py +116 -124
  84. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py +44 -58
  85. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py +51 -55
  86. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py +4 -2
  87. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py +24 -24
  88. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py +19 -20
  89. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py +45 -49
  90. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py +61 -58
  91. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py +23 -13
  92. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py +29 -31
  93. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py +41 -11
  94. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py +117 -55
  95. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py +11 -14
  96. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py +90 -89
  97. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py +106 -97
  98. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +40 -0
  99. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py +56 -46
  100. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py +5 -5
  101. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +71 -0
  102. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c +11165 -5326
  103. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py +5 -6
  104. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py +53 -56
  105. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py +1 -0
  106. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py +4 -6
  107. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py +6 -26
  108. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py +7 -21
  109. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py +5 -24
  110. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py +10 -34
  111. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py +1 -4
  112. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py +2 -6
  113. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py +3 -5
  114. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py +11 -31
  115. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py +2 -2
  116. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py +14 -41
  117. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py +2 -4
  118. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py +7 -18
  119. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py +6 -18
  120. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py +7 -18
  121. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py +1 -3
  122. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py +14 -19
  123. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py +1929 -0
  124. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c +43253 -0
  125. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd +46 -0
  126. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx +1935 -0
  127. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py +16 -0
  128. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py +12 -11
  129. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_coverage.py +30 -32
  130. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py +58 -54
  131. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py +20 -24
  132. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py +8 -7
  133. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py +8 -6
  134. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py +11 -8
  135. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py +21 -18
  136. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py +17 -15
  137. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py +17 -15
  138. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py +6 -4
  139. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py +14 -10
  140. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py +30 -26
  141. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +24 -0
  142. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py +37 -34
  143. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py +86 -73
  144. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/version.py +7 -7
  145. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_pysrc.py +1 -0
  146. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_run_in_console.py +23 -24
  147. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +267 -0
  148. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevconsole.py +55 -47
  149. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd.py +732 -508
  150. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +40 -0
  151. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py +1 -0
  152. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +11 -0
  153. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +75 -0
  154. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py +130 -125
  155. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
  156. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
  157. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +89 -0
  158. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py +41 -32
  159. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
  160. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
  161. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_utils.hpp +1 -0
  162. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp +9 -1
  163. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
  164. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
  165. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe +0 -0
  166. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
  167. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py +10 -9
  168. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
  169. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
  170. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
  171. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
  172. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py +103 -119
  173. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py +457 -516
  174. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py +33 -15
  175. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py +336 -281
  176. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py +101 -131
  177. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py +148 -153
  178. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py +310 -302
  179. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py +235 -208
  180. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py +185 -218
  181. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py +428 -564
  182. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py +54 -53
  183. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py +69 -73
  184. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py +158 -170
  185. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py +143 -213
  186. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py +302 -333
  187. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py +220 -239
  188. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py +198 -177
  189. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py +11 -11
  190. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py +1191 -713
  191. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py +248 -194
  192. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py +132 -120
  193. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py +450 -346
  194. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py +305 -286
  195. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +526 -0
  196. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py +1479 -1097
  197. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +579 -0
  198. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +3517 -0
  199. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py +54 -31
  200. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py +170 -149
  201. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py +190 -108
  202. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py +542 -437
  203. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py +489 -442
  204. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py +83 -65
  205. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py +70 -76
  206. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.cpp +17 -9
  207. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/compile_windows.bat +1 -1
  208. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_file_utils.py +141 -120
  209. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py +1 -0
  210. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py +175 -149
  211. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py +1 -0
  212. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py +1 -0
  213. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py +5 -5
  214. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py +28 -28
  215. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py +22 -30
  216. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py +3 -2
  217. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py +130 -108
  218. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py +27 -14
  219. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_tracing.py +85 -66
  220. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py +96 -59
  221. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_version.py +3 -3
  222. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/messaging.py +2 -1
  223. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/cli.py +32 -17
  224. {debugpy-1.8.5 → debugpy-1.8.7/src/debugpy.egg-info}/PKG-INFO +1 -1
  225. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/SOURCES.txt +6 -1
  226. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +0 -41
  227. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +0 -76
  228. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +0 -592
  229. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +0 -19514
  230. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +0 -19
  231. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +0 -153
  232. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +0 -43377
  233. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +0 -204
  234. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +0 -91
  235. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py +0 -62
  236. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +0 -41
  237. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +0 -48
  238. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +0 -23
  239. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_pysrc.py +0 -1
  240. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +0 -237
  241. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +0 -32
  242. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +0 -9
  243. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +0 -74
  244. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
  245. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
  246. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +0 -79
  247. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
  248. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
  249. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
  250. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
  251. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
  252. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
  253. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
  254. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
  255. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
  256. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +0 -507
  257. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +0 -539
  258. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +0 -3435
  259. {debugpy-1.8.5 → debugpy-1.8.7}/DESCRIPTION.md +0 -0
  260. {debugpy-1.8.5 → debugpy-1.8.7}/LICENSE +0 -0
  261. {debugpy-1.8.5 → debugpy-1.8.7}/MANIFEST.in +0 -0
  262. {debugpy-1.8.5 → debugpy-1.8.7}/README.md +0 -0
  263. {debugpy-1.8.5 → debugpy-1.8.7}/pyproject.toml +0 -0
  264. {debugpy-1.8.5 → debugpy-1.8.7}/setup.cfg +0 -0
  265. {debugpy-1.8.5 → debugpy-1.8.7}/setup.py +0 -0
  266. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/ThirdPartyNotices.txt +0 -0
  267. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__init__.py +0 -0
  268. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__main__.py +0 -0
  269. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/__init__.py +0 -0
  270. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_pydevd_packaging.py +0 -0
  271. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_util.py +0 -0
  272. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/force_pydevd.py +0 -0
  273. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/__init__.py +0 -0
  274. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/__init__.py +0 -0
  275. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/__init__.py +0 -0
  276. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__init__.py +0 -0
  277. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocolCustom.json +0 -0
  278. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/__init__.py +0 -0
  279. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/.gitignore +0 -0
  280. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/__init__.py +0 -0
  281. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pxd +0 -0
  282. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pyx +0 -0
  283. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.template.pyx +0 -0
  284. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/release_mem.h +0 -0
  285. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/README.txt +0 -0
  286. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/__init__.py +0 -0
  287. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/README +0 -0
  288. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/__init__.py +0 -0
  289. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_sitecustomize/__not_in_default_pythonpath.txt +0 -0
  290. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/README.txt +0 -0
  291. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace.hpp +0 -0
  292. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_310.hpp +0 -0
  293. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_311.hpp +0 -0
  294. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_common.hpp +0 -0
  295. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_settrace.hpp +0 -0
  296. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/python.h +0 -0
  297. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/ref_utils.hpp +0 -0
  298. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/.gitignore +0 -0
  299. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/attach.cpp +0 -0
  300. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_linux.sh +0 -0
  301. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_mac.sh +0 -0
  302. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_manylinux.cmd +0 -0
  303. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.h +0 -0
  304. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/inject_dll.cpp +0 -0
  305. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/py_win_helpers.hpp +0 -0
  306. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_in_memory.hpp +0 -0
  307. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_on_dllmain.cpp +0 -0
  308. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.cpp +0 -0
  309. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.h +0 -0
  310. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/targetver.h +0 -0
  311. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/README.md +0 -0
  312. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__init__.py +0 -0
  313. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__main__.py +0 -0
  314. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/clients.py +0 -0
  315. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/components.py +0 -0
  316. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/launchers.py +0 -0
  317. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/servers.py +0 -0
  318. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/sessions.py +0 -0
  319. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/__init__.py +0 -0
  320. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/json.py +0 -0
  321. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/log.py +0 -0
  322. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/singleton.py +0 -0
  323. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/sockets.py +0 -0
  324. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/stacks.py +0 -0
  325. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/timestamp.py +0 -0
  326. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/util.py +0 -0
  327. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__init__.py +0 -0
  328. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__main__.py +0 -0
  329. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/debuggee.py +0 -0
  330. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/handlers.py +0 -0
  331. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/output.py +0 -0
  332. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/winapi.py +0 -0
  333. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/public_api.py +0 -0
  334. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/__init__.py +0 -0
  335. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/api.py +0 -0
  336. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/attach_pid_injected.py +0 -0
  337. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/dependency_links.txt +0 -0
  338. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/entry_points.txt +0 -0
  339. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/top_level.txt +0 -0
  340. {debugpy-1.8.5 → debugpy-1.8.7}/versioneer.py +0 -0
@@ -1,4 +1,4 @@
1
- ''' pydevd - a debugging daemon
1
+ """ pydevd - a debugging daemon
2
2
  This is the daemon you launch for python remote debugging.
3
3
 
4
4
  Protocol:
@@ -61,24 +61,38 @@ each command has a format:
61
61
 
62
62
  * JAVA - remote debugger, the java end
63
63
  * PYDB - pydevd, the python end
64
- '''
64
+ """
65
65
 
66
66
  import linecache
67
67
  import os
68
68
 
69
69
  from _pydev_bundle.pydev_imports import _queue
70
- from _pydev_bundle._pydev_saved_modules import time
71
- from _pydev_bundle._pydev_saved_modules import threading
70
+ from _pydev_bundle._pydev_saved_modules import time, ThreadingEvent
72
71
  from _pydev_bundle._pydev_saved_modules import socket as socket_module
73
- from _pydevd_bundle.pydevd_constants import (DebugInfoHolder, IS_WINDOWS, IS_JYTHON, IS_WASM,
74
- IS_PY36_OR_GREATER, STATE_RUN, ASYNC_EVAL_TIMEOUT_SEC,
75
- get_global_debugger, GetGlobalDebugger, set_global_debugger, # Keep for backward compatibility @UnusedImport
76
- silence_warnings_decorator, filter_all_warnings, IS_PY311_OR_GREATER)
72
+ from _pydevd_bundle.pydevd_constants import (
73
+ DebugInfoHolder,
74
+ IS_WINDOWS,
75
+ IS_JYTHON,
76
+ IS_WASM,
77
+ IS_PY36_OR_GREATER,
78
+ STATE_RUN,
79
+ ASYNC_EVAL_TIMEOUT_SEC,
80
+ get_global_debugger,
81
+ GetGlobalDebugger,
82
+ set_global_debugger, # Keep for backward compatibility @UnusedImport
83
+ silence_warnings_decorator,
84
+ filter_all_warnings,
85
+ IS_PY311_OR_GREATER,
86
+ )
77
87
  from _pydev_bundle.pydev_override import overrides
78
88
  import weakref
79
89
  from _pydev_bundle._pydev_completer import extract_token_and_qualifier
80
- from _pydevd_bundle._debug_adapter.pydevd_schema import VariablesResponseBody, \
81
- SetVariableResponseBody, StepInTarget, StepInTargetsResponseBody
90
+ from _pydevd_bundle._debug_adapter.pydevd_schema import (
91
+ VariablesResponseBody,
92
+ SetVariableResponseBody,
93
+ StepInTarget,
94
+ StepInTargetsResponseBody,
95
+ )
82
96
  from _pydevd_bundle._debug_adapter import pydevd_base_schema, pydevd_schema
83
97
  from _pydevd_bundle.pydevd_net_command import NetCommand
84
98
  from _pydevd_bundle.pydevd_xml import ExceptionOnEvaluate
@@ -97,8 +111,16 @@ from _pydevd_bundle import pydevd_xml
97
111
  from _pydevd_bundle import pydevd_vm_type
98
112
  import sys
99
113
  import traceback
100
- from _pydevd_bundle.pydevd_utils import quote_smart as quote, compare_object_attrs_key, \
101
- notify_about_gevent_if_needed, isinstance_checked, ScopeRequest, getattr_checked, Timer
114
+ from _pydevd_bundle.pydevd_utils import (
115
+ quote_smart as quote,
116
+ compare_object_attrs_key,
117
+ notify_about_gevent_if_needed,
118
+ isinstance_checked,
119
+ ScopeRequest,
120
+ getattr_checked,
121
+ Timer,
122
+ is_current_thread_main_thread,
123
+ )
102
124
  from _pydev_bundle import pydev_log, fsnotify
103
125
  from _pydev_bundle.pydev_log import exception as pydev_log_exception
104
126
  from _pydev_bundle import _pydev_completer
@@ -112,8 +134,9 @@ from io import StringIO
112
134
  from _pydevd_bundle.pydevd_comm_constants import * # @UnusedWildImport
113
135
 
114
136
  # Socket import aliases:
115
- AF_INET, SOCK_STREAM, SHUT_WR, SOL_SOCKET, IPPROTO_TCP, socket = (
137
+ AF_INET, AF_INET6, SOCK_STREAM, SHUT_WR, SOL_SOCKET, IPPROTO_TCP, socket = (
116
138
  socket_module.AF_INET,
139
+ socket_module.AF_INET6,
117
140
  socket_module.SOCK_STREAM,
118
141
  socket_module.SHUT_WR,
119
142
  socket_module.SOL_SOCKET,
@@ -128,7 +151,7 @@ if not IS_WASM:
128
151
 
129
152
 
130
153
  class ReaderThread(PyDBDaemonThread):
131
- ''' reader thread reads and dispatches commands in an infinite loop '''
154
+ """reader thread reads and dispatches commands in an infinite loop"""
132
155
 
133
156
  def __init__(self, sock, py_db, PyDevJsonCommandProcessor, process_net_command, terminate_on_socket_close=True):
134
157
  assert sock is not None
@@ -136,7 +159,7 @@ class ReaderThread(PyDBDaemonThread):
136
159
  self.__terminate_on_socket_close = terminate_on_socket_close
137
160
 
138
161
  self.sock = sock
139
- self._buffer = b''
162
+ self._buffer = b""
140
163
  self.name = "pydevd.Reader"
141
164
  self.process_net_command = process_net_command
142
165
  self.process_net_command_json = PyDevJsonCommandProcessor(self._from_json).process_net_command_json
@@ -175,7 +198,7 @@ class ReaderThread(PyDBDaemonThread):
175
198
  buffer_len = len(self._buffer)
176
199
  if buffer_len == size:
177
200
  ret = self._buffer
178
- self._buffer = b''
201
+ self._buffer = b""
179
202
  return ret
180
203
 
181
204
  if buffer_len > size:
@@ -186,14 +209,14 @@ class ReaderThread(PyDBDaemonThread):
186
209
  try:
187
210
  r = self.sock.recv(max(size - buffer_len, 1024))
188
211
  except OSError:
189
- return b''
212
+ return b""
190
213
  if not r:
191
- return b''
214
+ return b""
192
215
  self._buffer += r
193
216
 
194
217
  def _read_line(self):
195
218
  while True:
196
- i = self._buffer.find(b'\n')
219
+ i = self._buffer.find(b"\n")
197
220
  if i != -1:
198
221
  i += 1 # Add the newline to the return
199
222
  ret = self._buffer[:i]
@@ -203,9 +226,9 @@ class ReaderThread(PyDBDaemonThread):
203
226
  try:
204
227
  r = self.sock.recv(1024)
205
228
  except OSError:
206
- return b''
229
+ return b""
207
230
  if not r:
208
- return b''
231
+ return b""
209
232
  self._buffer += r
210
233
 
211
234
  @overrides(PyDBDaemonThread._on_run)
@@ -222,26 +245,26 @@ class ReaderThread(PyDBDaemonThread):
222
245
  line = self._read_line()
223
246
 
224
247
  if len(line) == 0:
225
- pydev_log.debug('ReaderThread: empty contents received (len(line) == 0).')
248
+ pydev_log.debug("ReaderThread: empty contents received (len(line) == 0).")
226
249
  self._terminate_on_socket_close()
227
250
  return # Finished communication.
228
251
 
229
252
  if self._kill_received:
230
253
  continue
231
254
 
232
- if line.startswith(b'Content-Length:'):
233
- content_len = int(line.strip().split(b':', 1)[1])
255
+ if line.startswith(b"Content-Length:"):
256
+ content_len = int(line.strip().split(b":", 1)[1])
234
257
  continue
235
258
 
236
259
  if content_len != -1:
237
260
  # If we previously received a content length, read until a '\r\n'.
238
- if line == b'\r\n':
261
+ if line == b"\r\n":
239
262
  json_contents = self._read(content_len)
240
263
 
241
264
  content_len = -1
242
265
 
243
266
  if len(json_contents) == 0:
244
- pydev_log.debug('ReaderThread: empty contents received (len(json_contents) == 0).')
267
+ pydev_log.debug("ReaderThread: empty contents received (len(json_contents) == 0).")
245
268
  self._terminate_on_socket_close()
246
269
  return # Finished communication.
247
270
 
@@ -254,13 +277,13 @@ class ReaderThread(PyDBDaemonThread):
254
277
  continue
255
278
  else:
256
279
  # No content len, regular line-based protocol message (remove trailing new-line).
257
- if line.endswith(b'\n\n'):
280
+ if line.endswith(b"\n\n"):
258
281
  line = line[:-2]
259
282
 
260
- elif line.endswith(b'\n'):
283
+ elif line.endswith(b"\n"):
261
284
  line = line[:-1]
262
285
 
263
- elif line.endswith(b'\r'):
286
+ elif line.endswith(b"\r"):
264
287
  line = line[:-1]
265
288
  except:
266
289
  if not self._kill_received:
@@ -271,17 +294,17 @@ class ReaderThread(PyDBDaemonThread):
271
294
  # Note: the java backend is always expected to pass utf-8 encoded strings. We now work with str
272
295
  # internally and thus, we may need to convert to the actual encoding where needed (i.e.: filenames
273
296
  # on python 2 may need to be converted to the filesystem encoding).
274
- if hasattr(line, 'decode'):
275
- line = line.decode('utf-8')
297
+ if hasattr(line, "decode"):
298
+ line = line.decode("utf-8")
276
299
 
277
300
  if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 3:
278
- pydev_log.debug('debugger: received >>%s<<\n', line)
301
+ pydev_log.debug("debugger: received >>%s<<\n", line)
279
302
 
280
- args = line.split('\t', 2)
303
+ args = line.split("\t", 2)
281
304
  try:
282
305
  cmd_id = int(args[0])
283
306
  if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 3:
284
- pydev_log.debug('Received command: %s %s\n', ID_TO_MEANING.get(str(cmd_id), '???'), line)
307
+ pydev_log.debug("Received command: %s %s\n", ID_TO_MEANING.get(str(cmd_id), "???"), line)
285
308
  self.process_command(cmd_id, int(args[1]), args[2])
286
309
  except:
287
310
  if sys is not None and pydev_log_exception is not None: # Could happen at interpreter shutdown
@@ -294,7 +317,7 @@ class ReaderThread(PyDBDaemonThread):
294
317
 
295
318
  self._terminate_on_socket_close()
296
319
  finally:
297
- pydev_log.debug('ReaderThread: exit')
320
+ pydev_log.debug("ReaderThread: exit")
298
321
 
299
322
  def _terminate_on_socket_close(self):
300
323
  if self.__terminate_on_socket_close:
@@ -305,7 +328,6 @@ class ReaderThread(PyDBDaemonThread):
305
328
 
306
329
 
307
330
  class FSNotifyThread(PyDBDaemonThread):
308
-
309
331
  def __init__(self, py_db, api, watch_dirs):
310
332
  PyDBDaemonThread.__init__(self, py_db)
311
333
  self.api = api
@@ -316,7 +338,7 @@ class FSNotifyThread(PyDBDaemonThread):
316
338
  @overrides(PyDBDaemonThread._on_run)
317
339
  def _on_run(self):
318
340
  try:
319
- pydev_log.info('Watching directories for code reload:\n---\n%s\n---' % ('\n'.join(sorted(self.watch_dirs))))
341
+ pydev_log.info("Watching directories for code reload:\n---\n%s\n---" % ("\n".join(sorted(self.watch_dirs))))
320
342
 
321
343
  # i.e.: The first call to set_tracked_paths will do a full scan, so, do it in the thread
322
344
  # too (after everything is configured).
@@ -325,12 +347,12 @@ class FSNotifyThread(PyDBDaemonThread):
325
347
  for change_enum, change_path in self.watcher.iter_changes():
326
348
  # We're only interested in modified events
327
349
  if change_enum == fsnotify.Change.modified:
328
- pydev_log.info('Modified: %s', change_path)
350
+ pydev_log.info("Modified: %s", change_path)
329
351
  self.api.request_reload_code(self.py_db, -1, None, change_path)
330
352
  else:
331
- pydev_log.info('Ignored (add or remove) change in: %s', change_path)
353
+ pydev_log.info("Ignored (add or remove) change in: %s", change_path)
332
354
  except:
333
- pydev_log.exception('Error when waiting for filesystem changes in FSNotifyThread.')
355
+ pydev_log.exception("Error when waiting for filesystem changes in FSNotifyThread.")
334
356
 
335
357
  @overrides(PyDBDaemonThread.do_kill_pydev_thread)
336
358
  def do_kill_pydev_thread(self):
@@ -339,7 +361,7 @@ class FSNotifyThread(PyDBDaemonThread):
339
361
 
340
362
 
341
363
  class WriterThread(PyDBDaemonThread):
342
- ''' writer thread writes out the commands in an infinite loop '''
364
+ """writer thread writes out the commands in an infinite loop"""
343
365
 
344
366
  def __init__(self, sock, py_db, terminate_on_socket_close=True):
345
367
  PyDBDaemonThread.__init__(self, py_db)
@@ -347,19 +369,19 @@ class WriterThread(PyDBDaemonThread):
347
369
  self.__terminate_on_socket_close = terminate_on_socket_close
348
370
  self.name = "pydevd.Writer"
349
371
  self._cmd_queue = _queue.Queue()
350
- if pydevd_vm_type.get_vm_type() == 'python':
372
+ if pydevd_vm_type.get_vm_type() == "python":
351
373
  self.timeout = 0
352
374
  else:
353
375
  self.timeout = 0.1
354
376
 
355
377
  def add_command(self, cmd):
356
- ''' cmd is NetCommand '''
378
+ """cmd is NetCommand"""
357
379
  if not self._kill_received: # we don't take new data after everybody die
358
380
  self._cmd_queue.put(cmd, False)
359
381
 
360
382
  @overrides(PyDBDaemonThread._on_run)
361
383
  def _on_run(self):
362
- ''' just loop and write responses '''
384
+ """just loop and write responses"""
363
385
 
364
386
  try:
365
387
  while True:
@@ -368,7 +390,7 @@ class WriterThread(PyDBDaemonThread):
368
390
  cmd = self._cmd_queue.get(True, 0.1)
369
391
  except _queue.Empty:
370
392
  if self._kill_received:
371
- pydev_log.debug('WriterThread: kill_received (sock.shutdown(SHUT_WR))')
393
+ pydev_log.debug("WriterThread: kill_received (sock.shutdown(SHUT_WR))")
372
394
  try:
373
395
  self.sock.shutdown(SHUT_WR)
374
396
  except:
@@ -400,7 +422,7 @@ class WriterThread(PyDBDaemonThread):
400
422
  cmd.send(self.sock)
401
423
 
402
424
  if cmd.id == CMD_EXIT:
403
- pydev_log.debug('WriterThread: CMD_EXIT received')
425
+ pydev_log.debug("WriterThread: CMD_EXIT received")
404
426
  break
405
427
  if time is None:
406
428
  break # interpreter shutdown
@@ -411,7 +433,7 @@ class WriterThread(PyDBDaemonThread):
411
433
  if DebugInfoHolder.DEBUG_TRACE_LEVEL > 0:
412
434
  pydev_log_exception()
413
435
  finally:
414
- pydev_log.debug('WriterThread: exit')
436
+ pydev_log.debug("WriterThread: exit")
415
437
 
416
438
  def empty(self):
417
439
  return self._cmd_queue.empty()
@@ -444,11 +466,17 @@ def create_server_socket(host, port):
444
466
 
445
467
 
446
468
  def start_server(port):
447
- ''' binds to a port, waits for the debugger to connect '''
448
- s = create_server_socket(host='', port=port)
469
+ """binds to a port, waits for the debugger to connect"""
470
+ s = create_server_socket(host="", port=port)
449
471
 
450
472
  try:
451
473
  s.listen(1)
474
+ # Let the user know it's halted waiting for the connection.
475
+ host, port = s.getsockname()
476
+ msg = f"pydevd: waiting for connection at: {host}:{port}"
477
+ print(msg, file=sys.stderr)
478
+ pydev_log.info(msg)
479
+
452
480
  new_socket, _addr = s.accept()
453
481
  pydev_log.info("Connection accepted")
454
482
  # closing server socket is not necessary but we don't need it
@@ -460,10 +488,20 @@ def start_server(port):
460
488
 
461
489
 
462
490
  def start_client(host, port):
463
- ''' connects to a host/port '''
491
+ """connects to a host/port"""
464
492
  pydev_log.info("Connecting to %s:%s", host, port)
465
493
 
466
- s = socket(AF_INET, SOCK_STREAM)
494
+ address_family = AF_INET
495
+ for res in socket_module.getaddrinfo(host, port, 0, SOCK_STREAM):
496
+ if res[0] == AF_INET:
497
+ address_family = res[0]
498
+ # Prefer IPv4 addresses for backward compat.
499
+ break
500
+ if res[0] == AF_INET6:
501
+ # Don't break after this - if the socket is dual-stack prefer IPv4.
502
+ address_family = res[0]
503
+
504
+ s = socket(address_family, SOCK_STREAM)
467
505
 
468
506
  # Set TCP keepalive on an open socket.
469
507
  # It activates after 1 second (TCP_KEEPIDLE,) of idleness,
@@ -488,11 +526,11 @@ def start_client(host, port):
488
526
 
489
527
  try:
490
528
  # 10 seconds default timeout
491
- timeout = int(os.environ.get('PYDEVD_CONNECT_TIMEOUT', 10))
529
+ timeout = int(os.environ.get("PYDEVD_CONNECT_TIMEOUT", 10))
492
530
  s.settimeout(timeout)
493
531
  s.connect((host, port))
494
532
  s.settimeout(None) # no timeout after connected
495
- pydev_log.info("Connected.")
533
+ pydev_log.info(f"Connected to: {s}.")
496
534
  return s
497
535
  except:
498
536
  pydev_log.exception("Could not connect to %s: %s", host, port)
@@ -504,12 +542,12 @@ INTERNAL_SUSPEND_THREAD = 2
504
542
 
505
543
 
506
544
  class InternalThreadCommand(object):
507
- ''' internal commands are generated/executed by the debugger.
545
+ """internal commands are generated/executed by the debugger.
508
546
 
509
547
  The reason for their existence is that some commands have to be executed
510
548
  on specific threads. These are the InternalThreadCommands that get
511
549
  get posted to PyDB.
512
- '''
550
+ """
513
551
 
514
552
  def __init__(self, thread_id, method=None, *args, **kwargs):
515
553
  self.thread_id = thread_id
@@ -518,9 +556,8 @@ class InternalThreadCommand(object):
518
556
  self.kwargs = kwargs
519
557
 
520
558
  def can_be_executed_by(self, thread_id):
521
- '''By default, it must be in the same thread to be executed
522
- '''
523
- return self.thread_id == thread_id or self.thread_id.endswith('|' + thread_id)
559
+ """By default, it must be in the same thread to be executed"""
560
+ return self.thread_id == thread_id or self.thread_id.endswith("|" + thread_id)
524
561
 
525
562
  def do_it(self, dbg):
526
563
  try:
@@ -533,15 +570,14 @@ class InternalThreadCommand(object):
533
570
  self.kwargs = None
534
571
 
535
572
  def __str__(self):
536
- return 'InternalThreadCommands(%s, %s, %s)' % (self.method, self.args, self.kwargs)
573
+ return "InternalThreadCommands(%s, %s, %s)" % (self.method, self.args, self.kwargs)
537
574
 
538
575
  __repr__ = __str__
539
576
 
540
577
 
541
578
  class InternalThreadCommandForAnyThread(InternalThreadCommand):
542
-
543
579
  def __init__(self, thread_id, method=None, *args, **kwargs):
544
- assert thread_id == '*'
580
+ assert thread_id == "*"
545
581
 
546
582
  InternalThreadCommand.__init__(self, thread_id, method, *args, **kwargs)
547
583
 
@@ -572,8 +608,8 @@ def internal_reload_code(dbg, seq, module_name, filename):
572
608
  if module_name is not None:
573
609
  module_name = module_name
574
610
  if module_name not in sys.modules:
575
- if '.' in module_name:
576
- new_module_name = module_name.split('.')[-1]
611
+ if "." in module_name:
612
+ new_module_name = module_name.split(".")[-1]
577
613
  if new_module_name in sys.modules:
578
614
  module_name = new_module_name
579
615
 
@@ -585,9 +621,9 @@ def internal_reload_code(dbg, seq, module_name, filename):
585
621
  if filename:
586
622
  filename = pydevd_file_utils.normcase(filename)
587
623
  for module_name, module in sys.modules.copy().items():
588
- f = getattr_checked(module, '__file__')
624
+ f = getattr_checked(module, "__file__")
589
625
  if f is not None:
590
- if f.endswith(('.pyc', '.pyo')):
626
+ if f.endswith((".pyc", ".pyo")):
591
627
  f = f[:-1]
592
628
 
593
629
  if pydevd_file_utils.normcase(f) == filename:
@@ -595,11 +631,11 @@ def internal_reload_code(dbg, seq, module_name, filename):
595
631
 
596
632
  if not modules_to_reload:
597
633
  if filename and module_name:
598
- _send_io_message(dbg, 'code reload: Unable to find module %s to reload for path: %s\n' % (module_name, filename))
634
+ _send_io_message(dbg, "code reload: Unable to find module %s to reload for path: %s\n" % (module_name, filename))
599
635
  elif filename:
600
- _send_io_message(dbg, 'code reload: Unable to find module to reload for path: %s\n' % (filename,))
636
+ _send_io_message(dbg, "code reload: Unable to find module to reload for path: %s\n" % (filename,))
601
637
  elif module_name:
602
- _send_io_message(dbg, 'code reload: Unable to find module to reload: %s\n' % (module_name,))
638
+ _send_io_message(dbg, "code reload: Unable to find module to reload: %s\n" % (module_name,))
603
639
 
604
640
  else:
605
641
  # Too much info...
@@ -609,25 +645,25 @@ def internal_reload_code(dbg, seq, module_name, filename):
609
645
  found_module_to_reload = True
610
646
 
611
647
  if pydevd_reload.xreload(module):
612
- _send_io_message(dbg, 'code reload: reload finished\n')
648
+ _send_io_message(dbg, "code reload: reload finished\n")
613
649
  else:
614
- _send_io_message(dbg, 'code reload: reload finished without applying any change\n')
650
+ _send_io_message(dbg, "code reload: reload finished without applying any change\n")
615
651
 
616
652
  cmd = dbg.cmd_factory.make_reloaded_code_message(seq, found_module_to_reload)
617
653
  dbg.writer.add_command(cmd)
618
654
  except:
619
- pydev_log.exception('Error reloading code')
655
+ pydev_log.exception("Error reloading code")
620
656
 
621
657
 
622
658
  class InternalGetThreadStack(InternalThreadCommand):
623
- '''
659
+ """
624
660
  This command will either wait for a given thread to be paused to get its stack or will provide
625
661
  it anyways after a timeout (in which case the stack will be gotten but local variables won't
626
662
  be available and it'll not be possible to interact with the frame as it's not actually
627
663
  stopped in a breakpoint).
628
- '''
664
+ """
629
665
 
630
- def __init__(self, seq, thread_id, py_db, set_additional_thread_info, fmt, timeout=.5, start_frame=0, levels=0):
666
+ def __init__(self, seq, thread_id, py_db, set_additional_thread_info, fmt, timeout=0.5, start_frame=0, levels=0):
631
667
  InternalThreadCommand.__init__(self, thread_id)
632
668
  self._py_db = weakref.ref(py_db)
633
669
  self._timeout = time.time() + timeout
@@ -648,12 +684,20 @@ class InternalGetThreadStack(InternalThreadCommand):
648
684
  py_db = self._py_db()
649
685
  t = pydevd_find_thread_by_id(self.thread_id)
650
686
  frame = None
651
- if t and not getattr(t, 'pydev_do_not_trace', None):
687
+ if t and not getattr(t, "pydev_do_not_trace", None):
652
688
  additional_info = self._set_additional_thread_info(t)
653
689
  frame = additional_info.get_topmost_frame(t)
654
690
  try:
655
691
  self._cmd = py_db.cmd_factory.make_get_thread_stack_message(
656
- py_db, self.seq, self.thread_id, frame, self._fmt, must_be_suspended=not timed_out, start_frame=self._start_frame, levels=self._levels)
692
+ py_db,
693
+ self.seq,
694
+ self.thread_id,
695
+ frame,
696
+ self._fmt,
697
+ must_be_suspended=not timed_out,
698
+ start_frame=self._start_frame,
699
+ levels=self._levels,
700
+ )
657
701
  finally:
658
702
  frame = None
659
703
  t = None
@@ -675,9 +719,10 @@ def internal_step_in_thread(py_db, thread_id, cmd_id, set_additional_thread_info
675
719
  info.pydev_step_cmd = cmd_id
676
720
  info.pydev_step_stop = None
677
721
  info.pydev_state = STATE_RUN
722
+ info.update_stepping_info()
678
723
 
679
724
  if py_db.stepping_resumes_all_threads:
680
- resume_threads('*', except_thread=thread_to_step)
725
+ resume_threads("*", except_thread=thread_to_step)
681
726
 
682
727
 
683
728
  def internal_smart_step_into(py_db, thread_id, offset, child_offset, set_additional_thread_info):
@@ -690,21 +735,21 @@ def internal_smart_step_into(py_db, thread_id, offset, child_offset, set_additio
690
735
  info.pydev_smart_parent_offset = int(offset)
691
736
  info.pydev_smart_child_offset = int(child_offset)
692
737
  info.pydev_state = STATE_RUN
738
+ info.update_stepping_info()
693
739
 
694
740
  if py_db.stepping_resumes_all_threads:
695
- resume_threads('*', except_thread=thread_to_step)
741
+ resume_threads("*", except_thread=thread_to_step)
696
742
 
697
743
 
698
744
  class InternalSetNextStatementThread(InternalThreadCommand):
699
-
700
745
  def __init__(self, thread_id, cmd_id, line, func_name, seq=0):
701
- '''
746
+ """
702
747
  cmd_id may actually be one of:
703
748
 
704
749
  CMD_RUN_TO_LINE
705
750
  CMD_SET_NEXT_STATEMENT
706
751
  CMD_SMART_STEP_INTO
707
- '''
752
+ """
708
753
  self.thread_id = thread_id
709
754
  self.cmd_id = cmd_id
710
755
  self.line = line
@@ -725,13 +770,14 @@ class InternalSetNextStatementThread(InternalThreadCommand):
725
770
  info.pydev_smart_parent_offset = -1
726
771
  info.pydev_smart_child_offset = -1
727
772
  info.pydev_state = STATE_RUN
773
+ info.update_stepping_info()
728
774
 
729
775
 
730
776
  @silence_warnings_decorator
731
777
  def internal_get_variable_json(py_db, request):
732
- '''
733
- :param VariablesRequest request:
734
- '''
778
+ """
779
+ :param VariablesRequest request:
780
+ """
735
781
  arguments = request.arguments # : :type arguments: VariablesArguments
736
782
  variables_reference = arguments.variablesReference
737
783
  scope = None
@@ -740,7 +786,7 @@ def internal_get_variable_json(py_db, request):
740
786
  variables_reference = variables_reference.variable_reference
741
787
 
742
788
  fmt = arguments.format
743
- if hasattr(fmt, 'to_dict'):
789
+ if hasattr(fmt, "to_dict"):
744
790
  fmt = fmt.to_dict()
745
791
 
746
792
  variables = []
@@ -755,25 +801,20 @@ def internal_get_variable_json(py_db, request):
755
801
  except:
756
802
  try:
757
803
  exc, exc_type, tb = sys.exc_info()
758
- err = ''.join(traceback.format_exception(exc, exc_type, tb))
759
- variables = [{
760
- 'name': '<error>',
761
- 'value': err,
762
- 'type': '<error>',
763
- 'variablesReference': 0
764
- }]
804
+ err = "".join(traceback.format_exception(exc, exc_type, tb))
805
+ variables = [{"name": "<error>", "value": err, "type": "<error>", "variablesReference": 0}]
765
806
  except:
766
- err = '<Internal error - unable to get traceback when getting variables>'
807
+ err = "<Internal error - unable to get traceback when getting variables>"
767
808
  pydev_log.exception(err)
768
809
  variables = []
769
810
 
770
811
  body = VariablesResponseBody(variables)
771
- variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body})
812
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
772
813
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
773
814
 
774
815
 
775
816
  class InternalGetVariable(InternalThreadCommand):
776
- ''' gets the value of a variable '''
817
+ """gets the value of a variable"""
777
818
 
778
819
  def __init__(self, seq, thread_id, frame_id, scope, attrs):
779
820
  self.sequence = seq
@@ -784,12 +825,13 @@ class InternalGetVariable(InternalThreadCommand):
784
825
 
785
826
  @silence_warnings_decorator
786
827
  def do_it(self, dbg):
787
- ''' Converts request into python variable '''
828
+ """Converts request into python variable"""
788
829
  try:
789
830
  xml = StringIO()
790
831
  xml.write("<xml>")
791
832
  type_name, val_dict = pydevd_vars.resolve_compound_variable_fields(
792
- dbg, self.thread_id, self.frame_id, self.scope, self.attributes)
833
+ dbg, self.thread_id, self.frame_id, self.scope, self.attributes
834
+ )
793
835
  if val_dict is None:
794
836
  val_dict = {}
795
837
 
@@ -811,13 +853,11 @@ class InternalGetVariable(InternalThreadCommand):
811
853
  xml.close()
812
854
  dbg.writer.add_command(cmd)
813
855
  except Exception:
814
- cmd = dbg.cmd_factory.make_error_message(
815
- self.sequence, "Error resolving variables %s" % (get_exception_traceback_str(),))
856
+ cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error resolving variables %s" % (get_exception_traceback_str(),))
816
857
  dbg.writer.add_command(cmd)
817
858
 
818
859
 
819
860
  class InternalGetArray(InternalThreadCommand):
820
-
821
861
  def __init__(self, seq, roffset, coffset, rows, cols, format, thread_id, frame_id, scope, attrs):
822
862
  self.sequence = seq
823
863
  self.thread_id = thread_id
@@ -844,7 +884,7 @@ class InternalGetArray(InternalThreadCommand):
844
884
 
845
885
 
846
886
  def internal_change_variable(dbg, seq, thread_id, frame_id, scope, attr, value):
847
- ''' Changes the value of a variable '''
887
+ """Changes the value of a variable"""
848
888
  try:
849
889
  frame = dbg.find_frame(thread_id, frame_id)
850
890
  if frame is not None:
@@ -857,18 +897,20 @@ def internal_change_variable(dbg, seq, thread_id, frame_id, scope, attr, value):
857
897
  cmd = dbg.cmd_factory.make_variable_changed_message(seq, xml)
858
898
  dbg.writer.add_command(cmd)
859
899
  except Exception:
860
- cmd = dbg.cmd_factory.make_error_message(seq, "Error changing variable attr:%s expression:%s traceback:%s" % (attr, value, get_exception_traceback_str()))
900
+ cmd = dbg.cmd_factory.make_error_message(
901
+ seq, "Error changing variable attr:%s expression:%s traceback:%s" % (attr, value, get_exception_traceback_str())
902
+ )
861
903
  dbg.writer.add_command(cmd)
862
904
 
863
905
 
864
906
  def internal_change_variable_json(py_db, request):
865
- '''
907
+ """
866
908
  The pydevd_vars.change_attr_expression(thread_id, frame_id, attr, value, dbg) can only
867
909
  deal with changing at a frame level, so, currently changing the contents of something
868
910
  in a different scope is currently not supported.
869
911
 
870
912
  :param SetVariableRequest request:
871
- '''
913
+ """
872
914
  # : :type arguments: SetVariableArguments
873
915
  arguments = request.arguments
874
916
  variables_reference = arguments.variablesReference
@@ -878,7 +920,7 @@ def internal_change_variable_json(py_db, request):
878
920
  variables_reference = variables_reference.variable_reference
879
921
 
880
922
  fmt = arguments.format
881
- if hasattr(fmt, 'to_dict'):
923
+ if hasattr(fmt, "to_dict"):
882
924
  fmt = fmt.to_dict()
883
925
 
884
926
  try:
@@ -888,44 +930,38 @@ def internal_change_variable_json(py_db, request):
888
930
 
889
931
  if variable is None:
890
932
  _write_variable_response(
891
- py_db, request, value='', success=False, message='Unable to find variable container to change: %s.' % (variables_reference,))
933
+ py_db, request, value="", success=False, message="Unable to find variable container to change: %s." % (variables_reference,)
934
+ )
892
935
  return
893
936
 
894
937
  child_var = variable.change_variable(arguments.name, arguments.value, py_db, fmt=fmt)
895
938
 
896
939
  if child_var is None:
897
- _write_variable_response(
898
- py_db, request, value='', success=False, message='Unable to change: %s.' % (arguments.name,))
940
+ _write_variable_response(py_db, request, value="", success=False, message="Unable to change: %s." % (arguments.name,))
899
941
  return
900
942
 
901
943
  var_data = child_var.get_var_data(fmt=fmt)
902
944
  body = SetVariableResponseBody(
903
- value=var_data['value'],
904
- type=var_data['type'],
905
- variablesReference=var_data.get('variablesReference'),
906
- namedVariables=var_data.get('namedVariables'),
907
- indexedVariables=var_data.get('indexedVariables'),
945
+ value=var_data["value"],
946
+ type=var_data["type"],
947
+ variablesReference=var_data.get("variablesReference"),
948
+ namedVariables=var_data.get("namedVariables"),
949
+ indexedVariables=var_data.get("indexedVariables"),
908
950
  )
909
- variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body})
951
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
910
952
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
911
953
 
912
954
 
913
955
  def _write_variable_response(py_db, request, value, success, message):
914
- body = SetVariableResponseBody('')
915
- variables_response = pydevd_base_schema.build_response(
916
- request,
917
- kwargs={
918
- 'body':body,
919
- 'success': False,
920
- 'message': message
921
- })
956
+ body = SetVariableResponseBody("")
957
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": message})
922
958
  cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True)
923
959
  py_db.writer.add_command(cmd)
924
960
 
925
961
 
926
962
  @silence_warnings_decorator
927
963
  def internal_get_frame(dbg, seq, thread_id, frame_id):
928
- ''' Converts request into python variable '''
964
+ """Converts request into python variable"""
929
965
  try:
930
966
  frame = dbg.find_frame(thread_id, frame_id)
931
967
  if frame is not None:
@@ -972,21 +1008,33 @@ def internal_get_smart_step_into_variants(dbg, seq, thread_id, frame_id, start_l
972
1008
  for child_variant in variant.children_variants:
973
1009
  # If there are child variants, the current one is just an intermediary, so,
974
1010
  # just create variants for the child (notifying properly about the parent too).
975
- xml += '<variant name="%s" isVisited="%s" line="%s" offset="%s" childOffset="%s" callOrder="%s"/>' % (
976
- quote(child_variant.name),
977
- str(child_variant.is_visited).lower(),
978
- child_variant.line,
979
- variant.offset,
980
- child_variant.offset,
981
- child_variant.call_order,
1011
+ xml += (
1012
+ '<variant name="%s" isVisited="%s" line="%s" offset="%s" childOffset="%s" callOrder="%s" endlineno="%s" startcol="%s" endcol="%s"/>'
1013
+ % (
1014
+ quote(child_variant.name),
1015
+ str(child_variant.is_visited).lower(),
1016
+ child_variant.line,
1017
+ variant.offset,
1018
+ child_variant.offset,
1019
+ child_variant.call_order,
1020
+ variant.endlineno,
1021
+ variant.startcol,
1022
+ variant.endcol,
1023
+ )
982
1024
  )
983
1025
  else:
984
- xml += '<variant name="%s" isVisited="%s" line="%s" offset="%s" childOffset="-1" callOrder="%s"/>' % (
985
- quote(variant.name),
986
- str(variant.is_visited).lower(),
987
- variant.line,
988
- variant.offset,
989
- variant.call_order,
1026
+ xml += (
1027
+ '<variant name="%s" isVisited="%s" line="%s" offset="%s" childOffset="-1" callOrder="%s" endlineno="%s" startcol="%s" endcol="%s"/>'
1028
+ % (
1029
+ quote(variant.name),
1030
+ str(variant.is_visited).lower(),
1031
+ variant.line,
1032
+ variant.offset,
1033
+ variant.call_order,
1034
+ variant.endlineno,
1035
+ variant.startcol,
1036
+ variant.endcol,
1037
+ )
990
1038
  )
991
1039
 
992
1040
  xml += "</xml>"
@@ -994,10 +1042,10 @@ def internal_get_smart_step_into_variants(dbg, seq, thread_id, frame_id, start_l
994
1042
  dbg.writer.add_command(cmd)
995
1043
  except:
996
1044
  # Error is expected (if `dis` module cannot be used -- i.e.: Jython).
997
- pydev_log.exception('Error calculating Smart Step Into Variants.')
1045
+ pydev_log.exception("Error calculating Smart Step Into Variants.")
998
1046
  cmd = dbg.cmd_factory.make_error_message(
999
- seq, "Error getting smart step into variants for frame: %s from thread: %s"
1000
- % (frame_id, thread_id))
1047
+ seq, "Error getting smart step into variants for frame: %s from thread: %s" % (frame_id, thread_id)
1048
+ )
1001
1049
  dbg.writer.add_command(cmd)
1002
1050
 
1003
1051
 
@@ -1009,12 +1057,8 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
1009
1057
  if thread is None or frame is None:
1010
1058
  body = StepInTargetsResponseBody([])
1011
1059
  variables_response = pydevd_base_schema.build_response(
1012
- request,
1013
- kwargs={
1014
- 'body': body,
1015
- 'success': False,
1016
- 'message': 'Thread to get step in targets seems to have resumed already.'
1017
- })
1060
+ request, kwargs={"body": body, "success": False, "message": "Thread to get step in targets seems to have resumed already."}
1061
+ )
1018
1062
  cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True)
1019
1063
  dbg.writer.add_command(cmd)
1020
1064
  return
@@ -1037,7 +1081,12 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
1037
1081
  target_id = next(counter)
1038
1082
 
1039
1083
  if child_variant.call_order > 1:
1040
- targets.append(StepInTarget(id=target_id, label='%s (call %s)' % (child_variant.name, child_variant.call_order),))
1084
+ targets.append(
1085
+ StepInTarget(
1086
+ id=target_id,
1087
+ label="%s (call %s)" % (child_variant.name, child_variant.call_order),
1088
+ )
1089
+ )
1041
1090
  else:
1042
1091
  targets.append(StepInTarget(id=target_id, label=child_variant.name))
1043
1092
  target_id_to_variant[target_id] = child_variant
@@ -1047,7 +1096,12 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
1047
1096
  else:
1048
1097
  target_id = next(counter)
1049
1098
  if variant.call_order > 1:
1050
- targets.append(StepInTarget(id=target_id, label='%s (call %s)' % (variant.name, variant.call_order),))
1099
+ targets.append(
1100
+ StepInTarget(
1101
+ id=target_id,
1102
+ label="%s (call %s)" % (variant.name, variant.call_order),
1103
+ )
1104
+ )
1051
1105
  else:
1052
1106
  targets.append(StepInTarget(id=target_id, label=variant.name))
1053
1107
  target_id_to_variant[target_id] = variant
@@ -1060,26 +1114,20 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se
1060
1114
  info.target_id_to_smart_step_into_variant = target_id_to_variant
1061
1115
 
1062
1116
  body = StepInTargetsResponseBody(targets=targets)
1063
- response = pydevd_base_schema.build_response(request, kwargs={'body': body})
1117
+ response = pydevd_base_schema.build_response(request, kwargs={"body": body})
1064
1118
  cmd = NetCommand(CMD_RETURN, 0, response, is_json=True)
1065
1119
  dbg.writer.add_command(cmd)
1066
1120
  except Exception as e:
1067
1121
  # Error is expected (if `dis` module cannot be used -- i.e.: Jython).
1068
- pydev_log.exception('Error calculating Smart Step Into Variants.')
1122
+ pydev_log.exception("Error calculating Smart Step Into Variants.")
1069
1123
  body = StepInTargetsResponseBody([])
1070
- variables_response = pydevd_base_schema.build_response(
1071
- request,
1072
- kwargs={
1073
- 'body': body,
1074
- 'success': False,
1075
- 'message': str(e)
1076
- })
1124
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": str(e)})
1077
1125
  cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True)
1078
1126
  dbg.writer.add_command(cmd)
1079
1127
 
1080
1128
 
1081
1129
  def internal_get_next_statement_targets(dbg, seq, thread_id, frame_id):
1082
- ''' gets the valid line numbers for use with set next statement '''
1130
+ """gets the valid line numbers for use with set next statement"""
1083
1131
  try:
1084
1132
  frame = dbg.find_frame(thread_id, frame_id)
1085
1133
  if frame is not None:
@@ -1105,18 +1153,17 @@ def internal_get_next_statement_targets(dbg, seq, thread_id, frame_id):
1105
1153
  dbg.writer.add_command(cmd)
1106
1154
 
1107
1155
 
1108
- def _evaluate_response(py_db, request, result, error_message=''):
1156
+ def _evaluate_response(py_db, request, result, error_message=""):
1109
1157
  is_error = isinstance(result, ExceptionOnEvaluate)
1110
1158
  if is_error:
1111
1159
  result = result.result
1112
1160
  if not error_message:
1113
1161
  body = pydevd_schema.EvaluateResponseBody(result=result, variablesReference=0)
1114
- variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body})
1162
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
1115
1163
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
1116
1164
  else:
1117
1165
  body = pydevd_schema.EvaluateResponseBody(result=result, variablesReference=0)
1118
- variables_response = pydevd_base_schema.build_response(request, kwargs={
1119
- 'body':body, 'success':False, 'message': error_message})
1166
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": error_message})
1120
1167
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
1121
1168
 
1122
1169
 
@@ -1124,9 +1171,9 @@ _global_frame = None
1124
1171
 
1125
1172
 
1126
1173
  def internal_evaluate_expression_json(py_db, request, thread_id):
1127
- '''
1174
+ """
1128
1175
  :param EvaluateRequest request:
1129
- '''
1176
+ """
1130
1177
  global _global_frame
1131
1178
  # : :type arguments: EvaluateArguments
1132
1179
 
@@ -1135,11 +1182,11 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
1135
1182
  frame_id = arguments.frameId
1136
1183
  context = arguments.context
1137
1184
  fmt = arguments.format
1138
- if hasattr(fmt, 'to_dict'):
1185
+ if hasattr(fmt, "to_dict"):
1139
1186
  fmt = fmt.to_dict()
1140
1187
 
1141
1188
  ctx = NULL
1142
- if context == 'repl':
1189
+ if context == "repl":
1143
1190
  if not py_db.is_output_redirected:
1144
1191
  ctx = pydevd_io.redirect_stream_to_pydb_io_messages_context()
1145
1192
  else:
@@ -1166,14 +1213,16 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
1166
1213
  eval_result = pydevd_vars.evaluate_expression(py_db, frame, expression, is_exec=False)
1167
1214
  is_error = isinstance_checked(eval_result, ExceptionOnEvaluate)
1168
1215
  if is_error:
1169
- if context == 'hover': # In a hover it doesn't make sense to do an exec.
1170
- _evaluate_response(py_db, request, result='', error_message='Exception occurred during evaluation.')
1216
+ if context == "hover": # In a hover it doesn't make sense to do an exec.
1217
+ _evaluate_response(py_db, request, result="", error_message="Exception occurred during evaluation.")
1171
1218
  return
1172
- elif context == 'watch':
1219
+ elif context == "watch":
1173
1220
  # If it's a watch, don't show it as an exception object, rather, format
1174
1221
  # it and show it as a string (with success=False).
1175
- msg = '%s: %s' % (
1176
- eval_result.result.__class__.__name__, eval_result.result,)
1222
+ msg = "%s: %s" % (
1223
+ eval_result.result.__class__.__name__,
1224
+ eval_result.result,
1225
+ )
1177
1226
  _evaluate_response(py_db, request, result=msg, error_message=msg)
1178
1227
  return
1179
1228
  else:
@@ -1182,10 +1231,10 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
1182
1231
  try:
1183
1232
  pydevd_vars.compile_as_eval(expression)
1184
1233
  except Exception:
1185
- try_exec = context == 'repl'
1234
+ try_exec = context == "repl"
1186
1235
  else:
1187
1236
  try_exec = False
1188
- if context == 'repl':
1237
+ if context == "repl":
1189
1238
  # In the repl we should show the exception to the user.
1190
1239
  _evaluate_response_return_exception(py_db, request, eval_result.etype, eval_result.result, eval_result.tb)
1191
1240
  return
@@ -1197,29 +1246,29 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
1197
1246
  _evaluate_response_return_exception(py_db, request, *sys.exc_info())
1198
1247
  return
1199
1248
  # No result on exec.
1200
- _evaluate_response(py_db, request, result='')
1249
+ _evaluate_response(py_db, request, result="")
1201
1250
  return
1202
1251
 
1203
1252
  # Ok, we have the result (could be an error), let's put it into the saved variables.
1204
1253
  frame_tracker = py_db.suspended_frames_manager.get_frame_tracker(thread_id)
1205
1254
  if frame_tracker is None:
1206
1255
  # This is not really expected.
1207
- _evaluate_response(py_db, request, result='', error_message='Thread id: %s is not current thread id.' % (thread_id,))
1256
+ _evaluate_response(py_db, request, result="", error_message="Thread id: %s is not current thread id." % (thread_id,))
1208
1257
  return
1209
1258
 
1210
1259
  safe_repr_custom_attrs = {}
1211
- if context == 'clipboard':
1260
+ if context == "clipboard":
1212
1261
  safe_repr_custom_attrs = dict(
1213
- maxstring_outer=2 ** 64,
1214
- maxstring_inner=2 ** 64,
1215
- maxother_outer=2 ** 64,
1216
- maxother_inner=2 ** 64,
1262
+ maxstring_outer=2**64,
1263
+ maxstring_inner=2**64,
1264
+ maxother_outer=2**64,
1265
+ maxother_inner=2**64,
1217
1266
  )
1218
1267
 
1219
- if context == 'repl' and eval_result is None:
1268
+ if context == "repl" and eval_result is None:
1220
1269
  # We don't want "None" to appear when typing in the repl.
1221
1270
  body = pydevd_schema.EvaluateResponseBody(
1222
- result='',
1271
+ result="",
1223
1272
  variablesReference=0,
1224
1273
  )
1225
1274
 
@@ -1228,14 +1277,14 @@ def internal_evaluate_expression_json(py_db, request, thread_id):
1228
1277
  var_data = variable.get_var_data(fmt=fmt, context=context, **safe_repr_custom_attrs)
1229
1278
 
1230
1279
  body = pydevd_schema.EvaluateResponseBody(
1231
- result=var_data['value'],
1232
- variablesReference=var_data.get('variablesReference', 0),
1233
- type=var_data.get('type'),
1234
- presentationHint=var_data.get('presentationHint'),
1235
- namedVariables=var_data.get('namedVariables'),
1236
- indexedVariables=var_data.get('indexedVariables'),
1280
+ result=var_data["value"],
1281
+ variablesReference=var_data.get("variablesReference", 0),
1282
+ type=var_data.get("type"),
1283
+ presentationHint=var_data.get("presentationHint"),
1284
+ namedVariables=var_data.get("namedVariables"),
1285
+ indexedVariables=var_data.get("indexedVariables"),
1237
1286
  )
1238
- variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body})
1287
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
1239
1288
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
1240
1289
 
1241
1290
 
@@ -1252,7 +1301,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t
1252
1301
 
1253
1302
  if tb is None:
1254
1303
  tb = initial_tb
1255
- err = ''.join(traceback.format_exception(exc_type, exc, tb))
1304
+ err = "".join(traceback.format_exception(exc_type, exc, tb))
1256
1305
 
1257
1306
  # Make sure we don't keep references to them.
1258
1307
  exc = None
@@ -1261,7 +1310,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t
1261
1310
  temp_tb = None
1262
1311
  initial_tb = None
1263
1312
  except:
1264
- err = '<Internal error - unable to get traceback when evaluating expression>'
1313
+ err = "<Internal error - unable to get traceback when evaluating expression>"
1265
1314
  pydev_log.exception(err)
1266
1315
 
1267
1316
  # Currently there is an issue in VSC where returning success=false for an
@@ -1272,7 +1321,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t
1272
1321
 
1273
1322
  @silence_warnings_decorator
1274
1323
  def internal_evaluate_expression(dbg, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result):
1275
- ''' gets the value of a variable '''
1324
+ """gets the value of a variable"""
1276
1325
  try:
1277
1326
  frame = dbg.find_frame(thread_id, frame_id)
1278
1327
  if frame is not None:
@@ -1294,9 +1343,8 @@ def internal_evaluate_expression(dbg, seq, thread_id, frame_id, expression, is_e
1294
1343
 
1295
1344
 
1296
1345
  def _set_expression_response(py_db, request, result, error_message):
1297
- body = pydevd_schema.SetExpressionResponseBody(result='', variablesReference=0)
1298
- variables_response = pydevd_base_schema.build_response(request, kwargs={
1299
- 'body':body, 'success':False, 'message': error_message})
1346
+ body = pydevd_schema.SetExpressionResponseBody(result="", variablesReference=0)
1347
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": error_message})
1300
1348
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
1301
1349
 
1302
1350
 
@@ -1308,23 +1356,23 @@ def internal_set_expression_json(py_db, request, thread_id):
1308
1356
  frame_id = arguments.frameId
1309
1357
  value = arguments.value
1310
1358
  fmt = arguments.format
1311
- if hasattr(fmt, 'to_dict'):
1359
+ if hasattr(fmt, "to_dict"):
1312
1360
  fmt = fmt.to_dict()
1313
1361
 
1314
1362
  frame = py_db.find_frame(thread_id, frame_id)
1315
- exec_code = '%s = (%s)' % (expression, value)
1363
+ exec_code = "%s = (%s)" % (expression, value)
1316
1364
  result = pydevd_vars.evaluate_expression(py_db, frame, exec_code, is_exec=True)
1317
1365
  is_error = isinstance(result, ExceptionOnEvaluate)
1318
1366
 
1319
1367
  if is_error:
1320
- _set_expression_response(py_db, request, result, error_message='Error executing: %s' % (exec_code,))
1368
+ _set_expression_response(py_db, request, result, error_message="Error executing: %s" % (exec_code,))
1321
1369
  return
1322
1370
 
1323
1371
  # Ok, we have the result (could be an error), let's put it into the saved variables.
1324
1372
  frame_tracker = py_db.suspended_frames_manager.get_frame_tracker(thread_id)
1325
1373
  if frame_tracker is None:
1326
1374
  # This is not really expected.
1327
- _set_expression_response(py_db, request, result, error_message='Thread id: %s is not current thread id.' % (thread_id,))
1375
+ _set_expression_response(py_db, request, result, error_message="Thread id: %s is not current thread id." % (thread_id,))
1328
1376
  return
1329
1377
 
1330
1378
  # Now that the exec is done, get the actual value changed to return.
@@ -1333,31 +1381,31 @@ def internal_set_expression_json(py_db, request, thread_id):
1333
1381
  var_data = variable.get_var_data(fmt=fmt)
1334
1382
 
1335
1383
  body = pydevd_schema.SetExpressionResponseBody(
1336
- value=var_data['value'],
1337
- variablesReference=var_data.get('variablesReference', 0),
1338
- type=var_data.get('type'),
1339
- presentationHint=var_data.get('presentationHint'),
1340
- namedVariables=var_data.get('namedVariables'),
1341
- indexedVariables=var_data.get('indexedVariables'),
1384
+ value=var_data["value"],
1385
+ variablesReference=var_data.get("variablesReference", 0),
1386
+ type=var_data.get("type"),
1387
+ presentationHint=var_data.get("presentationHint"),
1388
+ namedVariables=var_data.get("namedVariables"),
1389
+ indexedVariables=var_data.get("indexedVariables"),
1342
1390
  )
1343
- variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body})
1391
+ variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body})
1344
1392
  py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True))
1345
1393
 
1346
1394
 
1347
1395
  def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, column=-1):
1348
- '''
1396
+ """
1349
1397
  Note that if the column is >= 0, the act_tok is considered text and the actual
1350
1398
  activation token/qualifier is computed in this command.
1351
- '''
1399
+ """
1352
1400
  try:
1353
1401
  remove_path = None
1354
1402
  try:
1355
- qualifier = ''
1403
+ qualifier = ""
1356
1404
  if column >= 0:
1357
1405
  token_and_qualifier = extract_token_and_qualifier(act_tok, line, column)
1358
1406
  act_tok = token_and_qualifier[0]
1359
1407
  if act_tok:
1360
- act_tok += '.'
1408
+ act_tok += "."
1361
1409
  qualifier = token_and_qualifier[1]
1362
1410
 
1363
1411
  frame = dbg.find_frame(thread_id, frame_id)
@@ -1367,11 +1415,12 @@ def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, co
1367
1415
  # Note that qualifier and start are only actually valid for the
1368
1416
  # Debug Adapter Protocol (for the line-based protocol, the IDE
1369
1417
  # is required to filter the completions returned).
1370
- cmd = dbg.cmd_factory.make_get_completions_message(
1371
- seq, completions, qualifier, start=column - len(qualifier))
1418
+ cmd = dbg.cmd_factory.make_get_completions_message(seq, completions, qualifier, start=column - len(qualifier))
1372
1419
  dbg.writer.add_command(cmd)
1373
1420
  else:
1374
- cmd = dbg.cmd_factory.make_error_message(seq, "internal_get_completions: Frame not found: %s from thread: %s" % (frame_id, thread_id))
1421
+ cmd = dbg.cmd_factory.make_error_message(
1422
+ seq, "internal_get_completions: Frame not found: %s from thread: %s" % (frame_id, thread_id)
1423
+ )
1375
1424
  dbg.writer.add_command(cmd)
1376
1425
 
1377
1426
  finally:
@@ -1380,18 +1429,17 @@ def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, co
1380
1429
 
1381
1430
  except:
1382
1431
  exc = get_exception_traceback_str()
1383
- sys.stderr.write('%s\n' % (exc,))
1432
+ sys.stderr.write("%s\n" % (exc,))
1384
1433
  cmd = dbg.cmd_factory.make_error_message(seq, "Error evaluating expression " + exc)
1385
1434
  dbg.writer.add_command(cmd)
1386
1435
 
1387
1436
 
1388
1437
  def internal_get_description(dbg, seq, thread_id, frame_id, expression):
1389
- ''' Fetch the variable description stub from the debug console
1390
- '''
1438
+ """Fetch the variable description stub from the debug console"""
1391
1439
  try:
1392
1440
  frame = dbg.find_frame(thread_id, frame_id)
1393
1441
  description = pydevd_console.get_description(frame, thread_id, frame_id, expression)
1394
- description = pydevd_xml.make_valid_xml_value(quote(description, '/>_= \t'))
1442
+ description = pydevd_xml.make_valid_xml_value(quote(description, "/>_= \t"))
1395
1443
  description_xml = '<xml><var name="" type="" value="%s"/></xml>' % description
1396
1444
  cmd = dbg.cmd_factory.make_get_description_message(seq, description_xml)
1397
1445
  dbg.writer.add_command(cmd)
@@ -1402,15 +1450,15 @@ def internal_get_description(dbg, seq, thread_id, frame_id, expression):
1402
1450
 
1403
1451
 
1404
1452
  def build_exception_info_response(dbg, thread_id, thread, request_seq, set_additional_thread_info, iter_visible_frames_info, max_frames):
1405
- '''
1453
+ """
1406
1454
  :return ExceptionInfoResponse
1407
- '''
1455
+ """
1408
1456
  additional_info = set_additional_thread_info(thread)
1409
1457
  topmost_frame = additional_info.get_topmost_frame(thread)
1410
1458
 
1411
- current_paused_frame_name = ''
1459
+ current_paused_frame_name = ""
1412
1460
 
1413
- source_path = '' # This is an extra bit of data used by Visual Studio
1461
+ source_path = "" # This is an extra bit of data used by Visual Studio
1414
1462
  stack_str_lst = []
1415
1463
  name = None
1416
1464
  description = None
@@ -1446,19 +1494,27 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
1446
1494
  except:
1447
1495
  pass
1448
1496
 
1449
- for frame_id, frame, method_name, original_filename, filename_in_utf8, lineno, _applied_mapping, show_as_current_frame, line_col_info in \
1450
- iter_visible_frames_info(dbg, frames_list):
1451
-
1497
+ for (
1498
+ frame_id,
1499
+ frame,
1500
+ method_name,
1501
+ original_filename,
1502
+ filename_in_utf8,
1503
+ lineno,
1504
+ _applied_mapping,
1505
+ show_as_current_frame,
1506
+ line_col_info,
1507
+ ) in iter_visible_frames_info(dbg, frames_list):
1452
1508
  line_text = linecache.getline(original_filename, lineno)
1453
1509
 
1454
1510
  # Never filter out plugin frames!
1455
- if not getattr(frame, 'IS_PLUGIN_FRAME', False):
1511
+ if not getattr(frame, "IS_PLUGIN_FRAME", False):
1456
1512
  if dbg.is_files_filter_enabled and dbg.apply_files_filter(frame, original_filename, False):
1457
1513
  continue
1458
1514
 
1459
1515
  if show_as_current_frame:
1460
1516
  current_paused_frame_name = method_name
1461
- method_name += ' (Current frame)'
1517
+ method_name += " (Current frame)"
1462
1518
  frames.append((filename_in_utf8, lineno, method_name, line_text, line_col_info))
1463
1519
 
1464
1520
  if not source_path and frames:
@@ -1474,11 +1530,11 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
1474
1530
  frame_summary.end_colno = line_col_info.end_colno
1475
1531
  stack_summary.append(frame_summary)
1476
1532
 
1477
- stack_str = ''.join(stack_summary.format())
1533
+ stack_str = "".join(stack_summary.format())
1478
1534
 
1479
1535
  else:
1480
1536
  # Note: remove col info (just used in 3.11).
1481
- stack_str = ''.join(traceback.format_list((x[:-1] for x in frames[-max_frames:])))
1537
+ stack_str = "".join(traceback.format_list((x[:-1] for x in frames[-max_frames:])))
1482
1538
 
1483
1539
  try:
1484
1540
  stype = frames_list.exc_type.__qualname__
@@ -1486,12 +1542,12 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
1486
1542
  if smod not in ("__main__", "builtins"):
1487
1543
  if not isinstance(smod, str):
1488
1544
  smod = "<unknown>"
1489
- stype = smod + '.' + stype
1545
+ stype = smod + "." + stype
1490
1546
  except Exception:
1491
- stype = '<unable to get exception type>'
1492
- pydev_log.exception('Error getting exception type.')
1547
+ stype = "<unable to get exception type>"
1548
+ pydev_log.exception("Error getting exception type.")
1493
1549
 
1494
- stack_str += '%s: %s\n' % (stype, frames_list.exc_desc)
1550
+ stack_str += "%s: %s\n" % (stype, frames_list.exc_desc)
1495
1551
  stack_str += frames_list.exc_context_msg
1496
1552
  stack_str_lst.append(stack_str)
1497
1553
 
@@ -1500,18 +1556,18 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
1500
1556
  break
1501
1557
 
1502
1558
  except:
1503
- pydev_log.exception('Error on build_exception_info_response.')
1559
+ pydev_log.exception("Error on build_exception_info_response.")
1504
1560
  finally:
1505
1561
  topmost_frame = None
1506
- full_stack_str = ''.join(reversed(stack_str_lst))
1562
+ full_stack_str = "".join(reversed(stack_str_lst))
1507
1563
 
1508
1564
  if not name:
1509
- name = 'exception: type unknown'
1565
+ name = "exception: type unknown"
1510
1566
  if not description:
1511
- description = 'exception: no description'
1567
+ description = "exception: no description"
1512
1568
 
1513
1569
  if current_paused_frame_name:
1514
- name += ' (note: full exception trace is shown but execution is paused at: %s)' % (current_paused_frame_name,)
1570
+ name += " (note: full exception trace is shown but execution is paused at: %s)" % (current_paused_frame_name,)
1515
1571
 
1516
1572
  if thread.stop_reason == CMD_STEP_CAUGHT_EXCEPTION:
1517
1573
  break_mode = pydevd_schema.ExceptionBreakMode.ALWAYS
@@ -1521,7 +1577,7 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
1521
1577
  response = pydevd_schema.ExceptionInfoResponse(
1522
1578
  request_seq=request_seq,
1523
1579
  success=True,
1524
- command='exceptionInfo',
1580
+ command="exceptionInfo",
1525
1581
  body=pydevd_schema.ExceptionInfoResponseBody(
1526
1582
  exceptionId=name,
1527
1583
  description=description,
@@ -1533,29 +1589,28 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
1533
1589
  source=source_path,
1534
1590
  # Note: ExceptionDetails actually accepts an 'innerException', but
1535
1591
  # when passing it, VSCode is not showing the stack trace at all.
1536
- )
1537
- )
1592
+ ),
1593
+ ),
1538
1594
  )
1539
1595
  return response
1540
1596
 
1541
1597
 
1542
- def internal_get_exception_details_json(dbg, request, thread_id, thread, max_frames, set_additional_thread_info=None, iter_visible_frames_info=None):
1543
- ''' Fetch exception details
1544
- '''
1598
+ def internal_get_exception_details_json(
1599
+ dbg, request, thread_id, thread, max_frames, set_additional_thread_info=None, iter_visible_frames_info=None
1600
+ ):
1601
+ """Fetch exception details"""
1545
1602
  try:
1546
- response = build_exception_info_response(dbg, thread_id, thread, request.seq, set_additional_thread_info, iter_visible_frames_info, max_frames)
1603
+ response = build_exception_info_response(
1604
+ dbg, thread_id, thread, request.seq, set_additional_thread_info, iter_visible_frames_info, max_frames
1605
+ )
1547
1606
  except:
1548
1607
  exc = get_exception_traceback_str()
1549
- response = pydevd_base_schema.build_response(request, kwargs={
1550
- 'success': False,
1551
- 'message': exc,
1552
- 'body':{}
1553
- })
1608
+ response = pydevd_base_schema.build_response(request, kwargs={"success": False, "message": exc, "body": {}})
1554
1609
  dbg.writer.add_command(NetCommand(CMD_RETURN, 0, response, is_json=True))
1555
1610
 
1556
1611
 
1557
1612
  class InternalGetBreakpointException(InternalThreadCommand):
1558
- ''' Send details of exception raised while evaluating conditional breakpoint '''
1613
+ """Send details of exception raised while evaluating conditional breakpoint"""
1559
1614
 
1560
1615
  def __init__(self, thread_id, exc_type, stacktrace):
1561
1616
  self.sequence = 0
@@ -1575,27 +1630,31 @@ class InternalGetBreakpointException(InternalThreadCommand):
1575
1630
  # convert it to utf8
1576
1631
  filename = filename.decode(file_system_encoding).encode("utf-8")
1577
1632
 
1578
- callstack += '<frame thread_id = "%s" file="%s" line="%s" name="%s" obj="%s" />' \
1579
- % (self.thread_id, makeValid(filename), line, makeValid(methodname), makeValid(methodobj))
1633
+ callstack += '<frame thread_id = "%s" file="%s" line="%s" name="%s" obj="%s" />' % (
1634
+ self.thread_id,
1635
+ makeValid(filename),
1636
+ line,
1637
+ makeValid(methodname),
1638
+ makeValid(methodobj),
1639
+ )
1580
1640
  callstack += "</xml>"
1581
1641
 
1582
1642
  cmd = dbg.cmd_factory.make_send_breakpoint_exception_message(self.sequence, self.exc_type + "\t" + callstack)
1583
1643
  dbg.writer.add_command(cmd)
1584
1644
  except:
1585
1645
  exc = get_exception_traceback_str()
1586
- sys.stderr.write('%s\n' % (exc,))
1646
+ sys.stderr.write("%s\n" % (exc,))
1587
1647
  cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Exception: " + exc)
1588
1648
  dbg.writer.add_command(cmd)
1589
1649
 
1590
1650
 
1591
1651
  class InternalSendCurrExceptionTrace(InternalThreadCommand):
1592
- ''' Send details of the exception that was caught and where we've broken in.
1593
- '''
1652
+ """Send details of the exception that was caught and where we've broken in."""
1594
1653
 
1595
1654
  def __init__(self, thread_id, arg, curr_frame_id):
1596
- '''
1655
+ """
1597
1656
  :param arg: exception type, description, traceback object
1598
- '''
1657
+ """
1599
1658
  self.sequence = 0
1600
1659
  self.thread_id = thread_id
1601
1660
  self.curr_frame_id = curr_frame_id
@@ -1608,14 +1667,13 @@ class InternalSendCurrExceptionTrace(InternalThreadCommand):
1608
1667
  dbg.writer.add_command(cmd)
1609
1668
  except:
1610
1669
  exc = get_exception_traceback_str()
1611
- sys.stderr.write('%s\n' % (exc,))
1670
+ sys.stderr.write("%s\n" % (exc,))
1612
1671
  cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Current Exception Trace: " + exc)
1613
1672
  dbg.writer.add_command(cmd)
1614
1673
 
1615
1674
 
1616
1675
  class InternalSendCurrExceptionTraceProceeded(InternalThreadCommand):
1617
- ''' Send details of the exception that was caught and where we've broken in.
1618
- '''
1676
+ """Send details of the exception that was caught and where we've broken in."""
1619
1677
 
1620
1678
  def __init__(self, thread_id):
1621
1679
  self.sequence = 0
@@ -1627,13 +1685,13 @@ class InternalSendCurrExceptionTraceProceeded(InternalThreadCommand):
1627
1685
  dbg.writer.add_command(cmd)
1628
1686
  except:
1629
1687
  exc = get_exception_traceback_str()
1630
- sys.stderr.write('%s\n' % (exc,))
1688
+ sys.stderr.write("%s\n" % (exc,))
1631
1689
  cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Current Exception Trace Proceeded: " + exc)
1632
1690
  dbg.writer.add_command(cmd)
1633
1691
 
1634
1692
 
1635
1693
  class InternalEvaluateConsoleExpression(InternalThreadCommand):
1636
- ''' Execute the given command in the debug console '''
1694
+ """Execute the given command in the debug console"""
1637
1695
 
1638
1696
  def __init__(self, seq, thread_id, frame_id, line, buffer_output=True):
1639
1697
  self.sequence = seq
@@ -1643,22 +1701,24 @@ class InternalEvaluateConsoleExpression(InternalThreadCommand):
1643
1701
  self.buffer_output = buffer_output
1644
1702
 
1645
1703
  def do_it(self, dbg):
1646
- ''' Create an XML for console output, error and more (true/false)
1704
+ """Create an XML for console output, error and more (true/false)
1647
1705
  <xml>
1648
1706
  <output message=output_message></output>
1649
1707
  <error message=error_message></error>
1650
1708
  <more>true/false</more>
1651
1709
  </xml>
1652
- '''
1710
+ """
1653
1711
  try:
1654
1712
  frame = dbg.find_frame(self.thread_id, self.frame_id)
1655
1713
  if frame is not None:
1656
1714
  console_message = pydevd_console.execute_console_command(
1657
- frame, self.thread_id, self.frame_id, self.line, self.buffer_output)
1715
+ frame, self.thread_id, self.frame_id, self.line, self.buffer_output
1716
+ )
1658
1717
 
1659
1718
  cmd = dbg.cmd_factory.make_send_console_message(self.sequence, console_message.to_xml())
1660
1719
  else:
1661
1720
  from _pydevd_bundle.pydevd_console import ConsoleMessage
1721
+
1662
1722
  console_message = ConsoleMessage()
1663
1723
  console_message.add_console_message(
1664
1724
  pydevd_console.CONSOLE_ERROR,
@@ -1672,8 +1732,7 @@ class InternalEvaluateConsoleExpression(InternalThreadCommand):
1672
1732
 
1673
1733
 
1674
1734
  class InternalRunCustomOperation(InternalThreadCommand):
1675
- ''' Run a custom command on an expression
1676
- '''
1735
+ """Run a custom command on an expression"""
1677
1736
 
1678
1737
  def __init__(self, seq, thread_id, frame_id, scope, attrs, style, encoded_code_or_file, fnname):
1679
1738
  self.sequence = seq
@@ -1687,8 +1746,9 @@ class InternalRunCustomOperation(InternalThreadCommand):
1687
1746
 
1688
1747
  def do_it(self, dbg):
1689
1748
  try:
1690
- res = pydevd_vars.custom_operation(dbg, self.thread_id, self.frame_id, self.scope, self.attrs,
1691
- self.style, self.code_or_file, self.fnname)
1749
+ res = pydevd_vars.custom_operation(
1750
+ dbg, self.thread_id, self.frame_id, self.scope, self.attrs, self.style, self.code_or_file, self.fnname
1751
+ )
1692
1752
  resEncoded = quote_plus(res)
1693
1753
  cmd = dbg.cmd_factory.make_custom_operation_message(self.sequence, resEncoded)
1694
1754
  dbg.writer.add_command(cmd)
@@ -1699,8 +1759,7 @@ class InternalRunCustomOperation(InternalThreadCommand):
1699
1759
 
1700
1760
 
1701
1761
  class InternalConsoleGetCompletions(InternalThreadCommand):
1702
- ''' Fetch the completions in the debug console
1703
- '''
1762
+ """Fetch the completions in the debug console"""
1704
1763
 
1705
1764
  def __init__(self, seq, thread_id, frame_id, act_tok):
1706
1765
  self.sequence = seq
@@ -1709,8 +1768,7 @@ class InternalConsoleGetCompletions(InternalThreadCommand):
1709
1768
  self.act_tok = act_tok
1710
1769
 
1711
1770
  def do_it(self, dbg):
1712
- ''' Get completions and write back to the client
1713
- '''
1771
+ """Get completions and write back to the client"""
1714
1772
  try:
1715
1773
  frame = dbg.find_frame(self.thread_id, self.frame_id)
1716
1774
  completions_xml = pydevd_console.get_completions(frame, self.act_tok)
@@ -1723,7 +1781,7 @@ class InternalConsoleGetCompletions(InternalThreadCommand):
1723
1781
 
1724
1782
 
1725
1783
  class InternalConsoleExec(InternalThreadCommand):
1726
- ''' gets the value of a variable '''
1784
+ """gets the value of a variable"""
1727
1785
 
1728
1786
  def __init__(self, seq, thread_id, frame_id, expression):
1729
1787
  self.sequence = seq
@@ -1731,24 +1789,40 @@ class InternalConsoleExec(InternalThreadCommand):
1731
1789
  self.frame_id = frame_id
1732
1790
  self.expression = expression
1733
1791
 
1734
- def do_it(self, dbg):
1735
- ''' Converts request into python variable '''
1792
+ def init_matplotlib_in_debug_console(self, py_db):
1793
+ # import hook and patches for matplotlib support in debug console
1794
+ from _pydev_bundle.pydev_import_hook import import_hook_manager
1795
+
1796
+ if is_current_thread_main_thread():
1797
+ for module in list(py_db.mpl_modules_for_patching):
1798
+ import_hook_manager.add_module_name(module, py_db.mpl_modules_for_patching.pop(module))
1799
+
1800
+ def do_it(self, py_db):
1801
+ if not py_db.mpl_hooks_in_debug_console and not py_db.gui_in_use:
1802
+ # add import hooks for matplotlib patches if only debug console was started
1803
+ try:
1804
+ self.init_matplotlib_in_debug_console(py_db)
1805
+ py_db.gui_in_use = True
1806
+ except:
1807
+ pydev_log.debug("Matplotlib support in debug console failed", traceback.format_exc())
1808
+ py_db.mpl_hooks_in_debug_console = True
1809
+
1736
1810
  try:
1737
1811
  try:
1738
- # don't trace new threads created by console command
1812
+ # Don't trace new threads created by console command.
1739
1813
  disable_trace_thread_modules()
1740
1814
 
1741
- result = pydevconsole.console_exec(self.thread_id, self.frame_id, self.expression, dbg)
1815
+ result = pydevconsole.console_exec(self.thread_id, self.frame_id, self.expression, py_db)
1742
1816
  xml = "<xml>"
1743
1817
  xml += pydevd_xml.var_to_xml(result, "")
1744
1818
  xml += "</xml>"
1745
- cmd = dbg.cmd_factory.make_evaluate_expression_message(self.sequence, xml)
1746
- dbg.writer.add_command(cmd)
1819
+ cmd = py_db.cmd_factory.make_evaluate_expression_message(self.sequence, xml)
1820
+ py_db.writer.add_command(cmd)
1747
1821
  except:
1748
1822
  exc = get_exception_traceback_str()
1749
- sys.stderr.write('%s\n' % (exc,))
1750
- cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error evaluating console expression " + exc)
1751
- dbg.writer.add_command(cmd)
1823
+ sys.stderr.write("%s\n" % (exc,))
1824
+ cmd = py_db.cmd_factory.make_error_message(self.sequence, "Error evaluating console expression " + exc)
1825
+ py_db.writer.add_command(cmd)
1752
1826
  finally:
1753
1827
  enable_trace_thread_modules()
1754
1828
 
@@ -1757,9 +1831,9 @@ class InternalConsoleExec(InternalThreadCommand):
1757
1831
 
1758
1832
 
1759
1833
  class InternalLoadFullValue(InternalThreadCommand):
1760
- '''
1834
+ """
1761
1835
  Loads values asynchronously
1762
- '''
1836
+ """
1763
1837
 
1764
1838
  def __init__(self, seq, thread_id, frame_id, vars):
1765
1839
  self.sequence = seq
@@ -1769,14 +1843,14 @@ class InternalLoadFullValue(InternalThreadCommand):
1769
1843
 
1770
1844
  @silence_warnings_decorator
1771
1845
  def do_it(self, dbg):
1772
- '''Starts a thread that will load values asynchronously'''
1846
+ """Starts a thread that will load values asynchronously"""
1773
1847
  try:
1774
1848
  var_objects = []
1775
1849
  for variable in self.vars:
1776
1850
  variable = variable.strip()
1777
1851
  if len(variable) > 0:
1778
- if '\t' in variable: # there are attributes beyond scope
1779
- scope, attrs = variable.split('\t', 1)
1852
+ if "\t" in variable: # there are attributes beyond scope
1853
+ scope, attrs = variable.split("\t", 1)
1780
1854
  name = attrs[0]
1781
1855
  else:
1782
1856
  scope, attrs = (variable, None)
@@ -1788,22 +1862,22 @@ class InternalLoadFullValue(InternalThreadCommand):
1788
1862
  t.start()
1789
1863
  except:
1790
1864
  exc = get_exception_traceback_str()
1791
- sys.stderr.write('%s\n' % (exc,))
1865
+ sys.stderr.write("%s\n" % (exc,))
1792
1866
  cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error evaluating variable %s " % exc)
1793
1867
  dbg.writer.add_command(cmd)
1794
1868
 
1795
1869
 
1796
1870
  class AbstractGetValueAsyncThread(PyDBDaemonThread):
1797
- '''
1871
+ """
1798
1872
  Abstract class for a thread, which evaluates values for async variables
1799
- '''
1873
+ """
1800
1874
 
1801
1875
  def __init__(self, py_db, frame_accessor, seq, var_objects):
1802
1876
  PyDBDaemonThread.__init__(self, py_db)
1803
1877
  self.frame_accessor = frame_accessor
1804
1878
  self.seq = seq
1805
1879
  self.var_objs = var_objects
1806
- self.cancel_event = threading.Event()
1880
+ self.cancel_event = ThreadingEvent()
1807
1881
 
1808
1882
  def send_result(self, xml):
1809
1883
  raise NotImplementedError()
@@ -1813,7 +1887,7 @@ class AbstractGetValueAsyncThread(PyDBDaemonThread):
1813
1887
  start = time.time()
1814
1888
  xml = StringIO()
1815
1889
  xml.write("<xml>")
1816
- for (var_obj, name) in self.var_objs:
1890
+ for var_obj, name in self.var_objs:
1817
1891
  current_time = time.time()
1818
1892
  if current_time - start > ASYNC_EVAL_TIMEOUT_SEC or self.cancel_event.is_set():
1819
1893
  break
@@ -1824,10 +1898,10 @@ class AbstractGetValueAsyncThread(PyDBDaemonThread):
1824
1898
 
1825
1899
 
1826
1900
  class GetValueAsyncThreadDebug(AbstractGetValueAsyncThread):
1827
- '''
1901
+ """
1828
1902
  A thread for evaluation async values, which returns result for debugger
1829
1903
  Create message and send it via writer thread
1830
- '''
1904
+ """
1831
1905
 
1832
1906
  def send_result(self, xml):
1833
1907
  if self.frame_accessor is not None:
@@ -1836,12 +1910,11 @@ class GetValueAsyncThreadDebug(AbstractGetValueAsyncThread):
1836
1910
 
1837
1911
 
1838
1912
  class GetValueAsyncThreadConsole(AbstractGetValueAsyncThread):
1839
- '''
1913
+ """
1840
1914
  A thread for evaluation async values, which returns result for Console
1841
1915
  Send result directly to Console's server
1842
- '''
1916
+ """
1843
1917
 
1844
1918
  def send_result(self, xml):
1845
1919
  if self.frame_accessor is not None:
1846
1920
  self.frame_accessor.ReturnFullValue(self.seq, xml.getvalue())
1847
-