mirror of
https://github.com/python/cpython.git
synced 2025-07-19 09:15:34 +00:00
bpo-38291: DeprecationWarning when importing typing.{io,re} (#26719)
This commit is contained in:
parent
291848195f
commit
09eb817115
4 changed files with 35 additions and 16 deletions
|
@ -11,8 +11,7 @@ from io import BytesIO, TextIOWrapper
|
|||
from pathlib import Path
|
||||
from types import ModuleType
|
||||
from typing import ContextManager, Iterable, Union
|
||||
from typing import cast
|
||||
from typing.io import BinaryIO, TextIO
|
||||
from typing import cast, BinaryIO, TextIO
|
||||
from collections.abc import Sequence
|
||||
from functools import singledispatch
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import collections
|
|||
import pickle
|
||||
import re
|
||||
import sys
|
||||
import warnings
|
||||
from unittest import TestCase, main, skipUnless, skip
|
||||
from copy import copy, deepcopy
|
||||
|
||||
|
@ -1976,7 +1977,7 @@ class GenericTests(BaseTestCase):
|
|||
T = TypeVar('T')
|
||||
things = [Any, Union[T, int], Callable[..., T], Tuple[Any, Any],
|
||||
Optional[List[int]], typing.Mapping[int, str],
|
||||
typing.re.Match[bytes], typing.Iterable['whatever']]
|
||||
typing.Match[bytes], typing.Iterable['whatever']]
|
||||
for t in things:
|
||||
self.assertEqual(weakref.ref(t)(), t)
|
||||
|
||||
|
@ -3996,12 +3997,14 @@ class IOTests(BaseTestCase):
|
|||
self.assertEqual(a.__parameters__, ())
|
||||
|
||||
def test_io_submodule(self):
|
||||
from typing.io import IO, TextIO, BinaryIO, __all__, __name__
|
||||
self.assertIs(IO, typing.IO)
|
||||
self.assertIs(TextIO, typing.TextIO)
|
||||
self.assertIs(BinaryIO, typing.BinaryIO)
|
||||
self.assertEqual(set(__all__), set(['IO', 'TextIO', 'BinaryIO']))
|
||||
self.assertEqual(__name__, 'typing.io')
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
from typing.io import IO, TextIO, BinaryIO, __all__, __name__
|
||||
self.assertIs(IO, typing.IO)
|
||||
self.assertIs(TextIO, typing.TextIO)
|
||||
self.assertIs(BinaryIO, typing.BinaryIO)
|
||||
self.assertEqual(set(__all__), set(['IO', 'TextIO', 'BinaryIO']))
|
||||
self.assertEqual(__name__, 'typing.io')
|
||||
self.assertEqual(len(w), 1)
|
||||
|
||||
|
||||
class RETests(BaseTestCase):
|
||||
|
@ -4048,11 +4051,13 @@ class RETests(BaseTestCase):
|
|||
self.assertEqual(repr(Match[bytes]), 'typing.Match[bytes]')
|
||||
|
||||
def test_re_submodule(self):
|
||||
from typing.re import Match, Pattern, __all__, __name__
|
||||
self.assertIs(Match, typing.Match)
|
||||
self.assertIs(Pattern, typing.Pattern)
|
||||
self.assertEqual(set(__all__), set(['Match', 'Pattern']))
|
||||
self.assertEqual(__name__, 'typing.re')
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
from typing.re import Match, Pattern, __all__, __name__
|
||||
self.assertIs(Match, typing.Match)
|
||||
self.assertIs(Pattern, typing.Pattern)
|
||||
self.assertEqual(set(__all__), set(['Match', 'Pattern']))
|
||||
self.assertEqual(__name__, 'typing.re')
|
||||
self.assertEqual(len(w), 1)
|
||||
|
||||
def test_cannot_subclass(self):
|
||||
with self.assertRaises(TypeError) as ex:
|
||||
|
|
|
@ -28,6 +28,7 @@ import operator
|
|||
import re as stdlib_re # Avoid confusion with the re we export.
|
||||
import sys
|
||||
import types
|
||||
import warnings
|
||||
from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType, GenericAlias
|
||||
|
||||
# Please keep __all__ alphabetized within each category.
|
||||
|
@ -2512,7 +2513,20 @@ class TextIO(IO[str]):
|
|||
pass
|
||||
|
||||
|
||||
class io:
|
||||
class _DeprecatedType(type):
|
||||
def __getattribute__(cls, name):
|
||||
if name != "__dict__" and name in cls.__dict__:
|
||||
warnings.warn(
|
||||
f"{cls.__name__} is deprecated, import directly "
|
||||
f"from typing instead. {cls.__name__} will be removed "
|
||||
"in Python 3.12.",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
return super().__getattribute__(name)
|
||||
|
||||
|
||||
class io(metaclass=_DeprecatedType):
|
||||
"""Wrapper namespace for IO generic classes."""
|
||||
|
||||
__all__ = ['IO', 'TextIO', 'BinaryIO']
|
||||
|
@ -2527,7 +2541,7 @@ sys.modules[io.__name__] = io
|
|||
Pattern = _alias(stdlib_re.Pattern, 1)
|
||||
Match = _alias(stdlib_re.Match, 1)
|
||||
|
||||
class re:
|
||||
class re(metaclass=_DeprecatedType):
|
||||
"""Wrapper namespace for re type aliases."""
|
||||
|
||||
__all__ = ['Pattern', 'Match']
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Importing typing.io or typing.re now prints a `DeprecationWarning`.
|
Loading…
Add table
Add a link
Reference in a new issue