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

shahar 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 4cf50a69f91 Improve testing for context serialization (#50566)
4cf50a69f91 is described below

commit 4cf50a69f910de3f893c63976b1c5b37832dd50e
Author: Yann Lambret <[email protected]>
AuthorDate: Sun May 18 20:37:20 2025 +0200

    Improve testing for context serialization (#50566)
    
    Follow-up to #50446 and #50521:
    
    - Clean up requirements-flattening logic.
    - Add tests for requirements passed as multi-line strings.
---
 .../src/airflow/providers/standard/operators/python.py         | 10 ++--------
 .../standard/tests/unit/standard/operators/test_python.py      |  4 ++++
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git 
a/providers/standard/src/airflow/providers/standard/operators/python.py 
b/providers/standard/src/airflow/providers/standard/operators/python.py
index 01e184d924b..b67d186fbf4 100644
--- a/providers/standard/src/airflow/providers/standard/operators/python.py
+++ b/providers/standard/src/airflow/providers/standard/operators/python.py
@@ -31,6 +31,7 @@ import warnings
 from abc import ABCMeta, abstractmethod
 from collections.abc import Collection, Container, Iterable, Mapping, Sequence
 from functools import cache
+from itertools import chain
 from pathlib import Path
 from tempfile import TemporaryDirectory
 from typing import TYPE_CHECKING, Any, Callable, NamedTuple, cast
@@ -859,14 +860,7 @@ class 
PythonVirtualenvOperator(_BasePythonVirtualenvOperator):
             # If we're using system packages, assume both are present
             found_airflow = found_pendulum = True
         else:
-            requirements_iterable = []
-            if isinstance(self.requirements, str):
-                requirements_iterable = self.requirements.splitlines()
-            else:
-                for item in self.requirements:
-                    requirements_iterable.extend(item.splitlines())
-
-            for raw_str in requirements_iterable:
+            for raw_str in chain.from_iterable(req.splitlines() for req in 
self.requirements):
                 line = raw_str.strip()
                 # Skip blank lines and full‐line comments
                 if not line or line.startswith("#"):
diff --git a/providers/standard/tests/unit/standard/operators/test_python.py 
b/providers/standard/tests/unit/standard/operators/test_python.py
index e8a00914816..16921520cc2 100644
--- a/providers/standard/tests/unit/standard/operators/test_python.py
+++ b/providers/standard/tests/unit/standard/operators/test_python.py
@@ -1480,6 +1480,10 @@ class 
TestPythonVirtualenvOperator(BaseTestPythonVirtualenvOperator):
             (["", "pendulum"], False, False, True),
             # indented comment + requirement
             (["  # comment", "pendulum~=2.1.0"], False, False, True),
+            # requirements passed as multi-line strings
+            ("funcsigs==0.4\nattrs==23.1.0", False, False, False),
+            (["funcsigs==0.4\nattrs==23.1.0"], False, False, False),
+            ("pendulum==2.1.2  # pinned version\nattrs==23.1.0  # optional", 
False, False, True),
         ],
     )
     def test_iter_serializable_context_keys(self, requirements, system_site, 
want_airflow, want_pendulum):

Reply via email to