From 0988acb472849dc08d576ee40493e70bde2132ca Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Fri, 7 Aug 2015 03:35:42 +0000 Subject: [PATCH] 6844: Do not use inspect.getcallargs: it leaks memory. Passing num_retries as a positional argument is no longer supported. --- sdk/python/arvados/arvfile.py | 4 ++-- sdk/python/arvados/retry.py | 3 +-- sdk/python/tests/test_retry.py | 6 ++++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/sdk/python/arvados/arvfile.py b/sdk/python/arvados/arvfile.py index 7cd64aa16e..ce0e5e3564 100644 --- a/sdk/python/arvados/arvfile.py +++ b/sdk/python/arvados/arvfile.py @@ -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): diff --git a/sdk/python/arvados/retry.py b/sdk/python/arvados/retry.py index e4ad6440a7..d8f5317d2c 100644 --- a/sdk/python/arvados/retry.py +++ b/sdk/python/arvados/retry.py @@ -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 diff --git a/sdk/python/tests/test_retry.py b/sdk/python/tests/test_retry.py index 4f147ba54c..c41c42e762 100644 --- a/sdk/python/tests/test_retry.py +++ b/sdk/python/tests/test_retry.py @@ -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)) -- 2.39.5