This is an automated email from the ASF dual-hosted git repository.

jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new dc2e21b39bf Replace Sphinx Redoc with Swagger API Docs (#67390)
dc2e21b39bf is described below

commit dc2e21b39bfee9c820a6847495f5747de64397be
Author: Jens Scheffler <[email protected]>
AuthorDate: Fri May 29 11:40:40 2026 +0200

    Replace Sphinx Redoc with Swagger API Docs (#67390)
    
    * Replace Sphinx Redoc with Swagger API Docs
    
    * Upgrade Swagger version
    
    * Fix CSS for dark mode
    
    * Upgrade swagger-plugin-for-sphinx>=7.1.0 and remove mirror logic
    
    * Cleanup
---
 airflow-core/docs/conf.py                          | 39 +++--------
 .../auth-manager/simple/sam-token-api-ref.rst      |  6 +-
 airflow-core/docs/stable-rest-api-ref.rst          | 10 +--
 airflow-ctl/docs/conf.py                           |  7 --
 devel-common/pyproject.toml                        |  5 +-
 devel-common/sphinx_design/static/custom.css       | 50 +++++++++++++++
 devel-common/src/docs/provider_conf.py             | 75 ++++++----------------
 devel-common/src/docs/utils/conf_constants.py      | 17 +++--
 .../docs/edge-api-ref.rst}                         |  9 ++-
 providers/edge3/docs/index.rst                     |  1 +
 providers/fab/docs/api-ref/fab-api-ref.rst         |  5 +-
 providers/keycloak/docs/api-ref/token-api-ref.rst  |  5 +-
 pyproject.toml                                     |  7 ++
 uv.lock                                            | 40 ++++++------
 14 files changed, 140 insertions(+), 136 deletions(-)

diff --git a/airflow-core/docs/conf.py b/airflow-core/docs/conf.py
index 71e2b0cd06a..d8e0d76ef53 100644
--- a/airflow-core/docs/conf.py
+++ b/airflow-core/docs/conf.py
@@ -24,7 +24,6 @@ import logging
 import os
 import pathlib
 import re
-from pathlib import Path
 from typing import Any
 
 from docs.utils.conf_constants import (
@@ -37,12 +36,14 @@ from docs.utils.conf_constants import (
     AUTOAPI_OPTIONS,
     BASIC_AUTOAPI_IGNORE_PATTERNS,
     BASIC_SPHINX_EXTENSIONS,
-    REDOC_SCRIPT_URL,
     SMARTQUOTES_EXCLUDES,
     SPELLING_WORDLIST_PATH,
     SPHINX_DESIGN_STATIC_PATH,
-    SPHINX_REDOC_EXTENSIONS,
+    SPHINX_SWAGGER_EXTENSION,
     SUPPRESS_WARNINGS,
+    SWAGGER_BUNDLE_URI,
+    SWAGGER_CSS_URI,
+    SWAGGER_PRESENT_URI,
     filter_autoapi_ignore_entries,
     get_autodoc_mock_imports,
     get_configs_and_deprecations,
@@ -58,8 +59,6 @@ from docs.utils.conf_constants import (
 from packaging.version import Version, parse as parse_version
 
 import airflow
-from airflow.api_fastapi.auth.managers.simple.openapi import __file__ as 
sam_openapi_file
-from airflow.api_fastapi.core_api.openapi import __file__ as main_openapi_file
 from airflow.configuration import retrieve_configuration_description
 
 PACKAGE_NAME = "apache-airflow"
@@ -91,11 +90,12 @@ smartquotes_excludes = SMARTQUOTES_EXCLUDES
 # ones.
 extensions = BASIC_SPHINX_EXTENSIONS
 
-# -- Options for sphinxcontrib.redoc 
-------------------------------------------
-# See: https://sphinxcontrib-redoc.readthedocs.io/en/stable/
+extensions.append(SPHINX_SWAGGER_EXTENSION)
 
-extensions.extend(SPHINX_REDOC_EXTENSIONS)
-redoc_script_url = REDOC_SCRIPT_URL
+swagger_present_uri = SWAGGER_PRESENT_URI
+swagger_bundle_uri = SWAGGER_BUNDLE_URI
+swagger_css_uri = SWAGGER_CSS_URI
+swagger_mirror_external_resources = True  # Ensure we embed external resources 
prevent tracking
 
 extensions.extend(
     [
@@ -357,27 +357,6 @@ spelling_ignore_importable_modules = True
 
 graphviz_output_format = "svg"
 
-main_openapi_path = 
Path(main_openapi_file).parent.joinpath("v2-rest-api-generated.yaml")
-sam_openapi_path = 
Path(sam_openapi_file).parent.joinpath("v2-simple-auth-manager-generated.yaml")
-redoc = [
-    {
-        "name": "Simple auth manager token API",
-        "page": "core-concepts/auth-manager/simple/sam-token-api-ref",
-        "spec": sam_openapi_path.as_posix(),
-        "opts": {
-            "hide-hostname": True,
-        },
-    },
-    {
-        "name": "Airflow REST API",
-        "page": "stable-rest-api-ref",
-        "spec": main_openapi_path.as_posix(),
-        "opts": {
-            "hide-hostname": True,
-        },
-    },
-]
-
 
 def setup(sphinx):
     sphinx.connect("autoapi-skip-member", skip_util_classes_extension)
diff --git 
a/airflow-core/docs/core-concepts/auth-manager/simple/sam-token-api-ref.rst 
b/airflow-core/docs/core-concepts/auth-manager/simple/sam-token-api-ref.rst
index 02fd335086d..518e6e97449 100644
--- a/airflow-core/docs/core-concepts/auth-manager/simple/sam-token-api-ref.rst
+++ b/airflow-core/docs/core-concepts/auth-manager/simple/sam-token-api-ref.rst
@@ -19,5 +19,7 @@
 Simple auth manager token API
 =============================
 
-It's a stub file. It will be converted automatically during the build process
-to the valid documentation by the Sphinx plugin. See: /docs/conf.py
+.. swagger-plugin:: 
../../../../src/airflow/api_fastapi/auth/managers/simple/openapi/v2-simple-auth-manager-generated.yaml
+    :id: sam-token-api-ref
+    :page-title: Simple auth manager token API
+    :swagger-options: { "tryItOutEnabled": "false", "supportedSubmitMethods": 
[] }
diff --git a/airflow-core/docs/stable-rest-api-ref.rst 
b/airflow-core/docs/stable-rest-api-ref.rst
index a02e89b5a59..bde135f3ec7 100644
--- a/airflow-core/docs/stable-rest-api-ref.rst
+++ b/airflow-core/docs/stable-rest-api-ref.rst
@@ -16,8 +16,10 @@
     specific language governing permissions and limitations
     under the License.
 
-Airflow public API reference
-============================
+Airflow public REST API reference
+=================================
 
-It's a stub file. It will be converted automatically during the build process
-to the valid documentation by the Sphinx plugin. See: airflow-core/docs/conf.py
+.. swagger-plugin:: 
../src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml
+    :id: core-rest-api-ref
+    :page-title: Airflow public REST API
+    :swagger-options: { "tryItOutEnabled": "false", "supportedSubmitMethods": 
[] }
diff --git a/airflow-ctl/docs/conf.py b/airflow-ctl/docs/conf.py
index 5a19b2adea3..055de186d3e 100644
--- a/airflow-ctl/docs/conf.py
+++ b/airflow-ctl/docs/conf.py
@@ -33,11 +33,9 @@ from docs.utils.conf_constants import (
     AUTOAPI_OPTIONS,
     BASIC_AUTOAPI_IGNORE_PATTERNS,
     BASIC_SPHINX_EXTENSIONS,
-    REDOC_SCRIPT_URL,
     SMARTQUOTES_EXCLUDES,
     SPELLING_WORDLIST_PATH,
     SPHINX_DESIGN_STATIC_PATH,
-    SPHINX_REDOC_EXTENSIONS,
     SUPPRESS_WARNINGS,
     filter_autoapi_ignore_entries,
     get_autodoc_mock_imports,
@@ -88,11 +86,6 @@ smartquotes_excludes = SMARTQUOTES_EXCLUDES
 # ones.
 extensions = BASIC_SPHINX_EXTENSIONS
 
-# -- Options for sphinxcontrib.redoc 
-------------------------------------------
-# See: https://sphinxcontrib-redoc.readthedocs.io/en/stable/
-
-extensions.extend(SPHINX_REDOC_EXTENSIONS)
-redoc_script_url = REDOC_SCRIPT_URL
 
 extensions.extend(
     [
diff --git a/devel-common/pyproject.toml b/devel-common/pyproject.toml
index 845802eb257..bd3a4ecf3c1 100644
--- a/devel-common/pyproject.toml
+++ b/devel-common/pyproject.toml
@@ -98,12 +98,9 @@ dependencies = [
     "sphinxcontrib-jsmath>=1.0.1",
     "sphinxcontrib-mermaid>=1.0.0",
     "sphinxcontrib-qthelp>=1.0.3",
-    "sphinxcontrib-redoc>=1.6.0",
     "sphinxcontrib-serializinghtml>=1.1.5",
     "sphinxcontrib-spelling>=8.0.0",
-    # setuptools 82.0.0+ causes redoc to fail due to pkg_resources removal
-    # until https://github.com/sphinx-contrib/redoc/issues/53 is resolved
-    "setuptools<82.0.0",
+    "swagger-plugin-for-sphinx>=7.1.0",
 ]
 "docs-gen" = [
     "diagrams>=0.24.4",
diff --git a/devel-common/sphinx_design/static/custom.css 
b/devel-common/sphinx_design/static/custom.css
index fecb79f96b6..8ead5f275bc 100644
--- a/devel-common/sphinx_design/static/custom.css
+++ b/devel-common/sphinx_design/static/custom.css
@@ -97,3 +97,53 @@ a.headerlink svg {
     margin: -117px 0 0; /* negative fixed header height */
   }
 }
+
+/*
+Some layout optimization especially for dark mode for Swagger API reference
+*/
+
+/* Hide the authorize button which is use-less in docs w/o API running behind 
*/
+.swagger-ui div.scheme-container {
+  display: none;
+}
+
+/* Set text color to white in dark mode for better readability */
+[data-bs-theme="dark"] .swagger-ui .title,
+[data-bs-theme="dark"] .swagger-ui h4,
+[data-bs-theme="dark"] .swagger-ui .opblock .opblock-section-header h4,
+[data-bs-theme="dark"] .swagger-ui .parameter__name,
+[data-bs-theme="dark"]  .swagger-ui .parameter__type,
+[data-bs-theme="dark"] .swagger-ui p {
+  color: var(--bs-emphasis-color);
+}
+
+[data-bs-theme="dark"] .swagger-ui a.nostyle {
+  color: var(--bs-link-color);
+}
+
+[data-bs-theme="dark"] .swagger-ui .opblock .opblock-summary-description {
+  color: var(--bs-secondary-color);
+}
+
+[data-bs-theme="dark"] .swagger-ui svg {
+  stroke: var(--bs-emphasis-color);
+}
+
+[data-bs-theme="dark"] .swagger-ui .opblock .opblock-section-header {
+  color: var(--bs-emphasis-color);
+  background-color: var(--bs-secondary-bg);
+}
+
+[data-bs-theme="dark"] .swagger-ui input[disabled],
+[data-bs-theme="dark"] .swagger-ui select[disabled],
+[data-bs-theme="dark"] .swagger-ui select,
+[data-bs-theme="dark"] .swagger-ui textarea[disabled]  {
+  border: 1px solid var(--bs-border-color)  ;
+  color: var(--bs-emphasis-color);
+  background-color: var(--bs-secondary-bg);
+}
+
+/* Somehow some dark mode is showing-up also in light mode for code areas, fix 
it here */
+.swagger-ui pre code {
+  background-color: rgb(51, 51, 51);
+}
diff --git a/devel-common/src/docs/provider_conf.py 
b/devel-common/src/docs/provider_conf.py
index bc182653468..96d5e2f93cc 100644
--- a/devel-common/src/docs/provider_conf.py
+++ b/devel-common/src/docs/provider_conf.py
@@ -33,7 +33,6 @@ from __future__ import annotations
 # serve to show the default.
 import logging
 import os
-from pathlib import Path
 from typing import Any
 
 import rich
@@ -47,11 +46,14 @@ from docs.utils.conf_constants import (
     AUTOAPI_OPTIONS,
     BASIC_AUTOAPI_IGNORE_PATTERNS,
     BASIC_SPHINX_EXTENSIONS,
-    REDOC_SCRIPT_URL,
     SMARTQUOTES_EXCLUDES,
     SPELLING_WORDLIST_PATH,
     SPHINX_DESIGN_STATIC_PATH,
+    SPHINX_SWAGGER_EXTENSION,
     SUPPRESS_WARNINGS,
+    SWAGGER_BUNDLE_URI,
+    SWAGGER_CSS_URI,
+    SWAGGER_PRESENT_URI,
     filter_autoapi_ignore_entries,
     get_autodoc_mock_imports,
     get_configs_and_deprecations,
@@ -119,25 +121,21 @@ smartquotes_excludes = SMARTQUOTES_EXCLUDES
 # ones.
 extensions = BASIC_SPHINX_EXTENSIONS
 
-PROVIDER_PACKAGES_WITH_REDOC = ["apache-airflow-providers-fab", 
"apache-airflow-providers-keycloak"]
-
-if PACKAGE_NAME in PROVIDER_PACKAGES_WITH_REDOC:
-    extensions.extend(
-        [
-            "autoapi.extension",
-            # First, generate redoc
-            "sphinxcontrib.redoc",
-            # Second, update redoc script
-            "sphinx_script_update",
-        ]
-    )
-    redoc_script_url = REDOC_SCRIPT_URL
-else:
-    extensions.extend(
-        [
-            "autoapi.extension",
-        ]
-    )
+PROVIDER_PACKAGES_WITH_API_REFERENCE = [
+    "apache-airflow-providers-edge3",
+    "apache-airflow-providers-fab",
+    "apache-airflow-providers-keycloak",
+]
+
+if PACKAGE_NAME in PROVIDER_PACKAGES_WITH_API_REFERENCE:
+    extensions.append(SPHINX_SWAGGER_EXTENSION)
+
+    swagger_present_uri = SWAGGER_PRESENT_URI
+    swagger_bundle_uri = SWAGGER_BUNDLE_URI
+    swagger_css_uri = SWAGGER_CSS_URI
+    swagger_mirror_external_resources = True  # Ensure we embed external 
resources prevent tracking
+
+extensions.append("autoapi.extension")
 
 extensions.extend(
     [
@@ -357,38 +355,3 @@ spelling_ignore_contributor_names = False
 spelling_ignore_importable_modules = True
 
 graphviz_output_format = "svg"
-
-if PACKAGE_NAME in PROVIDER_PACKAGES_WITH_REDOC:
-    from airflow.providers.fab.auth_manager.api_fastapi.openapi import (
-        __file__ as fab_auth_manager_fastapi_api_file,
-    )
-    from airflow.providers.keycloak.auth_manager.openapi import (
-        __file__ as keycloak_auth_manager_fastapi_api_file,
-    )
-
-    fab_auth_manager_fastapi_api_path = 
Path(fab_auth_manager_fastapi_api_file).parent.joinpath(
-        "v2-fab-auth-manager-generated.yaml"
-    )
-    keycloak_auth_manager_fastapi_api_path = 
Path(keycloak_auth_manager_fastapi_api_file).parent.joinpath(
-        "v2-keycloak-auth-manager-generated.yaml"
-    )
-    redoc = [
-        {
-            "name": "Fab auth manager API",
-            "page": "api-ref/fab-api-ref",
-            "spec": fab_auth_manager_fastapi_api_path.as_posix(),
-            "opts": {
-                "hide-hostname": True,
-                "no-auto-auth": True,
-            },
-        },
-        {
-            "name": "Keycloak auth manager token API",
-            "page": "api-ref/token-api-ref",
-            "spec": keycloak_auth_manager_fastapi_api_path.as_posix(),
-            "opts": {
-                "hide-hostname": True,
-                "no-auto-auth": True,
-            },
-        },
-    ]
diff --git a/devel-common/src/docs/utils/conf_constants.py 
b/devel-common/src/docs/utils/conf_constants.py
index d68cd83530f..1331c039553 100644
--- a/devel-common/src/docs/utils/conf_constants.py
+++ b/devel-common/src/docs/utils/conf_constants.py
@@ -97,15 +97,14 @@ BASIC_SPHINX_EXTENSIONS = [
     "metrics_tables_from_registry",
 ]
 
-SPHINX_REDOC_EXTENSIONS = [
-    "autoapi.extension",
-    # First, generate redoc
-    "sphinxcontrib.redoc",
-    # Second, update redoc script
-    "sphinx_script_update",
-]
-
-REDOC_SCRIPT_URL = 
"https://cdn.jsdelivr.net/npm/[email protected]/bundles/redoc.standalone.js";
+# Properties for Swagger OpenAPI generation:
+# See https://github.com/SAP/swagger-plugin-for-sphinx
+SPHINX_SWAGGER_EXTENSION = "swagger_plugin_for_sphinx"
+
+_SWAGGER_VERSION = "5.32.6"
+SWAGGER_PRESENT_URI = 
f"https://unpkg.com/swagger-ui-dist@{_SWAGGER_VERSION}/swagger-ui-standalone-preset.js";
+SWAGGER_BUNDLE_URI = 
f"https://unpkg.com/swagger-ui-dist@{_SWAGGER_VERSION}/swagger-ui-bundle.js";
+SWAGGER_CSS_URI = 
f"https://unpkg.com/swagger-ui-dist@{_SWAGGER_VERSION}/swagger-ui.css";
 
 
 def get_rst_filepath_from_path(filepath: pathlib.Path, root: pathlib.Path):
diff --git a/providers/fab/docs/api-ref/fab-api-ref.rst 
b/providers/edge3/docs/edge-api-ref.rst
similarity index 74%
copy from providers/fab/docs/api-ref/fab-api-ref.rst
copy to providers/edge3/docs/edge-api-ref.rst
index 87d68179eeb..7854c8c2402 100644
--- a/providers/fab/docs/api-ref/fab-api-ref.rst
+++ b/providers/edge3/docs/edge-api-ref.rst
@@ -16,7 +16,10 @@
     specific language governing permissions and limitations
     under the License.
 
-FAB auth manager token API
-==========================
+Edge Worker REST API
+====================
 
-It's a stub file. It will be automatically converted during the build process 
into valid documentation by the Sphinx plugin. See: /docs/conf.py
+.. swagger-plugin:: 
../src/airflow/providers/edge3/worker_api/v2-edge-generated.yaml
+    :id: edge-worker-api-ref
+    :page-title: Edge Worker REST API
+    :swagger-options: { "tryItOutEnabled": "false", "supportedSubmitMethods": 
[] }
diff --git a/providers/edge3/docs/index.rst b/providers/edge3/docs/index.rst
index 3da9957684c..794cb51aef9 100644
--- a/providers/edge3/docs/index.rst
+++ b/providers/edge3/docs/index.rst
@@ -58,6 +58,7 @@
     Configuration <configurations-ref>
     CLI <cli-ref>
     Python API <_api/airflow/providers/edge3/index>
+    Edge Worker REST API <edge-api-ref>
 
 .. toctree::
     :hidden:
diff --git a/providers/fab/docs/api-ref/fab-api-ref.rst 
b/providers/fab/docs/api-ref/fab-api-ref.rst
index 87d68179eeb..71824513474 100644
--- a/providers/fab/docs/api-ref/fab-api-ref.rst
+++ b/providers/fab/docs/api-ref/fab-api-ref.rst
@@ -19,4 +19,7 @@
 FAB auth manager token API
 ==========================
 
-It's a stub file. It will be automatically converted during the build process 
into valid documentation by the Sphinx plugin. See: /docs/conf.py
+.. swagger-plugin:: 
../../src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml
+    :id: fab-auth-manager-api-ref
+    :page-title: FAB auth manager token API
+    :swagger-options: { "tryItOutEnabled": "false", "supportedSubmitMethods": 
[] }
diff --git a/providers/keycloak/docs/api-ref/token-api-ref.rst 
b/providers/keycloak/docs/api-ref/token-api-ref.rst
index e9003e082d0..e48c66a4ab9 100644
--- a/providers/keycloak/docs/api-ref/token-api-ref.rst
+++ b/providers/keycloak/docs/api-ref/token-api-ref.rst
@@ -19,4 +19,7 @@
 Keycloak auth manager token API
 ===============================
 
-It's a stub file. It will be automatically converted during the build process 
into valid documentation by the Sphinx plugin. See: /docs/conf.py
+.. swagger-plugin:: 
../../src/airflow/providers/keycloak/auth_manager/openapi/v2-keycloak-auth-manager-generated.yaml
+    :id: keycloak-auth-manager-api-ref
+    :page-title: Keycloak auth manager token API
+    :swagger-options: { "tryItOutEnabled": "false", "supportedSubmitMethods": 
[] }
diff --git a/pyproject.toml b/pyproject.toml
index 960bd58618c..cb18d57405a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1540,6 +1540,10 @@ apache-aurflow-docker-stack = false
 # Manual overrides (kept outside the auto-generated block above so the
 # update_airflow_pyproject_toml.py script doesn't clobber them).
 
+# REMOVE BY 2026-05-31 — once 7.1.0 is older than the global 4-day cooldown
+# this override is redundant and should be deleted along with the line below.
+swagger-plugin-for-sphinx = "8 hours"
+
 [tool.uv.pip]
 # Synchroonize with scripts/ci/prek/upgrade_important_versions.py
 exclude-newer = "4 days"
@@ -1683,6 +1687,9 @@ apache-aurflow-docker-stack = false
 # Manual overrides — see the matching block under
 # `[tool.uv.exclude-newer-package]` above for rationale.
 
+# REMOVE BY 2026-05-31 along with the matching entry above.
+swagger-plugin-for-sphinx = "8 hours"
+
 
 [tool.uv.sources]
 # These names must match the names as defined in the pyproject.toml of the 
workspace items,
diff --git a/uv.lock b/uv.lock
index 6b359ddae46..caf92c6b934 100644
--- a/uv.lock
+++ b/uv.lock
@@ -107,6 +107,7 @@ apache-airflow-providers-zendesk = false
 apache-airflow-providers-presto = false
 apache-airflow-providers-airbyte = false
 apache-airflow-providers-apache-hive = false
+swagger-plugin-for-sphinx = { timestamp = "0001-01-01T00:00:00Z", span = 
"PT2H" }
 apache-airflow-kubernetes-tests = false
 apache-airflow-providers-grpc = false
 apache-airflow-providers-apache-druid = false
@@ -2457,7 +2458,6 @@ docs = [
     { name = "pagefind" },
     { name = "pagefind-bin" },
     { name = "rich-click" },
-    { name = "setuptools" },
     { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
     { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
     { name = "sphinx", version = "9.1.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
@@ -2479,9 +2479,9 @@ docs = [
     { name = "sphinxcontrib-jsmath" },
     { name = "sphinxcontrib-mermaid" },
     { name = "sphinxcontrib-qthelp" },
-    { name = "sphinxcontrib-redoc" },
     { name = "sphinxcontrib-serializinghtml" },
     { name = "sphinxcontrib-spelling" },
+    { name = "swagger-plugin-for-sphinx" },
 ]
 docs-gen = [
     { name = "diagrams" },
@@ -2650,7 +2650,6 @@ requires-dist = [
     { name = "ruff", specifier = "==0.15.14" },
     { name = "semver", specifier = ">=3.0.2" },
     { name = "semver", marker = "extra == 'devscripts'", specifier = ">=3.0.2" 
},
-    { name = "setuptools", marker = "extra == 'docs'", specifier = "<82.0.0" },
     { name = "sphinx", marker = "extra == 'docs'", specifier = ">=7" },
     { name = "sphinx-airflow-theme", marker = "extra == 'docs'", url = 
"https://airflow.apache.org/sphinx-airflow-theme/sphinx_airflow_theme-0.3.10-py3-none-any.whl";
 },
     { name = "sphinx-argparse", marker = "extra == 'docs'", specifier = 
">=0.4.0" },
@@ -2668,11 +2667,11 @@ requires-dist = [
     { name = "sphinxcontrib-jsmath", marker = "extra == 'docs'", specifier = 
">=1.0.1" },
     { name = "sphinxcontrib-mermaid", marker = "extra == 'docs'", specifier = 
">=1.0.0" },
     { name = "sphinxcontrib-qthelp", marker = "extra == 'docs'", specifier = 
">=1.0.3" },
-    { name = "sphinxcontrib-redoc", marker = "extra == 'docs'", specifier = 
">=1.6.0" },
     { name = "sphinxcontrib-serializinghtml", marker = "extra == 'docs'", 
specifier = ">=1.1.5" },
     { name = "sphinxcontrib-spelling", marker = "extra == 'docs'", specifier = 
">=8.0.0" },
     { name = "sqlalchemy", extras = ["asyncio"], marker = "extra == 
'sqlalchemy'", specifier = ">=1.4.49" },
     { name = "sqlalchemy-utils", marker = "extra == 'sqlalchemy'", specifier = 
">=0.41.2" },
+    { name = "swagger-plugin-for-sphinx", marker = "extra == 'docs'", 
specifier = ">=7.1.0" },
     { name = "time-machine", extras = ["dateutil"], specifier = ">=3.0.0" },
     { name = "towncrier", marker = "extra == 'devscripts'", specifier = 
">=23.11.0" },
     { name = "twine", marker = "extra == 'devscripts'", specifier = ">=4.0.2" 
},
@@ -21894,21 +21893,6 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl";,
 hash = 
"sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size 
= 88743, upload-time = "2024-07-29T01:09:54.885Z" },
 ]
 
-[[package]]
-name = "sphinxcontrib-redoc"
-version = "1.6.0"
-source = { registry = "https://pypi.org/simple"; }
-dependencies = [
-    { name = "jinja2" },
-    { name = "jsonschema" },
-    { name = "pyyaml" },
-    { name = "six" },
-    { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
-    { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
-    { name = "sphinx", version = "9.1.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
-]
-sdist = { url = 
"https://files.pythonhosted.org/packages/6d/73/872189269380d0271d575771986db8a77f06bc4565c1a971bebd54f38d2c/sphinxcontrib-redoc-1.6.0.tar.gz";,
 hash = 
"sha256:e358edbe23927d36432dde748e978cf897283a331a03e93d3ef02e348dee4561", size 
= 350482, upload-time = "2020-04-17T19:46:48.041Z" }
-
 [[package]]
 name = "sphinxcontrib-serializinghtml"
 version = "2.0.0"
@@ -22201,6 +22185,24 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/a2/1c/a6b5d90a9ca479805798276728ccbbdff0c7228e2ea93b1f731779d635e3/svcs-25.1.0-py3-none-any.whl";,
 hash = 
"sha256:df49cb7d1a05dfd2dd60af1a2cb84b9c3bb0a74728833cb8c54a7ceeecce6c97", size 
= 19456, upload-time = "2025-01-25T13:15:19.677Z" },
 ]
 
+[[package]]
+name = "swagger-plugin-for-sphinx"
+version = "7.1.0"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "docutils", version = "0.21.2", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
+    { name = "docutils", version = "0.22.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.11'" },
+    { name = "jinja2" },
+    { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
+    { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "sphinx", version = "9.1.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
+    { name = "typing-extensions" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/2e/00/1b2ea76705a887b47d2ba1fa38bb01222431697e6fd020f25c95d6a44615/swagger_plugin_for_sphinx-7.1.0.tar.gz";,
 hash = 
"sha256:8a054d69600767721f8920f90f87e9078e1736d8c89a6fe74d38ea930f95c9e2", size 
= 118298, upload-time = "2026-05-27T08:10:11.488Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/c4/14/43f25438e93fd40f172535b0fac0ab2a4827e13a74f62c35860ba04fc891/swagger_plugin_for_sphinx-7.1.0-py3-none-any.whl";,
 hash = 
"sha256:1a6369c6e9ee5bca88c11a327e58c134a457401a6a7f8bb97e166d3a2568d4d7", size 
= 11644, upload-time = "2026-05-27T08:10:10.347Z" },
+]
+
 [[package]]
 name = "sympy"
 version = "1.14.0"

Reply via email to