11308: Avoid Python2-inefficient list() operations.
authorTom Clegg <tom@curoverse.com>
Tue, 11 Apr 2017 00:22:42 +0000 (20:22 -0400)
committerTom Clegg <tom@curoverse.com>
Tue, 11 Apr 2017 01:53:19 +0000 (21:53 -0400)
sdk/python/arvados/arvfile.py
sdk/python/arvados/collection.py
sdk/python/arvados/commands/arv_copy.py
sdk/python/arvados/commands/put.py
sdk/python/arvados/stream.py
sdk/python/tests/run_test_server.py

index 180b1205638c6dcf9a4fb56d2665fd04e17a73af..c52c7727aef048cfb1d3af21e18589f590a9ec26 100644 (file)
@@ -1,6 +1,7 @@
 from __future__ import absolute_import
 from __future__ import division
 from future import standard_library
+from future.utils import listitems, listvalues
 standard_library.install_aliases()
 from builtins import range
 from builtins import object
@@ -590,7 +591,7 @@ class _BlockManager(object):
             # A WRITABLE block with its owner.closed() implies that it's
             # size is <= KEEP_BLOCK_SIZE/2.
             try:
-                small_blocks = [b for b in list(self._bufferblocks.values()) if b.state() == _BufferBlock.WRITABLE and b.owner.closed()]
+                small_blocks = [b for b in listvalues(self._bufferblocks) if b.state() == _BufferBlock.WRITABLE and b.owner.closed()]
             except AttributeError:
                 # Writable blocks without owner shouldn't exist.
                 raise UnownedBlockError()
@@ -703,7 +704,7 @@ class _BlockManager(object):
         self.repack_small_blocks(force=True, sync=True)
 
         with self.lock:
-            items = list(self._bufferblocks.items())
+            items = listitems(self._bufferblocks)
 
         for k,v in items:
             if v.state() != _BufferBlock.COMMITTED and v.owner:
index 5b3b8d5f57e738432215be1680c2ee48c0fedf81..5008450eded4c9414044115ebad7b42c619cbcdf 100644 (file)
@@ -1,4 +1,5 @@
 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
@@ -427,7 +428,7 @@ class ResumableCollectionWriter(CollectionWriter):
         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:
@@ -681,7 +682,7 @@ class RichCollectionBase(CollectionBase):
         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:
@@ -692,7 +693,7 @@ class RichCollectionBase(CollectionBase):
     @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):
@@ -724,17 +725,17 @@ class RichCollectionBase(CollectionBase):
     @synchronized
     def keys(self):
         """Get a list of names of files and collections directly contained in this collection."""
-        return list(self._items.keys())
+        return viewkeys(self._items)
 
     @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`."""
@@ -767,7 +768,7 @@ class RichCollectionBase(CollectionBase):
             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):
@@ -1125,7 +1126,7 @@ class RichCollectionBase(CollectionBase):
     @synchronized
     def flush(self):
         """Flush bufferblocks to Keep."""
-        for e in list(self.values()):
+        for e in listvalues(self):
             e.flush()
 
 
index c0d05b353c43676d61e92c4d2849ab6907884bfa..8242e10a088a43a7d941c70f700dea65abab2ca2 100755 (executable)
@@ -16,6 +16,7 @@
 
 from __future__ import division
 from future import standard_library
+from future.utils import listvalues
 standard_library.install_aliases()
 from past.builtins import basestring
 from builtins import object
@@ -155,7 +156,7 @@ def main():
         abort("cannot copy object {} of type {}".format(args.object_uuid, t))
 
     # Clean up any outstanding temp git repositories.
-    for d in list(local_repo_dir.values()):
+    for d in listvalues(local_repo_dir):
         shutil.rmtree(d, ignore_errors=True)
 
     # If no exception was thrown and the response does not have an
index 400d57d0498663540231cd25f867d9da363b1f50..08ed5763685a61bc347ab1ddad6313c1f3b98a0e 100644 (file)
@@ -1,4 +1,5 @@
 from __future__ import division
+from future.utils import listitems, listvalues
 from builtins import str
 from builtins import object
 import argparse
@@ -508,7 +509,7 @@ class ArvPutUploadJob(object):
         Recursively get the total size of the collection
         """
         size = 0
-        for item in list(collection.values()):
+        for item in listvalues(collection):
             if isinstance(item, arvados.collection.Collection) or isinstance(item, arvados.collection.Subcollection):
                 size += self._collection_size(item)
             else:
@@ -700,7 +701,7 @@ class ArvPutUploadJob(object):
     def collection_file_paths(self, col, path_prefix='.'):
         """Return a list of file paths by recursively go through the entire collection `col`"""
         file_paths = []
-        for name, item in list(col.items()):
+        for name, item in listitems(col):
             if isinstance(item, arvados.arvfile.ArvadosFile):
                 file_paths.append(os.path.join(path_prefix, name))
             elif isinstance(item, arvados.collection.Subcollection):
@@ -777,7 +778,7 @@ class ArvPutUploadJob(object):
                     locators.append(loc)
                 return locators
         elif isinstance(item, arvados.collection.Collection):
-            l = [self._datablocks_on_item(x) for x in list(item.values())]
+            l = [self._datablocks_on_item(x) for x in listvalues(item)]
             # Fast list flattener method taken from:
             # http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python
             return [loc for sublist in l for loc in sublist]
@@ -981,7 +982,7 @@ def main(arguments=None, stdout=sys.stdout, stderr=sys.stderr):
         if not output.endswith('\n'):
             stdout.write('\n')
 
-    for sigcode, orig_handler in list(orig_signal_handlers.items()):
+    for sigcode, orig_handler in listitems(orig_signal_handlers):
         signal.signal(sigcode, orig_handler)
 
     if status != 0:
index b68685e374d313d5337bbed80bbadd2e307ba7b5..86ae8a59efd53e8bb59743643207896b6db26418 100644 (file)
@@ -1,5 +1,6 @@
 from __future__ import print_function
 from __future__ import absolute_import
+from future.utils import listvalues
 from builtins import object
 import collections
 import hashlib
@@ -63,7 +64,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]
@@ -98,5 +99,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'
index 5aff52b3c3c206a68ea0a7e1e156d795860301d9..6d9ac06f40866da41fbc2973b7917d8ea5348e3c 100644 (file)
@@ -1,5 +1,6 @@
 from __future__ import print_function
 from __future__ import division
+from future.utils import viewkeys
 from builtins import str
 from builtins import range
 import argparse