From 32c6452bfa3e65b05d1e204bdcd8666f4411a32a Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 3 Aug 2015 10:19:54 +0200 Subject: [PATCH] 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 7a1033b6..ee587e8c 100644 --- a/taiga/projects/issues/api.py +++ b/taiga/projects/issues/api.py @@ -79,6 +79,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 update(self, request, *args, **kwargs): diff --git a/taiga/projects/issues/serializers.py b/taiga/projects/issues/serializers.py index 77b22bc5..2b2723dd 100644 --- a/taiga/projects/issues/serializers.py +++ b/taiga/projects/issues/serializers.py @@ -64,6 +64,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 7b6b90ac..702d0a58 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 update(self, request, *args, **kwargs): diff --git a/taiga/projects/tasks/serializers.py b/taiga/projects/tasks/serializers.py index 131bb75b..6f64e2d5 100644 --- a/taiga/projects/tasks/serializers.py +++ b/taiga/projects/tasks/serializers.py @@ -67,6 +67,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 e3d7f986..4f065547 100644 --- a/taiga/projects/userstories/api.py +++ b/taiga/projects/userstories/api.py @@ -76,6 +76,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 def update(self, request, *args, **kwargs): diff --git a/taiga/projects/userstories/serializers.py b/taiga/projects/userstories/serializers.py index 1773776f..a23cd63c 100644 --- a/taiga/projects/userstories/serializers.py +++ b/taiga/projects/userstories/serializers.py @@ -97,6 +97,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,