From 9facc2aeba6770ee80730001ca66bdaec8bde738 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Thu, 11 Sep 2014 14:22:12 -0400 Subject: [PATCH] 3147: PySDK StreamReader instantiates a KeepClient late. Similarly with API client instantiation in KeepClient, this helps with testing. Refs #3693. --- sdk/python/arvados/stream.py | 5 ++--- sdk/python/tests/test_stream.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 sdk/python/tests/test_stream.py diff --git a/sdk/python/arvados/stream.py b/sdk/python/arvados/stream.py index e13e1a6eff..b98937fe64 100644 --- a/sdk/python/arvados/stream.py +++ b/sdk/python/arvados/stream.py @@ -206,9 +206,6 @@ class StreamReader(object): self._stream_name = None self._data_locators = [] self._files = collections.OrderedDict() - - if keep is None: - keep = KeepClient() self._keep = keep streamoffset = 0L @@ -261,6 +258,8 @@ class StreamReader(object): """Read up to 'size' bytes from the stream, starting at 'start'""" if size == 0: return '' + if self._keep is None: + self._keep = KeepClient() data = '' for locator, blocksize, segmentoffset, segmentsize in locators_and_ranges(self._data_locators, start, size): data += self._keep.get(locator)[segmentoffset:segmentoffset+segmentsize] diff --git a/sdk/python/tests/test_stream.py b/sdk/python/tests/test_stream.py new file mode 100644 index 0000000000..060a26a8ac --- /dev/null +++ b/sdk/python/tests/test_stream.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import unittest + +import arvados +from arvados import StreamReader, StreamFileReader + +import run_test_server + +class StreamReaderTestCase(unittest.TestCase): + API_COLLECTIONS = run_test_server.fixture('collections') + + def manifest_for(self, coll_name): + return self.API_COLLECTIONS[coll_name]['manifest_text'] + + def test_manifest_text_without_keep_client(self): + mtext = self.manifest_for('multilevel_collection_1') + for line in mtext.rstrip('\n').split('\n'): + reader = StreamReader(line.split()) + self.assertEqual(line + '\n', reader.manifest_text()) + + +if __name__ == '__main__': + unittest.main() -- 2.30.2