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

zhongjiajie pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new a86f4e2693 [fix][python] Task switch branch not show in webui (#12120)
a86f4e2693 is described below

commit a86f4e2693b38503e8942cfe80e406a096b954c2
Author: Jiajie Zhong <[email protected]>
AuthorDate: Fri Sep 23 19:41:05 2022 +0800

    [fix][python] Task switch branch not show in webui (#12120)
    
    when create task switch in python api, switch branch not show correctly,
    due to we add some unnecessary attribute to switch task, this patch we
    add `_task_ignore_attr` in class `Task` to ignore those unnecessary
    attribute from `_task_default_attr`
---
 .../src/pydolphinscheduler/core/task.py            | 33 ++++++---
 .../src/pydolphinscheduler/tasks/switch.py         |  5 ++
 .../pydolphinscheduler/tests/core/test_task.py     | 81 ++++++++++++++++++++--
 .../pydolphinscheduler/tests/tasks/test_switch.py  |  2 -
 4 files changed, 103 insertions(+), 18 deletions(-)

diff --git 
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
 
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
index 93eb32352c..26b71c186d 100644
--- 
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
+++ 
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
@@ -16,7 +16,7 @@
 # under the License.
 
 """DolphinScheduler Task and TaskRelation object."""
-
+import copy
 from logging import getLogger
 from typing import Dict, List, Optional, Sequence, Set, Tuple, Union
 
@@ -100,6 +100,17 @@ class Task(Base):
         "timeout",
     }
 
+    # task default attribute will into `task_params` property
+    _task_default_attr = {
+        "local_params",
+        "resource_list",
+        "dependence",
+        "wait_start_timeout",
+        "condition_result",
+    }
+    # task attribute ignore from _task_default_attr and will not into 
`task_params` property
+    _task_ignore_attr: set = set()
+    # task custom attribute define in sub class and will append to 
`task_params` property
     _task_custom_attr: set = set()
 
     ext: set = None
@@ -220,20 +231,24 @@ class Task(Base):
         """Set attribute condition_result."""
         self._condition_result = condition_result
 
+    def _get_attr(self) -> Set[str]:
+        """Get final task task_params attribute.
+
+        Base on `_task_default_attr`, append attribute from 
`_task_custom_attr` and subtract attribute from
+        `_task_ignore_attr`.
+        """
+        attr = copy.deepcopy(self._task_default_attr)
+        attr -= self._task_ignore_attr
+        attr |= self._task_custom_attr
+        return attr
+
     @property
     def task_params(self) -> Optional[Dict]:
         """Get task parameter object.
 
         Will get result to combine _task_custom_attr and custom_attr.
         """
-        custom_attr = {
-            "local_params",
-            "resource_list",
-            "dependence",
-            "wait_start_timeout",
-            "condition_result",
-        }
-        custom_attr |= self._task_custom_attr
+        custom_attr = self._get_attr()
         return self.get_define_custom(custom_attr=custom_attr)
 
     def get_plugin(self):
diff --git 
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/switch.py
 
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/switch.py
index 35eece89b6..45edaa9aac 100644
--- 
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/switch.py
+++ 
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/switch.py
@@ -134,6 +134,11 @@ class Switch(Task):
     if task `switch` in this workflow.
     """
 
+    _task_ignore_attr = {
+        "condition_result",
+        "dependence",
+    }
+
     def __init__(self, name: str, condition: SwitchCondition, *args, **kwargs):
         super().__init__(name, TaskType.SWITCH, *args, **kwargs)
         self.condition = condition
diff --git a/dolphinscheduler-python/pydolphinscheduler/tests/core/test_task.py 
b/dolphinscheduler-python/pydolphinscheduler/tests/core/test_task.py
index cb06c21ae4..c6ef7773ae 100644
--- a/dolphinscheduler-python/pydolphinscheduler/tests/core/test_task.py
+++ b/dolphinscheduler-python/pydolphinscheduler/tests/core/test_task.py
@@ -18,6 +18,7 @@
 """Test Task class function."""
 import logging
 import re
+from typing import Set
 from unittest.mock import PropertyMock, patch
 
 import pytest
@@ -26,13 +27,79 @@ from pydolphinscheduler.core.process_definition import 
ProcessDefinition
 from pydolphinscheduler.core.task import Task, TaskRelation
 from pydolphinscheduler.exceptions import PyResPluginException
 from pydolphinscheduler.resources_plugin import Local
-from tests.testing.task import Task as testTask
+from tests.testing.task import Task as TestTask
 from tests.testing.task import TaskWithCode
 
 TEST_TASK_RELATION_SET = set()
 TEST_TASK_RELATION_SIZE = 0
 
 
[email protected](
+    "addition, ignore, expect",
+    [
+        (
+            set(),
+            set(),
+            {
+                "local_params",
+                "resource_list",
+                "dependence",
+                "wait_start_timeout",
+                "condition_result",
+            },
+        ),
+        (
+            set(),
+            {"dependence", "condition_result", "not_exists"},
+            {
+                "local_params",
+                "resource_list",
+                "wait_start_timeout",
+            },
+        ),
+        (
+            {
+                "not_exists_1",
+                "not_exists_2",
+            },
+            set(),
+            {
+                "not_exists_1",
+                "not_exists_2",
+                "local_params",
+                "resource_list",
+                "dependence",
+                "wait_start_timeout",
+                "condition_result",
+            },
+        ),
+        # test addition and ignore conflict to see behavior
+        (
+            {
+                "not_exists",
+            },
+            {"condition_result", "not_exists"},
+            {
+                "not_exists",
+                "local_params",
+                "resource_list",
+                "dependence",
+                "wait_start_timeout",
+            },
+        ),
+    ],
+)
+def test__get_attr(addition: Set, ignore: Set, expect: Set):
+    """Test task function `_get_attr`."""
+    task = TestTask(
+        name="test-get-attr",
+        task_type="test",
+    )
+    task._task_custom_attr = addition
+    task._task_ignore_attr = ignore
+    assert task._get_attr() == expect
+
+
 @pytest.mark.parametrize(
     "attr, expect",
     [
@@ -74,7 +141,7 @@ TEST_TASK_RELATION_SIZE = 0
 )
 def test_property_task_params(mock_resource, mock_user_name, attr, expect):
     """Test class task property."""
-    task = testTask(
+    task = TestTask(
         "test-property-task-params",
         "test-task",
         **attr,
@@ -184,8 +251,8 @@ def test_two_tasks_shift(shift: str):
 
     Here we test both `>>` and `<<` bit operator.
     """
-    upstream = testTask(name="upstream", task_type=shift)
-    downstream = testTask(name="downstream", task_type=shift)
+    upstream = TestTask(name="upstream", task_type=shift)
+    downstream = TestTask(name="downstream", task_type=shift)
     if shift == "<<":
         downstream << upstream
     elif shift == ">>":
@@ -221,10 +288,10 @@ def test_tasks_list_shift(dep_expr: str, flag: str):
         "downstream": "upstream",
     }
     task_type = "dep_task_and_tasks"
-    task = testTask(name="upstream", task_type=task_type)
+    task = TestTask(name="upstream", task_type=task_type)
     tasks = [
-        testTask(name="downstream1", task_type=task_type),
-        testTask(name="downstream2", task_type=task_type),
+        TestTask(name="downstream1", task_type=task_type),
+        TestTask(name="downstream2", task_type=task_type),
     ]
 
     # Use build-in function eval to simply test case and reduce duplicate code
diff --git 
a/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_switch.py 
b/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_switch.py
index 3206b12f7e..6f9222cec0 100644
--- a/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_switch.py
+++ b/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_switch.py
@@ -236,8 +236,6 @@ def test_switch_get_define(mock_task_code_version):
         "taskParams": {
             "resourceList": [],
             "localParams": [],
-            "dependence": {},
-            "conditionResult": {"successNode": [""], "failedNode": [""]},
             "waitStartTimeout": {},
             "switchResult": {
                 "dependTaskList": [

Reply via email to