Skip to content

Commit

Permalink
Revert "[COST-4794] Deduplicate parent keys for tag mapping. (#4991)" (
Browse files Browse the repository at this point in the history
  • Loading branch information
myersCody committed Mar 25, 2024
1 parent 969ad88 commit 28ce640
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 119 deletions.
22 changes: 0 additions & 22 deletions koku/api/settings/tags/mapping/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,6 @@
from reporting.provider.all.models import TagMapping


class ParentSerializer(serializers.ModelSerializer):
cost_model_id = serializers.UUIDField()

class Meta:
model = EnabledTagKeys
fields = ["uuid", "key", "cost_model_id"]


class ViewOptionsSerializer(serializers.ModelSerializer):
"""Intended to be used in conjuntion with the CostModelAnnotationMixin."""

Expand Down Expand Up @@ -55,22 +47,8 @@ class AddChildSerializer(serializers.Serializer):
parent = serializers.UUIDField()
children = serializers.ListField(child=serializers.UUIDField())

def _unify_parent_key(self, data):
"""Unifies duplicate parents keys under a single uuid."""
enabled_row = EnabledTagKeys.objects.filter(uuid=data["parent"]).first()
if not enabled_row:
return data
tag_map = TagMapping.objects.filter(parent__key=enabled_row.key).first()
if not tag_map:
return data
if tag_map.parent_id == data["parent"]:
return data
data["parent"] = tag_map.parent_id
return data

def validate(self, data):
"""This function validates the options and returns the enabled tag rows."""
data = self._unify_parent_key(data)
children_list = data["children"]
combined_list = [data["parent"]] + children_list
enabled_rows = EnabledTagKeys.objects.filter(uuid__in=combined_list, enabled=True)
Expand Down
38 changes: 14 additions & 24 deletions koku/api/settings/tags/mapping/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from api.common.permissions.settings_access import SettingsAccessPermission
from api.settings.tags.mapping.query_handler import Relationship
from api.settings.tags.mapping.serializers import AddChildSerializer
from api.settings.tags.mapping.serializers import ParentSerializer
from api.settings.tags.mapping.serializers import TagMappingSerializer
from api.settings.tags.mapping.serializers import ViewOptionsSerializer
from api.settings.tags.mapping.utils import resummarize_current_month_by_tag_keys
Expand Down Expand Up @@ -52,6 +51,16 @@ class Meta:
default_ordering = ["parent"]


class SettingsEnabledTagKeysFilter(TagMappingFilters):
key = NonValidatedMultipleChoiceFilter(method="filter_by_key")
source_type = NonValidatedMultipleChoiceFilter(field_name="provider_type", method="filter_by_source_type")

class Meta:
model = EnabledTagKeys
fields = ("key", "source_type")
default_ordering = ["key", "-enabled"]


class SettingsTagMappingView(generics.GenericAPIView):
queryset = TagMapping.objects.all()
serializer_class = TagMappingSerializer
Expand All @@ -71,24 +80,14 @@ def get(self, request: Request, **kwargs):
return response


class ChildViewFilter(TagMappingFilters):
key = NonValidatedMultipleChoiceFilter(method="filter_by_key")
source_type = NonValidatedMultipleChoiceFilter(field_name="provider_type", method="filter_by_source_type")

class Meta:
model = EnabledTagKeys
fields = ("key", "source_type")
default_ordering = ["key", "-enabled"]


class SettingsTagMappingChildView(CostModelAnnotationMixin, generics.GenericAPIView):
queryset = (
EnabledTagKeys.objects.exclude(parent__isnull=False).exclude(child__parent__isnull=False).filter(enabled=True)
)
serializer_class = ViewOptionsSerializer
permission_classes = (SettingsAccessPermission,)
filter_backends = (DjangoFilterBackend,)
filterset_class = ChildViewFilter
filterset_class = SettingsEnabledTagKeysFilter

@method_decorator(never_cache)
def get(self, request: Request, **kwargs):
Expand All @@ -100,21 +99,12 @@ def get(self, request: Request, **kwargs):
return response


class ParentViewFilter(TagMappingFilters):
key = NonValidatedMultipleChoiceFilter(method="filter_by_key")

class Meta:
model = EnabledTagKeys
fields = ("key",)
default_ordering = ["key", "child__parent", "provider_type"]


class SettingsTagMappingParentView(CostModelAnnotationMixin, generics.GenericAPIView):
queryset = EnabledTagKeys.objects.exclude(child__parent__isnull=False).filter(enabled=True).distinct("key")
serializer_class = ParentSerializer
queryset = EnabledTagKeys.objects.exclude(child__parent__isnull=False).filter(enabled=True)
serializer_class = ViewOptionsSerializer
permission_classes = (SettingsAccessPermission,)
filter_backends = (DjangoFilterBackend,)
filterset_class = ParentViewFilter
filterset_class = SettingsEnabledTagKeysFilter

@method_decorator(never_cache)
def get(self, request: Request, **kwargs):
Expand Down
Loading

0 comments on commit 28ce640

Please sign in to comment.