/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/iterablefile.py

  • Committer: Jelmer Vernooij
  • Date: 2017-06-10 16:40:42 UTC
  • mfrom: (6653.6.7 rename-controldir)
  • mto: This revision was merged to the branch mainline in revision 6690.
  • Revision ID: jelmer@jelmer.uk-20170610164042-zrxqgy2htyduvke2
MergeĀ rename-controldirĀ branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
 
18
from __future__ import absolute_import
18
19
 
19
20
class IterableFileBase(object):
20
21
    """Create a file-like object from any iterable"""
22
23
    def __init__(self, iterable):
23
24
        object.__init__(self)
24
25
        self._iter = iterable.__iter__()
25
 
        self._buffer = ""
 
26
        self._buffer = b""
26
27
        self.done = False
27
28
 
28
29
    def read_n(self, length):
66
67
        result = self._buffer
67
68
        while result_length(result) is None:
68
69
            try:
69
 
                result += self._iter.next()
 
70
                result += next(self._iter)
70
71
            except StopIteration:
71
72
                self.done = True
72
 
                self._buffer = ""
 
73
                self._buffer = b""
73
74
                return result
74
75
        output_length = result_length(result)
75
76
        self._buffer = result[output_length:]
109
110
    def _make_iterator(self):
110
111
        while not self._file_base.done:
111
112
            self._check_closed()
112
 
            result = self._file_base.read_to('\n')
113
 
            if result != '':
 
113
            result = self._file_base.read_to(b'\n')
 
114
            if result != b'':
114
115
                yield result
115
116
 
116
117
    def _check_closed(self):
141
142
        """
142
143
        self._check_closed()
143
144
 
144
 
    def next(self):
 
145
    def __next__(self):
145
146
        """Implementation of the iterator protocol's next()
146
147
 
147
148
        >>> f = IterableFile(['This \\n', 'is ', 'a ', 'test.'])
148
 
        >>> f.next()
 
149
        >>> next(f)
149
150
        'This \\n'
150
151
        >>> f.close()
151
 
        >>> f.next()
 
152
        >>> next(f)
152
153
        Traceback (most recent call last):
153
154
        ValueError: File is closed.
154
155
        >>> f = IterableFile(['This \\n', 'is ', 'a ', 'test.\\n'])
155
 
        >>> f.next()
 
156
        >>> next(f)
156
157
        'This \\n'
157
 
        >>> f.next()
 
158
        >>> next(f)
158
159
        'is a test.\\n'
159
 
        >>> f.next()
 
160
        >>> next(f)
160
161
        Traceback (most recent call last):
161
162
        StopIteration
162
163
        """
163
164
        self._check_closed()
164
 
        return self._iter.next()
 
165
        return next(self._iter)
 
166
 
 
167
    next = __next__
165
168
 
166
169
    def __iter__(self):
167
170
        """
224
227
        Traceback (most recent call last):
225
228
        ValueError: File is closed.
226
229
        """
227
 
        return self.read_to('\n', size)
 
230
        return self.read_to(b'\n', size)
228
231
 
229
232
    def readlines(self, sizehint=None):
230
233
        """
240
243
        lines = []
241
244
        while True:
242
245
            line = self.readline()
243
 
            if line == "":
 
246
            if line == b"":
244
247
                return lines
245
248
            if sizehint is None:
246
249
                lines.append(line)