Author itoijala
Recipients itoijala
Date 2018-11-28.17:17:38
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1543425458.24.0.788709270274.issue35341@psf.upfronthosting.co.za>
In-reply-to
Content
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).
History
Date User Action Args
2018-11-28 17:17:38itoijalasetrecipients: + itoijala
2018-11-28 17:17:38itoijalasetmessageid: <1543425458.24.0.788709270274.issue35341@psf.upfronthosting.co.za>
2018-11-28 17:17:38itoijalalinkissue35341 messages
2018-11-28 17:17:38itoijalacreate