+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
from __future__ import print_function
import arvados
class CollectionReader(object):
def __init__(self, collection_id):
- logger.debug('load collection %s', collection_id)
- collection = arvados.collection.CollectionReader(collection_id)
- filenames = [filename for filename in collection]
- if len(filenames) != 1:
- raise ValueError(
- "collection {} has {} files; need exactly one".format(
- collection_id, len(filenames)))
- self._reader = collection.open(filenames[0])
- self._label = "{}/{}".format(collection_id, filenames[0])
+ self._collection_id = collection_id
+ self._label = collection_id
+ self._reader = None
def __str__(self):
return self._label
def __iter__(self):
+ logger.debug('load collection %s', self._collection_id)
+ collection = arvados.collection.CollectionReader(self._collection_id)
+ filenames = [filename for filename in collection]
+ if len(filenames) == 1:
+ filename = filenames[0]
+ else:
+ filename = 'crunchstat.txt'
+ self._label = "{}/{}".format(self._collection_id, filename)
+ self._reader = collection.open(filename)
return iter(self._reader)
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ if self._reader:
+ self._reader.close()
+ self._reader = None
+
class LiveLogReader(object):
EOF = None
self._thread.join()
raise StopIteration
return line
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ pass