From 3b3120cd942d435ae11f47485214d9d3f857c179 Mon Sep 17 00:00:00 2001 From: Zep-Tepi <130099910+Zep-Tepi@users.noreply.github.com> Date: Sat, 2 Nov 2024 19:43:54 -0700 Subject: [PATCH] fix python 3.12 compatability issue (#20) * fix python 3.12 compatability issue * add pytest for getargspec --------- Co-authored-by: Matt Griswold --- src/pymdgen/__init__.py | 12 +++++++-- src/pymdgen/test_getargspec.py | 45 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/pymdgen/test_getargspec.py diff --git a/src/pymdgen/__init__.py b/src/pymdgen/__init__.py index 184a0de..847ed58 100644 --- a/src/pymdgen/__init__.py +++ b/src/pymdgen/__init__.py @@ -36,8 +36,16 @@ def getargspec(func): decorated functions """ if hasattr(func, "__wrapped__"): - return inspect.getfullargspec(func.__wrapped__) - return inspect.getfullargspec(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): 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