From 0f24167b96c94c64286d6eb58e0c99e453555c2b Mon Sep 17 00:00:00 2001 From: Dennis Whitlow Date: Tue, 15 Oct 2024 23:04:15 -0700 Subject: [PATCH 1/2] fix python 3.12 compatability issue --- src/pymdgen/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pymdgen/__init__.py b/src/pymdgen/__init__.py index 33afaf9..44b3b81 100644 --- a/src/pymdgen/__init__.py +++ b/src/pymdgen/__init__.py @@ -36,8 +36,14 @@ def getargspec(func): decorated functions """ if hasattr(func, "__wrapped__"): - return inspect.getargspec(func.__wrapped__) - return inspect.getargspec(func) + func = func.__wrapped__ + sig = inspect.signature(func) + return [ + list(sig.parameters), + None, + None, + [param.default for param in sig.parameters.values() if param.default != inspect.Parameter.empty], + ] def doc_func(name, func, section_level=4): From f20d87c0d40978046e35ae8a977f2d60d7bae9e9 Mon Sep 17 00:00:00 2001 From: Dennis Whitlow Date: Thu, 24 Oct 2024 16:30:27 -0700 Subject: [PATCH 2/2] add pytest for getargspec --- src/pymdgen/test_getargspec.py | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/pymdgen/test_getargspec.py diff --git a/src/pymdgen/test_getargspec.py b/src/pymdgen/test_getargspec.py new file mode 100644 index 0000000..278f2a8 --- /dev/null +++ b/src/pymdgen/test_getargspec.py @@ -0,0 +1,45 @@ +import inspect +from functools import wraps +from pymdgen import getargspec # Import your __init__.py module + + +def test_getargspec_simple_function(): + def my_function(a, b, c=10): + pass + expected_result = [ + ['a', 'b', 'c'], + None, + None, + [10,], + ] + assert getargspec(my_function) == expected_result + +def test_getargspec_args_kwargs(): + def my_function(a, b, *args, **kwargs): + pass + expected_result = [ + ['a', 'b', 'args', 'kwargs'], + None, + None, + [], + ] + assert getargspec(my_function) == expected_result + +def test_getargspec_decorated_function(): + def my_decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + return wrapper + + @my_decorator + def my_function(a, b, c=20): + pass + + expected_result = [ + ['a', 'b', 'c'], + None, + None, + [20,], + ] + assert getargspec(my_function) == expected_result \ No newline at end of file