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):