From 3f4315187195511647c06ce599a65b82f7474ade Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 11 Oct 2021 16:43:55 +0100 Subject: [PATCH 1/3] fixes 33097 Signed-off-by: Wenqi Li --- monai/utils/deprecated.py | 3 ++- tests/test_deprecated.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/monai/utils/deprecated.py b/monai/utils/deprecated.py index c66b60996b..7f159ba7c4 100644 --- a/monai/utils/deprecated.py +++ b/monai/utils/deprecated.py @@ -187,8 +187,9 @@ def _decorator(func): @wraps(func) def _wrapper(*args, **kwargs): - if new_name is not None and name in kwargs: + if new_name is not None and name in kwargs and new_name not in kwargs: # replace the deprecated arg "name" with "new_name" + # if name is specified and new_name is not speficified kwargs[new_name] = kwargs[name] binding = sig.bind(*args, **kwargs).arguments diff --git a/tests/test_deprecated.py b/tests/test_deprecated.py index 04f8173282..1d5810a989 100644 --- a/tests/test_deprecated.py +++ b/tests/test_deprecated.py @@ -245,7 +245,7 @@ def afoo4(a, b=None): return a self.assertEqual(afoo4(b=2), 2) - # self.assertRaises(DeprecatedError, lambda: afoo4(1, b=2)) + self.assertEqual(afoo4(a=1, b=2), 1) # prefers the new arg if __name__ == "__main__": From ccacb190312fcd068346d245bfbcba6347fd5bd6 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 11 Oct 2021 17:20:43 +0100 Subject: [PATCH 2/3] fixes typo Signed-off-by: Wenqi Li --- monai/utils/deprecated.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/utils/deprecated.py b/monai/utils/deprecated.py index 7f159ba7c4..c0a8f42003 100644 --- a/monai/utils/deprecated.py +++ b/monai/utils/deprecated.py @@ -189,7 +189,7 @@ def _decorator(func): def _wrapper(*args, **kwargs): if new_name is not None and name in kwargs and new_name not in kwargs: # replace the deprecated arg "name" with "new_name" - # if name is specified and new_name is not speficified + # if name is specified and new_name is not specified kwargs[new_name] = kwargs[name] binding = sig.bind(*args, **kwargs).arguments From dbcd5e650d6ed4ccc5cc87725a07cd1b86f503ef Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Mon, 11 Oct 2021 18:47:44 +0100 Subject: [PATCH 3/3] update based on comments Signed-off-by: Wenqi Li --- monai/utils/deprecated.py | 5 +++++ tests/test_deprecated.py | 2 ++ 2 files changed, 7 insertions(+) diff --git a/monai/utils/deprecated.py b/monai/utils/deprecated.py index c0a8f42003..4ae5991d9f 100644 --- a/monai/utils/deprecated.py +++ b/monai/utils/deprecated.py @@ -191,6 +191,11 @@ def _wrapper(*args, **kwargs): # replace the deprecated arg "name" with "new_name" # if name is specified and new_name is not specified kwargs[new_name] = kwargs[name] + try: + sig.bind(*args, **kwargs).arguments + except TypeError: + # multiple values for new_name using both args and kwargs + kwargs.pop(new_name, None) binding = sig.bind(*args, **kwargs).arguments positional_found = name in binding diff --git a/tests/test_deprecated.py b/tests/test_deprecated.py index 1d5810a989..9c7fe4f632 100644 --- a/tests/test_deprecated.py +++ b/tests/test_deprecated.py @@ -245,6 +245,8 @@ def afoo4(a, b=None): return a self.assertEqual(afoo4(b=2), 2) + # self.assertRaises(DeprecatedError, lambda: afoo4(1, b=2)) + self.assertEqual(afoo4(1, b=2), 1) # new name is in use self.assertEqual(afoo4(a=1, b=2), 1) # prefers the new arg