# What this PR does Adds new functionality to enable which columns should show on the alert group page  --------- Co-authored-by: Julia <ferril.darkdiver@gmail.com>
60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
from rest_framework import serializers
|
|
from rest_framework.exceptions import ValidationError
|
|
|
|
from apps.user_management.constants import (
|
|
AlertGroupTableColumnTypeChoices,
|
|
AlertGroupTableDefaultColumnChoices,
|
|
default_columns,
|
|
)
|
|
|
|
|
|
class AlertGroupTableColumnSerializer(serializers.Serializer):
|
|
name = serializers.CharField(max_length=200)
|
|
id = serializers.CharField(max_length=200)
|
|
type = serializers.ChoiceField(choices=AlertGroupTableColumnTypeChoices.choices)
|
|
|
|
def validate(self, data):
|
|
self._validate_id(data)
|
|
return data
|
|
|
|
def _validate_id(self, data):
|
|
"""Validate if `id` of column with `default` type is in the list of available default columns"""
|
|
if (
|
|
data["type"] == AlertGroupTableColumnTypeChoices.DEFAULT.value
|
|
and data["id"] not in AlertGroupTableDefaultColumnChoices.values
|
|
):
|
|
raise ValidationError("Invalid column id format")
|
|
|
|
|
|
class AlertGroupTableColumnsOrganizationSerializer(serializers.Serializer):
|
|
visible = AlertGroupTableColumnSerializer(many=True)
|
|
hidden = AlertGroupTableColumnSerializer(many=True)
|
|
|
|
def validate(self, data):
|
|
"""
|
|
Validate that at least one column is selected as visible and that all default columns are in the list.
|
|
"""
|
|
columns = data["visible"] + data["hidden"]
|
|
request_columns_ids = [column["id"] for column in columns]
|
|
if len(data["visible"]) == 0:
|
|
raise ValidationError("At least one column should be selected as visible")
|
|
elif not set(request_columns_ids) >= set(AlertGroupTableDefaultColumnChoices.values):
|
|
raise ValidationError("Default column cannot be removed")
|
|
elif len(request_columns_ids) > len(set(request_columns_ids)):
|
|
raise ValidationError("Duplicate column")
|
|
return data
|
|
|
|
|
|
class AlertGroupTableColumnsUserSerializer(AlertGroupTableColumnsOrganizationSerializer):
|
|
def validate(self, data):
|
|
"""
|
|
Validate that all columns exist in organization alert group table columns list.
|
|
"""
|
|
data = super().validate(data)
|
|
columns = data["visible"] + data["hidden"]
|
|
request_columns_ids = [column["id"] for column in columns]
|
|
organization_columns = self.context["request"].auth.organization.alert_group_table_columns or default_columns()
|
|
organization_columns_ids = [column["id"] for column in organization_columns]
|
|
if set(organization_columns_ids) != set(request_columns_ids):
|
|
raise ValidationError("Invalid settings")
|
|
return data
|