6844: Do not use inspect.getcallargs: it leaks memory. Passing num_retries as a posit...
authorTom Clegg <tom@clinicalfuture.com>
Fri, 7 Aug 2015 03:35:42 +0000 (03:35 +0000)
committerTom Clegg <tom@curoverse.com>
Fri, 7 Aug 2015 05:40:49 +0000 (01:40 -0400)
sdk/python/arvados/arvfile.py
sdk/python/arvados/retry.py
sdk/python/tests/test_retry.py

index 7cd64aa16e46d415516f1d6179df2a7c3fb6df2f..ce0e5e3564559c707825d9acad5717a3a5e42be0 100644 (file)
@@ -129,7 +129,7 @@ class ArvadosFileReaderBase(_FileLikeObjectBase):
     @_FileLikeObjectBase._before_close
     @retry_method
     def decompress(self, decompress, size, num_retries=None):
-        for segment in self.readall(size, num_retries):
+        for segment in self.readall(size, num_retries=num_retries):
             data = decompress(segment)
             if data:
                 yield data
@@ -1070,7 +1070,7 @@ class ArvadosFileWriter(ArvadosFileReader):
     @retry_method
     def writelines(self, seq, num_retries=None):
         for s in seq:
-            self.write(s, num_retries)
+            self.write(s, num_retries=num_retries)
 
     @_FileLikeObjectBase._before_close
     def truncate(self, size=None):
index e4ad6440a7130e0ff0b4891d3b516cc4a7531c9d..d8f5317d2c4c160c833339929302edaae679d6f5 100644 (file)
@@ -148,8 +148,7 @@ def retry_method(orig_func):
     """
     @functools.wraps(orig_func)
     def num_retries_setter(self, *args, **kwargs):
-        arg_vals = inspect.getcallargs(orig_func, self, *args, **kwargs)
-        if arg_vals['num_retries'] is None:
+        if kwargs.get('num_retries') is None:
             kwargs['num_retries'] = self.num_retries
         return orig_func(self, *args, **kwargs)
     return num_retries_setter
index 4f147ba54c01ab3975addb8f66386dee9c61656d..c41c42e762cd5e8f856444926716b0c274735bb5 100644 (file)
@@ -201,8 +201,10 @@ class RetryMethodTestCase(unittest.TestCase):
             return (a, num_retries, z)
 
 
-    def test_positional_arg_passed(self):
-        self.assertEqual((3, 2, 0), self.Tester().check(3, 2))
+    def test_positional_arg_raises(self):
+        # unsupported use -- make sure we raise rather than ignore
+        with self.assertRaises(TypeError):
+            self.assertEqual((3, 2, 0), self.Tester().check(3, 2))
 
     def test_keyword_arg_passed(self):
         self.assertEqual((4, 3, 0), self.Tester().check(num_retries=3, a=4))