Return user's gravatar if has no photo set

If the user has no photo set use her gravatar image if available
otherwise use the default avatar image defined in
`settings.DEFAULT_AVATAR_URL`
remotes/origin/enhancement/email-actions
Anler Hp 2014-07-01 12:39:29 +02:00
parent 5892841fe5
commit 5ff7ec1c00
4 changed files with 48 additions and 2 deletions

View File

@ -305,3 +305,5 @@ if "test" in sys.argv:
print ("\033[1;91mNo django tests.\033[0m")
print ("Try: \033[1;33mpy.test\033[0m")
sys.exit(0)
DEFAULT_AVATAR_URL = ""

26
taiga/users/gravatar.py Normal file
View File

@ -0,0 +1,26 @@
import hashlib
from urllib.parse import urlencode
from django.conf import settings
GRAVATAR_BASE_URL = "http://www.gravatar.com/avatar/{}?{}"
def get_gravatar_url(email: str, **options) -> str:
"""Get the gravatar url associated to an email.
:param options: Additional options to gravatar:
- `d` defines what image url to show if no gravatar exists
- `s` defines the size of the avatar.
By default these options are:
- `d` is `settings.DEFAULT_AVATAR_URL`
- `s` gravatar's default value which is 80x80 px
:return: Gravatar url.
"""
defaults = {'d': settings.DEFAULT_AVATAR_URL}
defaults.update(options)
email_hash = hashlib.md5(email.lower().encode()).hexdigest()
url = GRAVATAR_BASE_URL.format(email_hash, urlencode(defaults))
return url

View File

@ -18,12 +18,13 @@ from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from taiga.projects.models import Project
from .models import User, Role
from .models import User
from .gravatar import get_gravatar_url
class UserSerializer(serializers.ModelSerializer):
full_name_display = serializers.SerializerMethodField("get_full_name_display")
photo = serializers.SerializerMethodField("get_photo")
class Meta:
model = User
@ -34,6 +35,10 @@ class UserSerializer(serializers.ModelSerializer):
def get_full_name_display(self, obj):
return obj.get_full_name() if obj else ""
def get_photo(self, user):
"Return the user photo or her gravatar"
return user.photo or get_gravatar_url(user.email)
class RecoverySerializer(serializers.Serializer):
token = serializers.CharField(max_length=200)

View File

@ -0,0 +1,13 @@
import hashlib
from taiga.users.gravatar import get_gravatar_url
def test_get_gravatar_url():
email = "user@email.com"
email_hash = hashlib.md5(email.encode()).hexdigest()
url = get_gravatar_url(email, s=40, d="default-image-url")
assert email_hash in url
assert 's=40' in url
assert 'd=default-image-url' in url