spyder
spyder copied to clipboard
Wrapped function signature not updating in Helper pane
Issue Report Checklist
- [x] Searched the issues page for similar reports
- [x] Read the relevant sections of the Spyder Troubleshooting Guide and followed its advice
- [x] Reproduced the issue after updating with
conda update spyder
(orpip
, if not using Anaconda) - [x] Could not reproduce inside
jupyter qtconsole
(if console-related) - [x] Tried basic troubleshooting (if a bug/error)
- [x] Restarted Spyder
- [ ] Reset preferences with
spyder --reset
- [x] Reinstalled the latest version of Anaconda
- [x] Tried the other applicable steps from the Troubleshooting Guide
- [x] Completed the Problem Description, Steps to Reproduce and Version sections below
Problem Description
functools.wraps
updates some of the wrapped function's magic functions so that the new function preserves the name, docstrings, and signature of the old function. It looks like the "Helper" pane does not pick up the wrapped function's updated singature and just shows it as (*args, **kwargs)
. However, running help(new_function)
on the console shows the correct signature. All other related attributes work as expected.
What steps reproduce the problem?
- Define a function.
- Wrap it using
functools.wraps
. - New function's signature in Helper pane is wrong.
This can be quickly checked using the following code:
import functools
def foo(a, /, b=2, *, c=3):
"""This is a docstring."""
return (a, b, c)
def wrapper(func):
"""Do nothing."""
@functools.wraps(func)
def new_func(*args, **kwargs):
return func(*args, **kwargs)
return new_func
bar = wrapper(foo)
What is the expected output? What do you see instead?
On the console, help(bar)
prints:
foo(a, /, b=2, *, c=3)
This is a docstring.
which is the expected output, but the Helper pane shows the wrong signature:
Versions
- Spyder version: 5.1.5
- Python version: 3.9.7
- Qt version: 5.12.9
- PyQt version: N/A
- Operating System name/version: Ubuntu 20.04.4 LTS
Dependencies
# Mandatory:
atomicwrites >=1.2.0 : 1.4.0 (OK)
chardet >=2.0.0 : 4.0.0 (OK)
cloudpickle >=0.5.0 : 2.0.0 (OK)
cookiecutter >=1.6.0 : 1.7.2 (OK)
diff_match_patch >=20181111 : 20200713 (OK)
intervaltree >=3.0.2 : 3.1.0 (OK)
IPython >=7.6.0 : 7.29.0 (OK)
jedi >=0.17.2;<0.19.0 : 0.18.0 (OK)
jsonschema >=3.2.0 : 3.2.0 (OK)
keyring >=17.0.0 : 23.1.0 (OK)
nbconvert >=4.0 : 6.1.0 (OK)
numpydoc >=0.6.0 : 1.1.0 (OK)
parso >=0.7.0;<0.9.0 : 0.8.2 (OK)
pexpect >=4.4.0 : 4.8.0 (OK)
pickleshare >=0.4 : 0.7.5 (OK)
psutil >=5.3 : 5.8.0 (OK)
pygments >=2.0 : 2.10.0 (OK)
pylint >=2.5.0;<2.10.0 : 2.9.6 (OK)
pyls_spyder >=0.4.0 : 0.4.0 (OK)
pylsp >=1.2.2;<1.3.0 : 1.2.4 (OK)
pylsp_black >=1.0.0 : None (OK)
qdarkstyle =3.0.2 : 3.0.2 (OK)
qstylizer >=0.1.10 : 0.1.10 (OK)
qtawesome >=1.0.2 : 1.0.2 (OK)
qtconsole >=5.1.0 : 5.1.1 (OK)
qtpy >=1.5.0 : 1.10.0 (OK)
rtree >=0.9.7 : 0.9.7 (OK)
setuptools >=49.6.0 : 58.0.4 (OK)
sphinx >=0.6.6 : 4.4.0 (OK)
spyder_kernels >=2.1.1;<2.2.0 : 2.1.3 (OK)
textdistance >=4.2.0 : 4.2.1 (OK)
three_merge >=0.1.1 : 0.1.1 (OK)
watchdog >=0.10.3 : 2.1.3 (OK)
xdg >=0.26 : 0.27 (OK)
zmq >=17 : 22.2.1 (OK)
# Optional:
cython >=0.21 : 0.29.24 (OK)
matplotlib >=2.0.0 : 3.4.3 (OK)
numpy >=1.7 : 1.20.3 (OK)
pandas >=1.1.1 : 1.3.4 (OK)
scipy >=0.17.0 : 1.7.1 (OK)
sympy >=0.7.3 : 1.9 (OK)
@ccordoba12 just pinging you in case you might have missed it, seeing as this is the oldest issue that has no replies and no badges.
Hi @nikfilippas thank you for the feedback! I was able to reproduce this. We will check into this in a future release :+1: