equal
deleted
inserted
replaced
868 yield chunk[pos:end] |
868 yield chunk[pos:end] |
869 pos = end |
869 pos = end |
870 else: |
870 else: |
871 yield chunk |
871 yield chunk |
872 self.iter = splitbig(in_iter) |
872 self.iter = splitbig(in_iter) |
873 self._queue = [] |
873 self._queue = deque() |
874 |
874 |
875 def read(self, l): |
875 def read(self, l): |
876 """Read L bytes of data from the iterator of chunks of data. |
876 """Read L bytes of data from the iterator of chunks of data. |
877 Returns less than L bytes if the iterator runs dry.""" |
877 Returns less than L bytes if the iterator runs dry.""" |
878 left = l |
878 left = l |
879 buf = '' |
879 buf = '' |
880 queue = deque(self._queue) |
880 queue = self._queue |
881 while left > 0: |
881 while left > 0: |
882 # refill the queue |
882 # refill the queue |
883 if not queue: |
883 if not queue: |
884 target = 2**18 |
884 target = 2**18 |
885 for chunk in self.iter: |
885 for chunk in self.iter: |
895 if left < 0: |
895 if left < 0: |
896 queue.appendleft(chunk[left:]) |
896 queue.appendleft(chunk[left:]) |
897 buf += chunk[:left] |
897 buf += chunk[:left] |
898 else: |
898 else: |
899 buf += chunk |
899 buf += chunk |
900 self._queue = list(queue) |
|
901 |
900 |
902 return buf |
901 return buf |
903 |
902 |
904 def filechunkiter(f, size=65536, limit=None): |
903 def filechunkiter(f, size=65536, limit=None): |
905 """Create a generator that produces the data in the file size |
904 """Create a generator that produces the data in the file size |