From: Birk Nilson Date: Fri, 2 Dec 2011 14:28:31 +0000 (+0000) Subject: Add ability to parse static path before using it as though it was X-Git-Tag: v2.2.0~11^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59812edca7fec856a737d99363274ff650356988;p=thirdparty%2Ftornado.git Add ability to parse static path before using it as though it was a relative filesystem path. Thereby enabling developers to add the versioning string as a component in the path rather than a query string. Which is required when working with CloudFront for instance. --- diff --git a/tornado/test/web_test.py b/tornado/test/web_test.py index c5ae99a37..bef6f529a 100644 --- a/tornado/test/web_test.py +++ b/tornado/test/web_test.py @@ -552,12 +552,24 @@ class CustomStaticFileTest(AsyncHTTPTestCase, LogTrapTestCase): def get_app(self): class MyStaticFileHandler(StaticFileHandler): def get(self, path): + path = self.parse_url_path(path) assert path == "foo.txt" self.write("bar") @classmethod def make_static_url(cls, settings, path): - return "/static/%s?v=42" % path + version_hash = cls.get_version(settings, path) + extension_index = path.rindex('.') + before_version = path[:extension_index] + after_version = path[(extension_index + 1):] + return '/static/%s.%s.%s' % (before_version, 42, after_version) + + @classmethod + def parse_url_path(cls, url_path): + extension_index = url_path.rindex('.') + version_index = url_path.rindex('.', 0, extension_index) + return '%s%s' % (url_path[:version_index], + url_path[extension_index:]) class StaticUrlHandler(RequestHandler): def get(self, path): @@ -568,9 +580,9 @@ class CustomStaticFileTest(AsyncHTTPTestCase, LogTrapTestCase): static_handler_class=MyStaticFileHandler) def test_serve(self): - response = self.fetch("/static/foo.txt") + response = self.fetch("/static/foo.42.txt") self.assertEqual(response.body, b("bar")) def test_static_url(self): response = self.fetch("/static_url/foo.txt") - self.assertEqual(response.body, b("/static/foo.txt?v=42")) + self.assertEqual(response.body, b("/static/foo.42.txt")) diff --git a/tornado/web.py b/tornado/web.py index d6a82d564..5a25acdf6 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -1446,6 +1446,7 @@ class StaticFileHandler(RequestHandler): def get(self, path, include_body=True): if os.path.sep != "/": path = path.replace("/", os.path.sep) + path = self.parse_url_path(path) abspath = os.path.abspath(os.path.join(self.root, path)) # os.path.abspath strips a trailing / # it needs to be temporarily added back for requests to root/ @@ -1558,6 +1559,10 @@ class StaticFileHandler(RequestHandler): return hsh[:5] return None + @classmethod + def parse_url_path(cls, url_path): + return url_path + class FallbackHandler(RequestHandler): """A RequestHandler that wraps another HTTP server callback.