Merge commit '59812' into work
This commit is contained in:
commit
983fdbbe3e
|
@ -602,12 +602,24 @@ class CustomStaticFileTest(AsyncHTTPTestCase, LogTrapTestCase):
|
||||||
def get_app(self):
|
def get_app(self):
|
||||||
class MyStaticFileHandler(StaticFileHandler):
|
class MyStaticFileHandler(StaticFileHandler):
|
||||||
def get(self, path):
|
def get(self, path):
|
||||||
|
path = self.parse_url_path(path)
|
||||||
assert path == "foo.txt"
|
assert path == "foo.txt"
|
||||||
self.write("bar")
|
self.write("bar")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def make_static_url(cls, settings, path):
|
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):
|
class StaticUrlHandler(RequestHandler):
|
||||||
def get(self, path):
|
def get(self, path):
|
||||||
|
@ -618,9 +630,9 @@ class CustomStaticFileTest(AsyncHTTPTestCase, LogTrapTestCase):
|
||||||
static_handler_class=MyStaticFileHandler)
|
static_handler_class=MyStaticFileHandler)
|
||||||
|
|
||||||
def test_serve(self):
|
def test_serve(self):
|
||||||
response = self.fetch("/static/foo.txt")
|
response = self.fetch("/static/foo.42.txt")
|
||||||
self.assertEqual(response.body, b("bar"))
|
self.assertEqual(response.body, b("bar"))
|
||||||
|
|
||||||
def test_static_url(self):
|
def test_static_url(self):
|
||||||
response = self.fetch("/static_url/foo.txt")
|
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"))
|
||||||
|
|
|
@ -1477,6 +1477,7 @@ class StaticFileHandler(RequestHandler):
|
||||||
def get(self, path, include_body=True):
|
def get(self, path, include_body=True):
|
||||||
if os.path.sep != "/":
|
if os.path.sep != "/":
|
||||||
path = path.replace("/", 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))
|
abspath = os.path.abspath(os.path.join(self.root, path))
|
||||||
# os.path.abspath strips a trailing /
|
# os.path.abspath strips a trailing /
|
||||||
# it needs to be temporarily added back for requests to root/
|
# it needs to be temporarily added back for requests to root/
|
||||||
|
@ -1562,6 +1563,20 @@ class StaticFileHandler(RequestHandler):
|
||||||
is the static path being requested. The url returned should be
|
is the static path being requested. The url returned should be
|
||||||
relative to the current host.
|
relative to the current host.
|
||||||
"""
|
"""
|
||||||
|
static_url_prefix = settings.get('static_url_prefix', '/static/')
|
||||||
|
version_hash = cls.get_version(settings, path)
|
||||||
|
if version_hash:
|
||||||
|
return static_url_prefix + path + "?v=" + version_hash
|
||||||
|
return static_url_prefix + path
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_version(cls, settings, path):
|
||||||
|
"""Generate the version string to be appended as a query string
|
||||||
|
to the static URL - allowing aggressive caching.
|
||||||
|
|
||||||
|
``settings`` is the `Application.settings` dictionary and ```path``
|
||||||
|
is the relative location of the requested asset on the filesystem.
|
||||||
|
"""
|
||||||
abs_path = os.path.join(settings["static_path"], path)
|
abs_path = os.path.join(settings["static_path"], path)
|
||||||
with cls._lock:
|
with cls._lock:
|
||||||
hashes = cls._static_hashes
|
hashes = cls._static_hashes
|
||||||
|
@ -1574,11 +1589,13 @@ class StaticFileHandler(RequestHandler):
|
||||||
logging.error("Could not open static file %r", path)
|
logging.error("Could not open static file %r", path)
|
||||||
hashes[abs_path] = None
|
hashes[abs_path] = None
|
||||||
hsh = hashes.get(abs_path)
|
hsh = hashes.get(abs_path)
|
||||||
static_url_prefix = settings.get('static_url_prefix', '/static/')
|
if hsh:
|
||||||
if hsh:
|
return hsh[:5]
|
||||||
return static_url_prefix + path + "?v=" + hsh[:5]
|
return None
|
||||||
else:
|
|
||||||
return static_url_prefix + path
|
@classmethod
|
||||||
|
def parse_url_path(cls, url_path):
|
||||||
|
return url_path
|
||||||
|
|
||||||
|
|
||||||
class FallbackHandler(RequestHandler):
|
class FallbackHandler(RequestHandler):
|
||||||
|
|
Loading…
Reference in New Issue