45 lines
948 B
Python
45 lines
948 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):
|
||
|
for (key, values) in get_headers(message):
|
||
|
for value in values:
|
||
|
yield key, value
|
||
|
|
||
|
|
||
|
def get_headers(message):
|
||
|
for key in set(message.keys()):
|
||
|
if six.PY3:
|
||
|
yield key, message.get_all(key)
|
||
|
else:
|
||
|
yield key, message.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
|