mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-08 16:53:23 +00:00
On Python 3, response.msg.keys() contains the same value multiple times if there are multiple headers with the same value. Work around this by converting to a set before iterating over it.
45 lines
966 B
Python
45 lines
966 B
Python
import six
|
|
from six import BytesIO
|
|
from six.moves.http_client import HTTPMessage
|
|
try:
|
|
import http.client
|
|
except ImportError:
|
|
pass
|
|
|
|
|
|
"""
|
|
The python3 http.client api moved some stuff around, so this is an abstraction
|
|
layer that tries to cope with this move.
|
|
"""
|
|
|
|
|
|
def get_header(message, name):
|
|
if six.PY3:
|
|
return message.getallmatchingheaders(name)
|
|
else:
|
|
return message.getheader(name)
|
|
|
|
|
|
def get_header_items(message):
|
|
if six.PY3:
|
|
return dict(message._headers).items()
|
|
else:
|
|
return message.dict.items()
|
|
|
|
|
|
def get_headers(response):
|
|
for key in set(response.msg.keys()):
|
|
if six.PY3:
|
|
yield key, response.msg.get_all(key)
|
|
else:
|
|
yield key, response.msg.getheaders(key)
|
|
|
|
|
|
def get_httpmessage(headers):
|
|
if six.PY3:
|
|
return http.client.parse_headers(BytesIO(headers))
|
|
msg = HTTPMessage(BytesIO(headers))
|
|
msg.fp.seek(0)
|
|
msg.readheaders()
|
|
return msg
|