You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by as...@apache.org on 2025/11/10 16:01:55 UTC
(airflow) branch log-var-and-conn-from-venv-take-two created (now dca52ee89b8)
This is an automated email from the ASF dual-hosted git repository.
ash pushed a change to branch log-var-and-conn-from-venv-take-two
in repository https://gitbox.apache.org/repos/asf/airflow.git
at dca52ee89b8 Allow virtualenv code to access connections/variables and send logs
This branch includes the following new commits:
new dca52ee89b8 Allow virtualenv code to access connections/variables and send logs
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(airflow) 01/01: Allow virtualenv code to access connections/variables and send logs
Posted by as...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ash pushed a commit to branch log-var-and-conn-from-venv-take-two
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit dca52ee89b8106a0d05d8f20715571f0f84592bf
Author: Ash Berlin-Taylor <as...@apache.org>
AuthorDate: Mon Nov 10 15:40:27 2025 +0000
Allow virtualenv code to access connections/variables and send logs
(This is the second attempt at this PR)
This change is quite simple, as it simply calls the function added in #57212
and #58147 if it's available. Up until the point that it is released this code
will not hit the getattr will return None and be a no-op.
I didn't use the walrus operator here as theoretically someone could be using
this to run in a Python that doesn't support it.
Fixes #51422, fixes #54706.
This doesn't have any unit tests, as a) it's relatively simple, and b) due to
how we run in the same process in the tests, there is no socket to reconnect
to, so we can't actually exercise this code
---
.../airflow/providers/standard/utils/python_virtualenv.py | 2 +-
.../standard/utils/python_virtualenv_script.jinja2 | 15 ++++++++++++---
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py b/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py
index ee71f33a560..891b3e0bce3 100644
--- a/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py
+++ b/providers/standard/src/airflow/providers/standard/utils/python_virtualenv.py
@@ -150,7 +150,7 @@ def _execute_in_subprocess(cmd: list[str], cwd: str | None = None, env: dict[str
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
bufsize=0,
- close_fds=True,
+ close_fds=False,
cwd=cwd,
env=env,
) as proc:
diff --git a/providers/standard/src/airflow/providers/standard/utils/python_virtualenv_script.jinja2 b/providers/standard/src/airflow/providers/standard/utils/python_virtualenv_script.jinja2
index cb4b738138f..6c0c69d14b5 100644
--- a/providers/standard/src/airflow/providers/standard/utils/python_virtualenv_script.jinja2
+++ b/providers/standard/src/airflow/providers/standard/utils/python_virtualenv_script.jinja2
@@ -40,6 +40,17 @@ if sys.version_info >= (3,6):
pass
{% endif %}
+try:
+ from airflow.sdk.execution_time import task_runner
+except ModuleNotFoundError:
+ pass
+else:
+ {#- We are in an Airflow 3.x env, try and set up supervisor comms so virtual env can still access tasks etc! #}
+ reinit_supervisor_comms = getattr(task_runner, "reinit_supervisor_comms", None)
+ os.environ["PUDB_TTY"] = "/dev/pts/2"
+ if reinit_supervisor_comms:
+ reinit_supervisor_comms()
+
# Script
{{ python_callable_source }}
@@ -49,12 +60,10 @@ if sys.version_info >= (3,6):
import types
{{ modified_dag_module_name }} = types.ModuleType("{{ modified_dag_module_name }}")
-
{{ modified_dag_module_name }}.{{ python_callable }} = {{ python_callable }}
-
sys.modules["{{modified_dag_module_name}}"] = {{modified_dag_module_name}}
-{% endif%}
+{%- endif -%}
{% if op_args or op_kwargs %}
with open(sys.argv[1], "rb") as file: