aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/multidict.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-07-06 19:50:06 -0700
committerMaximilian Hils <git@maximilianhils.com>2016-07-06 19:53:29 -0700
commit9c873d63f4ede1b2470f8e7ea838909e60efe998 (patch)
tree0f37b0c6a5a792438dff3225c2045c0aa923e187 /netlib/multidict.py
parent55fae7cea90ee69338ef410e1db4a48b8b604619 (diff)
downloadmitmproxy-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.py24
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)