Discovered while adding MyPy for code that was implementing
MutableMapping and using the update function like this:
```python
class CaseInsensitiveDict(collections.MutableMapping):
def __init__(self, data=None, **kwargs):
# type: (dict, **Any) -> None
self._store = dict() # type: dict
if data is None:
data = {}
self.update(data, **kwargs)
```
This commit adds kwargs to MutableMapping to allow this.
Shout out to Tim Abbott for assisting me with this.
This reverts commit ba2c8d95ec.
This commit introduced some bugs (it used Pattern[Union[str, unicode]]
when it would need to be Union[Pattern[str], Pattern[unicode]]), and
- on further discussion - it's unclear if we want to allow this
additional flexibility. I'm reverting this diff for now, but we'll
revisit this after deciding on the upcoming proposal about how implicit
bytes/unicode conversions should be handled when typing Python 2.
timegm takes struct_time objects, which are NamedTuples that have 9 elements by default
That would not take Tuple[Int], so typeshed would report errors
This reverts commit d43adbe97e.
Here's a simple example of code that breaks with this PR:
from typing import Mapping, Dict, Tuple
a = {('0', '0'): 42} # type: Mapping[Tuple[str, str], int]
b = a.get(('1', '1'), 0)
This gives an error on the last line:
error: No overload variant of "get" of "dict" matches argument types [Tuple[builtins.str, builtins.str], builtins.int]
* json.loads() accepts unicode
* threading.BoundedSemaphore is subclass of Semaphore
* Added type annotations for logging/__init__.pyi and logging/handlers.pyi
* Changed style of variable declaration to fit the rest of the file
* Add empty stubs for gettext Translations subclasses
GNUTranslations and NullTranslations do not add any methods to the base
Translations class, so remove the TODO comment and just declare the
classes.
* Add missing types for py3 gettext.
* Almost all re functions take a compiled pattern. (Even re.compile()!)
Fixes#188
Note: I'm using AnyStr so that the type of string used for pattern and
for the rest of the arguments must match. This is not 100% correct,
since Python 2 sometimes allows mixed types. But sometimes it
doesn't, depending on the values (e.g. non-ASCII bytes), and Python 3
always insists on matching, so I think this is actually a good idea.
* Same treatment for stdlib/3/re.pyi.
* subprocess.CalledProcessError output argument is optional.
* subprocess.CalledProcessError takes stderr argument in python3.
* subprocess: Fix type for command in call() and friends.
The stubs didn't correctly support the fact that you can pass a string
as well as a sequence of strings.
timezone inherits from tzinfo, so using tzinfo is more general (and e.g.
pytz types inherit directly from tzinfo).
This is the correct type, as quoted from astimezone's code:
elif not isinstance(tz, tzinfo):
raise TypeError("tz argument must be an instance of tzinfo")