From 3d6d16299765b2b4e27cf10ab9710e12f7066e7c Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 3 Aug 2015 10:19:54 +0200 Subject: [PATCH] [Backport] Removing descriptions from list API --- taiga/projects/issues/api.py | 3 +++ taiga/projects/issues/serializers.py | 7 +++++++ taiga/projects/tasks/api.py | 3 +++ taiga/projects/tasks/serializers.py | 7 +++++++ taiga/projects/userstories/api.py | 3 +++ taiga/projects/userstories/serializers.py | 8 ++++++++ taiga/timeline/signals.py | 14 +++++++++++++- 7 files changed, 44 insertions(+), 1 deletion(-) diff --git a/taiga/projects/issues/api.py b/taiga/projects/issues/api.py index 681e8534..23294cd4 100644 --- a/taiga/projects/issues/api.py +++ b/taiga/projects/issues/api.py @@ -123,6 +123,9 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, if self.action in ["retrieve", "by_ref"]: return serializers.IssueNeighborsSerializer + if self.action == "list": + return serializers.IssueListSerializer + return serializers.IssueSerializer def get_queryset(self): diff --git a/taiga/projects/issues/serializers.py b/taiga/projects/issues/serializers.py index fc43a8f8..2cd60104 100644 --- a/taiga/projects/issues/serializers.py +++ b/taiga/projects/issues/serializers.py @@ -63,6 +63,13 @@ class IssueSerializer(WatchersValidator, serializers.ModelSerializer): return getattr(obj, "votes_count", 0) +class IssueListSerializer(IssueSerializer): + class Meta: + model = models.Issue + read_only_fields = ('id', 'ref', 'created_date', 'modified_date') + exclude=("description", "description_html") + + class IssueNeighborsSerializer(NeighborsSerializerMixin, IssueSerializer): def serialize_neighbor(self, neighbor): return NeighborIssueSerializer(neighbor).data diff --git a/taiga/projects/tasks/api.py b/taiga/projects/tasks/api.py index db62d9c1..8dd88dea 100644 --- a/taiga/projects/tasks/api.py +++ b/taiga/projects/tasks/api.py @@ -46,6 +46,9 @@ class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin, if self.action in ["retrieve", "by_ref"]: return serializers.TaskNeighborsSerializer + if self.action == "list": + return serializers.TaskListSerializer + return serializers.TaskSerializer def pre_save(self, obj): diff --git a/taiga/projects/tasks/serializers.py b/taiga/projects/tasks/serializers.py index 0c8e436d..d6241ca4 100644 --- a/taiga/projects/tasks/serializers.py +++ b/taiga/projects/tasks/serializers.py @@ -66,6 +66,13 @@ class TaskSerializer(WatchersValidator, serializers.ModelSerializer): return obj.status.is_closed +class TaskListSerializer(TaskSerializer): + class Meta: + model = models.Task + read_only_fields = ('id', 'ref', 'created_date', 'modified_date') + exclude=("description", "description_html") + + class TaskNeighborsSerializer(NeighborsSerializerMixin, TaskSerializer): def serialize_neighbor(self, neighbor): return NeighborTaskSerializer(neighbor).data diff --git a/taiga/projects/userstories/api.py b/taiga/projects/userstories/api.py index 30313536..edd09821 100644 --- a/taiga/projects/userstories/api.py +++ b/taiga/projects/userstories/api.py @@ -61,6 +61,9 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi if self.action in ["retrieve", "by_ref"]: return serializers.UserStoryNeighborsSerializer + if self.action == "list": + return serializers.UserStoryListSerializer + return serializers.UserStorySerializer # Specific filter used for filtering neighbor user stories diff --git a/taiga/projects/userstories/serializers.py b/taiga/projects/userstories/serializers.py index 3978381e..b26b2dc1 100644 --- a/taiga/projects/userstories/serializers.py +++ b/taiga/projects/userstories/serializers.py @@ -96,6 +96,14 @@ class UserStorySerializer(WatchersValidator, serializers.ModelSerializer): return mdrender(obj.project, obj.description) +class UserStoryListSerializer(UserStorySerializer): + class Meta: + model = models.UserStory + depth = 0 + read_only_fields = ('created_date', 'modified_date') + exclude=("description", "description_html") + + class UserStoryNeighborsSerializer(NeighborsSerializerMixin, UserStorySerializer): def serialize_neighbor(self, neighbor): return NeighborUserStorySerializer(neighbor).data diff --git a/taiga/timeline/signals.py b/taiga/timeline/signals.py index dc8b5a2d..7769817d 100644 --- a/taiga/timeline/signals.py +++ b/taiga/timeline/signals.py @@ -16,6 +16,7 @@ from django.conf import settings from django.utils import timezone +from django.utils.translation import ugettext as _ from taiga.projects.history import services as history_services from taiga.projects.models import Project @@ -79,7 +80,16 @@ def _push_to_timelines(project, user, obj, event_type, created_datetime, extra_d extra_data=extra_data) +def _clean_description_fields(values_diff): + # Description_diff and description_html if included can be huge, we are + # removing the html one and clearing the diff + values_diff.pop("description_html", None) + if "description_diff" in values_diff: + values_diff["description_diff"] = _("Check the history API for the exact diff") + + def on_new_history_entry(sender, instance, created, **kwargs): + if instance._importing: return @@ -99,9 +109,11 @@ def on_new_history_entry(sender, instance, created, **kwargs): event_type = "delete" user = User.objects.get(id=instance.user["pk"]) + values_diff = instance.values_diff + _clean_description_fields(values_diff) extra_data = { - "values_diff": instance.values_diff, + "values_diff": values_diff, "user": extract_user_info(user), "comment": instance.comment, "comment_html": instance.comment_html,