This is an automated email from the ASF dual-hosted git repository.
kirs 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 d93248a [python] Add custom exception (#6935)
d93248a is described below
commit d93248acbc3f7f1db299f7573b1403575f6da2a0
Author: Jiajie Zhong <[email protected]>
AuthorDate: Tue Nov 23 16:59:38 2021 +0800
[python] Add custom exception (#6935)
---
.../pydolphinscheduler/core/process_definition.py | 7 ++--
.../src/pydolphinscheduler/core/task.py | 6 ++++
.../src/pydolphinscheduler/exceptions.py | 42 ++++++++++++++++++++++
.../src/pydolphinscheduler/java_gateway.py | 5 +--
.../src/pydolphinscheduler/tasks/http.py | 9 +++--
.../src/pydolphinscheduler/tasks/python.py | 5 ++-
.../tests/core/test_process_definition.py | 3 +-
.../pydolphinscheduler/tests/tasks/test_http.py | 3 +-
.../pydolphinscheduler/tests/tasks/test_python.py | 5 ++-
.../pydolphinscheduler/tests/utils/test_date.py | 4 ++-
10 files changed, 76 insertions(+), 13 deletions(-)
diff --git
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/process_definition.py
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/process_definition.py
index e5769f5..1586757 100644
---
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/process_definition.py
+++
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/process_definition.py
@@ -26,6 +26,7 @@ from pydolphinscheduler.constants import (
ProcessDefinitionReleaseState,
)
from pydolphinscheduler.core.base import Base
+from pydolphinscheduler.exceptions import PyDSParamException,
PyDSTaskNoFoundException
from pydolphinscheduler.java_gateway import launch_gateway
from pydolphinscheduler.side import Project, Tenant, User
from pydolphinscheduler.utils.date import MAX_DATETIME, conv_from_str,
conv_to_schedule
@@ -166,7 +167,7 @@ class ProcessDefinition(Base):
elif isinstance(val, str):
return conv_from_str(val)
else:
- raise ValueError("Do not support value type %s for now", type(val))
+ raise PyDSParamException("Do not support value type %s for now",
type(val))
@property
def start_time(self) -> Any:
@@ -271,7 +272,7 @@ class ProcessDefinition(Base):
def get_task(self, code: str) -> "Task": # noqa: F821
"""Get task object from process definition by given code."""
if code not in self.tasks:
- raise ValueError(
+ raise PyDSTaskNoFoundException(
"Task with code %s can not found in process definition %",
(code, self.name),
)
@@ -294,7 +295,7 @@ class ProcessDefinition(Base):
"""
tasks = self.get_tasks_by_name(name)
if not tasks:
- raise ValueError(f"Can not find task with name {name}.")
+ raise PyDSTaskNoFoundException(f"Can not find task with name
{name}.")
return tasks.pop()
def run(self):
diff --git
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
index b6aa516..d22e5c8 100644
---
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
+++
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py
@@ -17,6 +17,7 @@
"""DolphinScheduler ObjectJsonBase, TaskParams and Task object."""
+import logging
from typing import Dict, List, Optional, Sequence, Set, Tuple, Union
from pydolphinscheduler.constants import (
@@ -162,6 +163,11 @@ class Task(Base):
and self.code not in self.process_definition.tasks
):
self.process_definition.add_task(self)
+ else:
+ logging.warning(
+ "Task code %d already in process definition, prohibit re-add
task.",
+ self.code,
+ )
@property
def process_definition(self) -> Optional[ProcessDefinition]:
diff --git
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/exceptions.py
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/exceptions.py
new file mode 100644
index 0000000..2acd79d
--- /dev/null
+++
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/exceptions.py
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""Exceptions for pydolphinscheduler."""
+
+
+class PyDSBaseException(Exception):
+ """Base exception for pydolphinscheduler."""
+
+ pass
+
+
+class PyDSParamException(PyDSBaseException):
+ """Exception for pydolphinscheduler parameter verify error."""
+
+ pass
+
+
+class PyDSTaskNoFoundException(PyDSBaseException):
+ """Exception for pydolphinscheduler workflow task no found error."""
+
+ pass
+
+
+class PyDSJavaGatewayException(PyDSBaseException):
+ """Exception for pydolphinscheduler Java gateway error."""
+
+ pass
diff --git
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/java_gateway.py
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/java_gateway.py
index f40bb36..d0b4c05 100644
---
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/java_gateway.py
+++
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/java_gateway.py
@@ -23,6 +23,7 @@ from py4j.java_collections import JavaMap
from py4j.java_gateway import GatewayParameters, JavaGateway
from pydolphinscheduler.constants import JavaGatewayDefault
+from pydolphinscheduler.exceptions import PyDSJavaGatewayException
def launch_gateway() -> JavaGateway:
@@ -45,10 +46,10 @@ def gateway_result_checker(
result[JavaGatewayDefault.RESULT_STATUS_KEYWORD].toString()
!= JavaGatewayDefault.RESULT_STATUS_SUCCESS
):
- raise RuntimeError("Failed when try to got result for java gateway")
+ raise PyDSJavaGatewayException("Failed when try to got result for java
gateway")
if (
msg_check is not None
and result[JavaGatewayDefault.RESULT_MESSAGE_KEYWORD] != msg_check
):
- raise ValueError("Get result state not success.")
+ raise PyDSJavaGatewayException("Get result state not success.")
return result
diff --git
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/http.py
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/http.py
index 5b0e765..445142e 100644
---
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/http.py
+++
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/http.py
@@ -21,6 +21,7 @@ from typing import Optional
from pydolphinscheduler.constants import TaskType
from pydolphinscheduler.core.task import Task, TaskParams
+from pydolphinscheduler.exceptions import PyDSParamException
class HttpMethod:
@@ -67,11 +68,13 @@ class HttpTaskParams(TaskParams):
super().__init__(*args, **kwargs)
self.url = url
if not hasattr(HttpMethod, http_method):
- raise ValueError("Parameter http_method %s not support.",
http_method)
+ raise PyDSParamException(
+ "Parameter http_method %s not support.", http_method
+ )
self.http_method = http_method
self.http_params = http_params or []
if not hasattr(HttpCheckCondition, http_check_condition):
- raise ValueError(
+ raise PyDSParamException(
"Parameter http_check_condition %s not support.",
http_check_condition
)
self.http_check_condition = http_check_condition
@@ -79,7 +82,7 @@ class HttpTaskParams(TaskParams):
http_check_condition != HttpCheckCondition.STATUS_CODE_DEFAULT
and condition is None
):
- raise ValueError(
+ raise PyDSParamException(
"Parameter condition must provider if http_check_condition not
equal to STATUS_CODE_DEFAULT"
)
self.condition = condition
diff --git
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/python.py
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/python.py
index ee392fb..9a7149a 100644
---
a/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/python.py
+++
b/dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/tasks/python.py
@@ -23,6 +23,7 @@ from typing import Any
from pydolphinscheduler.constants import TaskType
from pydolphinscheduler.core.task import Task, TaskParams
+from pydolphinscheduler.exceptions import PyDSParamException
class PythonTaskParams(TaskParams):
@@ -43,5 +44,7 @@ class Python(Task):
py_function = inspect.getsource(code)
task_params = PythonTaskParams(raw_script=py_function)
else:
- raise ValueError("Parameter code do not support % for now.",
type(code))
+ raise PyDSParamException(
+ "Parameter code do not support % for now.", type(code)
+ )
super().__init__(name, TaskType.PYTHON, task_params, *args, **kwargs)
diff --git
a/dolphinscheduler-python/pydolphinscheduler/tests/core/test_process_definition.py
b/dolphinscheduler-python/pydolphinscheduler/tests/core/test_process_definition.py
index 0359b29..4c15974 100644
---
a/dolphinscheduler-python/pydolphinscheduler/tests/core/test_process_definition.py
+++
b/dolphinscheduler-python/pydolphinscheduler/tests/core/test_process_definition.py
@@ -29,6 +29,7 @@ from pydolphinscheduler.constants import (
)
from pydolphinscheduler.core.process_definition import ProcessDefinition
from pydolphinscheduler.core.task import TaskParams
+from pydolphinscheduler.exceptions import PyDSParamException
from pydolphinscheduler.side import Project, Tenant, User
from pydolphinscheduler.utils.date import conv_to_schedule
from tests.testing.task import Task
@@ -147,7 +148,7 @@ def test__parse_datetime(val, expect):
def test__parse_datetime_not_support_type(val: Any):
"""Test process definition function _parse_datetime not support type
error."""
with ProcessDefinition(TEST_PROCESS_DEFINITION_NAME) as pd:
- with pytest.raises(ValueError):
+ with pytest.raises(PyDSParamException, match="Do not support value
type.*?"):
pd._parse_datetime(val)
diff --git
a/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_http.py
b/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_http.py
index 84af83f..7c01517 100644
--- a/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_http.py
+++ b/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_http.py
@@ -21,6 +21,7 @@ from unittest.mock import patch
import pytest
+from pydolphinscheduler.exceptions import PyDSParamException
from pydolphinscheduler.tasks.http import (
Http,
HttpCheckCondition,
@@ -64,7 +65,7 @@ def test_attr_exists(class_name, attrs):
def test_http_task_param_not_support_param(param):
"""Test HttpTaskParams not support parameter."""
url = "https://www.apache.org"
- with pytest.raises(ValueError, match="Parameter .*?"):
+ with pytest.raises(PyDSParamException, match="Parameter .*?"):
HttpTaskParams(url, **param)
diff --git
a/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_python.py
b/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_python.py
index 0fdd0cc..f9e7f04 100644
--- a/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_python.py
+++ b/dolphinscheduler-python/pydolphinscheduler/tests/tasks/test_python.py
@@ -22,6 +22,7 @@ from unittest.mock import patch
import pytest
+from pydolphinscheduler.exceptions import PyDSParamException
from pydolphinscheduler.tasks.python import Python, PythonTaskParams
@@ -60,7 +61,9 @@ def test_python_task_not_support_code(script_code):
"pydolphinscheduler.core.task.Task.gen_code_and_version",
return_value=(code, version),
):
- with pytest.raises(ValueError, match="Parameter code do not support
.*?"):
+ with pytest.raises(
+ PyDSParamException, match="Parameter code do not support .*?"
+ ):
Python(name, script_code)
diff --git
a/dolphinscheduler-python/pydolphinscheduler/tests/utils/test_date.py
b/dolphinscheduler-python/pydolphinscheduler/tests/utils/test_date.py
index bb204c9..b9f8ce5 100644
--- a/dolphinscheduler-python/pydolphinscheduler/tests/utils/test_date.py
+++ b/dolphinscheduler-python/pydolphinscheduler/tests/utils/test_date.py
@@ -72,5 +72,7 @@ def test_conv_from_str_success(src: str, expect: datetime) ->
None:
)
def test_conv_from_str_not_impl(src: str) -> None:
"""Test function conv_from_str fail case."""
- with pytest.raises(NotImplementedError):
+ with pytest.raises(
+ NotImplementedError, match=".*? could not be convert to datetime for
now."
+ ):
conv_from_str(src)