Merge branch '18947-githttpd'
[arvados.git] / sdk / python / arvados / stream.py
index 59558162b41891d77ae148b9f407d2359035fb5f..edfb7711b829a100688f82bff203ebfec986096d 100644 (file)
@@ -1,5 +1,10 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
 from __future__ import print_function
 from __future__ import absolute_import
+from future.utils import listvalues
 from builtins import object
 import collections
 import hashlib
@@ -12,7 +17,7 @@ import copy
 from ._ranges import locators_and_ranges, Range
 from .arvfile import StreamFileReader
 from arvados.retry import retry_method
-from .keep import *
+from arvados.keep import *
 from . import config
 from . import errors
 from ._normalize_stream import normalize_stream
@@ -63,7 +68,7 @@ class StreamReader(object):
         return self._files
 
     def all_files(self):
-        return list(self._files.values())
+        return listvalues(self._files)
 
     def size(self):
         n = self._data_locators[-1]
@@ -80,13 +85,13 @@ class StreamReader(object):
     def readfrom(self, start, size, num_retries=None):
         """Read up to 'size' bytes from the stream, starting at 'start'"""
         if size == 0:
-            return ''
+            return b''
         if self._keep is None:
             self._keep = KeepClient(num_retries=self.num_retries)
         data = []
         for lr in locators_and_ranges(self._data_locators, start, size):
             data.append(self._keepget(lr.locator, num_retries=num_retries)[lr.segment_offset:lr.segment_offset+lr.segment_size])
-        return ''.join(data)
+        return b''.join(data)
 
     def manifest_text(self, strip=False):
         manifest_text = [self.name().replace(' ', '\\040')]
@@ -98,5 +103,5 @@ class StreamReader(object):
             manifest_text.extend([d.locator for d in self._data_locators])
         manifest_text.extend([' '.join(["{}:{}:{}".format(seg.locator, seg.range_size, f.name.replace(' ', '\\040'))
                                         for seg in f.segments])
-                              for f in list(self._files.values())])
+                              for f in listvalues(self._files)])
         return ' '.join(manifest_text) + '\n'