66 @date:2026/1/14 11:48
77 @desc:
88"""
9- import asyncio
10- import hashlib
11- import json
12- import os
13- import pickle
14- import re
15- import tempfile
16- import zipfile
17- from functools import reduce
18- from typing import Dict , List
19-
20- import requests
9+
2110import uuid_utils .compat as uuid
22- from django .core import validators
2311from django .db import models , transaction
24- from django .db .models import QuerySet , Q
25- from django .http import HttpResponse
26- from django .utils import timezone
12+ from django .db .models import QuerySet
2713from django .utils .translation import gettext_lazy as _
28- from langchain_mcp_adapters .client import MultiServerMCPClient
29- from rest_framework import serializers , status
30- from rest_framework .utils .formatting import lazy_format
31-
32- from application .flow .common import Workflow
33- from application .models .application import Application , ApplicationTypeChoices , \
34- ApplicationFolder , ApplicationVersion , ApplicationKnowledgeMapping
35- from application .models .application_access_token import ApplicationAccessToken
36- from application .serializers .common import update_resource_mapping_by_application
37- from common import result
38- from common .cache_data .application_access_token_cache import del_application_access_token
39- from common .database_model_manage .database_model_manage import DatabaseModelManage
40- from common .db .search import native_search , native_page_search , page_search
14+ from rest_framework import serializers
15+
16+ from common .db .search import page_search
4117from common .exception .app_exception import AppApiException
42- from common .field .common import UploadedFileField
43- from common .utils .common import get_file_content , restricted_loads , generate_uuid , _remove_empty_lines , \
44- bytes_to_uploaded_file
45- from common .utils .logger import maxkb_logger
46- from knowledge .models import Knowledge , KnowledgeScope
47- from knowledge .serializers .knowledge import KnowledgeSerializer , KnowledgeModelSerializer
48- from maxkb .conf import PROJECT_DIR
49- from models_provider .models import Model
50- from models_provider .tools import get_model_instance_by_model_workspace_id
51- from system_manage .models import WorkspaceUserResourcePermission , AuthTargetType
52- from system_manage .models .resource_mapping import ResourceMapping
53- from system_manage .serializers .resource_mapping_serializers import ResourceMappingSerializer
54- from system_manage .serializers .user_resource_permission import UserResourcePermissionSerializer
55- from tools .models import Tool , ToolScope
56- from tools .serializers .tool import ToolExportModelSerializer
57- from trigger .models import TriggerTypeChoices , Trigger
58- from users .models import User
59- from users .serializers .user import is_workspace_manage
18+ from trigger .models import TriggerTypeChoices , Trigger , TriggerTaskTypeChoices , TriggerTask
6019
6120
6221class TriggerTaskCreateRequest (serializers .Serializer ):
63- pass
22+ source_type = serializers .ChoiceField (required = True , choices = TriggerTaskTypeChoices )
23+ source_id = serializers .CharField (required = True , label = _ ('source_id' ))
24+ is_active = serializers .BooleanField (required = False , label = _ ('Is active' ))
6425
6526
6627class TriggerCreateRequest (serializers .Serializer ):
6728 name = serializers .CharField (required = True , label = _ ('trigger name' ))
6829 desc = serializers .CharField (required = False , allow_null = True , allow_blank = True , label = _ ('trigger description' ))
69- trigger_type = serializers .ChoiceField (choices = TriggerTypeChoices )
30+ trigger_type = serializers .ChoiceField (required = True , choices = TriggerTypeChoices )
7031 trigger_setting = serializers .DictField (required = True , label = _ ("trigger setting" ))
71- meta = models .JSONField (required = False , allow_null = True , allow_blank = True , default = dict )
32+ meta = models .JSONField (default = dict )
7233 is_active = serializers .BooleanField (required = False , label = _ ('Is active' ))
73- trigger_task = serializers
34+ trigger_task = TriggerTaskCreateRequest ( many = True )
7435
7536
7637class TriggerResponse (serializers .ModelSerializer ):
@@ -89,8 +50,10 @@ def insert(self, instance, with_valid=True):
8950 self .is_valid (raise_exception = True )
9051 TriggerCreateRequest (data = instance ).is_valid (raise_exception = True )
9152
53+ trigger_id = uuid .uuid7 ()
54+
9255 trigger_model = Trigger (
93- id = uuid . uuid7 () ,
56+ id = trigger_id ,
9457 name = instance .get ('name' ),
9558 workspace_id = self .data .get ('workspace_id' ),
9659 desc = instance .get ('desc' ),
@@ -102,8 +65,30 @@ def insert(self, instance, with_valid=True):
10265 )
10366 trigger_model .save ()
10467
68+ trigger_tasks = instance .get ('trigger_task' )
69+ if trigger_tasks :
70+ trigger_task_models = [
71+ self .to_trigger_task_model (trigger_id , task .get ('source_type' ), task .get ('source_id' )) for task in
72+ trigger_tasks
73+ ]
74+ TriggerTask .objects .bulk_create (trigger_task_models )
75+ else :
76+ raise AppApiException (500 , _ ('Trigger task can not be empty' ))
77+
78+
10579 return TriggerResponse (trigger_model ).data
10680
81+ @staticmethod
82+ def to_trigger_task_model (trigger_id : str , source_type : str , source_id : str ):
83+ return TriggerTask (
84+ id = uuid .uuid7 (),
85+ trigger_id = trigger_id ,
86+ source_type = source_type ,
87+ source_id = source_id ,
88+ is_active = False
89+ )
90+
91+
10792
10893class TriggerOperateSerializer (serializers .Serializer ):
10994 trigger_id = serializers .UUIDField (required = True , label = _ ('trigger id' ))
@@ -136,9 +121,9 @@ def get_query_set(self):
136121 def page (self , current_page : int , page_size : int , with_valid = True ):
137122 if with_valid :
138123 self .is_valid (raise_exception = True )
139- return page_search (current_page , page_size , self .get_query_set (), lambda row : TriggerResponse (data = row ).data )
124+ return page_search (current_page , page_size , self .get_query_set (), lambda row : TriggerResponse (row ).data )
140125
141126 def list (self , with_valid = True ):
142127 if with_valid :
143128 self .is_valid (raise_exception = True )
144- return [TriggerResponse (data = row ).data for row in self .get_query_set ()]
129+ return [TriggerResponse (row ).data for row in self .get_query_set ()]
0 commit comments