(self, instance, with_valid=True)
| 349 | |
| 350 | @transaction.atomic |
| 351 | def insert(self, instance, with_valid=True): |
| 352 | from trigger.handler.simple_tools import deploy |
| 353 | |
| 354 | if with_valid: |
| 355 | self.is_valid(raise_exception=True) |
| 356 | serializer = TriggerCreateRequest(data=instance) |
| 357 | serializer.is_valid(raise_exception=True) |
| 358 | valid_data = serializer.validated_data |
| 359 | |
| 360 | trigger_id = valid_data.get('id') if valid_data.get('id') else uuid.uuid7() |
| 361 | |
| 362 | trigger_model = Trigger( |
| 363 | id=trigger_id, |
| 364 | name=valid_data.get('name'), |
| 365 | workspace_id=self.data.get('workspace_id'), |
| 366 | desc=valid_data.get('desc') or '', |
| 367 | trigger_type=valid_data.get('trigger_type'), |
| 368 | trigger_setting=valid_data.get('trigger_setting'), |
| 369 | meta=valid_data.get('meta', {}), |
| 370 | is_active=valid_data.get('is_active') or False, |
| 371 | user_id=self.data.get('user_id'), |
| 372 | ) |
| 373 | trigger_model.save() |
| 374 | |
| 375 | trigger_tasks = valid_data.get('trigger_task') |
| 376 | if trigger_tasks: |
| 377 | |
| 378 | is_active_map = self.batch_get_source_active_status(trigger_tasks) |
| 379 | |
| 380 | trigger_task_models = [ |
| 381 | TriggerTask( |
| 382 | id=uuid.uuid7(), |
| 383 | trigger_id=trigger_id, |
| 384 | source_type=task_data.get('source_type'), |
| 385 | source_id=task_data.get('source_id'), |
| 386 | is_active=is_active_map.get((task_data.get('source_type'), task_data.get('source_id'))) or False, |
| 387 | parameter=task_data.get('parameter', {}), |
| 388 | meta=task_data.get('meta', {}) |
| 389 | ) |
| 390 | for task_data in trigger_tasks |
| 391 | ] |
| 392 | |
| 393 | TriggerTask.objects.bulk_create(trigger_task_models) |
| 394 | else: |
| 395 | raise AppApiException(500, _('Trigger task can not be empty')) |
| 396 | |
| 397 | if trigger_model.is_active: |
| 398 | deploy(TriggerModelSerializer(trigger_model).data, **{}) |
| 399 | return TriggerResponse(trigger_model).data |
| 400 | |
| 401 | @staticmethod |
| 402 | def batch_get_source_active_status(trigger_tasks: list) -> Dict[tuple, bool]: |
no test coverage detected