Append a hash ?digest to CSS files for cache-busting by hugovk · Pull Request #108 · python/python-docs-theme · GitHub
Skip to content

Append a hash ?digest to CSS files for cache-busting - #108

Merged
hugovk merged 1 commit into
python:mainfrom
hugovk:add-hash-digest-to-css
Feb 25, 2023
Merged

hugovk merged 1 commit into
python:mainfrom
hugovk:add-hash-digest-to-css

Conversation

@hugovk

@hugovk hugovk commented Feb 16, 2023

Copy link
Copy Markdown
Member

Fix #78.

Append a ?digest=hash to the end of the pydoctheme.css, computed from the file contents, so when a new CSS file is deployed, the old one is no longer used from the browser cache.

For example:

<link rel="stylesheet" type="text/css" href="_static/pydoctheme.css?digest=afc8307635b40ad4bb21df93e5fc348bcdad7f27" />

This is based on how @pradyunsg's Furo theme does it:

https://github.com/pradyunsg/furo/blob/193643fdb6787501195555244f4a9e953ef544bb/src/furo/__init__.py#L149-L161

Demo

View the source of pages at https://python-docs-theme-previews--108.org.readthedocs.build/en/108/

@hugovk
hugovk merged commit 6bb2816 into python:main Feb 25, 2023
@hugovk
hugovk deleted the add-hash-digest-to-css branch February 25, 2023 09:03
@hugovk hugovk mentioned this pull request Mar 6, 2023
@m-aciek

m-aciek commented Mar 11, 2023

Copy link
Copy Markdown
Contributor

@hugovk

hugovk commented Mar 11, 2023

Copy link
Copy Markdown
Member Author

Thanks for reporting.

Sphinx 3.4.3: context["css_files"]=[]

Sphinx 6.1.3: context["css_files"]=['_static/pygments.css', '_static/pydoctheme.css']


Options include pinning python-docs-theme, or ideally upgrading Sphinx for the other version branches.

But from a practical maintenance point of view, shall we just skip this for older Sphinx versions?

commit 8b88430553fdaa1d7a85296a106158b5faf99a4b
Author: Hugo van Kemenade <hugovk@users.noreply.github.com>
Date:   Sat Mar 11 13:32:42 2023 +0200

    Skip cache-busting for old Sphinx

diff --git a/python_docs_theme/__init__.py b/python_docs_theme/__init__.py
index 62b16f0..bbe1352 100644
--- a/python_docs_theme/__init__.py
+++ b/python_docs_theme/__init__.py
@@ -37,7 +37,7 @@ def _html_page_context(
 
     assert isinstance(app.builder, StandaloneHTMLBuilder)
 
-    if "css_files" in context:
+    if sphinx.version_info >= (4,) and "css_files" in context:
         if "_static/pydoctheme.css" not in context["css_files"]:
             raise ValueError(
                 "This documentation is not using `pydoctheme.css` as the stylesheet. "

@hugovk hugovk mentioned this pull request Mar 11, 2023
10 tasks
@m-aciek

m-aciek commented Mar 11, 2023

Copy link
Copy Markdown
Contributor

I think skipping is most pragmatic solution. 👍 I was also thinking about pinning, but the downside is it would prevent users from having another fixes from this release. When having similar conversation earlier, upgrading Sphinx wasn't told to be good option for already published stable releases, because of Linux distributions that provide Sphinx as a system package, if I recall correctly.

@hugovk

hugovk commented Mar 11, 2023

Copy link
Copy Markdown
Member Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Theme issue (or Firefox cache issue?)

3 participants