From 3bb80eb83fc230361e8d29ba75fb4d6fb8b45987 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Sun, 22 Jan 2012 14:19:19 -0800 Subject: [PATCH] Always set Etag in StaticFileHandler so it won't break if the default Etag implementation in RequestHandler changes. --- tornado/web.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tornado/web.py b/tornado/web.py index 07d576c07..ea57e925e 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -1518,18 +1518,16 @@ class StaticFileHandler(RequestHandler): self.set_status(304) return - if not include_body: - self.set_header("Content-Length", os.path.getsize(abspath)) - with open(abspath, "rb") as file: - hasher = hashlib.sha1() - hasher.update(file.read()) - self.set_header("Etag", '"%s"' % hasher.hexdigest()) - return - file = open(abspath, "rb") - try: - self.write(file.read()) - finally: - file.close() + with open(abspath, "rb") as file: + data = file.read() + hasher = hashlib.sha1() + hasher.update(data) + self.set_header("Etag", '"%s"' % hasher.hexdigest()) + if include_body: + self.write(data) + else: + assert self.request.method == "HEAD" + self.set_header("Content-Length", len(data)) def set_extra_headers(self, path): """For subclass to add extra headers to the response""" -- 2.47.2