Add project extra info to the user story serializer

remotes/origin/issue/4795/notification_even_they_are_disabled
David Barragán Merino 2016-07-21 20:06:39 +02:00
parent d307318b90
commit 9a1b422a42
3 changed files with 39 additions and 9 deletions

View File

@ -16,12 +16,13 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

@ -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),

View File

@ -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,