Example #1
0
 def client():
     reader, writer = yield from streams.open_connection(
         '127.0.0.1', 12345, loop=self.loop)
     # send a line
     writer.write(b"hello world!\n")
     # read it back
     msgback = yield from reader.readline()
     writer.close()
     return msgback
Example #2
0
 def client():
     reader, writer = yield from streams.open_connection('127.0.0.1',
                                                         12345,
                                                         loop=self.loop)
     # send a line
     writer.write(b"hello world!\n")
     # read it back
     msgback = yield from reader.readline()
     writer.close()
     return msgback
Example #3
0
    def test_open_connection_error(self):
        with test_utils.run_test_server() as httpd:
            f = streams.open_connection(*httpd.address, loop=self.loop)
            reader, writer = self.loop.run_until_complete(f)
            writer._protocol.connection_lost(ZeroDivisionError())
            f = reader.read()
            with self.assertRaises(ZeroDivisionError):
                self.loop.run_until_complete(f)

            writer.close()
            test_utils.run_briefly(self.loop)
Example #4
0
    def test_open_connection_error(self):
        with test_utils.run_test_server() as httpd:
            f = streams.open_connection(*httpd.address, loop=self.loop)
            reader, writer = self.loop.run_until_complete(f)
            writer._protocol.connection_lost(ZeroDivisionError())
            f = reader.read()
            with self.assertRaises(ZeroDivisionError):
                self.loop.run_until_complete(f)

            writer.close()
            test_utils.run_briefly(self.loop)
Example #5
0
    def test_open_connection(self):
        with test_utils.run_test_server() as httpd:
            f = streams.open_connection(*httpd.address, loop=self.loop)
            reader, writer = self.loop.run_until_complete(f)
            writer.write(b'GET / HTTP/1.0\r\n\r\n')
            f = reader.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            f = reader.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))

            writer.close()
Example #6
0
    def test_open_connection(self):
        with test_utils.run_test_server() as httpd:
            f = streams.open_connection(*httpd.address, loop=self.loop)
            reader, writer = self.loop.run_until_complete(f)
            writer.write(b'GET / HTTP/1.0\r\n\r\n')
            f = reader.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            f = reader.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))

            writer.close()
Example #7
0
 async def capybara():
     # annotated as async def in typeshed
     assert_is_value(
         open_connection(),
         GenericValue(
             Awaitable,
             [
                 SequenceIncompleteValue(
                     tuple, [TypedValue(StreamReader), TypedValue(StreamWriter)]
                 )
             ],
         ),
     )
     return 42
Example #8
0
 def _get_stream(self):
     """get an unused stream"""
     stream = None
     for stream_, open in self.streams.items():
         reader, writer = stream_
         if writer.transport._closing:
             del self.streams[stream_]
         elif open:
             stream = stream_
             break
     if stream is None:
         stream = yield from streams.open_connection(self.host, self.port)
     self.streams[stream] = False
     return stream
Example #9
0
    def test_open_connection_no_loop_ssl(self):
        with test_utils.run_test_server(use_ssl=True) as httpd:
            try:
                events.set_event_loop(self.loop)
                f = streams.open_connection(*httpd.address,
                                            ssl=test_utils.dummy_ssl_context())
                reader, writer = self.loop.run_until_complete(f)
            finally:
                events.set_event_loop(None)
            writer.write(b'GET / HTTP/1.0\r\n\r\n')
            f = reader.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))

            writer.close()
Example #10
0
    def test_open_connection_no_loop_ssl(self):
        with test_utils.run_test_server(use_ssl=True) as httpd:
            try:
                events.set_event_loop(self.loop)
                f = streams.open_connection(*httpd.address,
                                            ssl=test_utils.dummy_ssl_context())
                reader, writer = self.loop.run_until_complete(f)
            finally:
                events.set_event_loop(None)
            writer.write(b'GET / HTTP/1.0\r\n\r\n')
            f = reader.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))

            writer.close()
    def run(self):
        """
        The main coroutine.
        """
        # Open parent socket.
        stream_reader, self._stream_writer = yield from open_connection(sock=self.parent_socket)

        # Run receiver loop.
        @asyncio.coroutine
        def receiver_loop():
            while True:
                line = yield from stream_reader.readline()
                self.handle_packet_from_process(json.loads(line.decode('utf-8')))
        asyncio.async(receiver_loop())

        try:
            # Start AMP server
            def amp_factory():
                protocol = DebuggerAMPServerProtocol(self, lambda: self._connected_protocols.remove(protocol))
                self._connected_protocols.append(protocol)
                return protocol

            server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
            server.bind('/tmp/python-debugger')
            self.amp_server = yield from loop.create_server(amp_factory, sock=server)

            # Start subprocess in fork
            pid = os.fork()
            if pid == 0:
                os.execv('/usr/bin/python', ['python', 'debugger_bootstrap.py',
                                    str(self.child_socket.fileno()), self.pythonfile ])
            else:
                self.child_socket.close()
                pid, status = yield from loop.run_in_executor(None, lambda:os.waitpid(pid, 0))

        finally:
            # Close socket
            server.close()
            print('removing socket')
            os.remove('/tmp/python-debugger')