66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
try:
|
|
# Python 3
|
|
from http.client import HTTPResponse, IncompleteRead
|
|
except (ImportError):
|
|
# Python 2
|
|
from httplib import HTTPResponse, IncompleteRead
|
|
|
|
from ..console_write import console_write
|
|
|
|
|
|
class DebuggableHTTPResponse(HTTPResponse):
|
|
"""
|
|
A custom HTTPResponse that formats debugging info for Sublime Text
|
|
"""
|
|
|
|
_debug_protocol = 'HTTP'
|
|
|
|
def __init__(self, sock, debuglevel=0, method=None, **kwargs):
|
|
# We have to use a positive debuglevel to get it passed to here,
|
|
# however we don't want to use it because by default debugging prints
|
|
# to the stdout and we can't capture it, so we use a special -1 value
|
|
if debuglevel == 5:
|
|
debuglevel = -1
|
|
HTTPResponse.__init__(self, sock, debuglevel=debuglevel, method=method)
|
|
|
|
def begin(self):
|
|
return_value = HTTPResponse.begin(self)
|
|
if self.debuglevel == -1:
|
|
console_write(u'Urllib %s Debug Read' % self._debug_protocol, True)
|
|
|
|
# Python 2
|
|
if hasattr(self.msg, 'headers'):
|
|
headers = self.msg.headers
|
|
# Python 3
|
|
else:
|
|
headers = []
|
|
for header in self.msg:
|
|
headers.append("%s: %s" % (header, self.msg[header]))
|
|
|
|
versions = {
|
|
9: 'HTTP/0.9',
|
|
10: 'HTTP/1.0',
|
|
11: 'HTTP/1.1'
|
|
}
|
|
status_line = versions[self.version] + ' ' + str(self.status) + ' ' + self.reason
|
|
headers.insert(0, status_line)
|
|
for line in headers:
|
|
console_write(u" %s" % line.rstrip())
|
|
return return_value
|
|
|
|
def is_keep_alive(self):
|
|
# Python 2
|
|
if hasattr(self.msg, 'headers'):
|
|
connection = self.msg.getheader('connection')
|
|
# Python 3
|
|
else:
|
|
connection = self.msg['connection']
|
|
if connection and connection.lower() == 'keep-alive':
|
|
return True
|
|
return False
|
|
|
|
def read(self, *args):
|
|
try:
|
|
return HTTPResponse.read(self, *args)
|
|
except (IncompleteRead) as e:
|
|
return e.partial
|