Read a line from a channel.
(self, channel, timeout=None)
| 102 | return ret |
| 103 | |
| 104 | def readline_channel(self, channel, timeout=None): |
| 105 | """Read a line from a channel.""" |
| 106 | if timeout is None: |
| 107 | timeout = float("inf") |
| 108 | start = time.time() |
| 109 | while self.is_open() and time.time() - start < timeout: |
| 110 | # Always try to drain the channel first |
| 111 | if channel in self._channels: |
| 112 | data = self._channels[channel] |
| 113 | if self.newline in data: |
| 114 | index = data.find(self.newline) |
| 115 | ret = data[:index] |
| 116 | data = data[index+1:] |
| 117 | if data: |
| 118 | self._channels[channel] = data |
| 119 | else: |
| 120 | del self._channels[channel] |
| 121 | return ret |
| 122 | |
| 123 | if channel in self._closed_channels: |
| 124 | if channel in self._channels: |
| 125 | ret = self._channels[channel] |
| 126 | del self._channels[channel] |
| 127 | return ret |
| 128 | return b"" if self.binary else "" |
| 129 | |
| 130 | self.update(timeout=(timeout - time.time() + start)) |
| 131 | |
| 132 | def write_channel(self, channel, data): |
| 133 | """Write data to a channel.""" |