django-avatar/avatar/providers.py

76 lines
2.2 KiB
Python
Raw Normal View History

2016-09-13 11:29:23 +00:00
import hashlib
2022-08-09 19:17:24 +00:00
from urllib.parse import urlencode, urljoin
2016-09-13 11:29:23 +00:00
2022-07-16 20:26:58 +00:00
from django.utils.module_loading import import_string
2016-09-13 11:29:23 +00:00
from avatar.conf import settings
2022-08-09 19:17:24 +00:00
from avatar.utils import force_bytes, get_default_avatar_url, get_primary_avatar
2016-09-13 11:29:23 +00:00
# If the FacebookAvatarProvider is used, a mechanism needs to be defined on
# how to obtain the user's Facebook UID. This is done via
# ``AVATAR_FACEBOOK_GET_ID``.
get_facebook_id = None
2022-07-16 20:50:05 +00:00
if "avatar.providers.FacebookAvatarProvider" in settings.AVATAR_PROVIDERS:
2016-09-13 11:29:23 +00:00
if callable(settings.AVATAR_FACEBOOK_GET_ID):
get_facebook_id = settings.AVATAR_FACEBOOK_GET_ID
else:
get_facebook_id = import_string(settings.AVATAR_FACEBOOK_GET_ID)
class DefaultAvatarProvider(object):
"""
Returns the default url defined by ``settings.DEFAULT_AVATAR_URL``.
"""
@classmethod
def get_avatar_url(self, user, size):
return get_default_avatar_url()
class PrimaryAvatarProvider(object):
"""
Returns the primary Avatar from the users avatar set.
"""
@classmethod
def get_avatar_url(self, user, size):
avatar = get_primary_avatar(user, size)
if avatar:
return avatar.avatar_url(size)
class GravatarAvatarProvider(object):
"""
Returns the url for an avatar by the Gravatar service.
"""
@classmethod
def get_avatar_url(self, user, size):
2022-07-16 20:50:05 +00:00
params = {"s": str(size)}
2016-09-13 11:29:23 +00:00
if settings.AVATAR_GRAVATAR_DEFAULT:
2022-07-16 20:50:05 +00:00
params["d"] = settings.AVATAR_GRAVATAR_DEFAULT
2016-09-13 11:29:23 +00:00
if settings.AVATAR_GRAVATAR_FORCEDEFAULT:
2022-07-16 20:50:05 +00:00
params["f"] = "y"
path = "%s/?%s" % (
hashlib.md5(
force_bytes(getattr(user, settings.AVATAR_GRAVATAR_FIELD))
).hexdigest(),
urlencode(params),
)
2016-09-13 11:29:23 +00:00
return urljoin(settings.AVATAR_GRAVATAR_BASE_URL, path)
class FacebookAvatarProvider(object):
"""
Returns the url of a Facebook profile image.
"""
@classmethod
def get_avatar_url(self, user, size):
fb_id = get_facebook_id(user)
if fb_id:
2022-07-16 20:50:05 +00:00
url = "https://graph.facebook.com/{fb_id}/picture?type=square&width={size}&height={size}"
return url.format(fb_id=fb_id, size=size)