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/http | |
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/http')
-rw-r--r-- | netlib/http/headers.py | 9 | ||||
-rw-r--r-- | netlib/http/http2/utils.py | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/netlib/http/headers.py b/netlib/http/headers.py index f052a53b..413add87 100644 --- a/netlib/http/headers.py +++ b/netlib/http/headers.py @@ -148,6 +148,15 @@ class Headers(multidict.MultiDict): value = _always_bytes(value) super(Headers, self).insert(index, key, value) + def items(self, multi=False): + if multi: + return ( + (_native(k), _native(v)) + for k, v in self.fields + ) + else: + return super(Headers, self).items() + def replace(self, pattern, repl, flags=0): """ Replaces a regular expression pattern with repl in each "name: value" diff --git a/netlib/http/http2/utils.py b/netlib/http/http2/utils.py index 4c01952d..164bacc8 100644 --- a/netlib/http/http2/utils.py +++ b/netlib/http/http2/utils.py @@ -7,9 +7,9 @@ def parse_headers(headers): scheme = headers.get(':scheme', 'https').encode() path = headers.get(':path', '/').encode() - headers.clear(":method") - headers.clear(":scheme") - headers.clear(":path") + headers.pop(":method", None) + headers.pop(":scheme", None) + headers.pop(":path", None) host = None port = None |