def _handle_actions(self, alert_rule_trigger, actions): channel_lookup_timeout_error = None if actions is not None: # Delete actions we don't have present in the updated data. action_ids = [x["id"] for x in actions if "id" in x] actions_to_delete = AlertRuleTriggerAction.objects.filter( alert_rule_trigger=alert_rule_trigger).exclude( id__in=action_ids) for action in actions_to_delete: delete_alert_rule_trigger_action(action) for action_data in actions: if "integration_id" in action_data: action_data["integration"] = action_data.pop( "integration_id") if "sentry_app_id" in action_data: action_data["sentry_app"] = action_data.pop( "sentry_app_id") if "id" in action_data: action_instance = AlertRuleTriggerAction.objects.get( alert_rule_trigger=alert_rule_trigger, id=action_data["id"]) else: action_instance = None action_serializer = AlertRuleTriggerActionSerializer( context={ "alert_rule": alert_rule_trigger.alert_rule, "trigger": alert_rule_trigger, "organization": self.context["organization"], "access": self.context["access"], "use_async_lookup": self.context.get("use_async_lookup"), "input_channel_id": action_data.pop("input_channel_id", None), }, instance=action_instance, data=action_data, ) if action_serializer.is_valid(): try: action_serializer.save() except ChannelLookupTimeoutError as e: # raise the lookup error after the rest of the validation is complete channel_lookup_timeout_error = e else: raise serializers.ValidationError(action_serializer.errors) if channel_lookup_timeout_error: raise channel_lookup_timeout_error
def _handle_actions(self, alert_rule_trigger, actions): if actions is not None: # Delete actions we don't have present in the updated data. action_ids = [x["id"] for x in actions if "id" in x] actions_to_delete = AlertRuleTriggerAction.objects.filter( alert_rule_trigger=alert_rule_trigger).exclude( id__in=action_ids) for action in actions_to_delete: delete_alert_rule_trigger_action(action) for action_data in actions: if "integration_id" in action_data: action_data["integration"] = action_data.pop( "integration_id") if "sentry_app_id" in action_data: action_data["sentry_app"] = action_data.pop( "sentry_app_id") if "id" in action_data: action_instance = AlertRuleTriggerAction.objects.get( alert_rule_trigger=alert_rule_trigger, id=action_data["id"]) else: action_instance = None action_serializer = AlertRuleTriggerActionSerializer( context={ "alert_rule": alert_rule_trigger.alert_rule, "trigger": alert_rule_trigger, "organization": self.context["organization"], "access": self.context["access"], }, instance=action_instance, data=action_data, ) if action_serializer.is_valid(): action_serializer.save() else: raise serializers.ValidationError(action_serializer.errors)
def test(self): action_id = self.action.id delete_alert_rule_trigger_action(self.action) with self.assertRaises(AlertRuleTriggerAction.DoesNotExist): AlertRuleTriggerAction.objects.get(id=action_id)
def delete(self, request, organization, alert_rule, alert_rule_trigger, alert_rule_trigger_action): delete_alert_rule_trigger_action(alert_rule_trigger_action) return Response(status=status.HTTP_204_NO_CONTENT)