diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-07-06 19:50:06 -0700 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-07-06 19:53:29 -0700 |
commit | 9c873d63f4ede1b2470f8e7ea838909e60efe998 (patch) | |
tree | 0f37b0c6a5a792438dff3225c2045c0aa923e187 /netlib/multidict.py | |
parent | 55fae7cea90ee69338ef410e1db4a48b8b604619 (diff) | |
download | mitmproxy-9c873d63f4ede1b2470f8e7ea838909e60efe998.tar.gz mitmproxy-9c873d63f4ede1b2470f8e7ea838909e60efe998.tar.bz2 mitmproxy-9c873d63f4ede1b2470f8e7ea838909e60efe998.zip |
py3++, multidict fixes
This commit improves Python 3 compatibility and fixes two multidict
issues:
1. Headers.items(multi=True) now decodes fields
2. MultiDict.clear(item) has been removed, as Python's
MutableMapping already defines .clear() with different
semantics. This is confusing for everyone who expects a
dict-like object. `.pop("attr", None)` is not fantastic,
but it's the Python way to do it.
Diffstat (limited to 'netlib/multidict.py')
-rw-r--r-- | netlib/multidict.py | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/netlib/multidict.py b/netlib/multidict.py index 50c879d9..51053ff6 100644 --- a/netlib/multidict.py +++ b/netlib/multidict.py @@ -170,18 +170,10 @@ class _MultiDict(MutableMapping, basetypes.Serializable): else: return super(_MultiDict, self).items() - def clear(self, key): - """ - Removes all items with the specified key, and does not raise an - exception if the key does not exist. - """ - if key in self: - del self[key] - def collect(self): """ Returns a list of (key, value) tuples, where values are either - singular if threre is only one matching item for a key, or a list + singular if there is only one matching item for a key, or a list if there are more than one. The order of the keys matches the order in the underlying fields list. """ @@ -204,18 +196,16 @@ class _MultiDict(MutableMapping, basetypes.Serializable): .. code-block:: python # Simple dict with duplicate values. - >>> d - MultiDictView[("name", "value"), ("a", "false"), ("a", "42")] + >>> d = MultiDict([("name", "value"), ("a", False), ("a", 42)]) >>> d.to_dict() { "name": "value", - "a": ["false", "42"] + "a": [False, 42] } """ - d = {} - for k, v in self.collect(): - d[k] = v - return d + return { + k: v for k, v in self.collect() + } def get_state(self): return self.fields @@ -307,4 +297,4 @@ class MultiDictView(_MultiDict): @fields.setter def fields(self, value): - return self._setter(value) + self._setter(value) |