Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate legacy introspection APIs in the inspect module #76371

Open
ncoghlan opened this issue Dec 1, 2017 · 4 comments
Open

Deprecate legacy introspection APIs in the inspect module #76371

ncoghlan opened this issue Dec 1, 2017 · 4 comments
Labels
3.13 bugs and security fixes docs Documentation in the Doc dir type-feature A feature request or enhancement

Comments

@ncoghlan
Copy link
Contributor

ncoghlan commented Dec 1, 2017

BPO 32190
Nosy @brettcannon, @ncoghlan

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields:

assignee = None
closed_at = None
created_at = <Date 2017-12-01.05:22:05.533>
labels = ['type-feature', '3.7', 'docs']
title = 'Separate out legacy introspection APIs in the inspect docs'
updated_at = <Date 2017-12-01.05:22:05.533>
user = 'https://github.com/ncoghlan'

bugs.python.org fields:

activity = <Date 2017-12-01.05:22:05.533>
actor = 'ncoghlan'
assignee = 'docs@python'
closed = False
closed_date = None
closer = None
components = ['Documentation']
creation = <Date 2017-12-01.05:22:05.533>
creator = 'ncoghlan'
dependencies = []
files = []
hgrepos = []
issue_num = 32190
keywords = []
message_count = 1.0
messages = ['307362']
nosy_count = 3.0
nosy_names = ['brett.cannon', 'ncoghlan', 'docs@python']
pr_nums = []
priority = 'normal'
resolution = None
stage = 'needs patch'
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue32190'
versions = ['Python 3.6', 'Python 3.7']

@ncoghlan
Copy link
Contributor Author

ncoghlan commented Dec 1, 2017

(Follow up to https://bugs.python.org/issue27172)

The deprecation notice on inspect.getfullargspec has been removed, since we want folks porting from Python 2 to rely on it as part of the porting process, rather than feeling they need to upgrade to using inspect.signature() immediately.

At the same time, we really don't want folks relying on it for *new* code, since it has some inherent limitations (like failing to distinguish positional-only args from positional-and-keyword ones), and some odd historical quirks (like reporting the bound arg as part of the signature for already bound methods).

The subprocess modules clearly separates out the "Older high-level API" https://docs.python.org/3/library/subprocess.html#older-high-level-api to help make it clear that new code should use "subprocess.run" instead.

We could potentially add a similar final section to the inspect documentation for "Legacy introspection APIs".

That would also be useful if https://bugs.python.org/issue31230 is eventually implemented - the current generator and coroutine specific APIs could be moved down to the legacy section for backwards compatibility maintenance, with the type independent API being preferred for new code.

@ncoghlan ncoghlan added the 3.7 (EOL) end of life label Dec 1, 2017
@ncoghlan ncoghlan added docs Documentation in the Doc dir type-feature A feature request or enhancement labels Dec 1, 2017
@ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
@iritkatriel iritkatriel added 3.12 bugs and security fixes and removed 3.7 (EOL) end of life labels Oct 5, 2022
@iritkatriel iritkatriel changed the title Separate out legacy introspection APIs in the inspect docs Deprecate legacy introspection APIs in the inspect module Oct 5, 2022
@iritkatriel
Copy link
Member

Repurposing this issue to re-deprecate these APIs instead.

@vstinner
Copy link
Member

vstinner commented Oct 6, 2022

My notes on "Python 3.11: remove inspect.getargspec()":

  • inspect.signature() added to Python 3.3
  • inspect.getfullargspec() is still there
  • Remove inspect.getargspec() and inspect.formatargspec()

Part 1:

Part 2:

Part 3:

Broken project (1):

@vstinner
Copy link
Member

vstinner commented Oct 6, 2022

IMO it's fine to deprecate inspect.getfullargspec(), but don't plan its removal yet. Maybe even add a comment (to avoid people who like removing deprecated functions, like me!) that this deprecated function should be kept for now, since it's still widely used (just add a link to this issue).

The main advantage of inspect.signature(), compared to getfullargspec(), is that it handles positional-only arguments.

inspect.signature() exists since Python 3.3. More and more projects are requiring a minimum Python version of Python 3.7, or Python 3.6 in the worst case. So it's fine to use inspect.signature().

@erlend-aasland erlend-aasland added 3.13 bugs and security fixes and removed 3.12 bugs and security fixes labels Jan 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.13 bugs and security fixes docs Documentation in the Doc dir type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

4 participants