diff --git a/airflow-core/src/airflow/api_fastapi/app.py b/airflow-core/src/airflow/api_fastapi/app.py index e74863dd3c124..337d09b2ce36b 100644 --- a/airflow-core/src/airflow/api_fastapi/app.py +++ b/airflow-core/src/airflow/api_fastapi/app.py @@ -161,8 +161,6 @@ def init_auth_manager(app: FastAPI | None = None) -> BaseAuthManager: def get_auth_manager() -> BaseAuthManager: """Return the auth manager, provided it's been initialized before.""" - global auth_manager - if auth_manager is None: raise RuntimeError( "Auth Manager has not been initialized yet. " diff --git a/airflow-core/src/airflow/configuration.py b/airflow-core/src/airflow/configuration.py index 936c1166aba49..8798a1907dd48 100644 --- a/airflow-core/src/airflow/configuration.py +++ b/airflow-core/src/airflow/configuration.py @@ -1886,7 +1886,7 @@ def load_test_config(self): """ # We need those globals before we run "get_all_expansion_variables" because this is where # the variables are expanded from in the configuration - global FERNET_KEY, AIRFLOW_HOME, JWT_SECRET_KEY + global FERNET_KEY, JWT_SECRET_KEY from cryptography.fernet import Fernet unit_test_config_file = pathlib.Path(__file__).parent / "config_templates" / "unit_tests.cfg" diff --git a/airflow-core/src/airflow/logging_config.py b/airflow-core/src/airflow/logging_config.py index 495011d89d211..16f256d396f78 100644 --- a/airflow-core/src/airflow/logging_config.py +++ b/airflow-core/src/airflow/logging_config.py @@ -38,7 +38,6 @@ def __getattr__(name: str): if name == "REMOTE_TASK_LOG": - global REMOTE_TASK_LOG load_logging_config() return REMOTE_TASK_LOG diff --git a/airflow-core/src/airflow/plugins_manager.py b/airflow-core/src/airflow/plugins_manager.py index aa228342c1d80..5a70dbcd8f099 100644 --- a/airflow-core/src/airflow/plugins_manager.py +++ b/airflow-core/src/airflow/plugins_manager.py @@ -214,8 +214,6 @@ def is_valid_plugin(plugin_obj): :return: Whether or not the obj is a valid subclass of AirflowPlugin """ - global plugins - if ( inspect.isclass(plugin_obj) and issubclass(plugin_obj, AirflowPlugin) @@ -234,8 +232,6 @@ def register_plugin(plugin_instance): :param plugin_instance: subclass of AirflowPlugin """ - global plugins - if plugin_instance.name in loaded_plugins: return @@ -250,8 +246,6 @@ def load_entrypoint_plugins(): The entry_point group should be 'airflow.plugins'. """ - global import_errors - log.debug("Loading plugins from entrypoints") for entry_point, dist in entry_points_with_dist("airflow.plugins"): @@ -271,7 +265,6 @@ def load_entrypoint_plugins(): def load_plugins_from_plugin_directory(): """Load and register Airflow Plugins from plugins directory.""" - global import_errors log.debug("Loading plugins from directory: %s", settings.PLUGINS_FOLDER) files = find_path_from_directory(settings.PLUGINS_FOLDER, ".airflowignore") plugin_search_locations: list[tuple[str, Generator[str, None, None]]] = [("", files)] @@ -373,7 +366,6 @@ def ensure_plugins_loaded(): def initialize_ui_plugins(): """Collect extension points for the UI.""" - global plugins global external_views global react_apps @@ -456,7 +448,6 @@ def _remove_list_item(lst, item): def initialize_flask_plugins(): """Collect flask extension points for WEB UI (legacy).""" - global plugins global flask_blueprints global flask_appbuilder_views global flask_appbuilder_menu_links @@ -496,7 +487,6 @@ def initialize_flask_plugins(): def initialize_fastapi_plugins(): """Collect extension points for the API.""" - global plugins global fastapi_apps global fastapi_root_middlewares @@ -593,7 +583,6 @@ def initialize_hook_lineage_readers_plugins(): def integrate_macros_plugins() -> None: """Integrates macro plugins.""" - global plugins global macros_modules from airflow.sdk.execution_time import macros @@ -626,8 +615,6 @@ def integrate_macros_plugins() -> None: def integrate_listener_plugins(listener_manager: ListenerManager) -> None: """Add listeners from plugins.""" - global plugins - ensure_plugins_loaded() if plugins: diff --git a/airflow-ctl-tests/tests/airflowctl_tests/conftest.py b/airflow-ctl-tests/tests/airflowctl_tests/conftest.py index 720403e3c642d..13dacf5d8c50e 100644 --- a/airflow-ctl-tests/tests/airflowctl_tests/conftest.py +++ b/airflow-ctl-tests/tests/airflowctl_tests/conftest.py @@ -182,7 +182,6 @@ def docker_compose_up(tmp_path_factory): def docker_compose_down(): """Tear down Docker Compose environment.""" - global docker_client if docker_client: docker_client.compose.down(remove_orphans=True, volumes=True, quiet=True) diff --git a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py index fbd4c7a5ada49..4bddd8d0def12 100644 --- a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py +++ b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py @@ -836,7 +836,6 @@ def update_release_notes( return with_breaking_changes, maybe_with_new_features, False change_table_len = len(list_of_list_of_changes[0]) table_iter = 0 - global SHORT_HASH_TO_TYPE_DICT type_of_current_package_changes: list[TypeOfChange] = [] while table_iter < change_table_len: get_console().print() diff --git a/providers/standard/tests/unit/standard/operators/test_python.py b/providers/standard/tests/unit/standard/operators/test_python.py index fe33cad1ce0c5..6b3c864c18670 100644 --- a/providers/standard/tests/unit/standard/operators/test_python.py +++ b/providers/standard/tests/unit/standard/operators/test_python.py @@ -955,7 +955,6 @@ def f(): def test_string_args(self): def f(): - global virtualenv_string_args print(virtualenv_string_args) if virtualenv_string_args[0] != virtualenv_string_args[2]: raise RuntimeError diff --git a/pyproject.toml b/pyproject.toml index e82c529be75f6..b107b4dc9aa0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -595,6 +595,9 @@ extend-select = [ "PLW0128", # Redeclared variable {name} in assignment "PLW0129", # Asserting on an empty string literal will never pass "PLW0133", # Missing raise statement on exception + "PLW0245", # super call is missing parentheses + "PLW0406", # Module {name} imports itself + "PLW0602", # Using global for {name} but no assignment is done # Per rule enables "RUF006", # Checks for asyncio dangling task "RUF015", # Checks for unnecessary iterable allocation for first element diff --git a/scripts/ci/prek/check_providers_subpackages_all_have_init.py b/scripts/ci/prek/check_providers_subpackages_all_have_init.py index 3a935a963b65c..85bf55626bc73 100755 --- a/scripts/ci/prek/check_providers_subpackages_all_have_init.py +++ b/scripts/ci/prek/check_providers_subpackages_all_have_init.py @@ -105,7 +105,6 @@ def _determine_init_py_action(need_path_extension: bool, root_path: Path): def check_dir_init_test_folders(folders: list[Path]) -> None: - global should_fail folders = list(folders) for root_distribution_path in folders: # We need init folders for all folders and for the common ones we need path extension @@ -121,7 +120,6 @@ def check_dir_init_test_folders(folders: list[Path]) -> None: def check_dir_init_src_folders(folders: list[Path]) -> None: - global should_fail folders = list(folders) for root_distribution_path in folders: # We need init folders for all folders and for the common ones we need path extension