예제 #1
0
    def validate_order_by(self, value):
        """Validate incoming order_by data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if order_by field inputs are invalid
        """
        validate_field(self, 'order_by', OrderBySerializer, value)
        return value
예제 #2
0
    def validate_filter(self, value):
        """Validate incoming filter data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if filter field inputs are invalid
        """
        validate_field(self, 'filter', FilterSerializer, value)
        return value
예제 #3
0
    def validate_group_by(self, value):
        """Validate incoming group_by data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if group_by field inputs are invalid
        """
        validate_field(self, 'group_by', GroupBySerializer, value)
        return value
예제 #4
0
    def validate_filter(self, value):
        """Validate incoming filter data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if filter field inputs are invalid

        """
        validate_field(self, "filter", OCPAzureFilterSerializer, value, tag_keys=self.tag_keys)
        return value
예제 #5
0
    def validate_group_by(self, value):
        """Validate incoming group_by data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if group_by field inputs are invalid

        """
        validate_field(self, "group_by", OCPAzureGroupBySerializer, value, tag_keys=self.tag_keys)
        return value
예제 #6
0
    def validate_order_by(self, value):
        """Validate incoming order_by data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if order_by field inputs are invalid

        """
        super().validate_order_by(value)
        validate_field(self, "order_by", OCPAzureOrderBySerializer, value)
        return value
예제 #7
0
    def validate_group_by(self, value):
        """Validate incoming group_by data.

        Args:
            data    (Dict): data to be validated
        Returns:
            (Dict): Validated data
        Raises:
            (ValidationError): if group_by field inputs are invalid

        """
        validate_field(self,
                       "group_by",
                       GroupBySerializer,
                       value,
                       tag_keys=self.tag_keys)
        # Org unit id validation
        group_by_params = self.initial_data.get("group_by", {})
        org_unit_group_keys = ["org_unit_id", "or:org_unit_id"]
        group_by_keys = group_by_params.keys()

        key_used = []
        for acceptable_key in org_unit_group_keys:
            if acceptable_key in group_by_keys:
                key_used.append(acceptable_key)
        if key_used:
            if len(key_used) > 1:
                # group_by[org_unit_id]=x&group_by[or:org_unit_id]=OU_001 is invalid
                # If we ever want to change this we need to decide what would be appropriate to see
                # here.
                error = {
                    "or_unit_id":
                    _("Multiple org_unit_id must be represented with the or: prefix."
                      )
                }
                raise serializers.ValidationError(error)
            key_used = key_used[0]
            request = self.context.get("request")
            if "costs" not in request.path or self.initial_data.get(
                    "group_by", {}).get(key_used, "") == "*":
                # Additionally, since we only have the org_unit_id group_by available for cost reports
                # we must explicitly raise a validation error if it is a different report type
                # or if we are grouping by org_unit_id with the * since that is essentially grouping by
                # accounts. If we ever want to change this we need to decide what would be appropriate to see
                # here. Such as all org units or top level org units
                error = {
                    "org_unit_id": _("Unsupported parameter or invalid value")
                }
                raise serializers.ValidationError(error)
            if "or:" not in key_used:
                if isinstance(group_by_params.get(key_used), list):
                    if len(group_by_params.get(key_used)) > 1:
                        # group_by[org_unit_id]=x&group_by[org_unit_id]=OU_001 is invalid
                        # because no child nodes would ever intersect due to the tree structure.
                        error = {
                            "or_unit_id":
                            _("Multiple org_unit_id must be represented with the or: prefix."
                              )
                        }
                        raise serializers.ValidationError(error)
        return value