[issue33420] __origin__ invariant broken

2018-05-03 Thread Adam Paszke

New submission from Adam Paszke :

Hi everyone,

I have a module that needs to inspect type annotations on a few functions. One 
of the types I need to special case on is typing.Tuple, and I used code like 
this to detect it:

if getattr(annotation, '__origin__', None) == typing.Tuple:
... 
else:
...

This was based on the comment from the typing module (Lib/typing.py:609) that 
specified this particular invariant on the __origin__ attribute:

> __origin__ keeps a reference to a type that was subscripted,
  e.g., Union[T, int].__origin__ == Union;

Everything worked just fine until I checked it on the alpha release of Python 
3.7 in my CI. Turns out, that in that release we have

typing.Tuple[str, int].__origin__ == tuple

and not (which is the case in e.g. 3.6)

typing.Tuple[str, int].__origin__ == typing.Tuple


I know this is not a documented attribute, so it can change, but I wanted to 
highlight that it's either a regression, or the comment will need to be 
updated, so people won't try to depend on that.

--
components: Library (Lib)
messages: 316127
nosy: apaszke
priority: normal
severity: normal
status: open
title: __origin__ invariant broken
type: behavior
versions: Python 3.7, Python 3.8

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



[issue33420] __origin__ invariant broken

2018-05-03 Thread Adam Paszke

Adam Paszke  added the comment:

Of course, I'm not expecting this to be 100% reliable, and so I'm ok with the 
answer that the comment is now outdated.

I'd like to avoid adding extra dependencies for so simple things, so I guess 
I'll just special case that in my code for now. It would be great if the typing 
module had some tools for introspection built in!

--

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