You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2023/09/07 10:38:08 UTC

[airflow] branch main updated: fix(providers/ftp): respect soft_fail argument when exception is raised (#34161)

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

potiuk 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 4f0e4254e4 fix(providers/ftp): respect soft_fail argument when exception is raised (#34161)
4f0e4254e4 is described below

commit 4f0e4254e4d8b0c3f14b7caf228e30f9e1577123
Author: Wei Lee <we...@gmail.com>
AuthorDate: Thu Sep 7 18:38:00 2023 +0800

    fix(providers/ftp): respect soft_fail argument when exception is raised (#34161)
---
 airflow/providers/ftp/sensors/ftp.py    |  3 +++
 tests/providers/ftp/sensors/test_ftp.py | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/airflow/providers/ftp/sensors/ftp.py b/airflow/providers/ftp/sensors/ftp.py
index 7dddbf521a..19b69fb994 100644
--- a/airflow/providers/ftp/sensors/ftp.py
+++ b/airflow/providers/ftp/sensors/ftp.py
@@ -21,6 +21,7 @@ import ftplib
 import re
 from typing import TYPE_CHECKING, Sequence
 
+from airflow.exceptions import AirflowSkipException
 from airflow.providers.ftp.hooks.ftp import FTPHook, FTPSHook
 from airflow.sensors.base import BaseSensorOperator
 
@@ -82,6 +83,8 @@ class FTPSensor(BaseSensorOperator):
                 if (error_code != 550) and (
                     self.fail_on_transient_errors or (error_code not in self.transient_errors)
                 ):
+                    if self.soft_fail:
+                        raise AirflowSkipException from e
                     raise e
 
                 return False
diff --git a/tests/providers/ftp/sensors/test_ftp.py b/tests/providers/ftp/sensors/test_ftp.py
index e79b46526a..107b232371 100644
--- a/tests/providers/ftp/sensors/test_ftp.py
+++ b/tests/providers/ftp/sensors/test_ftp.py
@@ -22,6 +22,7 @@ from unittest import mock
 
 import pytest
 
+from airflow.exceptions import AirflowSkipException
 from airflow.providers.ftp.hooks.ftp import FTPHook
 from airflow.providers.ftp.sensors.ftp import FTPSensor
 
@@ -69,6 +70,17 @@ class TestFTPSensor:
 
         assert "434" in str(ctx.value)
 
+    @mock.patch("airflow.providers.ftp.sensors.ftp.FTPHook", spec=FTPHook)
+    def test_poke_fail_on_transient_error_and_skip(self, mock_hook):
+        op = FTPSensor(path="foobar.json", ftp_conn_id="bob_ftp", task_id="test_task", soft_fail=True)
+
+        mock_hook.return_value.__enter__.return_value.get_mod_time.side_effect = error_perm(
+            "434: Host unavailable"
+        )
+
+        with pytest.raises(AirflowSkipException):
+            op.execute(None)
+
     @mock.patch("airflow.providers.ftp.sensors.ftp.FTPHook", spec=FTPHook)
     def test_poke_ignore_transient_error(self, mock_hook):
         op = FTPSensor(