MCPcopy Index your code
hub / github.com/1Panel-dev/MaxKB / edit

Method edit

apps/trigger/serializers/trigger.py:515–571  ·  view source on GitHub ↗
(self, instance: Dict, with_valid=True)

Source from the content-addressed store, hash-verified

513
514 @transaction.atomic
515 def edit(self, instance: Dict, with_valid=True):
516 from trigger.handler.simple_tools import deploy, undeploy
517
518 if with_valid:
519 self.is_valid()
520 TriggerEditRequest(data=instance).is_valid(raise_exception=True)
521 trigger_id = self.data.get('trigger_id')
522 workspace_id = self.data.get('workspace_id')
523 trigger = Trigger.objects.filter(workspace_id=workspace_id, id=trigger_id).first()
524 if not trigger:
525 raise serializers.ValidationError(_('Trigger not found'))
526
527 trigger_direct_edit_field_list = ['name', 'desc', 'trigger_type', 'trigger_setting', 'meta', 'is_active']
528 trigger_deploy_edit_field_list = ['trigger_type', 'trigger_setting', 'is_active']
529 # is need to redeploy
530 need_redeploy = any(field in instance for field in trigger_deploy_edit_field_list)
531
532 for field in trigger_direct_edit_field_list:
533 if field in instance:
534 trigger.__setattr__(field, instance.get(field))
535 trigger.save()
536 # 处理trigger task
537 trigger_tasks = instance.get('trigger_task')
538
539 if trigger_tasks is not None:
540 # 检查是否为空列表
541 if not trigger_tasks:
542 raise serializers.ValidationError(_('Trigger must have at least one task'))
543
544 is_active_map = TriggerSerializer.batch_get_source_active_status(trigger_tasks)
545
546 trigger_task_model_list = [TriggerTask(
547 id=task_data.get('id') or uuid.uuid7(),
548 trigger_id=trigger_id,
549 source_type=task_data.get('source_type'),
550 source_id=task_data.get('source_id'),
551 is_active=is_active_map.get((task_data.get('source_type'), task_data.get('source_id'))) or False,
552 parameter=task_data.get('parameter', []),
553 meta=task_data.get('meta', {})
554 ) for task_data in trigger_tasks]
555
556 TriggerTask.objects.filter(trigger_id=trigger_id).delete()
557
558 TriggerTask.objects.bulk_create(trigger_task_model_list)
559 else:
560 # 用户没提交 trigger_task 字段,确保数据库中有 task
561 if not TriggerTask.objects.filter(trigger_id=trigger_id).exists():
562 raise serializers.ValidationError(_('Trigger must have at least one task'))
563
564 # 重新部署触发器任务
565 if need_redeploy:
566 if trigger.is_active and trigger.trigger_type == 'SCHEDULED':
567 deploy(TriggerModelSerializer(trigger).data, **{})
568 else:
569 undeploy(TriggerModelSerializer(trigger).data, **{})
570
571 return self.one(with_valid=False)
572

Callers 2

putMethod · 0.45
putMethod · 0.45

Calls 12

is_validMethod · 0.95
oneMethod · 0.95
TriggerTaskClass · 0.90
deployFunction · 0.90
undeployFunction · 0.90
TriggerEditRequestClass · 0.85
is_validMethod · 0.45
getMethod · 0.45
saveMethod · 0.45
deleteMethod · 0.45

Tested by

no test coverage detected