Issue35341
Created on 2018-11-28 17:17 by itoijala, last changed 2018-12-02 16:18 by levkivskyi. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 10850 | merged | itoijala, 2018-12-02 10:13 | |
| PR 10851 | merged | miss-islington, 2018-12-02 15:53 | |
| Messages (9) | |||
|---|---|---|---|
| msg330616 - (view) | Author: Ismo Toijala (itoijala) * | Date: 2018-11-28 17:17 | |
The other collections from the collections module (namedtuple, deque, ChainMap, Counter, defaultdict) have generic versions in the typing module for use in type annotations.
The problem is currently the following:
from __future__ import annotations
import typing
from collections import OrderedDict
# Understood by mypy
def f(d: OrderedDict[str, str]) -> None:
pass
typing.get_type_hints(f)
gives:
Traceback (most recent call last):
File "foo.py", line 9, in <module>
typing.get_type_hints(f)
File "/usr/lib/python3.7/typing.py", line 1001, in get_type_hints
value = _eval_type(value, globalns, localns)
File "/usr/lib/python3.7/typing.py", line 260, in _eval_type
return t._evaluate(globalns, localns)
File "/usr/lib/python3.7/typing.py", line 464, in _evaluate
eval(self.__forward_code__, globalns, localns),
File "<string>", line 1, in <module>
TypeError: 'type' object is not subscriptable
To fix this, a line like the following could be added to Lib/typing.py near line 1250:
OrderedDict = _alias(collections.OrderedDict, (KT, VT))
There might be a reasoning for why this has not been done yet, but I have not been able to find any.
If this is acceptable, I could prepare a PR.
I suppose there is no hope of a backport to 3.7, since this is a new feature (though very minor).
|
|||
| msg330661 - (view) | Author: Guido van Rossum (gvanrossum) * | Date: 2018-11-29 04:02 | |
Given that this is in collections, I don't object. Ivan, what do you say? |
|||
| msg330672 - (view) | Author: Ivan Levkivskyi (levkivskyi) * | Date: 2018-11-29 09:53 | |
Yes, since we already have `DefaultDict`, `Counter`, and `ChainMap` from collections, we can also add `OrderedDict`. |
|||
| msg330673 - (view) | Author: Ivan Levkivskyi (levkivskyi) * | Date: 2018-11-29 09:55 | |
Also typing is technically still provisional, we can backport this to previous versions (at least to 3.7). |
|||
| msg330861 - (view) | Author: Raymond Hettinger (rhettinger) * | Date: 2018-12-01 21:03 | |
Now that regular dicts are ordered, my expectation is that OrderedDict() is going to mostly fall into disuse (much like UserDict, UserList, UserString). That said, it would be nice if all of the collections classes had generic counterparts in the typing module. |
|||
| msg330873 - (view) | Author: Ismo Toijala (itoijala) * | Date: 2018-12-02 09:55 | |
My reason for using OrderedDict was that the normal dict is not reversible. I needed to get the last element added, so I ended up doing something like next(reversed(ordered_dict)). Perhaps this would be something to add to the normal dict (for 3.8?). Then I could migrate away from OrderedDict. Shall I open a new issue for this? |
|||
| msg330875 - (view) | Author: Karthikeyan Singaravelan (xtreak) * | Date: 2018-12-02 10:30 | |
> Shall I open a new issue for this? @itoijala Please see https://bugs.python.org/issue33462. It's on master. |
|||
| msg330887 - (view) | Author: Ivan Levkivskyi (levkivskyi) * | Date: 2018-12-02 15:53 | |
New changeset 68b56d02ef20479b87c65e523cf3dec1b7b77d40 by Ivan Levkivskyi (Ismo Toijala) in branch 'master': bpo-35341: Add generic version of OrderedDict to typing (GH-10850) https://github.com/python/cpython/commit/68b56d02ef20479b87c65e523cf3dec1b7b77d40 |
|||
| msg330889 - (view) | Author: miss-islington (miss-islington) | Date: 2018-12-02 16:14 | |
New changeset 6cb0486ce861903448bd6ba1095685b6cd48e3bd by Miss Islington (bot) in branch '3.7': bpo-35341: Add generic version of OrderedDict to typing (GH-10850) https://github.com/python/cpython/commit/6cb0486ce861903448bd6ba1095685b6cd48e3bd |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2018-12-02 16:18:57 | levkivskyi | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2018-12-02 16:14:46 | miss-islington | set | nosy:
+ miss-islington messages: + msg330889 |
| 2018-12-02 15:53:34 | miss-islington | set | pull_requests: + pull_request10086 |
| 2018-12-02 15:53:17 | levkivskyi | set | messages: + msg330887 |
| 2018-12-02 10:30:26 | xtreak | set | nosy:
+ xtreak messages: + msg330875 |
| 2018-12-02 10:13:00 | itoijala | set | keywords:
+ patch stage: patch review pull_requests: + pull_request10085 |
| 2018-12-02 09:55:03 | itoijala | set | messages: + msg330873 |
| 2018-12-01 21:03:31 | rhettinger | set | nosy:
+ rhettinger messages: + msg330861 |
| 2018-11-29 09:55:52 | levkivskyi | set | messages: + msg330673 |
| 2018-11-29 09:53:25 | levkivskyi | set | messages: + msg330672 |
| 2018-11-29 04:02:32 | gvanrossum | set | messages: + msg330661 |
| 2018-11-29 03:36:26 | xtreak | set | nosy:
+ gvanrossum, levkivskyi |
| 2018-11-28 17:17:38 | itoijala | create | |