def handleConnection(self, transport): transport = LineBuffer(transport) try: for line in transport: transport.writeLine(line) except twisted.internet.error.ConnectionClosed: return
def test_truncateDelimiter(self): """ C{readLine} returns a full line without delimiter. """ io = StringIO("Hello world\r\n") wrapper = LineBuffer(io) self.assertEquals(wrapper.readLine(), "Hello world")
def test_buffer(self): """ If C{readLine} cannot immediately get a full line from C{transport.read}, it will buffer that data until the next read. """ transport = BoringTransport(["a", "b\r\n"]) wrapper = LineBuffer(transport) self.assertEquals(wrapper.readLine(), "ab")
def test_multipleLines(self): """ Each call to C{readLine} returns the next line received. """ transport = BoringTransport(["a\r\n", "b\r\n"]) wrapper = LineBuffer(transport) self.assertEquals(wrapper.readLine(), "a") self.assertEquals(wrapper.readLine(), "b")
def test_writeLineWithDelimiter(self): """ C{writeLine} honors the specified delimiter. """ io = StringIO() wrapper = LineBuffer(io, delimiter="Woot,") wrapper.writeLine("foo") wrapper.writeLine("bar") self.assertEquals(io.getvalue(), "fooWoot,barWoot,")
def test_delimiter(self): """ The delimiter can be whatever you want it to be. """ transport = BoringTransport(["helloxtharx", "yesx"]) wrapper = LineBuffer(transport, delimiter="x") self.assertEquals(wrapper.readLine(), "hello") self.assertEquals(wrapper.readLine(), "thar") self.assertEquals(wrapper.readLine(), "yes")
def test_writeLine(self): """ C{writeLine} is a convenience method for writing some data followed by a delimiter. """ io = StringIO() wrapper = LineBuffer(io) wrapper.writeLine("foo") wrapper.writeLine("bar") self.assertEquals(io.getvalue(), "foo\r\nbar\r\n")
def test_multipleLinesInOnePacket(self): """ C{readLine} handles multiple lines in one C{transport.read} result by only returning the first and saving the rest for the next call. """ transport = BoringTransport(["foo\r\nbar\r\nbaz\r\n", "quux\r\n"]) wrapper = LineBuffer(transport) self.assertEquals(wrapper.readLine(), "foo") self.assertEquals(wrapper.readLine(), "bar") self.assertEquals(wrapper.readLine(), "baz") self.assertEquals(wrapper.readLine(), "quux")
def test_iterate(self): """ The L{LineBuffer} is iterable, and acts as an infinite series of calls to C{readLine}. """ transport = BoringTransport(["a\r\nb\r\nc\r\nd"]) wrapper = LineBuffer(transport) iterable = iter(wrapper) self.assertEquals(iterable.next(), "a") self.assertEquals(iterable.next(), "b") self.assertEquals(iterable.next(), "c")
def handleConnection(self, transport): transport = LineBuffer(transport) self.clients.append(transport) try: try: for line in transport: for client in self.clients: if client is not transport: client.writeLine(line) finally: self.clients.remove(transport) except ConnectionClosed: return