[issue38908] Troubles with @runtime_checkable protocols

2021-05-27 Thread miss-islington


miss-islington  added the comment:


New changeset 09696a3e218404e77f8c1fbf187ca29a4a357a9d by Miss Islington (bot) 
in branch '3.10':
[3.10] bpo-38908: [docs] Add changes to 3.10 whatsnew and fix some minor 
inaccuracies in news (GH-26096) (GH-26337)
https://github.com/python/cpython/commit/09696a3e218404e77f8c1fbf187ca29a4a357a9d


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-24 Thread miss-islington


Change by miss-islington :


--
pull_requests: +24929
pull_request: https://github.com/python/cpython/pull/26337

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-13 Thread Ken Jin


Change by Ken Jin :


--
pull_requests: +24736
pull_request: https://github.com/python/cpython/pull/26096

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread miss-islington


miss-islington  added the comment:


New changeset 9b90ce68503f4861ce4e9ac9444d9a82b3d943a5 by Ken Jin in branch 
'3.9':
[3.9] Revert "[3.9] bpo-38908: Fix issue when non runtime_protocol does not 
raise TypeError (GH-26067)" (GH-26077)
https://github.com/python/cpython/commit/9b90ce68503f4861ce4e9ac9444d9a82b3d943a5


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Ken Jin


Ken Jin  added the comment:

Yurii and Kevin, thanks for pushing the patch forward! Thanks for the review 
too Guido.

I'm closing this issue as all bugfix PRs have landed to bugfix branches. This 
will make its way into the next versions of Python for those respective 
branches.

One point of contention is whether to introduce this in 3.9.6. This will cause 
code previously working in 3.9.5 to throw an error if people were using it 
incorrectly. So it might be better to only enforce this in 3.10 onwards.

I created GH-26077 just in case the decision is made to revert. Sorry for any 
inconvenience caused everyone!

--
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed
versions: +Python 3.10, Python 3.11 -Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Ken Jin


Change by Ken Jin :


--
pull_requests: +24717
pull_request: https://github.com/python/cpython/pull/26077

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread miss-islington


miss-islington  added the comment:


New changeset 88136bbd0500b688c05e914be031cd3c243e42d8 by Ken Jin in branch 
'3.9':
[3.9] bpo-38908: Fix issue when non runtime_protocol does not raise TypeError 
(GH-26067) (GH-26075)
https://github.com/python/cpython/commit/88136bbd0500b688c05e914be031cd3c243e42d8


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread miss-islington


miss-islington  added the comment:


New changeset a2d94a0a9b8ae95d7d2b7fc34b501da5242ec22c by Miss Islington (bot) 
in branch '3.10':
bpo-38908: Fix issue when non runtime_protocol failed to raise TypeError 
(GH-26067)
https://github.com/python/cpython/commit/a2d94a0a9b8ae95d7d2b7fc34b501da5242ec22c


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Ken Jin


Change by Ken Jin :


--
nosy: +kj
nosy_count: 5.0 -> 6.0
pull_requests: +24715
pull_request: https://github.com/python/cpython/pull/26075

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread miss-islington


Change by miss-islington :


--
nosy: +miss-islington
nosy_count: 4.0 -> 5.0
pull_requests: +24713
pull_request: https://github.com/python/cpython/pull/26073

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Yurii Karabas


Yurii Karabas <1998uri...@gmail.com> added the comment:

Please forget my previous msg, this bug still present at 3.11 version. PR 
contains fix proposed by Kevin.

Sorry for making to much noise.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Yurii Karabas


Yurii Karabas <1998uri...@gmail.com> added the comment:

I checked and this bug is not present at 3.11 version. So I simply added test 
to cover case mentioned by Ivan.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Yurii Karabas


Yurii Karabas <1998uri...@gmail.com> added the comment:

Hi Guido,

I decided to help with this issue as far as Kevin did not respond.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-05-12 Thread Yurii Karabas


Change by Yurii Karabas <1998uri...@gmail.com>:


--
keywords: +patch
nosy: +uriyyo
nosy_count: 3.0 -> 4.0
pull_requests: +24708
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/26067

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-04-17 Thread Guido van Rossum


Guido van Rossum  added the comment:

Hi Kevin,

If you want to work on this, could you come up with some test cases that
try to explore edge cases for this behavior? Ideally some that already
pass, and some that currently don't pass (because of the limitation
mentioned by Ivan). It's possible that the tests for typing.py already
contain some suitable passing tests. You could then investigate whether
your proposal seems to work. If it does, you can submit a PR and we can lay
this issue to rest!

--Guido

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2021-04-17 Thread Kevin Shweh


Kevin Shweh  added the comment:

It seems like the straightforward, minimal fix would be to just add

if (getattr(cls, '_is_protocol', False) and
not getattr(cls, '_is_runtime_protocol', False) and
not _allow_reckless_class_cheks()):
raise TypeError(...)

to _ProtocolMeta.__instancecheck__. Does that fail on some edge case (that the 
current implementation works on)? It's a little weird that 
_ProtocolMeta.__instancecheck__ doesn't explicitly check that the protocol is 
runtime-checkable.

--
nosy: +Kevin Shweh

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2019-11-26 Thread Guido van Rossum


Guido van Rossum  added the comment:

If the "little helper in abc" solves it, let's do that. The sys._getframe() 
hack has always been a bit smelly -- I assume we can get rid of that then?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38908] Troubles with @runtime_checkable protocols

2019-11-24 Thread Ivan Levkivskyi


New submission from Ivan Levkivskyi :

The PEP 544 specifies that:

A protocol can be used as a second argument in isinstance() and issubclass() 
only if it is explicitly opt-in by @runtime_checkable decorator.

It is not specified exactly whether this should be enforced by static type 
checkers or at runtime. Currently it is enforced in both cases: mypy flags this 
as error, and a TypeError is raised at runtime.

There is however a problem with current runtime implementation: abc and 
functools modules may call issubclass() on non-runtime checkable protocols if 
they appear as explicit superclasses. This is currently solved by a 
sys._getframe() hack in  typing module.

The problem is that current solution is incomplete. For example, the TypeError 
is not raised in the case of non-method protocols:

>>> class P(Protocol):
... x: int
... 
>>> 
>>> class C: ...
... 
>>> isinstance(C(), P)
False  # should be TypeError

I tried to fix it this morning but after an hour of attempts to tweak the 
existing hack I gave up. It looks like there are only two reasonable solutions:

* Don't enforce @typing.runtime_checkable at runtime, make it a 
type-checker-only feature (like @typing.final).
* Add a little helper to abc module that would skip classes in MRO for which 
C._is_protocol is True but C._is_runtime_protocol is False.

Any thoughts/preferences?

--
components: Library (Lib)
messages: 357400
nosy: gvanrossum, levkivskyi
priority: normal
severity: normal
status: open
title: Troubles with @runtime_checkable protocols
type: behavior
versions: Python 3.8, Python 3.9

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com