This is an automated email from the ASF dual-hosted git repository.
potiuk 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 530ebb58b6 Fix variables substitution in Airflow Documentation (#34462)
530ebb58b6 is described below
commit 530ebb58b6b85444b62618684b5741b9d6dd715e
Author: Andrey Anshin <[email protected]>
AuthorDate: Sun Oct 8 22:51:05 2023 +0400
Fix variables substitution in Airflow Documentation (#34462)
---
docs/conf.py | 33 +++++++++++++++++------------
docs/docker-stack/build.rst | 2 +-
docs/exts/extra_files_with_substitutions.py | 21 ++++++++++++------
3 files changed, 35 insertions(+), 21 deletions(-)
diff --git a/docs/conf.py b/docs/conf.py
index e9af597525..ff2ebf6226 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -102,6 +102,12 @@ os.environ["AIRFLOW_PACKAGE_NAME"] = PACKAGE_NAME
# behavior of the utils.apply_default that was hiding function headers
os.environ["BUILDING_AIRFLOW_DOCS"] = "TRUE"
+# Use for generate rst_epilog and other post-generation substitutions
+global_substitutions = {
+ "version": PACKAGE_VERSION,
+ "airflow-version": airflow.__version__,
+}
+
# == Sphinx configuration
======================================================
# -- Project information
-------------------------------------------------------
@@ -114,18 +120,19 @@ version = PACKAGE_VERSION
# The full version, including alpha/beta/rc tags.
release = PACKAGE_VERSION
-rst_epilog = f"""
-.. |version| replace:: {version}
-.. |airflow-version| replace:: {airflow.__version__}
-.. |experimental| replace:: This is an :ref:`experimental feature
<experimental>`.
-"""
-
-smartquotes_excludes = {"builders": ["man", "text", "spelling"]}
-
-
# -- General configuration
-----------------------------------------------------
# See: https://www.sphinx-doc.org/en/master/usage/configuration.html
+rst_epilog = "\n".join(
+ f".. |{key}| replace:: {replace}"
+ for key, replace in {
+ **global_substitutions,
+ "experimental": "This is an :ref:`experimental feature
<experimental>`.",
+ }.items()
+)
+
+smartquotes_excludes = {"builders": ["man", "text", "spelling"]}
+
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
@@ -171,8 +178,7 @@ if PACKAGE_NAME == "apache-airflow-providers":
elif PACKAGE_NAME == "helm-chart":
extensions.append("sphinx_jinja")
elif PACKAGE_NAME == "docker-stack":
- # No extra extensions
- pass
+ extensions.append("extra_files_with_substitutions")
elif PACKAGE_NAME.startswith("apache-airflow-providers-"):
extensions.extend(
[
@@ -323,9 +329,8 @@ if PACKAGE_NAME == "apache-airflow":
]
html_extra_with_substitutions = [
f"{ROOT_DIR}/docs/apache-airflow/howto/docker-compose/docker-compose.yaml",
- f"{ROOT_DIR}/docs/docker-stack/build.rst",
]
- # Replace "|version|" in links
+ # Substitute in links
manual_substitutions_in_generated_html = [
"installation/installing-from-pypi.html",
"installation/installing-from-sources.html",
@@ -333,7 +338,7 @@ if PACKAGE_NAME == "apache-airflow":
if PACKAGE_NAME.startswith("apache-airflow-providers"):
manual_substitutions_in_generated_html = ["example-dags.html",
"operators.html", "index.html"]
if PACKAGE_NAME == "docker-stack":
- # Replace "|version|" inside ```` quotes
+ # Substitute in links
manual_substitutions_in_generated_html = ["build.html"]
# -- Theme configuration
-------------------------------------------------------
diff --git a/docs/docker-stack/build.rst b/docs/docker-stack/build.rst
index 41a52b0c07..6ede683014 100644
--- a/docs/docker-stack/build.rst
+++ b/docs/docker-stack/build.rst
@@ -533,7 +533,7 @@ Before attempting to customize the image, you need to
download flexible and cust
You can extract the officially released version of the Dockerfile from the
`released sources
<https://airflow.apache.org/docs/apache-airflow/stable/installation/installing-from-sources.html>`_.
You can also conveniently download the latest released version
-`from GitHub
<https://raw.githubusercontent.com/apache/airflow/|version|/Dockerfile>`_. You
can save it
+`from GitHub
<https://raw.githubusercontent.com/apache/airflow/|airflow-version|/Dockerfile>`_.
You can save it
in any directory - there is no need for any other files to be present there.
If you wish to use your own
files (for example custom configuration of ``pip`` or your own
``requirements`` or custom dependencies,
you need to use ``DOCKER_CONTEXT_FILES`` build arg and place the files in the
directory pointed at by
diff --git a/docs/exts/extra_files_with_substitutions.py
b/docs/exts/extra_files_with_substitutions.py
index cb91b163f0..e0e0f20f05 100644
--- a/docs/exts/extra_files_with_substitutions.py
+++ b/docs/exts/extra_files_with_substitutions.py
@@ -19,19 +19,27 @@ from __future__ import annotations
import os
-def copy_docker_compose(app, exception):
+def _manual_substitution(line: str, replacements: dict[str, str]) -> str:
+ for value, repl in replacements.items():
+ line = line.replace(f"|{value}|", repl)
+ return line
+
+
+def build_postprocess(app, exception):
"""Sphinx "build-finished" event handler."""
from sphinx.builders import html as builders
if exception or not isinstance(app.builder,
builders.StandaloneHTMLBuilder):
return
+ global_substitutions = app.config.global_substitutions
+
# Replace `|version|` in the docker-compose.yaml that requires manual
substitutions
for path in app.config.html_extra_with_substitutions:
with open(path) as file:
with open(os.path.join(app.outdir, os.path.basename(path)), "w")
as output_file:
for line in file:
- output_file.write(line.replace("|version|",
app.config.version))
+ output_file.write(_manual_substitution(line,
global_substitutions))
# Replace `|version|` in the installation files that requires manual
substitutions (in links)
for path in app.config.manual_substitutions_in_generated_html:
@@ -41,15 +49,16 @@ def copy_docker_compose(app, exception):
os.path.join(app.outdir, os.path.dirname(path),
os.path.basename(path)), "w"
) as output_file:
for line in content:
- output_file.write(line.replace("|version|",
app.config.version))
+ output_file.write(_manual_substitution(line,
global_substitutions))
def setup(app):
"""Setup plugin"""
- app.connect("build-finished", copy_docker_compose)
+ app.connect("build-finished", build_postprocess)
- app.add_config_value("html_extra_with_substitutions", [], "[str]")
- app.add_config_value("manual_substitutions_in_generated_html", [], "[str]")
+ app.add_config_value("html_extra_with_substitutions", [], "html", [str])
+ app.add_config_value("manual_substitutions_in_generated_html", [], "html",
[str])
+ app.add_config_value("global_substitutions", {}, "html", [dict])
return {
"parallel_write_safe": True,