pax_global_header 0000666 0000000 0000000 00000000064 14706513077 0014524 g ustar 00root root 0000000 0000000 52 comment=e9821ca01df84b9ca672fe2df59d1795f8956f0b python-pallets-sphinx-themes-2.3.0/ 0000775 0000000 0000000 00000000000 14706513077 0017303 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/.editorconfig 0000664 0000000 0000000 00000000351 14706513077 0021757 0 ustar 00root root 0000000 0000000 root = true [*] indent_style = space indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true end_of_line = lf charset = utf-8 max_line_length = 88 [*.{css,html,js,json,jsx,scss,ts,tsx,yaml,yml}] indent_size = 2 python-pallets-sphinx-themes-2.3.0/.github/ 0000775 0000000 0000000 00000000000 14706513077 0020643 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14706513077 0022700 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/.github/workflows/lock.yaml 0000664 0000000 0000000 00000001225 14706513077 0024514 0 ustar 00root root 0000000 0000000 name: Lock inactive closed issues # Lock closed issues that have not received any further activity for two weeks. # This does not close open issues, only humans may do that. It is easier to # respond to new issues with fresh examples rather than continuing discussions # on old issues. on: schedule: - cron: '0 0 * * *' permissions: issues: write pull-requests: write concurrency: group: lock jobs: lock: runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1 with: issue-inactive-days: 14 pr-inactive-days: 14 discussion-inactive-days: 14 python-pallets-sphinx-themes-2.3.0/.github/workflows/pre-commit.yaml 0000664 0000000 0000000 00000001015 14706513077 0025635 0 ustar 00root root 0000000 0000000 name: pre-commit on: pull_request: push: branches: [main, '*.x'] jobs: main: runs-on: ubuntu-latest steps: - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 with: python-version: 3.x - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 - uses: pre-commit-ci/lite-action@5d6cc0eb514c891a40562a58a8e71576c5c7fb43 # v1.1.0 if: ${{ !cancelled() }} python-pallets-sphinx-themes-2.3.0/.github/workflows/publish.yaml 0000664 0000000 0000000 00000005164 14706513077 0025240 0 ustar 00root root 0000000 0000000 name: Publish on: push: tags: - '*' jobs: build: runs-on: ubuntu-latest outputs: hash: ${{ steps.hash.outputs.hash }} steps: - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 with: python-version: '3.x' cache: pip cache-dependency-path: requirements*/*.txt - run: pip install -r requirements/build.txt # Use the commit date instead of the current date during the build. - run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV - run: python -m build # Generate hashes used for provenance. - name: generate hash id: hash run: cd dist && echo "hash=$(sha256sum * | base64 -w0)" >> $GITHUB_OUTPUT - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: path: ./dist provenance: needs: [build] permissions: actions: read id-token: write contents: write # Can't pin with hash due to how this workflow works. uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0 with: base64-subjects: ${{ needs.build.outputs.hash }} create-release: # Upload the sdist, wheels, and provenance to a GitHub release. They remain # available as build artifacts for a while as well. needs: [provenance] runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 - name: create release run: > gh release create --draft --repo ${{ github.repository }} ${{ github.ref_name }} *.intoto.jsonl/* artifact/* env: GH_TOKEN: ${{ github.token }} publish-pypi: needs: [provenance] # Wait for approval before attempting to upload to PyPI. This allows reviewing the # files in the draft release. environment: name: publish url: https://pypi.org/project/Pallets-Sphinx-Themes/${{ github.ref_name }} runs-on: ubuntu-latest permissions: id-token: write steps: - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 - uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 # v1.10.3 with: repository-url: https://test.pypi.org/legacy/ packages-dir: artifact/ - uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 # v1.10.3 with: packages-dir: artifact/ python-pallets-sphinx-themes-2.3.0/.gitignore 0000664 0000000 0000000 00000000131 14706513077 0021266 0 ustar 00root root 0000000 0000000 .idea/ .vscode/ .venv*/ venv*/ __pycache__/ dist/ .coverage* htmlcov/ .tox/ docs/_build/ python-pallets-sphinx-themes-2.3.0/.pre-commit-config.yaml 0000664 0000000 0000000 00000000627 14706513077 0023571 0 ustar 00root root 0000000 0000000 ci: autoupdate_schedule: monthly repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.6.9 hooks: - id: ruff - id: ruff-format - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-merge-conflict - id: debug-statements - id: fix-byte-order-marker - id: trailing-whitespace - id: end-of-file-fixer python-pallets-sphinx-themes-2.3.0/.readthedocs.yaml 0000664 0000000 0000000 00000000321 14706513077 0022526 0 ustar 00root root 0000000 0000000 version: 2 build: os: ubuntu-24.04 tools: python: '3.12' python: install: - requirements: requirements/docs.txt - method: pip path: . sphinx: builder: dirhtml fail_on_warning: true python-pallets-sphinx-themes-2.3.0/CHANGES.rst 0000664 0000000 0000000 00000016455 14706513077 0021120 0 ustar 00root root 0000000 0000000 Version 2.3.0 ------------- Released 2024-10-24 - When getting the canonical URL on Read the Docs, replace the path with ``/en/stable/`` instead of ``/page/``. This can be configured with ``rtd_canonical_path``. :pr:`122` - The version banner can be disabled by setting ``version_banner = False``. On Read the Docs, it is disabled when building the ``stable`` version or PRs. :pr:`123` Version 2.2.0 ------------- Released 2024-10-15 - Get canonical URL from environment variable when building on Read the Docs. :pr:`117` - New version warning banner. Use JavaScript to query PyPI when viewing a page, rather than baking the warning into the build. New builds of old versions are no longer required for the banner to be correct. :pr:`117` - Generate 404 page using the sphinx-notfound-page extension. This fixes the URLs when the page is hosted so that it loads the CSS. :issue:`34` - Remove handling for ``singlehtml_sidebars`` config which predated Sphinx's support. :pr:`119` - Remove "babel" and "platter" theme variants which were undocumented and did not appear to be used by the relevant projects. :pr:`120` Version 2.1.3 ------------- Released 2024-04-29 - Allow Sphinx's parallel build feature. :issue:`88` Version 2.1.2 ------------- Released 2024-04-19 - Use modern packaging metadata with ``pyproject.toml`` instead of ``setup.cfg``. - Use ``flit_core`` instead of ``setuptools`` as build backend. - Compatibility with changes in Sphinx 7.3. :pr:`100` Version 2.1.1 ------------- Released 2023-06-08 - Remove leftover Python 2 compatibility code. :pr:`69` - Dotted underlines on links are smaller. :issue:`70` Version 2.1.0 ------------- Released 2023-04-25 - Drop support for Python 3.6 and 3.7. - Require Sphinx >= 3. - Remove previously deprecated code. - Fix table of contents overflow issue. Version 2.0.3 ------------- Released 2022-12-24 - Fix compatibility with ``packaging>=22``. Version 2.0.2 ------------- Released 2021-11-10 - Detect if Sphinx dirhtml builder is generating canonical URLs with ".html" and replace with the correct dir URL. :issue:`47` - ``canonical_url`` config is deprecated. Use Sphinx's built-in ``html_baseurl`` config instead. :pr:`53` - Address deprecations in Jinja 2.0. :pr:`54` Version 2.0.1 ------------- Released 2021-05-20 - Remove workaround for search URLs when using the ``dirhtml`` builder. The issue has been fixed in Sphinx and the workaround was causing the issue again. :issue:`39` - Remove ``html_context["readthedocs_docsearch"]`` for controlling whether Read the Docs' search is used. :issue:`40` - Add an ``ethicalads.html`` sidebar to have Read the Docs always show ads in the sidebar instead of other possible locations. The sidebar is enabled by default at the end of the list. :issue:`41` Version 2.0.0 ------------- Released 2021-05-11 - Drop Python < 3.6. - Update for Jinja 2.0. - Update for Click 8.0. Version 1.2.3 ------------- Released 2020-01-02 - Use built-in :mod:`importlib.metadata` on Python 3.8. :pr:`27` Version 1.2.2 ------------- Released 2019-07-04 - Make the version warning sticky so that it appears when linking to the middle of a document. :issue:`5` - Remove CSS for old ads. Version 1.2.1 ------------- Released 2019-07-29 - Sort versions taken from Read the Docs so that 2.10.x is considered newer than 2.9.x. :issue:`24` Version 1.2.0 ------------- Released 2019-07-26 - Use HTTPS for font URLs in CSS. :pr:`22` - Don't require ``sphinx.ext.autodoc`` to be enabled. - Implement the Jinja directives ``jinja:filters::``, ``jinja:tests::``, and ``jinja:nodes::``. - Generate a table of contents for Jinja filters and tests. - Update the ``babel`` and ``platter`` themes. Version 1.1.4 ------------- Released 2019-01-28 - Store a page's canonical URL in ``html_context["page_canonical_url"]`` rather than overwriting ``canonical_url``, for compatibility with Read the Docs. :pr:`21` Version 1.1.3 ------------- Released 2019-01-28 - Move the Read the Docs search flag to the ``footer`` block to ensure it executes after Read the Docs injects its data. :pr:`20` Version 1.1.2 ------------- Released 2018-09-24 - Strip ".x" placeholder when parsing versions for sidebar. :issue:`7`, :pr:`17` Version 1.1.1 ------------- Released 2018-09-16 - Add configurable ".x" placholder to versions, producing strings like "1.2.x". :issue:`6`, :pr:`12` - Add dependency on "packaging" to support older Sphinx versions. :issue:`9`, :pr:`11` - Backport ``shlex.quote`` for Python 2. :issue:`13`, :pr:`14` Version 1.1.0 ------------- Released 2018-08-28 - Modernize ``click`` theme. The ``.. click:example::`` and ``.. click:run::`` directives used by Click are available and ported to Python 3. - Modernize ``werkzeug`` theme. :pr:`4` - Modernize ``jinja`` theme. Local extensions used by Jinja are not available yet. - Remove theme entry points to make late configuration consistent. The themes are available when ``"pallets_sphinx_themes"`` is added to ``extensions``. - Only run event callbacks added by theme when the theme is actually in use. This allows the package to be installed without interfering with other themes. - Support ``html_context["versions"]`` in the format injected by Read the Docs. - Set ``html_context["readthedocs_docsearch"]`` to opt in to replacing Sphinx's built-in search with Read the Docs' new implementation. - Make version handling more robust for various configurations. - Autodoc skips docstrings that contain the line ``:internal:``. - Autodoc removes lines that start with ``:copyright:`` or ``:license:`` from module docstrings. - Add ``singlehtml_sidebars`` config for Sphinx < 1.8. - Add ``hide-header`` CSS class to hide the page header with ``.. rst-class:: hide-header``. The header is still useable by assistive technology. This is useful for replacing the header with a large logo image. - Disable the sidebar logo on the index page with ``html_theme_options["index_sidebar_logo"] = False``. Version 1.0.1 ------------- Released 2018-04-29 - Work around an issues with search when using the ``dirhtml`` builder. :pr:`3` Version 1.0.0 ------------- Released 2018-04-18 - Major rewrite of CSS and HTML templates to clean up and reduce complexity. Widen columns, improve responsive breakpoints. Currently all themes are available, but only ``pocoo`` and ``flask`` themes are modernized. - Parse ``html_context["versions"]``. These will be rendered in the ``versions.html`` sidebar. When viewing an old version, or the development version, a warning is displayed at the top of each page. - Add a ``ProjectLink`` named tuple. A list of these in ``html_context["project_links"]`` will be rendered in the ``project.html`` sidebar. - Add a ``get_version`` function to ensure a project is installed and get its version information. - Use ``html_context["canonical_url"]`` as a base URL to build a canonical URL link on each page. - Add Sphinx entry points for themes. - Rename from "pocoo-sphinx-themes". See commit `f675bfc`_ for the old themes from the docbuilder. .. _f675bfc: https://github.com/pallets/pallets-sphinx-themes/tree/f675bfc python-pallets-sphinx-themes-2.3.0/LICENSE.txt 0000664 0000000 0000000 00000002703 14706513077 0021130 0 ustar 00root root 0000000 0000000 Copyright 2007 Pallets Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. python-pallets-sphinx-themes-2.3.0/README.md 0000664 0000000 0000000 00000000570 14706513077 0020564 0 ustar 00root root 0000000 0000000 # Pallets Sphinx Themes Themes for the Pallets projects. If you're writing an extension, use the appropriate theme to make your documentation look consistent. Available themes: - flask - jinja - werkzeug - click Enable the extension and choose the theme in `docs/conf.py`: ```python extensions = [ "pallets_sphinx_themes", ... ] html_theme = "flask" ``` python-pallets-sphinx-themes-2.3.0/docs/ 0000775 0000000 0000000 00000000000 14706513077 0020233 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/docs/conf.py 0000664 0000000 0000000 00000003042 14706513077 0021531 0 ustar 00root root 0000000 0000000 from pallets_sphinx_themes import get_version # Project -------------------------------------------------------------- project = "Pallets-Sphinx-Themes" copyright = "2007 Pallets" author = "Pallets" release, version = get_version("pallets-sphinx-themes") # General -------------------------------------------------------------- default_role = "code" extensions = [ "sphinx.ext.autodoc", "sphinx.ext.extlinks", "sphinx.ext.intersphinx", "sphinxcontrib.log_cabinet", "myst_parser", "pallets_sphinx_themes", ] autodoc_member_order = "bysource" autodoc_typehints = "description" autodoc_preserve_defaults = True extlinks = { "issue": ("https://github.com/pallets/pallets-sphinx-themes/issues/%s", "#%s"), "pr": ("https://github.com/pallets/pallets-sphinx-themes/pull/%s", "#%s"), } intersphinx_mapping = { "python": ("https://docs.python.org/3/", None), } myst_enable_extensions = [ "fieldlist", ] myst_heading_anchors = 2 # HTML ----------------------------------------------------------------- html_theme = "flask" html_theme_options = {"index_sidebar_logo": False} html_sidebars = { "index": ["project.html", "localtoc.html", "searchbox.html", "ethicalads.html"], "**": ["localtoc.html", "relations.html", "searchbox.html", "ethicalads.html"], } singlehtml_sidebars = {"index": ["project.html", "localtoc.html", "ethicalads.html"]} html_title = f"{project} Documentation ({version})" html_copy_source = False html_show_sourcelink = False html_show_copyright = False html_use_index = False html_domain_indices = False python-pallets-sphinx-themes-2.3.0/docs/index.rst 0000664 0000000 0000000 00000000054 14706513077 0022073 0 ustar 00root root 0000000 0000000 Pallets Sphinx Themes ===================== python-pallets-sphinx-themes-2.3.0/pyproject.toml 0000664 0000000 0000000 00000003256 14706513077 0022225 0 ustar 00root root 0000000 0000000 [project] name = "Pallets-Sphinx-Themes" version = "2.3.0" description = "Sphinx themes for Pallets and related projects." readme = "README.md" license = { file = "LICENSE.txt" } maintainers = [{ name = "Pallets", email = "contact@palletsprojects.com" }] classifiers = [ "Development Status :: 5 - Production/Stable", "Framework :: Sphinx", "Framework :: Sphinx :: Theme", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Documentation", "Topic :: Documentation :: Sphinx", "Topic :: Software Development :: Documentation", ] requires-python = ">=3.8" dependencies = [ "packaging", "sphinx>=3", "sphinx-notfound-page", ] [project.urls] Donate = "https://palletsprojects.com/donate" Source = "https://github.com/pallets/pallets-sphinx-themes/" Chat = "https://discord.gg/pallets" [project.entry-points."pygments.styles"] pocoo = "pallets_sphinx_themes.themes.pocoo:PocooStyle" jinja = "pallets_sphinx_themes.themes.jinja:JinjaStyle" [build-system] requires = ["flit_core<4"] build-backend = "flit_core.buildapi" [tool.flit.module] name = "pallets_sphinx_themes" [tool.flit.sdist] include = [ "requirements/", "CHANGES.rst", ] [tool.ruff] src = ["src"] fix = true show-fixes = true output-format = "full" [tool.ruff.lint] select = [ "B", # flake8-bugbear "E", # pycodestyle error "F", # pyflakes "I", # isort "UP", # pyupgrade "W", # pycodestyle warning ] [tool.ruff.lint.isort] force-single-line = true order-by-type = false [tool.gha-update] tag-only = [ "slsa-framework/slsa-github-generator", ] python-pallets-sphinx-themes-2.3.0/requirements/ 0000775 0000000 0000000 00000000000 14706513077 0022026 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/requirements/build.in 0000664 0000000 0000000 00000000006 14706513077 0023451 0 ustar 00root root 0000000 0000000 build python-pallets-sphinx-themes-2.3.0/requirements/build.txt 0000664 0000000 0000000 00000000351 14706513077 0023665 0 ustar 00root root 0000000 0000000 # # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile build.in # build==1.2.2.post1 # via -r build.in packaging==24.1 # via build pyproject-hooks==1.2.0 # via build python-pallets-sphinx-themes-2.3.0/requirements/dev.in 0000664 0000000 0000000 00000000032 14706513077 0023127 0 ustar 00root root 0000000 0000000 -r docs.in pre-commit tox python-pallets-sphinx-themes-2.3.0/requirements/dev.txt 0000664 0000000 0000000 00000004012 14706513077 0023342 0 ustar 00root root 0000000 0000000 # # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile dev.in # alabaster==1.0.0 # via sphinx babel==2.16.0 # via sphinx cachetools==5.5.0 # via tox certifi==2024.8.30 # via requests cfgv==3.4.0 # via pre-commit chardet==5.2.0 # via tox charset-normalizer==3.4.0 # via requests colorama==0.4.6 # via tox distlib==0.3.9 # via virtualenv docutils==0.21.2 # via # myst-parser # sphinx filelock==3.16.1 # via # tox # virtualenv identify==2.6.1 # via pre-commit idna==3.10 # via requests imagesize==1.4.1 # via sphinx jinja2==3.1.4 # via # myst-parser # sphinx markdown-it-py==3.0.0 # via # mdit-py-plugins # myst-parser markupsafe==3.0.1 # via jinja2 mdit-py-plugins==0.4.2 # via myst-parser mdurl==0.1.2 # via markdown-it-py myst-parser==4.0.0 # via -r docs.in nodeenv==1.9.1 # via pre-commit packaging==24.1 # via # pallets-sphinx-themes # pyproject-api # sphinx # tox pallets-sphinx-themes==2.1.3 # via -r docs.in platformdirs==4.3.6 # via # tox # virtualenv pluggy==1.5.0 # via tox pre-commit==4.0.1 # via -r dev.in pygments==2.18.0 # via sphinx pyproject-api==1.8.0 # via tox pyyaml==6.0.2 # via # myst-parser # pre-commit requests==2.32.3 # via sphinx snowballstemmer==2.2.0 # via sphinx sphinx==8.1.3 # via # -r docs.in # myst-parser # pallets-sphinx-themes # sphinxcontrib-log-cabinet sphinxcontrib-applehelp==2.0.0 # via sphinx sphinxcontrib-devhelp==2.0.0 # via sphinx sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-log-cabinet==1.0.1 # via -r docs.in sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx tox==4.22.0 # via -r dev.in urllib3==2.2.3 # via requests virtualenv==20.26.6 # via # pre-commit # tox python-pallets-sphinx-themes-2.3.0/requirements/docs.in 0000664 0000000 0000000 00000000103 14706513077 0023300 0 ustar 00root root 0000000 0000000 myst-parser pallets-sphinx-themes sphinx sphinxcontrib-log-cabinet python-pallets-sphinx-themes-2.3.0/requirements/docs.txt 0000664 0000000 0000000 00000002654 14706513077 0023526 0 ustar 00root root 0000000 0000000 # # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile docs.in # alabaster==1.0.0 # via sphinx babel==2.16.0 # via sphinx certifi==2024.8.30 # via requests charset-normalizer==3.4.0 # via requests docutils==0.21.2 # via # myst-parser # sphinx idna==3.10 # via requests imagesize==1.4.1 # via sphinx jinja2==3.1.4 # via # myst-parser # sphinx markdown-it-py==3.0.0 # via # mdit-py-plugins # myst-parser markupsafe==3.0.1 # via jinja2 mdit-py-plugins==0.4.2 # via myst-parser mdurl==0.1.2 # via markdown-it-py myst-parser==4.0.0 # via -r docs.in packaging==24.1 # via # pallets-sphinx-themes # sphinx pallets-sphinx-themes==2.1.3 # via -r docs.in pygments==2.18.0 # via sphinx pyyaml==6.0.2 # via myst-parser requests==2.32.3 # via sphinx snowballstemmer==2.2.0 # via sphinx sphinx==8.1.3 # via # -r docs.in # myst-parser # pallets-sphinx-themes # sphinxcontrib-log-cabinet sphinxcontrib-applehelp==2.0.0 # via sphinx sphinxcontrib-devhelp==2.0.0 # via sphinx sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-log-cabinet==1.0.1 # via -r docs.in sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx urllib3==2.2.3 # via requests python-pallets-sphinx-themes-2.3.0/src/ 0000775 0000000 0000000 00000000000 14706513077 0020072 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/ 0000775 0000000 0000000 00000000000 14706513077 0024474 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/__init__.py 0000664 0000000 0000000 00000014672 14706513077 0026617 0 ustar 00root root 0000000 0000000 import inspect import os import re import sys import textwrap from collections import namedtuple from importlib import metadata as importlib_metadata from urllib.parse import urlsplit from sphinx.application import Sphinx from sphinx.builders.dirhtml import DirectoryHTMLBuilder from sphinx.errors import ExtensionError from .theme_check import only_pallets_theme from .theme_check import set_is_pallets_theme def setup(app): base = os.path.join(os.path.dirname(__file__), "themes") for name in os.listdir(base): path = os.path.join(base, name) if os.path.isdir(path): app.add_html_theme(name, path) app.add_config_value("is_pallets_theme", None, "html") app.add_config_value("rtd_canonical_path", "/en/stable/", "html") app.add_config_value("version_banner", True, "html") # Use the sphinx-notfound-page extension to generate a 404 page with valid # URLs. Only configure it if it's not already configured. if "notfound.extension" not in app.config.extensions: app.config.extensions.append("notfound.extension") app.config.notfound_context = { "title": "Page Not Found", "body": """
The page you requested does not exist. You may have followed a bad
link, or the page may have been moved or removed.
""",
}
if "READTHEDOCS" not in os.environ:
# Disable the default prefix outside of Read the Docs.
app.config.notfound_urls_prefix = None
app.connect("builder-inited", set_is_pallets_theme)
app.connect("builder-inited", find_base_canonical_url)
app.connect("builder-inited", add_theme_files)
app.connect("html-page-context", canonical_url)
try:
app.connect("autodoc-skip-member", skip_internal)
app.connect("autodoc-process-docstring", cut_module_meta)
except ExtensionError:
pass
from .themes import click as click_ext
from .themes import jinja as jinja_ext
click_ext.setup(app)
jinja_ext.setup(app)
own_release, _ = get_version(__name__)
return {"version": own_release, "parallel_read_safe": True}
@only_pallets_theme()
def find_base_canonical_url(app: Sphinx) -> None:
"""When building on Read the Docs, build the base canonical URL from the
environment variable if it's not given in the config. Replace the path with
``rtd_canonical_path``, which defaults to ``/en/stable/``.
"""
if app.config.html_baseurl:
return
if "READTHEDOCS_CANONICAL_URL" in os.environ:
parts = urlsplit(os.environ["READTHEDOCS_CANONICAL_URL"])
path = app.config.rtd_canonical_path
app.config.html_baseurl = f"{parts.scheme}://{parts.netloc}{path}"
@only_pallets_theme()
def add_theme_files(app: Sphinx) -> None:
# Add the JavaScript for the version warning banner if ``version_banner`` is
# enabled. On Read the Docs, don't include it for stable or PR builds.
# Include the project and version as data attributes that the script will
# access. The project name is assumed to be the PyPI name, and is normalized
# to avoid a redirect.
rtd_version = os.environ.get("READTHEDOCS_VERSION")
rtd_version_type = os.environ.get("READTHEDOCS_VERSION_TYPE")
if app.config.version_banner and (
rtd_version is None # not on read the docs
or (rtd_version != "stable" and rtd_version_type in {"branch", "tag"})
):
app.add_js_file(
"describe_version.js",
**{
"data-project": re.sub(r"[-_.]+", "-", app.config.project).lower(),
"data-version": app.config.version,
},
)
@only_pallets_theme()
def canonical_url(app: Sphinx, pagename, templatename, context, doctree):
"""Sphinx 1.8 builds a canonical URL if ``html_baseurl`` config is
set. However, it builds a URL ending with ".html" when using the
dirhtml builder, which is incorrect. Detect this and generate the
correct URL for each page.
"""
base = app.config.html_baseurl
if (
not base
or not isinstance(app.builder, DirectoryHTMLBuilder)
or not context["pageurl"]
or not context["pageurl"].endswith(".html")
):
return
# Fix pageurl for dirhtml builder if this version of Sphinx still
# generates .html URLs.
target = app.builder.get_target_uri(pagename)
context["pageurl"] = base + target
@only_pallets_theme()
def skip_internal(app, what, name, obj, skip, options):
"""Skip rendering autodoc when the docstring contains a line with
only the string `:internal:`.
"""
docstring = inspect.getdoc(obj) or ""
if skip or re.search(r"^\s*:internal:\s*$", docstring, re.M) is not None:
return True
@only_pallets_theme()
def cut_module_meta(app, what, name, obj, options, lines):
"""Don't render lines that start with ``:copyright:`` or
``:license:`` when rendering module autodoc. These lines are useful
meta information in the source code, but are noisy in the docs.
"""
if what != "module":
return
lines[:] = [
line for line in lines if not line.startswith((":copyright:", ":license:"))
]
def get_version(name, version_length=2, placeholder="x"):
"""Ensures that the named package is installed and returns version
strings to be used by Sphinx.
Sphinx uses ``version`` to mean an abbreviated form of the full
version string, which is called ``release``. In ``conf.py``::
release, version = get_version("Flask")
# release = 1.0.x, version = 1.0.3.dev0
:param name: Name of package to get.
:param version_length: How many values from ``release`` to use for
``version``.
:param placeholder: Extra suffix to add to the version. The default
produces versions like ``1.2.x``.
:return: ``(release, version)`` tuple.
"""
try:
release = importlib_metadata.version(name)
except ImportError:
print(
textwrap.fill(
f"'{name}' must be installed to build the documentation."
" Install from source using `pip install -e .` in a virtualenv."
)
)
sys.exit(1)
version = ".".join(release.split(".", version_length)[:version_length])
if placeholder:
version = f"{version}.{placeholder}"
return release, version
#: ``(title, url)`` named tuple that will be rendered with
ProjectLink = namedtuple("ProjectLink", ("title", "url"))
python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/theme_check.py 0000664 0000000 0000000 00000002456 14706513077 0027314 0 ustar 00root root 0000000 0000000 from functools import wraps
from sphinx.theming import HTMLThemeFactory
def set_is_pallets_theme(app):
"""Set the ``is_pallets_theme`` config to ``True`` if the current
theme is a decedent of the ``pocoo`` theme.
"""
if app.config.is_pallets_theme is not None:
return
theme = getattr(app.builder, "theme", None)
if theme is None:
app.config.is_pallets_theme = False
return
pocoo_dir = HTMLThemeFactory(app).create("pocoo").get_theme_dirs()[0]
app.config.is_pallets_theme = pocoo_dir in theme.get_theme_dirs()
def only_pallets_theme(default=None):
"""Create a decorator that calls a function only if the
``is_pallets_theme`` config is ``True``.
Used to prevent Sphinx event callbacks from doing anything if the
Pallets themes are installed but not used. ::
@only_pallets_theme()
def inject_value(app):
...
app.connect("builder-inited", inject_value)
:param default: Value to return if a Pallets theme is not in use.
:return: A decorator.
"""
def decorator(f):
@wraps(f)
def wrapped(app, *args, **kwargs):
if not app.config.is_pallets_theme:
return default
return f(app, *args, **kwargs)
return wrapped
return decorator
python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/ 0000775 0000000 0000000 00000000000 14706513077 0025761 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/__init__.py 0000664 0000000 0000000 00000000000 14706513077 0030060 0 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/click/ 0000775 0000000 0000000 00000000000 14706513077 0027046 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/click/__init__.py 0000664 0000000 0000000 00000000256 14706513077 0031162 0 ustar 00root root 0000000 0000000 def setup(app):
"""Load the Click extension if Click is installed."""
try:
from . import domain
except ImportError:
return
domain.setup(app)
python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/click/domain.py 0000664 0000000 0000000 00000017237 14706513077 0030701 0 ustar 00root root 0000000 0000000 import contextlib
import shlex
import subprocess
import sys
import tempfile
from functools import partial
import click
from click.testing import CliRunner
from click.testing import EchoingStdin
from docutils import nodes
from docutils.parsers.rst import Directive
from docutils.statemachine import ViewList
from sphinx.domains import Domain
class EofEchoingStdin(EchoingStdin):
"""Like :class:`click.testing.EchoingStdin` but adds a visible
``^D`` in place of the EOT character (``\x04``).
:meth:`ExampleRunner.invoke` adds ``\x04`` when
``terminate_input=True``.
"""
def _echo(self, rv):
eof = rv[-1] == b"\x04"[0]
if eof:
rv = rv[:-1]
if not self._paused:
self._output.write(rv)
if eof:
self._output.write(b"^D\n")
return rv
@contextlib.contextmanager
def patch_modules():
"""Patch modules to work better with :meth:`ExampleRunner.invoke`.
``subprocess.call` output is redirected to ``click.echo`` so it
shows up in the example output.
"""
old_call = subprocess.call
def dummy_call(*args, **kwargs):
with tempfile.TemporaryFile("wb+") as f:
kwargs["stdout"] = f
kwargs["stderr"] = f
rv = subprocess.Popen(*args, **kwargs).wait()
f.seek(0)
click.echo(f.read().decode("utf-8", "replace").rstrip())
return rv
subprocess.call = dummy_call
try:
yield
finally:
subprocess.call = old_call
class ExampleRunner(CliRunner):
def __init__(self):
super().__init__(echo_stdin=True)
self.namespace = {"click": click, "__file__": "dummy.py"}
@contextlib.contextmanager
def isolation(self, *args, **kwargs):
iso = super().isolation(*args, **kwargs)
with iso as streams:
try:
buffer = sys.stdin.buffer
except AttributeError:
buffer = sys.stdin
# FIXME: We need to replace EchoingStdin with our custom
# class that outputs "^D". At this point we know sys.stdin
# has been patched so it's safe to reassign the class.
# Remove this once EchoingStdin is overridable.
buffer.__class__ = EofEchoingStdin
yield streams
def invoke(
self,
cli,
args=None,
prog_name=None,
input=None,
terminate_input=False,
env=None,
_output_lines=None,
**extra,
):
"""Like :meth:`CliRunner.invoke` but displays what the user
would enter in the terminal for env vars, command args, and
prompts.
:param terminate_input: Whether to display "^D" after a list of
input.
:param _output_lines: A list used internally to collect lines to
be displayed.
"""
output_lines = _output_lines if _output_lines is not None else []
if env:
for key, value in sorted(env.items()):
value = shlex.quote(value)
output_lines.append(f"$ export {key}={value}")
args = args or []
if prog_name is None:
prog_name = cli.name.replace("_", "-")
output_lines.append(f"$ {prog_name} {shlex.join(args)}".rstrip())
# remove "python" from command
prog_name = prog_name.rsplit(" ", 1)[-1]
if isinstance(input, (tuple, list)):
input = "\n".join(input) + "\n"
if terminate_input:
input += "\x04"
result = super().invoke(
cli=cli, args=args, input=input, env=env, prog_name=prog_name, **extra
)
output_lines.extend(result.output.splitlines())
return result
def declare_example(self, source):
"""Execute the given code, adding it to the runner's namespace."""
with patch_modules():
code = compile(source, "Contents
{{ toc }}
{%- endif %}
python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/pocoo/project.html 0000664 0000000 0000000 00000000255 14706513077 0031436 0 ustar 00root root 0000000 0000000 {% if project_links %}
Project Links
{% for item in project_links %}
{%- endif %}
python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/pocoo/relations.html 0000664 0000000 0000000 00000001205 14706513077 0031764 0 ustar 00root root 0000000 0000000 Navigation
python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/pocoo/static/ 0000775 0000000 0000000 00000000000 14706513077 0030367 5 ustar 00root root 0000000 0000000 python-pallets-sphinx-themes-2.3.0/src/pallets_sphinx_themes/themes/pocoo/static/describe_version.js0000664 0000000 0000000 00000014313 14706513077 0034254 0 ustar 00root root 0000000 0000000 /**
* Match a PEP 440 version string. The full regex given in PEP 440 is not used.
* This subset covers what we expect to encounter in our projects.
*/
const versionRe = new RegExp([
"^",
"(?:(?{% for parent in parents %}
{% endif %}
{% endif %}{% endfor %}
{% if prev %}