diff --git a/taiga/projects/mixins/serializers.py b/taiga/projects/mixins/serializers.py index 945c1119..cec50b2b 100644 --- a/taiga/projects/mixins/serializers.py +++ b/taiga/projects/mixins/serializers.py @@ -16,12 +16,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from django.utils.translation import ugettext as _ + from taiga.base.api import serializers from taiga.base.fields import Field, MethodField +from taiga.projects import services from taiga.users.serializers import UserBasicInfoSerializer -from django.utils.translation import ugettext as _ - class CachedUsersSerializerMixin(serializers.LightSerializer): def to_value(self, instance): @@ -77,3 +78,27 @@ class StatusExtraInfoSerializerMixin(serializers.LightSerializer): self._serialized_status[obj.status_id] = serialized_status return serialized_status + + +class ProjectExtraInfoSerializerMixin(serializers.LightSerializer): + project = Field(attr="project_id") + project_extra_info = MethodField() + + def to_value(self, instance): + self._serialized_project = {} + return super().to_value(instance) + + def get_project_extra_info(self, obj): + if obj.project_id is None: + return None + + serialized_project = self._serialized_project.get(obj.project_id, None) + if serialized_project is None: + serialized_project = { + "name": obj.project.name, + "slug": obj.project.slug, + "logo_small_url": services.get_logo_small_thumbnail_url(obj.project) + } + self._serialized_project[obj.project_id] = serialized_project + + return serialized_project diff --git a/taiga/projects/serializers.py b/taiga/projects/serializers.py index a560ed36..eb7b2e54 100644 --- a/taiga/projects/serializers.py +++ b/taiga/projects/serializers.py @@ -434,8 +434,10 @@ class ProjectDetailSerializer(ProjectSerializer): return len(obj.members_attr) def get_is_out_of_owner_limits(self, obj): - assert hasattr(obj, "private_projects_same_owner_attr"), "instance must have a private_projects_same_owner_attr attribute" - assert hasattr(obj, "public_projects_same_owner_attr"), "instance must have a public_projects_same_owner_attr attribute" + assert hasattr(obj, "private_projects_same_owner_attr"), ("instance must have a private_projects_same" + "_owner_attr attribute") + assert hasattr(obj, "public_projects_same_owner_attr"), ("instance must have a public_projects_same_" + "owner_attr attribute") return services.check_if_project_is_out_of_owner_limits( obj, current_memberships=self.get_total_memberships(obj), @@ -444,8 +446,10 @@ class ProjectDetailSerializer(ProjectSerializer): ) def get_is_private_extra_info(self, obj): - assert hasattr(obj, "private_projects_same_owner_attr"), "instance must have a private_projects_same_owner_attr attribute" - assert hasattr(obj, "public_projects_same_owner_attr"), "instance must have a public_projects_same_owner_attr attribute" + assert hasattr(obj, "private_projects_same_owner_attr"), ("instance must have a private_projects_same_" + "owner_attr attribute") + assert hasattr(obj, "public_projects_same_owner_attr"), ("instance must have a public_projects_same" + "_owner_attr attribute") return services.check_if_project_privacity_can_be_changed( obj, current_memberships=self.get_total_memberships(obj), diff --git a/taiga/projects/userstories/serializers.py b/taiga/projects/userstories/serializers.py index abb10592..bc977a2e 100644 --- a/taiga/projects/userstories/serializers.py +++ b/taiga/projects/userstories/serializers.py @@ -22,11 +22,12 @@ from taiga.base.neighbors import NeighborsSerializerMixin from taiga.mdrender.service import render as mdrender from taiga.projects.attachments.serializers import BasicAttachmentsInfoSerializerMixin -from taiga.projects.tagging.serializers import TaggedInProjectResourceSerializer -from taiga.projects.mixins.serializers import OwnerExtraInfoSerializerMixin from taiga.projects.mixins.serializers import AssignedToExtraInfoSerializerMixin +from taiga.projects.mixins.serializers import OwnerExtraInfoSerializerMixin +from taiga.projects.mixins.serializers import ProjectExtraInfoSerializerMixin from taiga.projects.mixins.serializers import StatusExtraInfoSerializerMixin from taiga.projects.notifications.mixins import WatchedResourceSerializer +from taiga.projects.tagging.serializers import TaggedInProjectResourceSerializer from taiga.projects.votes.mixins.serializers import VoteResourceSerializerMixin @@ -42,7 +43,7 @@ class OriginIssueSerializer(serializers.LightSerializer): return super().to_value(instance) -class UserStoryListSerializer( +class UserStoryListSerializer(ProjectExtraInfoSerializerMixin, VoteResourceSerializerMixin, WatchedResourceSerializer, OwnerExtraInfoSerializerMixin, AssignedToExtraInfoSerializerMixin, StatusExtraInfoSerializerMixin, BasicAttachmentsInfoSerializerMixin,