diff --git a/apps/common/constants/permission_constants.py b/apps/common/constants/permission_constants.py index 46b1091e44d..f5c4126cc38 100644 --- a/apps/common/constants/permission_constants.py +++ b/apps/common/constants/permission_constants.py @@ -560,47 +560,6 @@ class PermissionConstants(Enum): group=Group.TRIGGER, operate=Operate.RECORD, role_list=[RoleConstants.ADMIN], parent_group=[WorkspaceGroup.TRIGGER], ) - # source point trigger - TOOL_TRIGGER_READ = Permission( - group=Group.TOOL, operate=Operate.TRIGGER_READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], - resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] - ) - TOOL_TRIGGER_CREATE = Permission( - group=Group.TOOL, operate=Operate.TRIGGER_CREATE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], - resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] - ) - TOOL_TRIGGER_EDIT = Permission( - group=Group.TOOL, operate=Operate.TRIGGER_EDIT, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], - resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] - ) - TOOL_TRIGGER_DELETE = Permission( - group=Group.TOOL, operate=Operate.TRIGGER_DELETE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], - resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] - ) - APPLICATION_TRIGGER_READ = Permission( - group=Group.APPLICATION, operate=Operate.TRIGGER_READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], - resource_permission_group_list=[ResourcePermissionConst.APPLICATION_VIEW] - ) - APPLICATION_TRIGGER_CREATE = Permission( - group=Group.APPLICATION, operate=Operate.TRIGGER_CREATE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], - resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] - ) - APPLICATION_TRIGGER_EDIT = Permission( - group=Group.APPLICATION, operate=Operate.TRIGGER_EDIT, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], - resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] - ) - APPLICATION_TRIGGER_DELETE = Permission( - group=Group.APPLICATION, operate=Operate.TRIGGER_DELETE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], - parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], - resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] - ) TOOL_READ = Permission( group=Group.TOOL, operate=Operate.READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], @@ -644,6 +603,27 @@ class PermissionConstants(Enum): parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE] ) + # source point trigger + TOOL_TRIGGER_READ = Permission( + group=Group.TOOL, operate=Operate.TRIGGER_READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], + resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] + ) + TOOL_TRIGGER_CREATE = Permission( + group=Group.TOOL, operate=Operate.TRIGGER_CREATE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], + resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] + ) + TOOL_TRIGGER_EDIT = Permission( + group=Group.TOOL, operate=Operate.TRIGGER_EDIT, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], + resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] + ) + TOOL_TRIGGER_DELETE = Permission( + group=Group.TOOL, operate=Operate.TRIGGER_DELETE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], + resource_permission_group_list=[ResourcePermissionConst.TOOL_VIEW] + ) TOOL_FOLDER_READ = Permission( group=Group.TOOL_FOLDER, operate=Operate.READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], parent_group=[UserGroup.TOOL], @@ -1052,6 +1032,26 @@ class PermissionConstants(Enum): resource_permission_group_list=[ ResourcePermissionConst.APPLICATION_MANGE], ) + APPLICATION_TRIGGER_READ = Permission( + group=Group.APPLICATION, operate=Operate.TRIGGER_READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], + resource_permission_group_list=[ResourcePermissionConst.APPLICATION_VIEW] + ) + APPLICATION_TRIGGER_CREATE = Permission( + group=Group.APPLICATION, operate=Operate.TRIGGER_CREATE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], + resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] + ) + APPLICATION_TRIGGER_EDIT = Permission( + group=Group.APPLICATION, operate=Operate.TRIGGER_EDIT, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], + resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] + ) + APPLICATION_TRIGGER_DELETE = Permission( + group=Group.APPLICATION, operate=Operate.TRIGGER_DELETE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], + resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] + ) APPLICATION_FOLDER_READ = Permission(group=Group.APPLICATION_FOLDER, operate=Operate.READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], parent_group=[UserGroup.APPLICATION], diff --git a/apps/locales/en_US/LC_MESSAGES/django.po b/apps/locales/en_US/LC_MESSAGES/django.po index 8fbf50ca587..ff274b9a147 100644 --- a/apps/locales/en_US/LC_MESSAGES/django.po +++ b/apps/locales/en_US/LC_MESSAGES/django.po @@ -8961,4 +8961,172 @@ msgid "Slack" msgstr "Slack App" msgid "Root Directory" +msgstr "" + +msgid "Create trigger" +msgstr "" + +msgid "Get the trigger list" +msgstr "" + +msgid "Get trigger details" +msgstr "" + +msgid "Modify the trigger" +msgstr "" + +msgid "Delete the trigger" +msgstr "" + +msgid "Delete trigger in batches" +msgstr "" + +msgid "Activate trigger in batches" +msgstr "" + +msgid "Get the trigger list by page" +msgstr "" + +msgid "Create trigger in source" +msgstr "" + +msgid "Get the trigger list of source" +msgstr "" + +msgid "Modify the task source trigger" +msgstr "" + +msgid "Get Task source trigger details" +msgstr "" + +msgid "Delete the task source trigger" +msgstr "" + +msgid "Get the task list of triggers" +msgstr "" + +msgid "Retrieve detailed records of tasks executed by the trigger." +msgstr "" + +msgid "Get a paginated list of execution records for trigger tasks." +msgstr "" + +msgid "%s must be an array" +msgstr "" + +msgid "%s must not be empty" +msgstr "" + +msgid "%s values must be between %s and %s" +msgstr "" + +msgid "Invalid time format: %s, must be HH:MM (e.g., 09:00)" +msgstr "" + +msgid "schedule_type must be one of %s" +msgstr "" + +msgid "interval_value must be an integer greater than or equal to 1" +msgstr "" + +msgid "interval_unit must be one of %s" +msgstr "" + +msgid "body must be an array" +msgstr "" + +msgid "Error trigger type" +msgstr "" + +msgid "The following id does not exist: %s" +msgstr "" + +msgid "%s must be a dict" +msgstr "" + +msgid "input_field_list must be a dict" +msgstr "" + +msgid "%s type requires %s field" +msgstr "" + +msgid "trigger name" +msgstr "" + +msgid "trigger description" +msgstr "" + +msgid "trigger setting" +msgstr "" + +msgid "Trigger ID" +msgstr "" + +msgid "Trigger task can not be empty" +msgstr "" + +msgid "%s id does not exist" +msgstr "" + +msgid "Trigger id does not exist" +msgstr "" + +msgid "Trigger not found" +msgstr "" + +msgid "Trigger must have at least one task" +msgstr "" + +msgid "Trigger task number must be one" +msgstr "" + +msgid "Incorrect trigger task" +msgstr "" + +msgid "Trigger task ID" +msgstr "" + +msgid "Trigger task record ID" +msgstr "" + +msgid "Trigger task record id does not exist" +msgstr "" + +msgid "Order field" +msgstr "" + +msgid "System Trigger" +msgstr "" + +msgid "Get the System trigger list of source" +msgstr "" + +msgid "Get System Task source trigger details" +msgstr "" + +msgid "Modify the System task source trigger" +msgstr "" + +msgid "Delete the System task source trigger" +msgstr "" + +msgid "Invalid source type" +msgstr "" + +msgid "Shared tool is not supported" +msgstr "" + +msgid "Read Trigger" +msgstr "" + +msgid "Create Trigger" +msgstr "" + +msgid "Edit Trigger" +msgstr "" + +msgid "Delete Trigger" +msgstr "" + +msgid "Execute record" msgstr "" \ No newline at end of file diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po index 75eaab1b85d..d168cc4bd9a 100644 --- a/apps/locales/zh_CN/LC_MESSAGES/django.po +++ b/apps/locales/zh_CN/LC_MESSAGES/django.po @@ -9083,4 +9083,170 @@ msgstr "Slack 应用" msgid "Root Directory" msgstr "根目录" +msgid "Create trigger" +msgstr "创建触发器" +msgid "Get the trigger list" +msgstr "获取触发器列表" + +msgid "Get trigger details" +msgstr "获取触发器详情" + +msgid "Modify the trigger" +msgstr "修改触发器" + +msgid "Delete the trigger" +msgstr "删除触发器" + +msgid "Activate trigger in batches" +msgstr "批量启用/禁用触发器" + +msgid "Get the trigger list by page" +msgstr "分页获取触发器列表" + +msgid "Create trigger in source" +msgstr "资源端创建触发器" + +msgid "Delete trigger in batches" +msgstr "批量删除触发器" + +msgid "Get the trigger list of source" +msgstr "获取资源端触发器列表" + +msgid "Get Task source trigger details" +msgstr "获取资源端触发器详情" + +msgid "Delete the task source trigger" +msgstr "删除资源端触发器" + +msgid "Get the task list of triggers" +msgstr "获取触发器任务列表" + +msgid "Retrieve detailed records of tasks executed by the trigger." +msgstr "获取由该触发器执行的任务详细记录。" + +msgid "Get a paginated list of execution records for trigger tasks." +msgstr "获取触发器任务执行记录的分页列表。" + +msgid "%s must be an array" +msgstr "%s 必须是数组类型" + +msgid "%s must not be empty" +msgstr "%s 不能为空" + +msgid "%s values must be between %s and %s" +msgstr "%s 的值必须在 %s 到 %s 之间" + +msgid "Invalid time format: %s, must be HH:MM (e.g., 09:00)" +msgstr "时间格式无效: %s,必须是 HH:MM 格式 (例如: 09:00)" + +msgid "schedule_type must be one of %s" +msgstr "schedule_type 必须是以下值之一: %s" + +msgid "interval_value must be an integer greater than or equal to 1" +msgstr "interval_value 必须是大于或等于 1 的整数" + +msgid "interval_unit must be one of %s" +msgstr "interval_unit 必须是以下值之一: %s" + +msgid "body must be an array" +msgstr "body 必须是数组类型" + +msgid "Error trigger type" +msgstr "触发器类型错误" + +msgid "The following id does not exist: %s" +msgstr "以下 id 不存在: %s" + +msgid "%s must be a dict" +msgstr "%s 必须是字典类型" + +msgid "input_field_list must be a dict" +msgstr "input_field_list 必须是字典类型" + +msgid "%s type requires %s field" +msgstr "%s 类型需要 %s 字段" + +msgid "trigger name" +msgstr "触发器名称" + +msgid "trigger description" +msgstr "触发器描述" + +msgid "trigger setting" +msgstr "触发器设置" + +msgid "Trigger ID" +msgstr "触发器ID" + +msgid "Trigger task can not be empty" +msgstr "触发器任务不能为空" + +msgid "%s id does not exist" +msgstr "%s id 不存在" + +msgid "Trigger id does not exist" +msgstr "触发器 id 不存在" + +msgid "Trigger not found" +msgstr "未找到触发器" + +msgid "Trigger must have at least one task" +msgstr "触发器必须至少有一个任务" + +msgid "Trigger task number must be one" +msgstr "触发器任务数量必须为一个" + +msgid "Incorrect trigger task" +msgstr "触发器任务不正确" + +msgid "Trigger task ID" +msgstr "触发器任务ID" + +msgid "Trigger task record ID" +msgstr "触发器任务记录ID" + +msgid "Trigger task record id does not exist" +msgstr "触发器任务记录 id 不存在" + +msgid "Order field" +msgstr "排序字段" + +msgid "System Trigger" +msgstr "系统触发器" + +msgid "Get the System trigger list of source" +msgstr "获取来源的系统触发器列表" + +msgid "Get System Task source trigger details" +msgstr "获取系统任务来源触发器详情" + +msgid "Modify the System task source trigger" +msgstr "修改系统任务来源触发器" + +msgid "Modify the task source trigger" +msgstr "修改任务来源触发器" + +msgid "Delete the System task source trigger" +msgstr "删除系统任务来源触发器" + +msgid "Invalid source type" +msgstr "无效的来源类型" + +msgid "Shared tool is not supported" +msgstr "不支持共享工具" + +msgid "Read Trigger" +msgstr "查看触发器" + +msgid "Create Trigger" +msgstr "创建触发器" + +msgid "Edit Trigger" +msgstr "编辑触发器" + +msgid "Delete Trigger" +msgstr "删除触发器" + +msgid "Execute record" +msgstr "执行记录" \ No newline at end of file diff --git a/apps/locales/zh_Hant/LC_MESSAGES/django.po b/apps/locales/zh_Hant/LC_MESSAGES/django.po index 9b9669f5e90..c4d0f9a0016 100644 --- a/apps/locales/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locales/zh_Hant/LC_MESSAGES/django.po @@ -9081,4 +9081,172 @@ msgid "Slack" msgstr "Slack 應用" msgid "Root Directory" -msgstr "根目錄" \ No newline at end of file +msgstr "根目錄" + +msgid "Create trigger" +msgstr "建立觸發器" + +msgid "Get the trigger list" +msgstr "取得觸發器清單" + +msgid "Get trigger details" +msgstr "取得觸發器詳情" + +msgid "Modify the trigger" +msgstr "修改觸發器" + +msgid "Delete the trigger" +msgstr "刪除觸發器" + +msgid "Delete trigger in batches" +msgstr "批次刪除觸發器" + +msgid "Activate trigger in batches" +msgstr "批次啟用/停用觸發器" + +msgid "Get the trigger list by page" +msgstr "分頁取得觸發器清單" + +msgid "Create trigger in source" +msgstr "資源端建立觸發器" + +msgid "Get the trigger list of source" +msgstr "取得資源端觸發器清單" + +msgid "Get Task source trigger details" +msgstr "取得資源端觸發器詳情" + +msgid "Delete the task source trigger" +msgstr "刪除資源端觸發器" + +msgid "Get the task list of triggers" +msgstr "取得觸發器任務清單" + +msgid "Retrieve detailed records of tasks executed by the trigger." +msgstr "取得由該觸發器執行的任務詳細記錄。" + +msgid "Get a paginated list of execution records for trigger tasks." +msgstr "取得觸發器任務執行記錄的分頁清單。" + +msgid "%s must be an array" +msgstr "%s 必須是陣列類型" + +msgid "%s must not be empty" +msgstr "%s 不能為空" + +msgid "%s values must be between %s and %s" +msgstr "%s 的值必須在 %s 到 %s 之間" + +msgid "Invalid time format: %s, must be HH:MM (e.g., 09:00)" +msgstr "時間格式無效: %s,必須是 HH:MM 格式 (例如: 09:00)" + +msgid "schedule_type must be one of %s" +msgstr "schedule_type 必須是以下值之一: %s" + +msgid "interval_value must be an integer greater than or equal to 1" +msgstr "interval_value 必須是大於或等於 1 的整數" + +msgid "interval_unit must be one of %s" +msgstr "interval_unit 必須是以下值之一: %s" + +msgid "body must be an array" +msgstr "body 必須是陣列類型" + +msgid "Error trigger type" +msgstr "觸發器類型錯誤" + +msgid "The following id does not exist: %s" +msgstr "以下 id 不存在: %s" + +msgid "%s must be a dict" +msgstr "%s 必須是字典類型" + +msgid "input_field_list must be a dict" +msgstr "input_field_list 必須是字典類型" + +msgid "%s type requires %s field" +msgstr "%s 類型需要 %s 欄位" + +msgid "trigger name" +msgstr "觸發器名稱" + +msgid "trigger description" +msgstr "觸發器描述" + +msgid "trigger setting" +msgstr "觸發器設定" + +msgid "Trigger ID" +msgstr "觸發器ID" + +msgid "Trigger task can not be empty" +msgstr "觸發器任務不能為空" + +msgid "%s id does not exist" +msgstr "%s id 不存在" + +msgid "Trigger id does not exist" +msgstr "觸發器 id 不存在" + +msgid "Trigger not found" +msgstr "未找到觸發器" + +msgid "Trigger must have at least one task" +msgstr "觸發器必須至少有一個任務" + +msgid "Trigger task number must be one" +msgstr "觸發器任務數量必須為一個" + +msgid "Incorrect trigger task" +msgstr "觸發器任務不正確" + +msgid "Trigger task ID" +msgstr "觸發器任務ID" + +msgid "Trigger task record ID" +msgstr "觸發器任務記錄ID" + +msgid "Trigger task record id does not exist" +msgstr "觸發器任務記錄 id 不存在" + +msgid "Order field" +msgstr "排序欄位" + +msgid "System Trigger" +msgstr "系統觸發器" + +msgid "Get the System trigger list of source" +msgstr "取得來源的系統觸發器清單" + +msgid "Get System Task source trigger details" +msgstr "取得系統任務來源觸發器詳情" + +msgid "Modify the System task source trigger" +msgstr "修改系統任務來源觸發器" + +msgid "Modify the task source trigger" +msgstr "修改任務來源觸發器" + +msgid "Delete the System task source trigger" +msgstr "刪除系統任務來源觸發器" + +msgid "Invalid source type" +msgstr "無效的來源類型" + +msgid "Shared tool is not supported" +msgstr "不支援共享工具" + +msgid "Read Trigger" +msgstr "檢視觸發器" + +msgid "Create Trigger" +msgstr "建立觸發器" + +msgid "Edit Trigger" +msgstr "編輯觸發器" + +msgid "Delete Trigger" +msgstr "刪除觸發器" + +msgid "Execute record" +msgstr "執行記錄" \ No newline at end of file diff --git a/apps/trigger/serializers/trigger.py b/apps/trigger/serializers/trigger.py index 187ebdfc219..05ee5d94341 100644 --- a/apps/trigger/serializers/trigger.py +++ b/apps/trigger/serializers/trigger.py @@ -40,8 +40,7 @@ def is_valid(self, *, model=None, raise_exception=False): if len(model_list) != len(id_list): model_id_list = [str(m.id) for m in model_list] error_id_list = list(filter(lambda row_id: not model_id_list.__contains__(row_id), id_list)) - raise AppApiException(500, _('The following id does not exist: {error_id_list}').format( - error_id_list=error_id_list)) + raise AppApiException(500, _('The following id does not exist: %s') % ','.join(map(str, error_id_list))) class InputField(serializers.Serializer): @@ -67,7 +66,7 @@ def _validate_input_dict(value, field_name): if not value: return value if not isinstance(value, dict): - raise serializers.ValidationError(f"{field_name} must be a dict") + raise serializers.ValidationError(_("%s must be a dict") % field_name) for key, val in value.items(): serializer = InputField(data=val) @@ -89,7 +88,7 @@ def validate_input_field_list(self, value): if not value: return value if not isinstance(value, dict): - raise serializers.ValidationError("input_field_list must be a dict") + raise serializers.ValidationError(_("input_field_list must be a dict")) for key, val in value.items(): serializer = InputField(data=val) @@ -122,19 +121,17 @@ def validate(self, attrs): def _validate_required_field(setting, field_name, trigger_type): if field_name not in setting: raise serializers.ValidationError({ - 'trigger_setting': f'{trigger_type} type requires {field_name} field' + 'trigger_setting': _('%s type requires %s field') % (trigger_type, field_name) }) @staticmethod def _validate_non_empty_array(value, field_name): if not isinstance(value, list): raise serializers.ValidationError({ - 'trigger_setting': f'{field_name} must be an array' - }) + 'trigger_setting': _('%s must be an array') % field_name }) if len(value) == 0: raise serializers.ValidationError({ - 'trigger_setting': f'{field_name} must not be empty' - }) + 'trigger_setting': _('%s must not be empty') % field_name }) @staticmethod def _validate_number_range(values, field_name, min_val, max_val): @@ -145,7 +142,7 @@ def _validate_number_range(values, field_name, min_val, max_val): raise ValueError except (ValueError, TypeError): raise serializers.ValidationError({ - 'trigger_setting': f'{field_name} values must be between "{min_val}" and "{max_val}"' + 'trigger_setting': _('%s values must be between %s and %s') % (field_name, min_val, max_val) }) def _validate_time_array(self, time_list): @@ -161,7 +158,7 @@ def _validate_time_format(time_str): pattern = r'^([01]\d|2[0-3]):([0-5]\d)$' if not re.match(pattern, str(time_str)): raise serializers.ValidationError({ - 'trigger_setting': f'Invalid time format: {time_str}, must be HH:MM (e.g., 09:00)' + 'trigger_setting': _('Invalid time format: %s, must be HH:MM (e.g., 09:00)') % time_str }) def _validate_scheduled_setting(self, setting): @@ -169,7 +166,8 @@ def _validate_scheduled_setting(self, setting): valid_types = ['daily', 'weekly', 'monthly', 'interval'] if schedule_type not in valid_types: - raise serializers.ValidationError({'trigger_setting': f'schedule_type must be one of {valid_types}'}) + raise serializers.ValidationError({ 'trigger_setting': _('schedule_type must be one of %s') % ', '.join(valid_types) +}) if schedule_type == 'daily': self._validate_daily(setting) elif schedule_type == 'weekly': @@ -210,12 +208,12 @@ def _validate_interval(self, setting): raise ValueError except (ValueError, TypeError): raise serializers.ValidationError({ - 'trigger_setting': 'interval_value must be an integer greater than or equal to 1' + 'trigger_setting': _('interval_value must be an integer greater than or equal to 1') }) valid_units = ['minutes', 'hours'] if interval_unit not in valid_units: raise serializers.ValidationError({ - 'trigger_setting': f'interval_unit must be one of {valid_units}' + 'trigger_setting': _('interval_unit must be one of %s') % ', '.join(valid_units) }) @staticmethod @@ -223,7 +221,7 @@ def _validate_event_setting(setting): body = setting.get('body') if body is not None and not isinstance(body, list): raise serializers.ValidationError({ - 'trigger_setting': 'body must be an array' + 'trigger_setting': _('body must be an array') }) @@ -421,7 +419,7 @@ def is_active_source(source_type: str, source_id: str): source_model, field = config.get(TriggerTaskTypeChoices(source_type)) source = QuerySet(source_model).filter(id=source_id).first() if not source: - raise AppApiException(500, _(f'{source_type} id does not exist')) + raise AppApiException(500, _('%s id does not exist') % source_type) return getattr(source, field)