mystx.version_switcher 源代码

import os
from pathlib import Path
from sphinx.application import Sphinx
from sphinx.config import Config
from sphinx.util.typing import ExtensionMetadata
from sphinx.util import logging
[文档] logger = logging.getLogger(__name__)
[文档] def sphinx_setup(app: Sphinx, config: Config) -> ExtensionMetadata: logger.info("正在配置版本切换器") json_url = getattr(config, "version_switcher_json_url", "") release = config.release # Get the version from the environment or default to None version_match = os.environ.get("READTHEDOCS_VERSION") # Determine which version to use based on environment or release string if not version_match or version_match.isdigit() or version_match == "latest": # For local development, infer the version from the package if any(marker in release for marker in ("dev", "rc")): version_match = "dev" json_url = "_static/switcher.json" #str(Path(app.outdir)/"_static/switcher.json") else: version_match = f"v{release}" elif version_match == "stable": version_match = f"v{release}" logger.info(f"配置 version switcher: json_url={json_url}, version_match={version_match}") config["html_theme_options"].update({"switcher": { "json_url": json_url, "version_match": version_match, }, "primary_sidebar_end": ["version-switcher"], }) # -- To demonstrate ReadTheDocs switcher ------------------------------------- # This links a few JS and CSS files that mimic the environment that RTD uses # so that we can test RTD-like behavior. We don't need to run it on RTD and we # don't wanted it loaded in GitHub Actions because it messes up the lighthouse # results. if not os.environ.get("READTHEDOCS") and not os.environ.get("GITHUB_ACTIONS"): app.add_css_file( "https://assets.readthedocs.org/static/css/readthedocs-doc-embed.css" ) app.add_css_file("https://assets.readthedocs.org/static/css/badge_only.css") # Create the dummy data file so we can link it # ref: https://github.com/readthedocs/readthedocs.org/blob/bc3e147770e5740314a8e8c33fec5d111c850498/readthedocs/core/static-src/core/js/doc-embed/footer.js # noqa: E501 app.add_js_file("rtd-data.js") app.add_js_file( "https://assets.readthedocs.org/static/javascript/readthedocs-doc-embed.js", priority=501, )