Skip to content

Commit

Permalink
Generate avatar urls for users using gravatar
Browse files Browse the repository at this point in the history
  • Loading branch information
nezhar committed May 14, 2022
1 parent 0d48d34 commit 5fe89a0
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 1 deletion.
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ django-rest-registration>=0.5.3,<0.8
django-rest-passwordreset>=1.1,<1.3
drf-spectacular[sidecar]>=0.20.1,<0.23
django-environ>=0.7.0,<0.9
django-gravatar2>=1.4.4,<1.5
6 changes: 6 additions & 0 deletions snypy/snippets/rest/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class Meta:

class SnippetSerializer(BaseSerializer):
user_display = SerializerMethodField()
user_avatar = SerializerMethodField()
labels = PrimaryKeyRelatedField(many=True, read_only=False, queryset=Label.objects.all(), required=False)
files = SnippetFileSerializer(File.objects.none(), many=True, required=False)

Expand All @@ -39,6 +40,7 @@ class Meta:
"visibility",
"user",
"user_display",
"user_avatar",
"created_date",
"modified_date",
"labels",
Expand All @@ -50,6 +52,10 @@ def get_user_display(self, obj):
if obj.user:
return obj.user.username

def get_user_avatar(self, obj):
if obj.user:
return obj.user.get_avatar(size=25)

def save(self):
# Extract nested fields
labels = self.validated_data.pop("labels") if "labels" in self.validated_data else None
Expand Down
7 changes: 7 additions & 0 deletions snypy/users/models/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
from django.contrib.auth.models import AbstractUser
from django_gravatar.helpers import get_gravatar_url, has_gravatar

from .managers import UserManager


class User(AbstractUser):

objects = UserManager()

def get_avatar(self, size=25):
# TODO: Add caching in future if rate limits are reached
if has_gravatar(self.email):
return get_gravatar_url(self.email, size=size)
return f"https://www.gravatar.com/avatar/00000000000000000000000000000000?d=identicon&s={size}&f=y;'"
9 changes: 8 additions & 1 deletion snypy/users/rest/serializers.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
from django.contrib.auth import get_user_model
from django_gravatar.helpers import get_gravatar_url
from rest_framework.fields import SerializerMethodField

from core.rest.serializers import BaseSerializer

User = get_user_model()


class UserSerializer(BaseSerializer):
avatar = SerializerMethodField()

class Meta:
model = User
fields = ("pk", "url", "username", "email", "is_staff")
fields = ("pk", "url", "username", "email", "is_staff", "avatar")

def get_avatar(self, obj):
return obj.get_avatar(size=100)

0 comments on commit 5fe89a0

Please sign in to comment.