FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Backport some recent `Protocol` fixes from 3.12 by AlexWaygood · Pull Request #161 · python/typing_extensions · GitHub

Backport some recent Protocol fixes from 3.12 - #161

Merged
JelleZijlstra merged 3 commits into
python:mainfrom
AlexWaygood:proto-fixes
May 19, 2023
Merged

Backport some recent Protocol fixes from 3.12#161
JelleZijlstra merged 3 commits into
python:mainfrom
AlexWaygood:proto-fixes

Conversation

Comment on lines +2401 to +2438
exec(textwrap.dedent(
"""
def test_pep695_generic_protocol_callable_members(self):
@runtime_checkable
class Foo[T](Protocol):
def meth(self, x: T) -> None: ...

class Bar[T]:
def meth(self, x: T) -> None: ...

self.assertIsInstance(Bar(), Foo)
self.assertIsSubclass(Bar, Foo)

@runtime_checkable
class SupportsTrunc[T](Protocol):
def __trunc__(self) -> T: ...

self.assertIsInstance(0.0, SupportsTrunc)
self.assertIsSubclass(float, SupportsTrunc)

def test_no_weird_caching_with_issubclass_after_isinstance_pep695(self):
@runtime_checkable
class Spam[T](Protocol):
x: T

class Eggs[T]:
def __init__(self, x: T) -> None:
self.x = x

self.assertIsInstance(Eggs(42), Spam)

# gh-104555: If we didn't override ABCMeta.__subclasscheck__ in _ProtocolMeta,
# TypeError wouldn't be raised here,
# as the cached result of the isinstance() check immediately above
# would mean the issubclass() call would short-circuit
# before we got to the "raise TypeError" line
with self.assertRaises(TypeError):
issubclass(Eggs, Spam)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

I think these pass, but had no way of checking, since typing_extensions currently fails to import on 3.12:

Traceback (most recent call last):
  File "C:\Users\alexw\coding\typing_extensions\src\test_typing_extensions.py", line 29, in <module>
    import typing_extensions
  File "C:\Users\alexw\coding\typing_extensions\src\typing_extensions.py", line 1361, in <module>
    class TypeVar(typing.TypeVar, _DefaultMixin, _root=True):
TypeError: type 'typing.TypeVar' is not an acceptable base type

Copy link
Copy Markdown
Member Author

Oh, the PyPy version of ABCMeta results in a bunch of extra attributes being present in a class's __dict__? TIL.

Copy link
Copy Markdown
Member Author

Oh, the PyPy version of ABCMeta results in a bunch of extra attributes being present in a class's __dict__? TIL.

Ugh, that means we'll probably have to mark the test in CPython as @cpython_only.

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants


Back | FazBrowse Home | New Git URL