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

potiuk pushed a commit to branch v3-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-2-test by this push:
     new 97da20a7e71 [v3-2-test] Use contextlib.suppress instead of 
try-except-pass in providers (#66178) (#66280)
97da20a7e71 is described below

commit 97da20a7e716492d4aee73d6c0b1a239801ecc67
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sat May 2 17:49:48 2026 +0200

    [v3-2-test] Use contextlib.suppress instead of try-except-pass in providers 
(#66178) (#66280)
    
    * Use contextlib.suppress instead of try-except-pass in providers (#66178)
    
    Signed-off-by: ColtenOuO <[email protected]>
    (cherry picked from commit 9b9789ae6b005692dadb102932ca38efed1ddd28)
    
    * Use contextlib.suppress for try-except-pass in spark_jdbc_script
    
    `spark_jdbc_script.py` still has the `try-except-pass` pattern that
    SIM105 flags. On `main` this file was rewritten in #64174 to raise an
    explicit `AirflowOptionalProviderFeatureException` instead, but that
    larger change is out of scope for v3-2-test. Apply the minimum
    SIM105-compliant edit (`contextlib.suppress(ImportError)`) so the rule
    re-enabled in #66264 stops failing on this file.
    
    ---------
    
    Signed-off-by: ColtenOuO <[email protected]>
    Co-authored-by: Colten <[email protected]>
---
 providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py |  5 ++---
 .../amazon/src/airflow/providers/amazon/aws/operators/eks.py   |  5 ++---
 .../airflow/providers/apache/spark/hooks/spark_jdbc_script.py  |  5 ++---
 .../providers/celery/executors/celery_executor_utils.py        | 10 ++++------
 .../src/airflow/providers/cncf/kubernetes/operators/pod.py     |  6 ++----
 .../src/airflow/providers/cncf/kubernetes/triggers/pod.py      |  5 ++---
 .../unit/cncf/kubernetes/decorators/test_kubernetes_commons.py |  5 ++---
 7 files changed, 16 insertions(+), 25 deletions(-)

diff --git a/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py 
b/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py
index 08f78540e65..fd0dd09876c 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/hooks/eks.py
@@ -586,10 +586,9 @@ class EksHook(AwsBaseHook):
             if fd is not None:
                 os.close(fd)
             if temp_path and os.path.exists(temp_path):
-                try:
+                # Best effort cleanup
+                with contextlib.suppress(OSError):
                     os.unlink(temp_path)
-                except OSError:
-                    pass  # Best effort cleanup
 
     @contextmanager
     def generate_config_file(
diff --git a/providers/amazon/src/airflow/providers/amazon/aws/operators/eks.py 
b/providers/amazon/src/airflow/providers/amazon/aws/operators/eks.py
index f024ab056d2..d41e3c43047 100644
--- a/providers/amazon/src/airflow/providers/amazon/aws/operators/eks.py
+++ b/providers/amazon/src/airflow/providers/amazon/aws/operators/eks.py
@@ -18,6 +18,7 @@
 
 from __future__ import annotations
 
+import contextlib
 import logging
 import os
 import stat
@@ -1200,10 +1201,8 @@ class EksPodOperator(KubernetesPodOperator):
                     f.write(f"export AWS_SESSION_TOKEN='{session_token}'\n")
         except Exception:
             # If fdopen fails, we need to close the file descriptor manually
-            try:
+            with contextlib.suppress(OSError):
                 os.close(fd)
-            except OSError:
-                pass
             raise
 
     def _refresh_cached_properties(self) -> None:
diff --git 
a/providers/apache/spark/src/airflow/providers/apache/spark/hooks/spark_jdbc_script.py
 
b/providers/apache/spark/src/airflow/providers/apache/spark/hooks/spark_jdbc_script.py
index 862d678a74f..d09944e4802 100644
--- 
a/providers/apache/spark/src/airflow/providers/apache/spark/hooks/spark_jdbc_script.py
+++ 
b/providers/apache/spark/src/airflow/providers/apache/spark/hooks/spark_jdbc_script.py
@@ -18,15 +18,14 @@
 from __future__ import annotations
 
 import argparse
+import contextlib
 from typing import TYPE_CHECKING, Any
 
 if TYPE_CHECKING:
     from pyspark.sql import SparkSession
 
-try:
+with contextlib.suppress(ImportError):
     from pyspark.sql import SparkSession
-except ImportError:
-    pass
 
 SPARK_WRITE_TO_JDBC: str = "spark_to_jdbc"
 SPARK_READ_FROM_JDBC: str = "jdbc_to_spark"
diff --git 
a/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
 
b/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
index a8e242e7ee8..b3fb42a323c 100644
--- 
a/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
+++ 
b/providers/celery/src/airflow/providers/celery/executors/celery_executor_utils.py
@@ -375,10 +375,9 @@ def send_workload_to_executor(
     # If timeout fires during import, redis module gets partially cached in 
sys.modules
     # without the 'client' submodule bound, causing AttributeError on 
subsequent access.
     # See: https://github.com/apache/airflow/issues/41359
-    try:
+    # Redis not installed or not using Redis backend.
+    with contextlib.suppress(ImportError):
         import redis.client  # noqa: F401
-    except ImportError:
-        pass  # Redis not installed or not using Redis backend
 
     try:
         with timeout(seconds=OPERATION_TIMEOUT):
@@ -409,10 +408,9 @@ def fetch_celery_task_state(async_result: AsyncResult) -> 
tuple[str, str | Excep
     """
     # Pre-import redis.client to avoid SIGALRM interrupting module 
initialization.
     # See: https://github.com/apache/airflow/issues/41359
-    try:
+    # Redis not installed or not using Redis backend.
+    with contextlib.suppress(ImportError):
         import redis.client  # noqa: F401
-    except ImportError:
-        pass  # Redis not installed or not using Redis backend
 
     try:
         with timeout(seconds=OPERATION_TIMEOUT):
diff --git 
a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
 
b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
index e1609a187e8..3cf8e523d02 100644
--- 
a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
+++ 
b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/operators/pod.py
@@ -29,7 +29,7 @@ import re
 import shlex
 import string
 from collections.abc import Callable, Container, Iterable, Sequence
-from contextlib import AbstractContextManager
+from contextlib import AbstractContextManager, suppress
 from enum import Enum
 from functools import cached_property
 from typing import TYPE_CHECKING, Any, Literal
@@ -655,10 +655,8 @@ class KubernetesPodOperator(BaseOperator):
                 finally:
                     # Stop watching events
                     events_task.cancel()
-                    try:
+                    with suppress(asyncio.CancelledError):
                         await events_task
-                    except asyncio.CancelledError:
-                        pass
 
             asyncio.run(_await_pod_start())
         except PodLaunchFailedException:
diff --git 
a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/triggers/pod.py
 
b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/triggers/pod.py
index a1ec923185e..b592f98d8f8 100644
--- 
a/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/triggers/pod.py
+++ 
b/providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/triggers/pod.py
@@ -17,6 +17,7 @@
 from __future__ import annotations
 
 import asyncio
+import contextlib
 import datetime
 import traceback
 from collections.abc import AsyncIterator
@@ -285,10 +286,8 @@ class KubernetesPodTrigger(BaseTrigger):
         finally:
             # Stop watching events
             events_task.cancel()
-            try:
+            with contextlib.suppress(asyncio.CancelledError):
                 await events_task
-            except asyncio.CancelledError:
-                pass
 
         return self.define_container_state(await self._get_pod())
 
diff --git 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
index b062ab3a310..eb80275cf9d 100644
--- 
a/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
+++ 
b/providers/cncf/kubernetes/tests/unit/cncf/kubernetes/decorators/test_kubernetes_commons.py
@@ -16,6 +16,7 @@
 # under the License.
 from __future__ import annotations
 
+import contextlib
 from collections.abc import Callable
 from unittest import mock
 
@@ -108,10 +109,8 @@ class TestKubernetesDecoratorsBase:
         self.mock_fetch_logs = 
mock.patch(f"{POD_MANAGER_CLASS}.fetch_requested_container_logs").start()
         self.mock_fetch_logs.return_value = "logs"
 
-        try:
+        with contextlib.suppress(Exception):
             yield
-        except Exception:
-            pass
         mock.patch.stopall()
 
     def teardown_method(self):

Reply via email to