From a8d79c5e60a7d7acf90b894990265dd50452bc4e Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Fri, 14 Feb 2025 10:26:17 +0800 Subject: [PATCH] fix: Defect of embedding application parameters as empty and reporting errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1052184 --user=王孝刚 【github#2273】【应用】-有非必填接口传参的编排应用,作为节点加入新的编排应用后,接口传参为空时对话报错 https://www.tapd.cn/57709429/s/1654259 --- .../application_node/i_application_node.py | 31 +++++++++++++------ .../impl/base_application_node.py | 13 +++++--- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/apps/application/flow/step_node/application_node/i_application_node.py b/apps/application/flow/step_node/application_node/i_application_node.py index c590857a3..6394fa49c 100644 --- a/apps/application/flow/step_node/application_node/i_application_node.py +++ b/apps/application/flow/step_node/application_node/i_application_node.py @@ -11,13 +11,16 @@ from django.utils.translation import gettext_lazy as _ class ApplicationNodeSerializer(serializers.Serializer): application_id = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Application ID"))) - question_reference_address = serializers.ListField(required=True, error_messages=ErrMessage.list(_("User Questions"))) + question_reference_address = serializers.ListField(required=True, + error_messages=ErrMessage.list(_("User Questions"))) api_input_field_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("API Input Fields"))) - user_input_field_list = serializers.ListField(required=False, error_messages=ErrMessage.uuid(_("User Input Fields"))) + user_input_field_list = serializers.ListField(required=False, + error_messages=ErrMessage.uuid(_("User Input Fields"))) image_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("picture"))) document_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("document"))) audio_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("Audio"))) - child_node = serializers.DictField(required=False, allow_null=True, error_messages=ErrMessage.dict(_("Child Nodes"))) + child_node = serializers.DictField(required=False, allow_null=True, + error_messages=ErrMessage.dict(_("Child Nodes"))) node_data = serializers.DictField(required=False, allow_null=True, error_messages=ErrMessage.dict(_("Form Data"))) @@ -33,11 +36,16 @@ class IApplicationNode(INode): self.node_params_serializer.data.get('question_reference_address')[1:]) kwargs = {} for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []): - kwargs[api_input_field['variable']] = self.workflow_manage.get_reference_field(api_input_field['value'][0], - api_input_field['value'][1:]) + value = api_input_field.get('value', [''])[0] if api_input_field.get('value') else '' + kwargs[api_input_field['variable']] = self.workflow_manage.get_reference_field(value, + api_input_field['value'][ + 1:]) if value != '' else '' + for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []): - kwargs[user_input_field['field']] = self.workflow_manage.get_reference_field(user_input_field['value'][0], - user_input_field['value'][1:]) + value = user_input_field.get('value', [''])[0] if user_input_field.get('value') else '' + kwargs[user_input_field['field']] = self.workflow_manage.get_reference_field(value, + user_input_field['value'][ + 1:]) if value != '' else '' # 判断是否包含这个属性 app_document_list = self.node_params_serializer.data.get('document_list', []) if app_document_list and len(app_document_list) > 0: @@ -46,7 +54,8 @@ class IApplicationNode(INode): app_document_list[1:]) for document in app_document_list: if 'file_id' not in document: - raise ValueError(_("Parameter value error: The uploaded document lacks file_id, and the document upload fails")) + raise ValueError( + _("Parameter value error: The uploaded document lacks file_id, and the document upload fails")) app_image_list = self.node_params_serializer.data.get('image_list', []) if app_image_list and len(app_image_list) > 0: app_image_list = self.workflow_manage.get_reference_field( @@ -54,7 +63,8 @@ class IApplicationNode(INode): app_image_list[1:]) for image in app_image_list: if 'file_id' not in image: - raise ValueError(_("Parameter value error: The uploaded image lacks file_id, and the image upload fails")) + raise ValueError( + _("Parameter value error: The uploaded image lacks file_id, and the image upload fails")) app_audio_list = self.node_params_serializer.data.get('audio_list', []) if app_audio_list and len(app_audio_list) > 0: @@ -63,7 +73,8 @@ class IApplicationNode(INode): app_audio_list[1:]) for audio in app_audio_list: if 'file_id' not in audio: - raise ValueError(_("Parameter value error: The uploaded audio lacks file_id, and the audio upload fails.")) + raise ValueError( + _("Parameter value error: The uploaded audio lacks file_id, and the audio upload fails.")) return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data, app_document_list=app_document_list, app_image_list=app_image_list, app_audio_list=app_audio_list, diff --git a/apps/application/flow/step_node/application_node/impl/base_application_node.py b/apps/application/flow/step_node/application_node/impl/base_application_node.py index b1ef5f4d7..ef254a97c 100644 --- a/apps/application/flow/step_node/application_node/impl/base_application_node.py +++ b/apps/application/flow/step_node/application_node/impl/base_application_node.py @@ -220,20 +220,25 @@ class BaseApplicationNode(IApplicationNode): def get_details(self, index: int, **kwargs): global_fields = [] for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []): + value = api_input_field.get('value', [''])[0] if api_input_field.get('value') else '' global_fields.append({ 'label': api_input_field['variable'], 'key': api_input_field['variable'], 'value': self.workflow_manage.get_reference_field( - api_input_field['value'][0], - api_input_field['value'][1:]) + value, + api_input_field['value'][1:] + ) if value != '' else '' }) + for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []): + value = user_input_field.get('value', [''])[0] if user_input_field.get('value') else '' global_fields.append({ 'label': user_input_field['label'], 'key': user_input_field['field'], 'value': self.workflow_manage.get_reference_field( - user_input_field['value'][0], - user_input_field['value'][1:]) + value, + user_input_field['value'][1:] + ) if value != '' else '' }) return { 'name': self.node.properties.get('stepName'),