Skip to main content

Sphinx Extension: OpenAPI

PyPI PyPI - License

Description

This Sphinx extension allows for downloading updated OpenAPI json + yaml specs for use with the sphinxcontrib.redoc extension.

Setup

Add the following to your conf.py (includes redoc extension setup):

from pathlib import Path

html_context = {}  # This is usually already defined for other themes/extensions
extensions = [
    'sphinx_openapi',
    'sphinxcontrib.redoc',
]

# -- OpenAPI Shared: Used in multiple extensions --------------------------

# Downloads json|yaml files to here
openapi_dir_path = Path("_static/specs").absolute().as_posix()

# openapi_stop_build_on_error = manifest_is_production_stage  # Only stop if production, else just show errs
openapi_stop_build_on_error = True  # TEST - DELETE ME

# Link here from rst with explicit ".html" ext (!) but NOT from a doctree
openapi_generated_file_posix_path = Path("content/-/api/index").as_posix()  # Parses to forward/slashes/

# -- Extension: sphinx_openapi (OpenAPI Local Download/Updater) -----------
# Used in combination with the sphinxcontrib.redoc extension
# Use OpenAPI ext to download/update → redoc ext to generate

openapi_use_xbe_workarounds = True  # We have some floating workarounds; TODO: Fix + Remove
openapi_spec_url_noext = "https://api.demo.goxbe.cloud/v1/openapi"  # Swap this with your own
openapi_file_type = "json"  # or yaml; we'll download them both but generate from only 1
openapi_use_xbe_workaround = True  # We have some floating workarounds within the extension; TODO: Fix + remove

# -- Extension: sphinxcontrib.redoc --------------------------------------
# OpenAPI Docgen: Similar to sphinxcontrib-openapi, but +1 column for example responses
# (!) Prereq: OpenAPI Local Download (above)
# Doc | https://sphinxcontrib-redoc.readthedocs.io/en/stable
# Demo | https://sphinxcontrib-redoc.readthedocs.io/en/stable/api/github/

# (!) Works around a critical bug that default grabs old 1.x ver (that !supports OpenAPI 3+)
redoc_uri = "https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"

# Intentional forward/slashes/ for html; eg: "_static/specs/openapi.json"
xbe_spec = Path(openapi_dir_path, "openapi.json")

redoc = [{
    "name": "Xsolla Backend API",
    "page": openapi_generated_file_posix_path,  # content/-/api/index
    "spec": Path("_static/specs/openapi.json"),
    "embed": True,  # Local file only (!) but embed is less powerful
    "template": Path("_templates/redoc.j2"),
    "opts": {
        "lazy-rendering": True,  # Formerly called `lazy`; almost required for giant docs
        "required-props-first": True,  # Useful, (!) but slower
        "native-scrollbars": False,  # Improves perf on big specs when False
        "expand-responses": [],  # "200", "201",
        "suppress-warnings": False,
        "hide-hostname": False,
        "untrusted-spec": False,
    },
}]

print(f'[conf.py::sphinxcontrib.redoc] Build from redoc[0].spec: {redoc[0]["spec"]}')
print(f'[conf.py::sphinxcontrib.redoc] Displaying at redoc[0].page: {redoc[0]["page"]}')
print("")

Requirements

  • Python>=3.6
  • Sphinx>=7

This may work with older versions, but has not been tested.

Entry Point

See setup(app) definition at sphinx_openapi.py.

Tested in

  • Windows 11 via PowerShell 7
  • Ubuntu 22.04 via ReadTheDocs (RTD) CI
  • Python 3.10~3.12
  • Sphinx 7~8

Notes

  • __init__.py is required for both external pathing and to treat the directory as a pkg
  • @ XBE Docs devs: In conf.py, add openapi_use_xbe_workarounds = True, for now, for WIP bug workarounds

Metadata

Release files for sphinx-openapi 1.0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sphinx-openapi 1.0.10
File Size Uploaded
sphinx_openapi-1.0.10.tar.gz 8.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sphinx-openapi 1.0.10
File Interpreter ABI Platform
sphinx_openapi-1.0.10-py3-none-any.whl Python 3 none any Details

Total release size: 20.7 kB

Release files / sphinx_openapi-1.0.10.tar.gz

Download URL sphinx_openapi-1.0.10.tar.gz
Size 8.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f0cc70e5920a63652e006200ad86cc0efc735418c94d93d20fe32bf8d85a5e22
BLAKE2b-256 checksum
How to use checksums
62dabc39547239137a5467b24ed54c6e05cddea580e6f6549443b82eb8fa0063
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.10.16

Release files / sphinx_openapi-1.0.10-py3-none-any.whl

Download URL sphinx_openapi-1.0.10-py3-none-any.whl
Size 12.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ca86429a6c801a34fabe838d92cd7585c6356f7a65c8d3606cdd903305c74593
BLAKE2b-256 checksum
How to use checksums
ba65459a2db2a41112e7d8cec5f31930560fec3e72b136d2320b37dff7a32b77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.10.16

Release history Release notifications | RSS feed

This release

1.0.10 This release

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page