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 c512103bbe04d..d4cc87b8c064c 100644 --- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py +++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py @@ -4020,9 +4020,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 82b2b020f69d7..4c385735e905b 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 @@ 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 07e3e760d8156..390022200dbb2 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 @@ 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 @@ def get_latest_minor_versions(package_name: str, versions: list[str]) -> list[st 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 1138d27e87d49..1ce953d33cefd 100644 --- a/dev/breeze/src/airflow_breeze/utils/recording.py +++ b/dev/breeze/src/airflow_breeze/utils/recording.py @@ -27,8 +27,6 @@ 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 create_recording_console(config: RichHelpConfiguration, file: IO[str] | None 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 6e9b1e5b54633..3cfaf676809ab 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 @@ 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