+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
from __future__ import absolute_import
+from future.utils import listitems, listvalues, viewkeys
from builtins import str
from past.builtins import basestring
from builtins import object
def portable_data_hash(self):
stripped = self.stripped_manifest().encode()
- return hashlib.md5(stripped).hexdigest() + '+' + str(len(stripped))
+ return '{}+{}'.format(hashlib.md5(stripped).hexdigest(), len(stripped))
def manifest_text(self):
self.finish_current_stream()
return writer
def check_dependencies(self):
- for path, orig_stat in list(self._dependencies.items()):
+ for path, orig_stat in listitems(self._dependencies):
if not S_ISREG(orig_stat[ST_MODE]):
raise errors.StaleWriterStateError("{} not file".format(path))
try:
if value == self._committed:
return
if value:
- for k,v in list(self._items.items()):
+ for k,v in listitems(self._items):
v.set_committed(True)
self._committed = True
else:
@synchronized
def __iter__(self):
"""Iterate over names of files and collections contained in this collection."""
- return iter(list(self._items.keys()))
+ return iter(viewkeys(self._items))
@synchronized
def __getitem__(self, k):
@synchronized
def keys(self):
"""Get a list of names of files and collections directly contained in this collection."""
- return list(self._items.keys())
+ return self._items.keys()
@synchronized
def values(self):
"""Get a list of files and collection objects directly contained in this collection."""
- return list(self._items.values())
+ return listvalues(self._items)
@synchronized
def items(self):
"""Get a list of (name, object) tuples directly contained in this collection."""
- return list(self._items.items())
+ return listitems(self._items)
def exists(self, path):
"""Test if there is a file or collection at `path`."""
item.remove(pathcomponents[1])
def _clonefrom(self, source):
- for k,v in list(source.items()):
+ for k,v in listitems(source):
self._items[k] = v.clone(self, k)
def clone(self):
return self._portable_data_hash
else:
stripped = self.portable_manifest_text().encode()
- return hashlib.md5(stripped).hexdigest() + '+' + str(len(stripped))
+ return '{}+{}'.format(hashlib.md5(stripped).hexdigest(), len(stripped))
@synchronized
def subscribe(self, callback):
@synchronized
def flush(self):
"""Flush bufferblocks to Keep."""
- for e in list(self.values()):
+ for e in listvalues(self):
e.flush()