Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update website theme for newer Sphinx #15365 #22872

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 11 additions & 12 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,19 @@ lxml==4.9.2

# This version is mentioned in `site/source/docs/site/about.rst`.
# Please keep them in sync.
sphinx==2.4.4
sphinx==7.1.2
# See https://github.com/emscripten-core/emscripten/issues/21590
sphinxcontrib-applehelp<=1.0.4
sphinxcontrib-devhelp<=1.0.2
sphinxcontrib-htmlhelp<=2.0.0
sphinxcontrib-serializinghtml<=1.1.5
sphinxcontrib-qthelp<=1.0.3
alabaster<=0.7.12
pygments==2.17.2
# See https://github.com/readthedocs/readthedocs.org/issues/9038
jinja2<3.1
sphinxcontrib-applehelp==1.0.7
sphinxcontrib-devhelp==1.0.6
sphinxcontrib-htmlhelp>=2.0.0
sphinxcontrib-serializinghtml>=1.1.5
sphinxcontrib-qthelp==1.0.6
sphinxcontrib-jquery==4.0
alabaster<0.8,>=0.7
pygments>=2.13
jinja2>=3.0
lorsanta marked this conversation as resolved.
Show resolved Hide resolved

# Pin docutils because newer versions are not compatible with sphinx 2.4.4
docutils==0.17.1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about if we simply remove all of these dependencies except for the sphinx one ones?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I saw that sphinx 7.1.2 has jinja >= 3.0 as a requirement.

I think it's best to keep jinja2==3.0 to avoid future releases of jinja2 to break things.

What do you think?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think its best to only include direct dependencies here, up until the point where we have some reason to do otherwise.

But i'm no expert so if you think this is safer/better then I'm fine with it.

How about the rest of these indirect deps, can we remove those?

docutils<0.21,>=0.18.1
lorsanta marked this conversation as resolved.
Show resolved Hide resolved

# Needed by test/test_sockets.py
websockify==0.10.0
4 changes: 2 additions & 2 deletions site/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
# You can set these variables from the command line.
SPHINXOPTS = -W
SPHINXBUILD = sphinx-build
SPHINXVERSION = 2.4.4
SPHINXVERSION = 7.1.2
PAPER =
BUILDDIR = build

# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx version 2.4.4 installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx version 7.1.2 installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif

ifneq ($(shell $(SPHINXBUILD) --version), $(SPHINXBUILD) $(SPHINXVERSION))
Expand Down
99 changes: 94 additions & 5 deletions site/source/_themes/emscripten_sphinx_rtd_theme/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,109 @@
# University of Illinois/NCSA Open Source License. Both these licenses can be
# found in the LICENSE file.

"""Sphinx ReadTheDocs theme.
"""
Sphinx Read the Docs theme.

From https://github.com/ryan-roemer/sphinx-bootstrap-theme.

"""

import os
from os import path
from sys import version_info as python_version

VERSION = (0, 1, 6)
from sphinx import version_info as sphinx_version
from sphinx.locale import _
from sphinx.util.logging import getLogger

__version__ = ".".join(str(v) for v in VERSION)

__version__ = '3.0.1'
__version_full__ = __version__

logger = getLogger(__name__)


def get_html_theme_path():
"""Return list of HTML theme paths."""
cur_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
logger.warning(
_('Calling get_html_theme_path is deprecated. If you are calling it to define html_theme_path, you are safe to remove that code.')
)

cur_dir = path.abspath(path.dirname(path.dirname(__file__)))
return cur_dir


def config_initiated(app, config):
theme_options = config.html_theme_options or {}
if theme_options.get('canonical_url'):
logger.warning(
_('The canonical_url option is deprecated, use the html_baseurl option from Sphinx instead.')
)

if theme_options.get("analytics_id"):
logger.warning(
_('The analytics_id option is deprecated, use the sphinxcontrib-googleanalytics extension instead.')
)

if theme_options.get("analytics_anonymize_ip"):
logger.warning(
_('The analytics_anonymize_ip option is deprecated, use the sphinxcontrib-googleanalytics extension instead.')
)

if "extra_css_files" in config.html_context:
logger.warning(
_('The extra_css_file option is deprecated, use the html_css_files option from Sphinx instead.')
)


def extend_html_context(app, pagename, templatename, context, doctree):
# Add ``sphinx_version_info`` tuple for use in Jinja templates
context['sphinx_version_info'] = sphinx_version

# Inject all the Read the Docs environment variables in the context:
# https://docs.readthedocs.io/en/stable/reference/environment-variables.html
context['READTHEDOCS'] = os.environ.get("READTHEDOCS", False) == "True"
if context['READTHEDOCS']:
for key, value in os.environ.items():
if key.startswith("READTHEDOCS_"):
context[key] = value



# See http://www.sphinx-doc.org/en/stable/theming.html#distribute-your-theme-as-a-python-package
def setup(app):
if python_version[0] < 3:
logger.error("Python 2 is not supported with sphinx_rtd_theme, update to Python 3.")

app.require_sphinx('6.0')
if app.config.html4_writer:
logger.error("'html4_writer' is not supported with sphinx_rtd_theme.")

# Since Sphinx 6, jquery isn't bundled anymore and we need to ensure that
# the sphinxcontrib-jquery extension is enabled.
# See: https://dev.readthedocs.io/en/latest/design/sphinx-jquery.html
if sphinx_version >= (6, 0, 0):
# Documentation of Sphinx guarantees that an extension is added and
# enabled at most once.
# See: https://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.setup_extension
app.setup_extension("sphinxcontrib.jquery")
# However, we need to call the extension's callback since setup_extension doesn't do it
# See: https://github.com/sphinx-contrib/jquery/issues/23
from sphinxcontrib.jquery import add_js_files as jquery_add_js_files
jquery_add_js_files(app, app.config)

# Register the theme that can be referenced without adding a theme path
app.add_html_theme('sphinx_rtd_theme', path.abspath(path.dirname(__file__)))

# Add Sphinx message catalog for newer versions of Sphinx
# See http://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.add_message_catalog
rtd_locale_path = path.join(path.abspath(path.dirname(__file__)), 'locale')
app.add_message_catalog('sphinx', rtd_locale_path)
app.connect('config-inited', config_initiated)

# sphinx emits the permalink icon for headers, so choose one more in keeping with our theme
app.config.html_permalinks_icon = "\uf0c1"

# Extend the default context when rendering the templates.
app.connect("html-page-context", extend_html_context)

return {'parallel_read_safe': True, 'parallel_write_safe': True}
Loading