Skip to content

Commit

Permalink
Implement cache busting: append a suffix to CSS and JS URLs
Browse files Browse the repository at this point in the history
  • Loading branch information
oprypin committed May 2, 2021
1 parent 7dbc613 commit a677dd7
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
4 changes: 2 additions & 2 deletions mkdocs/commands/build.py
Expand Up @@ -36,9 +36,9 @@ def get_context(nav, files, config, page=None, base_url=''):
if page is not None:
base_url = utils.get_relative_url('.', page.url)

extra_javascript = utils.create_media_urls(config['extra_javascript'], page, base_url)
extra_javascript = utils.create_media_urls(config['site_dir'], config['extra_javascript'], page, base_url)

extra_css = utils.create_media_urls(config['extra_css'], page, base_url)
extra_css = utils.create_media_urls(config['site_dir'], config['extra_css'], page, base_url)

if isinstance(files, Files):
files = files.documentation_pages()
Expand Down
15 changes: 14 additions & 1 deletion mkdocs/utils/__init__.py
Expand Up @@ -14,6 +14,7 @@
import fnmatch
import posixpath
import functools
import hashlib
import importlib_metadata
from collections import defaultdict
from datetime import datetime, timezone
Expand Down Expand Up @@ -296,10 +297,22 @@ def _get_rel_path(path, base, base_is_url):
return posixpath.join(base, path)


def create_media_urls(path_list, page=None, base=''):
@functools.lru_cache()
def _file_digest(filename):
with open(filename, 'rb') as f:
content = f.read()
return hashlib.sha256(content).hexdigest()[:8]


def create_media_urls(site_dir, path_list, page=None, base=''):
"""
Return a list of URLs relative to the given page or using the base.
"""
for i, path in enumerate(path_list):
try:
path_list[i] += '?' + _file_digest(os.path.join(site_dir, path))
except FileNotFoundError:
pass
return [normalize_url(path, page, base) for path in path_list]


Expand Down

0 comments on commit a677dd7

Please sign in to comment.