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