import pickle
import re
import sys
+import warnings
from unittest import TestCase, main, skipUnless, skip
from copy import copy, deepcopy
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)
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):
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:
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.
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']
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']