This is cool.
Here’s a simple flask cache buster that appends a version number to all static assets based on the current git revision short hash.
https://gist.github.com/yuchant/9108622
Flask is built so amazingly. It has hooks to allow modification of all urls generated by the system.
app = make_app() def get_git_revision_hash(): ''' Get current revision short hash and use as cache buster key. ''' import subprocess return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']) git_revision_hash = get_git_revision_hash() STATIC_ENDPOINTS = [</div><div class="" id="file-gistfile1-txt-LC14"> 'static',</div> <div class="" id="file-gistfile1-txt-LC15"> 'shop.static',</div><div class="" id="file-gistfile1-txt-LC16">] @app.url_defaults def static_cache_buster(endpoint, values): if endpoint in STATIC_ENDPOINTS: values['_v'] = git_revision_hash
Update: actually, git revision number is not what I’m looking for
This only works for developer driven content. It wouldn’t work for user uploads of course, therefore I modified this to read mtimes.
STATIC_ENDPOINTS = [
'static',
'shop.static',
]
@self.app.url_defaults
def static_cache_buster(endpoint, values):
if endpoint in STATIC_ENDPOINTS:
# append timestamps of files
modules = endpoint.split('.')
if len(modules) == 2:
blueprint, _ = modules
static_folder = self.app.blueprints[blueprint].static_folder
else:
static_folder = self.app.static_folder
file_path = os.path.join(static_folder, values['filename'])
mtime = os.path.getmtime(file_path)
values['_v'] = mtime