def __init__(self, mainThread):
     self.mainThread = mainThread
     self.interruptable = False
     self.exec_queue = _queue.Queue(0)
     self.buffer = None
     self.banner_shown = False
     self.default_banner = ''
Exemplo n.º 2
0
 def __init__(self, mainThread, connect_status_queue=None):
     self.mainThread = mainThread
     self.interruptable = False
     self.exec_queue = _queue.Queue(0)
     self.buffer = None
     self.banner_shown = False
     self.connect_status_queue = connect_status_queue
     self.mpl_modules_for_patching = {}
     self.init_mpl_modules_for_patching()
Exemplo n.º 3
0
 def __init__(self, sock):
     PyDBDaemonThread.__init__(self)
     self.sock = sock
     self.setName("pydevd.Writer")
     self.cmdQueue = _queue.Queue()
     if pydevd_vm_type.get_vm_type() == 'python':
         self.timeout = 0
     else:
         self.timeout = 0.1
Exemplo n.º 4
0
 def __init__(self):
     self.interruptable = False
     self.exec_queue = _queue.Queue(0)
     self.buffer = None
     self.mpl_modules_for_patching = {}
     self.init_mpl_modules_for_patching()
     # `vars_lock` synchronizes commands which modify and read variables values. It's needed, because we call
     # `getFrame()` and `add_exec()` from different threads, which can lead to incorrect variables presentation in UI
     self.vars_lock = threading.Lock()
Exemplo n.º 5
0
 def __init__(self, mainThread):
     self.mainThread = mainThread
     self.interruptable = False
     self.exec_queue = _queue.Queue(0)
     self.buffer = None
Exemplo n.º 6
0
 def __init__(self):
     self.interruptable = False
     self.exec_queue = _queue.Queue(0)
     self.buffer = None
     self.mpl_modules_for_patching = {}
     self.init_mpl_modules_for_patching()
Exemplo n.º 7
0
def console_setup(tmpdir):

    server_queue = queue.Queue()

    def notify_finished(more):
        server_queue.put(('notify_finished', more))
        return ''

    class ConsoleRunner(DebuggerRunnerSimple):
        @overrides(DebuggerRunnerSimple.add_command_line_args)
        def add_command_line_args(self, args):
            port, client_port = get_socket_names(2, close=True)
            args.extend((writer.get_pydevconsole_file(), str(port[1]),
                         str(client_port[1])))
            self.port = port
            self.client_port = client_port

            server = SimpleXMLRPCServer(client_port)
            server.register_function(notify_finished, "NotifyFinished")
            start_in_daemon_thread(server.serve_forever, [])

            self.proxy = xmlrpclib.ServerProxy("http://%s:%s/" % port)

            return args

    class WriterThread(AbstractWriterThread):

        if IS_JYTHON:
            EXPECTED_RETURNCODE = 'any'

        @overrides(AbstractWriterThread.additional_output_checks)
        def additional_output_checks(self, stdout, stderr):
            print('output found: %s - %s' % (stdout, stderr))

        @overrides(AbstractWriterThread.write_dump_threads)
        def write_dump_threads(self):
            pass  # no-op (may be called on timeout).

        def execute_line(self, command, more=False):
            runner.proxy.execLine(command)
            assert server_queue.get(timeout=5.) == ('notify_finished', more)

        def hello(self):
            def _hello():
                try:
                    msg = runner.proxy.hello('ignored')
                    if msg is not None:
                        if isinstance(msg, (list, tuple)):
                            msg = next(iter(msg))
                        if msg.lower().startswith('hello'):
                            return True
                except:
                    # That's ok, communication still not ready.
                    pass

                return False

            wait_for_condition(_hello)

        def close(self):
            try:
                runner.proxy.close()
            except:
                # Ignore any errors on close.
                pass

        def connect_to_debugger(self, debugger_port):
            runner.proxy.connectToDebugger(debugger_port)

    runner = ConsoleRunner(tmpdir)
    writer = WriterThread()

    class CaseSetup(object):
        @contextmanager
        def check_console(self, **kwargs):
            for key, value in kwargs.items():
                assert hasattr(WriterThread, key)
                setattr(WriterThread, key, value)

            self.writer = writer

            args = runner.get_command_line()

            args = runner.add_command_line_args(args)

            if SHOW_OTHER_DEBUG_INFO:
                print('executing: %s' % (' '.join(args), ))
            try:
                with runner.run_process(args, writer) as dct_with_stdout_stder:
                    writer.get_stdout = lambda: ''.join(dct_with_stdout_stder[
                        'stdout'])
                    writer.get_stderr = lambda: ''.join(dct_with_stdout_stder[
                        'stderr'])

                    # Make sure communication is setup.
                    writer.hello()
                    yield writer
            finally:
                writer.log = []

            stdout = dct_with_stdout_stder['stdout']
            stderr = dct_with_stdout_stder['stderr']
            writer.additional_output_checks(''.join(stdout), ''.join(stderr))

    return CaseSetup()