diff options
author | Gregory Beauregard <greg@greg.red> | 2022-02-08 18:59:11 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-08 18:59:11 -0800 |
commit | 31c318dd8399cb1966fd1560e2535d1e29a419d7 (patch) | |
tree | 1d0b71a7a618b88757ad6b0db83cd5f5f07ebc4b | |
parent | eeb29ad833f992ea9f2f29b32723c05586cd0aec (diff) | |
download | typing-31c318dd8399cb1966fd1560e2535d1e29a419d7.tar.gz |
ParamSpec: backport bpo-46676 (#1059)
-rw-r--r-- | typing_extensions/CHANGELOG | 2 | ||||
-rw-r--r-- | typing_extensions/src/test_typing_extensions.py | 9 | ||||
-rw-r--r-- | typing_extensions/src/typing_extensions.py | 10 |
3 files changed, 21 insertions, 0 deletions
diff --git a/typing_extensions/CHANGELOG b/typing_extensions/CHANGELOG index 975a003..c96bd34 100644 --- a/typing_extensions/CHANGELOG +++ b/typing_extensions/CHANGELOG @@ -1,5 +1,7 @@ # Release 4.x.x +- `ParamSpec` args and kwargs are now equal to themselves. Backport from + bpo-46676. Patch by Gregory Beauregard (@GBeauregard). - Add `reveal_type`. Backport from bpo-46414. - Runtime support for PEP 681 and `typing_extensions.dataclass_transform`. - `Annotated` can now wrap `ClassVar` and `Final`. Backport from diff --git a/typing_extensions/src/test_typing_extensions.py b/typing_extensions/src/test_typing_extensions.py index 03a75e4..4e1d95f 100644 --- a/typing_extensions/src/test_typing_extensions.py +++ b/typing_extensions/src/test_typing_extensions.py @@ -2057,8 +2057,10 @@ class ParamSpecTests(BaseTestCase): self.assertTrue(hasattr(P, 'args')) self.assertTrue(hasattr(P, 'kwargs')) + @skipIf((3, 10, 0) <= sys.version_info[:3] <= (3, 10, 2), "Needs bpo-46676.") def test_args_kwargs(self): P = ParamSpec('P') + P_2 = ParamSpec('P_2') # Note: not in dir(P) because of __class__ hacks self.assertTrue(hasattr(P, 'args')) self.assertTrue(hasattr(P, 'kwargs')) @@ -2066,6 +2068,13 @@ class ParamSpecTests(BaseTestCase): self.assertIsInstance(P.kwargs, ParamSpecKwargs) self.assertIs(P.args.__origin__, P) self.assertIs(P.kwargs.__origin__, P) + self.assertEqual(P.args, P.args) + self.assertEqual(P.kwargs, P.kwargs) + self.assertNotEqual(P.args, P_2.args) + self.assertNotEqual(P.kwargs, P_2.kwargs) + self.assertNotEqual(P.args, P.kwargs) + self.assertNotEqual(P.kwargs, P.args) + self.assertNotEqual(P.args, P_2.kwargs) self.assertEqual(repr(P.args), "P.args") self.assertEqual(repr(P.kwargs), "P.kwargs") diff --git a/typing_extensions/src/typing_extensions.py b/typing_extensions/src/typing_extensions.py index b594e33..27eaff0 100644 --- a/typing_extensions/src/typing_extensions.py +++ b/typing_extensions/src/typing_extensions.py @@ -1635,6 +1635,11 @@ else: def __repr__(self): return f"{self.__origin__.__name__}.args" + def __eq__(self, other): + if not isinstance(other, ParamSpecArgs): + return NotImplemented + return self.__origin__ == other.__origin__ + class ParamSpecKwargs(_Immutable): """The kwargs for a ParamSpec object. @@ -1653,6 +1658,11 @@ else: def __repr__(self): return f"{self.__origin__.__name__}.kwargs" + def __eq__(self, other): + if not isinstance(other, ParamSpecKwargs): + return NotImplemented + return self.__origin__ == other.__origin__ + # 3.10+ if hasattr(typing, 'ParamSpec'): ParamSpec = typing.ParamSpec |