0
0
Fork 1
mirror of https://mau.dev/maunium/synapse.git synced 2024-12-15 02:23:49 +01:00

Make Responder a context manager

This commit is contained in:
Erik Johnston 2018-01-12 13:32:03 +00:00
parent dcc8eded41
commit 85a4d78213
2 changed files with 10 additions and 9 deletions

View file

@ -144,6 +144,7 @@ def respond_with_responder(request, responder, media_type, file_size, upload_nam
return return
add_file_headers(request, media_type, file_size, upload_name) add_file_headers(request, media_type, file_size, upload_name)
with responder:
yield responder.write_to_consumer(request) yield responder.write_to_consumer(request)
finish_request(request) finish_request(request)
@ -151,8 +152,8 @@ def respond_with_responder(request, responder, media_type, file_size, upload_nam
class Responder(object): class Responder(object):
"""Represents a response that can be streamed to the requester. """Represents a response that can be streamed to the requester.
Either `write_to_consumer` or `cancel` must be called to clean up any open Responder is a context manager which *must* be used, so that any resources
resources. held can be cleaned up.
""" """
def write_to_consumer(self, consumer): def write_to_consumer(self, consumer):
"""Stream response into consumer """Stream response into consumer
@ -165,9 +166,10 @@ class Responder(object):
""" """
pass pass
def cancel(self): def __enter__(self):
"""Called when the responder is not going to be used after all. pass
"""
def __exit__(self, exc_type, exc_val, exc_tb):
pass pass

View file

@ -220,8 +220,7 @@ class FileResponder(Responder):
@defer.inlineCallbacks @defer.inlineCallbacks
def write_to_consumer(self, consumer): def write_to_consumer(self, consumer):
with self.open_file:
yield FileSender().beginFileTransfer(self.open_file, consumer) yield FileSender().beginFileTransfer(self.open_file, consumer)
def cancel(self): def __exit__(self, exc_type, exc_val, exc_tb):
self.open_file.close() self.open_file.close()