Adds some safety around response types being wrong

Before we didn't check if the response object was actually a response
object. This PR catches the exception should it happen and reports it to
the user.
This commit is contained in:
Eli Uriegas 2017-02-16 17:49:14 -06:00
parent 850446195f
commit 04c8f4a5ed

View File

@ -167,12 +167,18 @@ class HttpProtocol(asyncio.Protocol):
# -------------------------------------------- # # -------------------------------------------- #
def write_response(self, response): def write_response(self, response):
keep_alive = (
self.parser.should_keep_alive() and not self.signal.stopped)
try: try:
keep_alive = (
self.parser.should_keep_alive() and not self.signal.stopped)
self.transport.write( self.transport.write(
response.output( response.output(
self.request.version, keep_alive, self.request_timeout)) self.request.version, keep_alive, self.request_timeout))
except AttributeError:
log.error(
('Invalid response object for url {}, '
'Expected Type: HTTPResponse, Actual Type: {}').format(
self.url, type(response)))
self.write_error(ServerError('Invalid response type'))
except RuntimeError: except RuntimeError:
log.error( log.error(
'Connection lost before response written @ {}'.format( 'Connection lost before response written @ {}'.format(