Enhancement#3758: Include gravatar url into users serializer

remotes/origin/issue/4795/notification_even_they_are_disabled
Jesús Espino 2016-06-07 13:11:25 +02:00 committed by David Barragán Merino
parent 109085618a
commit ccc6491c83
2 changed files with 14 additions and 7 deletions

View File

@ -6,6 +6,7 @@
- Now comment owners and project admins can edit existing comments with the history Entry endpoint. - Now comment owners and project admins can edit existing comments with the history Entry endpoint.
- Add a new permissions to allow add comments instead of use the existent modify permission for this purpose. - Add a new permissions to allow add comments instead of use the existent modify permission for this purpose.
- Include created, modified and finished dates for tasks in CSV reports - Include created, modified and finished dates for tasks in CSV reports
- Add gravatar url to Users API endpoint.
### Misc ### Misc
- Lots of small and not so small bugfixes. - Lots of small and not so small bugfixes.

View File

@ -22,12 +22,13 @@ from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from taiga.base.api import serializers from taiga.base.api import serializers
from taiga.base.fields import PgArrayField, TagsField from taiga.base.fields import PgArrayField
from taiga.base.utils.thumbnails import get_thumbnail_url from taiga.base.utils.thumbnails import get_thumbnail_url
from taiga.projects.models import Project from taiga.projects.models import Project
from .models import User, Role from .models import User, Role
from .services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url from .services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url
from .gravatar import get_gravatar_url
from collections import namedtuple from collections import namedtuple
@ -48,6 +49,7 @@ class UserSerializer(serializers.ModelSerializer):
full_name_display = serializers.SerializerMethodField("get_full_name_display") full_name_display = serializers.SerializerMethodField("get_full_name_display")
photo = serializers.SerializerMethodField("get_photo") photo = serializers.SerializerMethodField("get_photo")
big_photo = serializers.SerializerMethodField("get_big_photo") big_photo = serializers.SerializerMethodField("get_big_photo")
gravatar_url = serializers.SerializerMethodField("get_gravatar_url")
roles = serializers.SerializerMethodField("get_roles") roles = serializers.SerializerMethodField("get_roles")
projects_with_me = serializers.SerializerMethodField("get_projects_with_me") projects_with_me = serializers.SerializerMethodField("get_projects_with_me")
@ -57,7 +59,8 @@ class UserSerializer(serializers.ModelSerializer):
# with this info (including there the email) # with this info (including there the email)
fields = ("id", "username", "full_name", "full_name_display", fields = ("id", "username", "full_name", "full_name_display",
"color", "bio", "lang", "theme", "timezone", "is_active", "color", "bio", "lang", "theme", "timezone", "is_active",
"photo", "big_photo", "roles", "projects_with_me") "photo", "big_photo", "roles", "projects_with_me",
"gravatar_url")
read_only_fields = ("id",) read_only_fields = ("id",)
def validate_username(self, attrs, source): def validate_username(self, attrs, source):
@ -87,6 +90,9 @@ class UserSerializer(serializers.ModelSerializer):
def get_big_photo(self, user): def get_big_photo(self, user):
return get_big_photo_or_gravatar_url(user) return get_big_photo_or_gravatar_url(user)
def get_gravatar_url(self, user):
return get_gravatar_url(user.email)
def get_roles(self, user): def get_roles(self, user):
return user.memberships. order_by("role__name").values_list("role__name", flat=True).distinct() return user.memberships. order_by("role__name").values_list("role__name", flat=True).distinct()
@ -104,6 +110,7 @@ class UserSerializer(serializers.ModelSerializer):
projects = Project.objects.filter(id__in=project_ids) projects = Project.objects.filter(id__in=project_ids)
return ContactProjectDetailSerializer(projects, many=True).data return ContactProjectDetailSerializer(projects, many=True).data
class UserAdminSerializer(UserSerializer): class UserAdminSerializer(UserSerializer):
total_private_projects = serializers.SerializerMethodField("get_total_private_projects") total_private_projects = serializers.SerializerMethodField("get_total_private_projects")
total_public_projects = serializers.SerializerMethodField("get_total_public_projects") total_public_projects = serializers.SerializerMethodField("get_total_public_projects")
@ -114,7 +121,7 @@ class UserAdminSerializer(UserSerializer):
# with this info (including here the email) # with this info (including here the email)
fields = ("id", "username", "full_name", "full_name_display", "email", fields = ("id", "username", "full_name", "full_name_display", "email",
"color", "bio", "lang", "theme", "timezone", "is_active", "photo", "color", "bio", "lang", "theme", "timezone", "is_active", "photo",
"big_photo", "big_photo", "gravatar_url",
"max_private_projects", "max_public_projects", "max_private_projects", "max_public_projects",
"max_memberships_private_projects", "max_memberships_public_projects", "max_memberships_private_projects", "max_memberships_public_projects",
"total_private_projects", "total_public_projects") "total_private_projects", "total_public_projects")
@ -134,7 +141,7 @@ class UserAdminSerializer(UserSerializer):
class UserBasicInfoSerializer(UserSerializer): class UserBasicInfoSerializer(UserSerializer):
class Meta: class Meta:
model = User model = User
fields = ("username", "full_name_display","photo", "big_photo", "is_active", "id") fields = ("username", "full_name_display", "photo", "big_photo", "is_active", "id")
class RecoverySerializer(serializers.Serializer): class RecoverySerializer(serializers.Serializer):
@ -178,7 +185,6 @@ class ProjectRoleSerializer(serializers.ModelSerializer):
## Like ## Like
###################################################### ######################################################
class HighLightedContentSerializer(serializers.Serializer): class HighLightedContentSerializer(serializers.Serializer):
type = serializers.CharField() type = serializers.CharField()
id = serializers.IntegerField() id = serializers.IntegerField()
@ -279,7 +285,7 @@ class LikedObjectSerializer(HighLightedContentSerializer):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# Don't pass the extra ids args up to the superclass # Don't pass the extra ids args up to the superclass
self.user_likes = kwargs.pop("user_likes", {}) self.user_likes = kwargs.pop("user_likes", {})
# Instantiate the superclass normally # Instantiate the superclass normally
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -294,7 +300,7 @@ class VotedObjectSerializer(HighLightedContentSerializer):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# Don't pass the extra ids args up to the superclass # Don't pass the extra ids args up to the superclass
self.user_votes = kwargs.pop("user_votes", {}) self.user_votes = kwargs.pop("user_votes", {})
# Instantiate the superclass normally # Instantiate the superclass normally
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)