Skip to content

Commit

Permalink
Allow PythonVirtualenvOperator.skip_on_exit_code to be zero
Browse files Browse the repository at this point in the history
  • Loading branch information
dolfinus committed Dec 21, 2023
1 parent 55f421b commit 16986bc
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
2 changes: 1 addition & 1 deletion airflow/operators/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ def __init__(
skip_on_exit_code
if isinstance(skip_on_exit_code, Container)
else [skip_on_exit_code]
if skip_on_exit_code
if skip_on_exit_code is None
else []
)

Expand Down
26 changes: 18 additions & 8 deletions tests/operators/test_python.py
Original file line number Diff line number Diff line change
Expand Up @@ -847,31 +847,41 @@ def test_virtualenv_serializable_context_fields(self, create_task_instance):
assert set(context) == declared_keys

@pytest.mark.parametrize(
"extra_kwargs, actual_exit_code, expected_state",
"kwargs, actual_exit_code, expected_state",
[
(None, 99, TaskInstanceState.FAILED),
({}, 0, TaskInstanceState.SKIPPED),
({}, 100, TaskInstanceState.FAILED),
({}, 101, TaskInstanceState.FAILED),
({"skip_on_exit_code": None}, 0, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": None}, 100, TaskInstanceState.FAILED),
({"skip_on_exit_code": None}, 101, TaskInstanceState.FAILED),
({"skip_on_exit_code": 100}, 0, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": 100}, 100, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": [100]}, 100, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": (100, 101)}, 100, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": 100}, 101, TaskInstanceState.FAILED),
({"skip_on_exit_code": 0}, 0, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": [100]}, 0, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": [100]}, 100, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": [100]}, 101, TaskInstanceState.FAILED),
({"skip_on_exit_code": [100, 102]}, 101, TaskInstanceState.FAILED),
({"skip_on_exit_code": None}, 0, TaskInstanceState.SUCCESS),
({"skip_on_exit_code": (100,)}, 0, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": (100,)}, 100, TaskInstanceState.SKIPPED),
({"skip_on_exit_code": (100,)}, 101, TaskInstanceState.FAILED),
],
)
def test_on_skip_exit_code(self, extra_kwargs, actual_exit_code, expected_state):
def test_on_skip_exit_code(self, kwargs, actual_exit_code, expected_state):
def f(exit_code):
if exit_code != 0:
raise SystemExit(exit_code)

if expected_state == TaskInstanceState.FAILED:
with pytest.raises(CalledProcessError):
self.run_as_task(f, op_kwargs={"exit_code": actual_exit_code}, **(extra_kwargs or {}))
self.run_as_task(f, op_kwargs={"exit_code": actual_exit_code}, **kwargs)
else:
ti = self.run_as_task(
f,
return_ti=True,
op_kwargs={"exit_code": actual_exit_code},
**(extra_kwargs or {}),
**kwargs,
)
assert ti.state == expected_state

Expand Down

0 comments on commit 16986bc

Please sign in to comment.