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
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
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)
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()
async def capybara(): # annotated as async def in typeshed assert_is_value( open_connection(), GenericValue( Awaitable, [ SequenceIncompleteValue( tuple, [TypedValue(StreamReader), TypedValue(StreamWriter)] ) ], ), ) return 42
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
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')