You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ka...@apache.org on 2021/01/02 01:17:24 UTC

[airflow] branch master updated: Add verbose flag to ./build_docs.py (#13403)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new c674f81  Add verbose flag to ./build_docs.py (#13403)
c674f81 is described below

commit c674f81cb7ff3453dd2ce693dc047688581c4edd
Author: Kamil BreguĊ‚a <mi...@users.noreply.github.com>
AuthorDate: Sat Jan 2 02:17:14 2021 +0100

    Add verbose flag to ./build_docs.py (#13403)
---
 docs/build_docs.py                   | 18 ++++++++++++++++--
 docs/exts/docs_build/docs_builder.py | 26 ++++++++++++++++++++------
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/docs/build_docs.py b/docs/build_docs.py
index de35858..120a90e 100755
--- a/docs/build_docs.py
+++ b/docs/build_docs.py
@@ -115,19 +115,31 @@ def _get_parser():
         action='store_true',
         help='Builds documentation for official release i.e. all links point to stable version',
     )
+    parser.add_argument(
+        "-v",
+        "--verbose",
+        dest='verbose',
+        action='store_true',
+        help=(
+            'Increases the verbosity of the script i.e. always displays a full log of '
+            'the build process, not just when it encounters errors'
+        ),
+    )
 
     return parser
 
 
 def build_docs_for_packages(
-    current_packages: List[str], docs_only: bool, spellcheck_only: bool, for_production: bool
+    current_packages: List[str], docs_only: bool, spellcheck_only: bool, for_production: bool, verbose: bool
 ) -> Tuple[Dict[str, List[DocBuildError]], Dict[str, List[SpellingError]]]:
     """Builds documentation for single package and returns errors"""
     all_build_errors: Dict[str, List[DocBuildError]] = defaultdict(list)
     all_spelling_errors: Dict[str, List[SpellingError]] = defaultdict(list)
     for package_no, package_name in enumerate(current_packages, start=1):
         print("#" * 20, f"[{package_no}/{len(current_packages)}] {package_name}", "#" * 20)
-        builder = AirflowDocsBuilder(package_name=package_name, for_production=for_production)
+        builder = AirflowDocsBuilder(
+            package_name=package_name, for_production=for_production, verbose=verbose
+        )
         builder.clean_files()
         if not docs_only:
             with with_group(f"Check spelling: {package_name}"):
@@ -215,6 +227,7 @@ def main():
         docs_only=docs_only,
         spellcheck_only=spellcheck_only,
         for_production=for_production,
+        verbose=args.verbose,
     )
     if package_build_errors:
         all_build_errors.update(package_build_errors)
@@ -237,6 +250,7 @@ def main():
             docs_only=docs_only,
             spellcheck_only=spellcheck_only,
             for_production=for_production,
+            verbose=args.verbose,
         )
         if package_build_errors:
             all_build_errors.update(package_build_errors)
diff --git a/docs/exts/docs_build/docs_builder.py b/docs/exts/docs_build/docs_builder.py
index 29b9136..55db419 100644
--- a/docs/exts/docs_build/docs_builder.py
+++ b/docs/exts/docs_build/docs_builder.py
@@ -43,9 +43,10 @@ PROCESS_TIMEOUT = 4 * 60
 class AirflowDocsBuilder:
     """Documentation builder for Airflow."""
 
-    def __init__(self, package_name: str, for_production: bool):
+    def __init__(self, package_name: str, for_production: bool, verbose: bool):
         self.package_name = package_name
         self.for_production = for_production
+        self.verbose = verbose
 
     @property
     def _doctree_dir(self) -> str:
@@ -118,13 +119,19 @@ class AirflowDocsBuilder:
                 tmp_dir,
             ]
             print("Executing cmd: ", " ".join([shlex.quote(c) for c in build_cmd]))
-            print("The output is hidden until an error occurs.")
+            if not self.verbose:
+                print("The output is hidden until an error occurs.")
             env = os.environ.copy()
             env['AIRFLOW_PACKAGE_NAME'] = self.package_name
             if self.for_production:
                 env['AIRFLOW_FOR_PRODUCTION'] = 'true'
             completed_proc = run(  # pylint: disable=subprocess-run-check
-                build_cmd, cwd=self._src_dir, env=env, stdout=output, stderr=output, timeout=PROCESS_TIMEOUT
+                build_cmd,
+                cwd=self._src_dir,
+                env=env,
+                stdout=output if not self.verbose else None,
+                stderr=output if not self.verbose else None,
+                timeout=PROCESS_TIMEOUT,
             )
             if completed_proc.returncode != 0:
                 output.seek(0)
@@ -170,7 +177,8 @@ class AirflowDocsBuilder:
                 self._build_dir,  # path to output directory
             ]
             print("Executing cmd: ", " ".join([shlex.quote(c) for c in build_cmd]))
-            print("The output is hidden until an error occurs.")
+            if not self.verbose:
+                print("The output is hidden until an error occurs.")
 
             env = os.environ.copy()
             env['AIRFLOW_PACKAGE_NAME'] = self.package_name
@@ -178,10 +186,16 @@ class AirflowDocsBuilder:
                 env['AIRFLOW_FOR_PRODUCTION'] = 'true'
 
             completed_proc = run(  # pylint: disable=subprocess-run-check
-                build_cmd, cwd=self._src_dir, env=env, stdout=output, stderr=output, timeout=PROCESS_TIMEOUT
+                build_cmd,
+                cwd=self._src_dir,
+                env=env,
+                stdout=output if not self.verbose else None,
+                stderr=output if not self.verbose else None,
+                timeout=PROCESS_TIMEOUT,
             )
             if completed_proc.returncode != 0:
-                print(completed_proc.stdout.decode())
+                output.seek(0)
+                print(output.read().decode())
                 build_errors.append(
                     DocBuildError(
                         file_path=None,