[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread Guido van Rossum


Change by Guido van Rossum :


--
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread miss-islington


miss-islington  added the comment:


New changeset 49917d576a578c8c29b8dbcbd5257c366a53d498 by Miss Islington (bot) 
in branch '3.9':
bpo-41780: Fix __dir__ of types.GenericAlias (GH-22262)
https://github.com/python/cpython/commit/49917d576a578c8c29b8dbcbd5257c366a53d498


--

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread miss-islington


Change by miss-islington :


--
pull_requests: +21320
pull_request: https://github.com/python/cpython/pull/22264

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread miss-islington


miss-islington  added the comment:


New changeset 2e87774df1a0eaf2a1fe8cc4d958df60f7125b6e by Batuhan Taskaya in 
branch 'master':
bpo-41780: Fix __dir__ of types.GenericAlias (GH-22262)
https://github.com/python/cpython/commit/2e87774df1a0eaf2a1fe8cc4d958df60f7125b6e


--
nosy: +miss-islington

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread Batuhan Taskaya


Change by Batuhan Taskaya :


--
keywords: +patch
pull_requests: +21318
stage: needs patch -> patch review
pull_request: https://github.com/python/cpython/pull/22262

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread Guido van Rossum


Change by Guido van Rossum :


--
assignee: docs@python -> 
stage:  -> needs patch

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread Guido van Rossum


Guido van Rossum  added the comment:

The forwarding of `__class__`, and the resulting difference between 
`type(list[int])` and `list[int].__class__` are intentional.

I think overriding `__dir__` along the lines suggested by Allan (but in C of 
course) would be the best solution.

--

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread Batuhan Taskaya


Batuhan Taskaya  added the comment:

Okay, so IIRC if we stop forwarding __class__ (add it as an exception to 
attr_exceptions) it would return us the original dir(), and also solve the 
inconsistency of the example you gave;

> >>> list.__class__
> 
> >>> list[int].__class__
> 
>
> >>> type(list)
> 
> >>> type(list[int])
> 

but the problem is that, it is not 'exactly' complying with the specs at PEP 
585. I am aware that we already added some extras to this list 
(https://www.python.org/dev/peps/pep-0585/#parameters-to-generics-are-available-at-runtime)
 like __mro_entries__ etc, but __class__ looks like a tricky problem. 
@gvanrossum any comments?

--

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-15 Thread Allan Daemon


Allan Daemon  added the comment:

> I actually have no idea where dir() gets its information.

I will share what I find out already, so it may hopefully be helpful.

The dir function used is the general object.__dir__ function, defined in 
Objects/typeobject.c:type___dir___impl(), that just takes everything from 
__dict__ of the class and its bases.

But the GenericAlias is trying hard pretending to be the origin class, so when 
you ask for the __dict__, it gives the original class, not the GenericAlias:

>>> list[int].__dict__ == list.__dict__
True

There are also some other things that seems a bit strange, but it may just be 
right:

>>> list.__class__

>>> list[int].__class__


>>> type(list)

>>> type(list[int])


This happens because of the tp_getattro function 
genericaliasobject.c:ga_getattro(), that takes the attributes from the origin 
except for the following names, that are taken from the GenericAlias itself:
"__origin__",
"__args__",
"__parameters__",
"__mro_entries__",
"__reduce_ex__",
"__reduce__",

So, when the dir() is getting the __dict__, it gets list.__dict__ and base 
(object) instead of GenericAlias. Looking the ga_getattro() calls when dir() is 
fired, it also gets the __class__ attribute after getting the __dict__. Adding 
one or another makes the dir() showing up the GenericAlias attributes, but 
others went missing.

An idea to solve this spefic issue could be overriding the __dir__ method, 
something like this python code (written in c, of course):

def __dir__(self):
r = super().__dir__()
return r + attribute_names_list + method_names_list


But I wonder what else should not be forwarded to origin.

--
components: +Interpreter Core -Documentation, Library (Lib)

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-14 Thread Batuhan Taskaya


Batuhan Taskaya  added the comment:

> @Batuhan, do you want to look into this?

Sure, will check it out!

--

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-14 Thread Guido van Rossum


Guido van Rossum  added the comment:

I actually have no idea where dir() gets its information.  IIRC the 
implementation was a collaboration with Batuhan -- @Batuhan, do you want to 
look into this?  Presumably some metadata needs to be added to 
genericaliasobject.c.

--
nosy: +BTaskaya

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-14 Thread Karthikeyan Singaravelan


Change by Karthikeyan Singaravelan :


--
nosy: +gvanrossum

___
Python tracker 

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



[issue41780] Generic Alias attributes nor in dir()

2020-09-14 Thread Allan Daemon


New submission from Allan Daemon :

The implementation of PEP 585 in 3.9 adds some new attributes, but they aren't 
listed with dir() (then, not list in autocomplete and IntelliSense).

Python 3.9.0rc1+ (heads/3.9:d7cd1164c1, Aug 25 2020, 17:27:09)

>>> li = list[int]
>>> li.__origin__

>>> getattr(li, '__origin__')

>>> '__origin__' in dir(li)
False

That applies to:

__origin__
__args__
__parameters__

It seems to be not the expected behaviour, so this bug report. If this is not 
the case, some piece of documentation could be interesting. Also, I couldn't 
find anything about Generic Alias in the documentation, only in the source 
code. Should this be addressed too?

--
assignee: docs@python
components: Documentation, Library (Lib)
messages: 376873
nosy: AllanDaemon, docs@python
priority: normal
severity: normal
status: open
title: Generic Alias attributes nor in dir()
type: behavior
versions: Python 3.10, Python 3.9

___
Python tracker 

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