spyder-ide / spyder

Official repository for Spyder - The Scientific Python Development Environment
https://www.spyder-ide.org
MIT License
8.22k stars 1.59k forks source link

Wrapped function signature not updating in Helper pane #17457

Open nikfilippas opened 2 years ago

nikfilippas commented 2 years ago

Issue Report Checklist

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?

  1. Define a function.
  2. Wrap it using functools.wraps.
  3. 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: Screenshot from 2022-03-08 14-33-03

Versions

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)
nikfilippas commented 2 years ago

@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.

dalthviz commented 2 years ago

Hi @nikfilippas thank you for the feedback! I was able to reproduce this. We will check into this in a future release :+1: