Skip to content

Commit 3061bbc

Browse files
authored
[Python] Combine gateway.entry_point call in python api side (#11330)
1 parent cfb5918 commit 3061bbc

12 files changed

Lines changed: 180 additions & 44 deletions

File tree

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/database.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from py4j.protocol import Py4JJavaError
2323

2424
from pydolphinscheduler.exceptions import PyDSParamException
25-
from pydolphinscheduler.java_gateway import launch_gateway
25+
from pydolphinscheduler.java_gateway import JavaGate
2626

2727

2828
class Database(dict):
@@ -54,9 +54,8 @@ def get_database_info(self, name) -> Dict:
5454
if self._database:
5555
return self._database
5656
else:
57-
gateway = launch_gateway()
5857
try:
59-
self._database = gateway.entry_point.getDatasourceInfo(name)
58+
self._database = JavaGate().get_datasource_info(name)
6059
# Handler database source do not exists error, for now we just terminate the process.
6160
except Py4JJavaError as ex:
6261
raise PyDSParamException(str(ex.java_exception))

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/engine.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
from pydolphinscheduler.core.task import Task
2525
from pydolphinscheduler.exceptions import PyDSParamException
26-
from pydolphinscheduler.java_gateway import launch_gateway
26+
from pydolphinscheduler.java_gateway import JavaGate
2727

2828

2929
class ProgramType(str):
@@ -62,9 +62,8 @@ def get_resource_info(self, program_type, main_package):
6262
if self._resource:
6363
return self._resource
6464
else:
65-
gateway = launch_gateway()
6665
try:
67-
self._resource = gateway.entry_point.getResourcesFileInfo(
66+
self._resource = JavaGate().get_resources_file_info(
6867
program_type, main_package
6968
)
7069
# Handler source do not exists error, for now we just terminate the process.

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/process_definition.py‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from pydolphinscheduler.constants import TaskType
2626
from pydolphinscheduler.core.resource import Resource
2727
from pydolphinscheduler.exceptions import PyDSParamException, PyDSTaskNoFoundException
28-
from pydolphinscheduler.java_gateway import launch_gateway
28+
from pydolphinscheduler.java_gateway import JavaGate
2929
from pydolphinscheduler.models import Base, Project, Tenant, User
3030
from pydolphinscheduler.utils.date import MAX_DATETIME, conv_from_str, conv_to_schedule
3131

@@ -392,14 +392,12 @@ def submit(self) -> int:
392392
self._ensure_side_model_exists()
393393
self._pre_submit_check()
394394

395-
gateway = launch_gateway()
396-
self._process_definition_code = gateway.entry_point.createOrUpdateProcessDefinition(
395+
self._process_definition_code = JavaGate().create_or_update_process_definition(
397396
self._user,
398397
self._project,
399398
self.name,
400399
str(self.description) if self.description else "",
401400
json.dumps(self.param_json),
402-
json.dumps(self.schedule_json) if self.schedule_json else None,
403401
self.warning_type,
404402
self.warning_group_id,
405403
json.dumps(self.task_location),
@@ -410,6 +408,7 @@ def submit(self) -> int:
410408
# TODO add serialization function
411409
json.dumps(self.task_relation_json),
412410
json.dumps(self.task_definition_json),
411+
json.dumps(self.schedule_json) if self.schedule_json else None,
413412
None,
414413
None,
415414
)
@@ -424,8 +423,7 @@ def start(self) -> None:
424423
425424
which post to `start-process-instance` to java gateway
426425
"""
427-
gateway = launch_gateway()
428-
gateway.entry_point.execProcessInstance(
426+
JavaGate().exec_process_instance(
429427
self._user,
430428
self._project,
431429
self.name,

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/resource.py‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from typing import Optional
2121

2222
from pydolphinscheduler.exceptions import PyDSParamException
23-
from pydolphinscheduler.java_gateway import launch_gateway
23+
from pydolphinscheduler.java_gateway import JavaGate
2424
from pydolphinscheduler.models import Base
2525

2626

@@ -53,8 +53,7 @@ def get_info_from_database(self):
5353
raise PyDSParamException(
5454
"`user_name` is required when querying resources from python gate."
5555
)
56-
gateway = launch_gateway()
57-
return gateway.entry_point.queryResourcesFileInfo(self.user_name, self.name)
56+
return JavaGate().query_resources_file_info(self.user_name, self.name)
5857

5958
def get_id_from_database(self):
6059
"""Get resource id from java gateway."""
@@ -66,10 +65,9 @@ def create_or_update_resource(self):
6665
raise PyDSParamException(
6766
"`user_name` and `content` are required when create or update resource from python gate."
6867
)
69-
gateway = launch_gateway()
70-
gateway.entry_point.createOrUpdateResource(
68+
JavaGate().create_or_update_resource(
7169
self.user_name,
7270
self.name,
73-
self.description,
7471
self.content,
72+
self.description,
7573
)

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/core/task.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
)
3535
from pydolphinscheduler.core.resource import Resource
3636
from pydolphinscheduler.exceptions import PyDSParamException
37-
from pydolphinscheduler.java_gateway import launch_gateway
37+
from pydolphinscheduler.java_gateway import JavaGate
3838
from pydolphinscheduler.models import Base
3939

4040
logger = getLogger(__name__)
@@ -300,8 +300,7 @@ def gen_code_and_version(self) -> Tuple:
300300
equal to 0 by java gateway, otherwise if will return the exists code and version.
301301
"""
302302
# TODO get code from specific project process definition and task name
303-
gateway = launch_gateway()
304-
result = gateway.entry_point.getCodeAndVersion(
303+
result = JavaGate().get_code_and_version(
305304
self.process_definition._project, self.process_definition.name, self.name
306305
)
307306
# result = gateway.entry_point.genTaskCodeList(DefaultTaskCodeNum.DEFAULT)

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/java_gateway.py‎

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,159 @@ def gateway_result_checker(
6363
):
6464
raise PyDSJavaGatewayException("Get result state not success.")
6565
return result
66+
67+
68+
class JavaGate:
69+
"""Launch java gateway to pydolphin scheduler."""
70+
71+
def __init__(
72+
self,
73+
address: Optional[str] = None,
74+
port: Optional[int] = None,
75+
auto_convert: Optional[bool] = True,
76+
):
77+
self.java_gateway = launch_gateway(address, port, auto_convert)
78+
79+
def get_datasource_info(self, name: str):
80+
"""Get datasource info through java gateway."""
81+
return self.java_gateway.entry_point.getDatasourceInfo(name)
82+
83+
def get_resources_file_info(self, program_type: str, main_package: str):
84+
"""Get resources file info through java gateway."""
85+
return self.java_gateway.entry_point.getResourcesFileInfo(
86+
program_type, main_package
87+
)
88+
89+
def create_or_update_resource(
90+
self, user_name: str, name: str, content: str, description: Optional[str] = None
91+
):
92+
"""Create or update resource through java gateway."""
93+
return self.java_gateway.entry_point.createOrUpdateResource(
94+
user_name, name, description, content
95+
)
96+
97+
def query_resources_file_info(self, user_name: str, name: str):
98+
"""Get resources file info through java gateway."""
99+
return self.java_gateway.entry_point.queryResourcesFileInfo(user_name, name)
100+
101+
def get_code_and_version(
102+
self, project_name: str, process_definition_name: str, task_name: str
103+
):
104+
"""Get code and version through java gateway."""
105+
return self.java_gateway.entry_point.getCodeAndVersion(
106+
project_name, process_definition_name, task_name
107+
)
108+
109+
def create_or_grant_project(
110+
self, user: str, name: str, description: Optional[str] = None
111+
):
112+
"""Create or grant project through java gateway."""
113+
return self.java_gateway.entry_point.createOrGrantProject(
114+
user, name, description
115+
)
116+
117+
def create_tenant(
118+
self, tenant_name: str, queue_name: str, description: Optional[str] = None
119+
):
120+
"""Create tenant through java gateway."""
121+
return self.java_gateway.entry_point.createTenant(
122+
tenant_name, description, queue_name
123+
)
124+
125+
def create_user(
126+
self,
127+
name: str,
128+
password: str,
129+
email: str,
130+
phone: str,
131+
tenant: str,
132+
queue: str,
133+
status: int,
134+
):
135+
"""Create user through java gateway."""
136+
return self.java_gateway.entry_point.createUser(
137+
name, password, email, phone, tenant, queue, status
138+
)
139+
140+
def get_dependent_info(
141+
self,
142+
project_name: str,
143+
process_definition_name: str,
144+
task_name: Optional[str] = None,
145+
):
146+
"""Get dependent info through java gateway."""
147+
return self.java_gateway.entry_point.getDependentInfo(
148+
project_name, process_definition_name, task_name
149+
)
150+
151+
def get_process_definition_info(
152+
self, user_name: str, project_name: str, process_definition_name: str
153+
):
154+
"""Get process definition info through java gateway."""
155+
return self.java_gateway.entry_point.getProcessDefinitionInfo(
156+
user_name, project_name, process_definition_name
157+
)
158+
159+
def create_or_update_process_definition(
160+
self,
161+
user_name: str,
162+
project_name: str,
163+
name: str,
164+
description: str,
165+
global_params: str,
166+
warning_type: str,
167+
warning_group_id: int,
168+
locations: str,
169+
timeout: int,
170+
worker_group: str,
171+
tenant_code: str,
172+
release_state: int,
173+
task_relation_json: str,
174+
task_definition_json: str,
175+
schedule: Optional[str] = None,
176+
other_params_json: Optional[str] = None,
177+
execution_type: Optional[str] = None,
178+
):
179+
"""Create or update process definition through java gateway."""
180+
return self.java_gateway.entry_point.createOrUpdateProcessDefinition(
181+
user_name,
182+
project_name,
183+
name,
184+
description,
185+
global_params,
186+
schedule,
187+
warning_type,
188+
warning_group_id,
189+
locations,
190+
timeout,
191+
worker_group,
192+
tenant_code,
193+
release_state,
194+
task_relation_json,
195+
task_definition_json,
196+
other_params_json,
197+
execution_type,
198+
)
199+
200+
def exec_process_instance(
201+
self,
202+
user_name: str,
203+
project_name: str,
204+
process_definition_name: str,
205+
cron_time: str,
206+
worker_group: str,
207+
warning_type: str,
208+
warning_group_id: int,
209+
timeout: int,
210+
):
211+
"""Exec process instance through java gateway."""
212+
return self.java_gateway.entry_point.execProcessInstance(
213+
user_name,
214+
project_name,
215+
process_definition_name,
216+
cron_time,
217+
worker_group,
218+
warning_type,
219+
warning_group_id,
220+
timeout,
221+
)

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/models/project.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from typing import Optional
2121

2222
from pydolphinscheduler import configuration
23-
from pydolphinscheduler.java_gateway import launch_gateway
23+
from pydolphinscheduler.java_gateway import JavaGate
2424
from pydolphinscheduler.models import BaseSide
2525

2626

@@ -36,7 +36,6 @@ def __init__(
3636

3737
def create_if_not_exists(self, user=configuration.USER_NAME) -> None:
3838
"""Create Project if not exists."""
39-
gateway = launch_gateway()
40-
gateway.entry_point.createOrGrantProject(user, self.name, self.description)
39+
JavaGate().create_or_grant_project(user, self.name, self.description)
4140
# TODO recover result checker
4241
# gateway_result_checker(result, None)

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/models/queue.py‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from typing import Optional
2121

2222
from pydolphinscheduler import configuration
23-
from pydolphinscheduler.java_gateway import gateway_result_checker, launch_gateway
2423
from pydolphinscheduler.models import BaseSide
2524

2625

@@ -33,10 +32,3 @@ def __init__(
3332
description: Optional[str] = "",
3433
):
3534
super().__init__(name, description)
36-
37-
def create_if_not_exists(self, user=configuration.USER_NAME) -> None:
38-
"""Create Queue if not exists."""
39-
gateway = launch_gateway()
40-
# Here we set Queue.name and Queue.queueName same as self.name
41-
result = gateway.entry_point.createProject(user, self.name, self.name)
42-
gateway_result_checker(result, None)

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/models/tenant.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from typing import Optional
2121

2222
from pydolphinscheduler import configuration
23-
from pydolphinscheduler.java_gateway import launch_gateway
23+
from pydolphinscheduler.java_gateway import JavaGate
2424
from pydolphinscheduler.models import BaseSide
2525

2626

@@ -40,6 +40,5 @@ def create_if_not_exists(
4040
self, queue_name: str, user=configuration.USER_NAME
4141
) -> None:
4242
"""Create Tenant if not exists."""
43-
gateway = launch_gateway()
44-
gateway.entry_point.createTenant(self.name, self.description, queue_name)
43+
JavaGate().create_tenant(self.name, queue_name, self.description)
4544
# gateway_result_checker(result, None)

‎dolphinscheduler-python/pydolphinscheduler/src/pydolphinscheduler/models/user.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from typing import Optional
2121

2222
from pydolphinscheduler import configuration
23-
from pydolphinscheduler.java_gateway import launch_gateway
23+
from pydolphinscheduler.java_gateway import JavaGate
2424
from pydolphinscheduler.models import BaseSide, Tenant
2525

2626

@@ -64,8 +64,7 @@ def create_if_not_exists(self, **kwargs):
6464
"""Create User if not exists."""
6565
# Should make sure queue already exists.
6666
self.create_tenant_if_not_exists()
67-
gateway = launch_gateway()
68-
gateway.entry_point.createUser(
67+
JavaGate().create_user(
6968
self.name,
7069
self.password,
7170
self.email,

0 commit comments

Comments
 (0)