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 fc706353947 Bugfix/remove global from breeze (#58866)
fc706353947 is described below
commit fc7063539471ee86b1607f12d6c17cb60cc89bf4
Author: Jens Scheffler <[email protected]>
AuthorDate: Sun Nov 30 22:02:13 2025 +0100
Bugfix/remove global from breeze (#58866)
* Remove global from breeze modules
* Remove global from breeze modules
* Review feedback, use function attributes
---
.../commands/release_management_commands.py | 4 +--
dev/breeze/src/airflow_breeze/utils/ci_group.py | 10 +++----
.../src/airflow_breeze/utils/publish_docs_to_s3.py | 17 +++++++++---
dev/breeze/src/airflow_breeze/utils/recording.py | 11 ++++----
.../src/airflow_breeze/utils/shared_options.py | 31 +++++++---------------
5 files changed, 34 insertions(+), 39 deletions(-)
diff --git
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index f8340c78a8c..070213c51ef 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -4223,9 +4223,9 @@ def publish_docs_to_s3(
docs_to_s3.publish_all_docs()
if stable_versions:
docs_to_s3.publish_stable_version_docs()
- from airflow_breeze.utils.publish_docs_to_s3 import version_error
+ from airflow_breeze.utils.publish_docs_to_s3 import VersionError
- if version_error:
+ if VersionError.has_any_error():
get_console().print(
"[error]There was an error with the version of the docs. "
"Please check the version in the docs and try again.[/]"
diff --git a/dev/breeze/src/airflow_breeze/utils/ci_group.py
b/dev/breeze/src/airflow_breeze/utils/ci_group.py
index 82b2b020f69..4c385735e90 100644
--- a/dev/breeze/src/airflow_breeze/utils/ci_group.py
+++ b/dev/breeze/src/airflow_breeze/utils/ci_group.py
@@ -26,9 +26,6 @@ from airflow_breeze.utils.path_utils import skip_group_output
if TYPE_CHECKING:
from airflow_breeze.utils.parallel import Output
-# only allow top-level group
-_in_ci_group = False
-
def in_github_actions() -> bool:
"""
@@ -51,8 +48,7 @@ def ci_group(
For more information, see:
https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#grouping-log-lines
"""
- global _in_ci_group
- if _in_ci_group or skip_group_output():
+ if getattr(ci_group, "__in_ci_group__", False) or skip_group_output():
yield
return
if not in_github_actions():
@@ -63,7 +59,7 @@ def ci_group(
get_console(output=output).print(f"\n{title}\n")
yield
return
- _in_ci_group = True
+ setattr(ci_group, "__in_ci_group__", True)
if not skip_printing_title:
if message_type is not None:
get_console().print(f"::group::[{message_type.value}]{title}[/]")
@@ -73,4 +69,4 @@ def ci_group(
yield
finally:
get_console().print("::endgroup::")
- _in_ci_group = False
+ setattr(ci_group, "__in_ci_group__", False)
diff --git a/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
b/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
index c7b396bee78..66f54472b32 100644
--- a/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
+++ b/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
@@ -36,7 +36,19 @@ NON_SHORT_NAME_PACKAGES = ["apache-airflow",
"apache-airflow-ctl", "docker-stack
s3_client = boto3.client("s3")
cloudfront_client = boto3.client("cloudfront")
-version_error = False
+
+class VersionError:
+ """Class to track version errors during processing."""
+
+ version_error: bool = False
+
+ @staticmethod
+ def has_any_error() -> bool:
+ return VersionError.version_error
+
+ @staticmethod
+ def set_version_error(value: bool):
+ VersionError.version_error = value
def get_cloudfront_distribution(destination_location):
@@ -326,8 +338,7 @@ class S3DocsPublish:
all_versions.append(Version(v))
except ValueError as e:
get_console().print(f"[error]Invalid version {v}: {e}\n")
- global version_error
- version_error = True
+ VersionError.set_version_error(True)
all_versions.sort(reverse=True)
minor_versions: list[str] = []
good_versions = []
diff --git a/dev/breeze/src/airflow_breeze/utils/recording.py
b/dev/breeze/src/airflow_breeze/utils/recording.py
index 1138d27e87d..1ce953d33ce 100644
--- a/dev/breeze/src/airflow_breeze/utils/recording.py
+++ b/dev/breeze/src/airflow_breeze/utils/recording.py
@@ -27,8 +27,6 @@ from airflow_breeze.utils.path_utils import in_autocomplete
if TYPE_CHECKING:
from rich.console import Console
-help_console: Console | None = None
-
DEFAULT_COLUMNS = 129
@@ -39,6 +37,8 @@ def generating_command_images() -> bool:
def enable_recording_of_help_output(path: str, title: str | None, width: str |
None, unique_id: str | None):
import rich_click as click
+ help_consoles: list[Console] = []
+
if not title:
title = "Breeze screenshot"
if not width:
@@ -47,8 +47,8 @@ def enable_recording_of_help_output(path: str, title: str |
None, width: str | N
width_int = int(width)
def save_output_as_svg():
- if help_console:
- help_console.save_svg(path=path, title=title, unique_id=unique_id)
+ for console in help_consoles:
+ console.save_svg(path=path, title=title, unique_id=unique_id)
atexit.register(save_output_as_svg)
click.rich_click.MAX_WIDTH = width_int
@@ -67,8 +67,7 @@ def enable_recording_of_help_output(path: str, title: str |
None, width: str | N
recording_config.force_terminal = True
recording_console = original_create_console(recording_config, file)
recording_console.record = True
- global help_console
- help_console = recording_console
+ help_consoles.append(recording_console)
return recording_console
rich_click.rich_help_formatter.create_console = create_recording_console
diff --git a/dev/breeze/src/airflow_breeze/utils/shared_options.py
b/dev/breeze/src/airflow_breeze/utils/shared_options.py
index 6e9b1e5b546..3cfaf676809 100644
--- a/dev/breeze/src/airflow_breeze/utils/shared_options.py
+++ b/dev/breeze/src/airflow_breeze/utils/shared_options.py
@@ -22,48 +22,37 @@ import os
from airflow_breeze.utils.coertions import coerce_bool_value
-def __get_default_bool_value(env_var: str) -> bool:
- string_val = os.environ.get(env_var, "")
- return coerce_bool_value(string_val)
-
-
-__verbose_value: bool = __get_default_bool_value("VERBOSE")
+class _SharedOptions:
+ verbose_value: bool = coerce_bool_value(os.environ.get("VERBOSE", ""))
+ dry_run_value: bool = coerce_bool_value(os.environ.get("DRY_RUN", ""))
+ forced_answer: str | None = None
def set_verbose(verbose: bool):
- global __verbose_value
- __verbose_value = verbose
+ _SharedOptions.verbose_value = verbose
def get_verbose(verbose_override: bool | None = None) -> bool:
if verbose_override is None:
- return __verbose_value
+ return _SharedOptions.verbose_value
return verbose_override
-__dry_run_value: bool = __get_default_bool_value("DRY_RUN")
-
-
def set_dry_run(dry_run: bool):
- global __dry_run_value
- __dry_run_value = dry_run
+ _SharedOptions.dry_run_value = dry_run
def get_dry_run(dry_run_override: bool | None = None) -> bool:
if dry_run_override is None:
- return __dry_run_value
+ return _SharedOptions.dry_run_value
return dry_run_override
-__forced_answer: str | None = None
-
-
def set_forced_answer(answer: str | None):
- global __forced_answer
- __forced_answer = answer
+ _SharedOptions.forced_answer = answer
def get_forced_answer(answer_override: str | None = None) -> str | None:
if answer_override is None:
- return __forced_answer
+ return _SharedOptions.forced_answer
return answer_override