This is an automated email from the ASF dual-hosted git repository.
jscheffl 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 34adc27ed12 Enable ruff PLW1509 rule (#57659)
34adc27ed12 is described below
commit 34adc27ed1260ecdaddfcaa55d0136363f309e2b
Author: Jens Scheffler <[email protected]>
AuthorDate: Thu Nov 6 21:22:02 2025 +0100
Enable ruff PLW1509 rule (#57659)
* Enable ruff PLW1509 rule
* Fix pytests
---
.../src/airflow/providers/standard/hooks/subprocess.py | 11 ++---------
.../standard/src/airflow/providers/standard/sensors/bash.py | 3 +--
.../standard/tests/unit/standard/hooks/test_subprocess.py | 3 ++-
.../teradata/src/airflow/providers/teradata/hooks/bteq.py | 2 +-
providers/teradata/tests/unit/teradata/hooks/test_bteq.py | 2 +-
pyproject.toml | 1 +
6 files changed, 8 insertions(+), 14 deletions(-)
diff --git
a/providers/standard/src/airflow/providers/standard/hooks/subprocess.py
b/providers/standard/src/airflow/providers/standard/hooks/subprocess.py
index 601fe681555..11626fb451a 100644
--- a/providers/standard/src/airflow/providers/standard/hooks/subprocess.py
+++ b/providers/standard/src/airflow/providers/standard/hooks/subprocess.py
@@ -77,14 +77,6 @@ class SubprocessHook(BaseHook):
"""
self.log.info("Tmp dir root location: %s", gettempdir())
with working_directory(cwd=cwd) as cwd:
-
- def pre_exec():
- # Restore default signal disposition and invoke setsid
- for sig in ("SIGPIPE", "SIGXFZ", "SIGXFSZ"):
- if hasattr(signal, sig):
- signal.signal(getattr(signal, sig), signal.SIG_DFL)
- os.setsid()
-
self.log.info("Running command: %s", command)
self.sub_process = Popen(
@@ -93,7 +85,8 @@ class SubprocessHook(BaseHook):
stderr=STDOUT,
cwd=cwd,
env=env if env or env == {} else os.environ,
- preexec_fn=pre_exec,
+ start_new_session=True,
+ restore_signals=True,
)
self.log.info("Output:")
diff --git a/providers/standard/src/airflow/providers/standard/sensors/bash.py
b/providers/standard/src/airflow/providers/standard/sensors/bash.py
index 0294e841992..6283b990dae 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/bash.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/bash.py
@@ -17,7 +17,6 @@
# under the License.
from __future__ import annotations
-import os
from collections.abc import Sequence
from subprocess import PIPE, STDOUT, Popen
from tempfile import NamedTemporaryFile, TemporaryDirectory, gettempdir
@@ -89,7 +88,7 @@ class BashSensor(BaseSensorOperator):
close_fds=True,
cwd=tmp_dir,
env=self.env,
- preexec_fn=os.setsid,
+ start_new_session=True,
) as resp:
if resp.stdout:
self.log.info("Output:")
diff --git a/providers/standard/tests/unit/standard/hooks/test_subprocess.py
b/providers/standard/tests/unit/standard/hooks/test_subprocess.py
index d0833c85823..9b029c02f34 100644
--- a/providers/standard/tests/unit/standard/hooks/test_subprocess.py
+++ b/providers/standard/tests/unit/standard/hooks/test_subprocess.py
@@ -97,7 +97,8 @@ class TestSubprocessHook:
["bash", "-c", 'echo "stdout"'],
cwd="/tmp/airflowtmpcatcat",
env={},
- preexec_fn=mock.ANY,
+ restore_signals=True,
+ start_new_session=True,
stderr=STDOUT,
stdout=PIPE,
)
diff --git a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
index 12d108c263d..7c67dd234d3 100644
--- a/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
+++ b/providers/teradata/src/airflow/providers/teradata/hooks/bteq.py
@@ -263,7 +263,7 @@ class BteqHook(TtuHook):
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
shell=True,
- preexec_fn=os.setsid,
+ start_new_session=True,
)
encode_bteq_script = bteq_script.encode(str(temp_file_read_encoding or
"UTF-8"))
stdout_data, _ = process.communicate(input=encode_bteq_script)
diff --git a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
index e300ebdc104..a48e31791b6 100644
--- a/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
+++ b/providers/teradata/tests/unit/teradata/hooks/test_bteq.py
@@ -150,7 +150,7 @@ def test_execute_bteq_script_at_local_success(
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
shell=True,
- preexec_fn=os.setsid,
+ start_new_session=True,
)
assert ret_code == 0
diff --git a/pyproject.toml b/pyproject.toml
index 60fb31d3fc6..b14a51388d1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -610,6 +610,7 @@ extend-select = [
"PLW1501", # {mode} is not a valid mode for open
"PLW1507", # Shallow copy of os.environ via copy.copy(os.environ)
"PLW1508", # Invalid type for environment variable default; expected str
or None
+ "PLW1509", # preexec_fn argument is unsafe when using threads
"PLW1510", # subprocess.run without explicit check argument
"PLW1641", # Object does not implement __hash__ method
# Per rule enables