GeezerVison is showing github.com — Deprecate the typing.io and typing.re pseudo-modules · Issue #82472 · python/cpython
Deprecate the typing.io and typing.re pseudo-modules #82472Description
| BPO |
38291 |
| Nosy |
@gvanrossum, @srittau, @ambv, @serhiy-storchaka, @ilevkivskyi, @JelleZijlstra, @miss-islington, @tirkarthi, @dgelessus, @Fidget-Spinner |
| PRs |
bpo-38291: Remove mention of typing.io and typing.re again #26113bpo-38291: DeprecationWarning when importing typing.{io,re} #26719[3.10] bpo-38291: Remove mention of typing.io and typing.re again (GH-26113) #26720[3.9] bpo-38291: Remove mention of typing.io and typing.re again (GH-26113) #26721bpo-38291: Reset DeprecationWarning filters in test_typing io and re #26811bpo-38291: Fix a spurious warning when using help(object) #27039bpo-38291: Fix a deprecation warning in typing tests #27312bpo-38291: Update 3.10 WhatsNew with typing.{io|re} DeprecationWarning #27872[3.10] bpo-38291: Update 3.10 WhatsNew with typing.{io|re} DeprecationWarning (GH-27872) #27907 |
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 = <Date 2021-07-24.04:12:34.707>
created_at = <Date 2019-09-27.11:48:37.318>
labels = ['3.11', 'type-bug', 'library', 'docs']
title = 'Deprecate the typing.io and typing.re pseudo-modules'
updated_at = <Date 2021-08-23.17:32:39.463>
user = 'https://github.com/dgelessus'
bugs.python.org fields:
activity = <Date 2021-08-23.17:32:39.463>
actor = 'miss-islington'
assignee = 'none'
closed = True
closed_date = <Date 2021-07-24.04:12:34.707>
closer = 'kj'
components = ['Documentation', 'Library (Lib)']
creation = <Date 2019-09-27.11:48:37.318>
creator = 'dgelessus'
dependencies = []
files = []
hgrepos = []
issue_num = 38291
keywords = ['patch']
message_count = 28.0
messages = ['353356', '353400', '392730', '393611', '393613', '395794', '395800', '395803', '395805', '396147', '396183', '396217', '396219', '396317', '396322', '396324', '396968', '396975', '397001', '397012', '397013', '397016', '397018', '397020', '397042', '398082', '400151', '400152']
nosy_count = 11.0
nosy_names = ['gvanrossum', 'srittau', 'docs@python', 'lukasz.langa', 'serhiy.storchaka', 'levkivskyi', 'JelleZijlstra', 'miss-islington', 'xtreak', 'dgelessus', 'kj']
pr_nums = ['26113', '26719', '26720', '26721', '26811', '27039', '27312', '27872', '27907']
priority = 'normal'
resolution = 'fixed'
stage = 'resolved'
status = 'closed'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue38291'
versions = ['Python 3.11']
Activitydgelessus commented on Sep 27, 2019 MannequinAuthor More actions According to bpo-35089 (and the GitHub issues linked there), the typing.io and typing.re modules should no longer be used. Starting with Python 3.6, the typing documentation no longer mentions the typing.io and typing.re modules, and instead documents their contents as part of the main typing module.
However, the typing module at runtime still supports typing.io and typing.re as before. Since these modules are not meant to be used anymore and are no longer documented, I would expect at least a DeprecationWarning when using them at runtime.
The documentation on this could also be a bit clearer. As long as the modules are still supported at runtime, I would expect the documentation to mention that they still exist, but shouldn't be used anymore. In its current state, the documentation is confusing when coming from Python 3.5 (where typing.io and typing.re were the only documented way to access IO, Pattern, etc., but accessing typing.IO and typing.Pattern directly also works at runtime). ilevkivskyi commented on Sep 27, 2019 Guido, what is your final opinion on this? JelleZijlstra commented on May 2, 2021 srittau commented on Jul 5, 2021 We could easily do what Ken did in PR-26811, and add "warnings.filterwarnings("default", category=DeprecationWarning)" to the test, but I would like to understand what is going on first. It seems the warnings are generated by test_builtin_with_more_than_four_children, which doesn't operate on typing directly. Here is a repro, without tests:
srittau@blitz:~/Projekte/cpython (typing-io *)$ ./python -Wall
Python 3.11.0a0 (heads/main:17f94e2888, Jul 5 2021, 19:19:04) [GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pydoc
>>> import typing
>>> doc = pydoc.TextDoc()
>>> x = doc.docclass(object)
/home/srittau/Projekte/cpython/Lib/pydoc.py:1344: DeprecationWarning: typing.io is deprecated, import directly from typing instead. typing.io will be removed in Python 3.12.
if not cls.__name__.startswith("_") and cls.__module__ == "builtins"),
/home/srittau/Projekte/cpython/Lib/pydoc.py:1344: DeprecationWarning: typing.re is deprecated, import directly from typing instead. typing.re will be removed in Python 3.12.
if not cls.__name__.startswith("_") and cls.__module__ == "builtins"),
>>>
Same warning when calling "help(object)". This is not great. I assume that it is somehow related to pydoc.docclass() iterating over the the items of typing, but only if typing was imported. Please not that "io" and "re" are not part of typing.__all__.
I will investigate more. srittau commented on Jul 5, 2021 pr-27039 suppresses warnings when accessing typing.{re,io}.__module__, which should fix this warning. gvanrossum commented on Jul 5, 2021 Why not just change "typing.io" to "typing"? srittau commented on Jul 5, 2021 typing.io is not referenced in either the tests or the implementation for pydoc. What happens is basically: typing.io is a class, so its derived from object. When formatting the docstring for object, the formatter queries the __module__ attribute of all sub-classes of object, including typing.io, so that it can include the sub-classes in its output:
--------------
Help on class object in module builtins:
class object
| The base class of the class hierarchy.
|
| When called, it accepts no arguments and returns a new featureless
| instance that has no instance attributes and cannot be given any.
|
| Built-in subclasses:
| anext_awaitable
| async_generator
| async_generator_asend
| async_generator_athrow
| ... and 88 other subclasses
|
[...]
--------------
Before the PR this failed, as accessing any typing.io.__module__ printed the warning. gvanrossum commented on Jul 5, 2021 Thanks for the explanation. Let's reopen the issue for now. gvanrossum commented on Jul 6, 2021 serhiy-storchaka commented on Jul 23, 2021 Currently deprecation warnings are emitted in test_typing:
$ ./python -m test test_typing
0:00:00 load avg: 3.38 Run tests sequentially
0:00:00 load avg: 3.38 [1/1] test_typing
/home/serhiy/py/cpython/Lib/test/test_typing.py:4657: DeprecationWarning: typing.io is deprecated, import directly from typing instead. typing.io will be removed in Python 3.12.
k not in typing.io.__all__ and
/home/serhiy/py/cpython/Lib/test/test_typing.py:4658: DeprecationWarning: typing.re is deprecated, import directly from typing instead. typing.re will be removed in Python 3.12.
k not in typing.re.__all__ and
== Tests result: SUCCESS ==
1 test OK.
Total duration: 564 ms
Tests result: SUCCESS ambv commented on Aug 23, 2021 miss-islington commented on Aug 23, 2021
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|