Skip to content

Commit a7bb173

Browse files
committed
feat: Add web node interrupt
1 parent 5b96aaf commit a7bb173

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ class BaseDataSourceWebNodeForm(BaseForm):
2525
'placeholder': _('The default is body, you can enter .classname/#idname/tagname')})
2626

2727

28-
def get_collect_handler():
28+
class InterruptedTaskException(Exception):
29+
def __init__(self, *args, **kwargs): # real signature unknown
30+
pass
31+
32+
33+
def get_collect_handler(workflow_manage):
2934
results = []
3035

3136
def handler(child_link: ChildLink, response: Fork.Response):
@@ -37,8 +42,11 @@ def handler(child_link: ChildLink, response: Fork.Response):
3742
"name": document_name.strip(),
3843
"content": response.content,
3944
})
45+
4046
except Exception as e:
41-
maxkb_logger.error(f'{str(e)}:{traceback.format_exc()}')
47+
maxkb_logger.error(f'{str(e)}:{traceback.format_exc()}')
48+
if workflow_manage.is_the_task_interrupted():
49+
raise InterruptedTaskException('Task interrupted')
4250

4351
return handler, results
4452

@@ -60,15 +68,18 @@ def execute(self, **kwargs) -> NodeResult:
6068
source_url = data_source.get("source_url")
6169
selector = data_source.get("selector") or "body"
6270

63-
collect_handler, document_list = get_collect_handler()
71+
collect_handler, document_list = get_collect_handler(self.workflow_manage)
6472

6573
try:
6674
ForkManage(source_url, selector.split(" ") if selector is not None else []).fork(3, set(), collect_handler)
6775

68-
return NodeResult({'document_list': document_list,'source_url': source_url, 'selector': selector},
76+
return NodeResult({'document_list': document_list, 'source_url': source_url, 'selector': selector},
6977
self.workflow_manage.params.get('knowledge_base') or {})
7078

7179
except Exception as e:
80+
if isinstance(e,InterruptedTaskException):
81+
return NodeResult({'document_list': document_list, 'source_url': source_url, 'selector': selector},
82+
self.workflow_manage.params.get('knowledge_base') or {})
7283
maxkb_logger.error(_('data source web node:{node_id} error{error}{traceback}').format(
7384
knowledge_id=node_id, error=str(e), traceback=traceback.format_exc()))
7485

0 commit comments

Comments
 (0)