2
from hashlib import md5
11
from datetime import datetime, timedelta
15
from pybb import settings as pybb_settings
16
from django.core.files.uploadedfile import SimpleUploadedFile
17
from django.conf import settings
19
warnings.filterwarnings('ignore', r'tmpnam')
22
def fetch_gravatar(email):
23
"""Fetch avatar from gravatar.com service.
25
Return None if avatar was not found.
29
hash = md5(email).hexdigest()
30
size = max(pybb_settings.AVATAR_WIDTH, pybb_settings.AVATAR_HEIGHT)
31
default = urllib.quote('http://spam.egg/')
33
url = 'http://www.gravatar.com/avatar/%s?s=%d&d=%s' % (hash, size, default)
36
class RedirectHandler(urllib2.HTTPRedirectHandler):
38
def http_error_302(*args):
39
raise IOError('Redirect found')
41
timeout = socket.getdefaulttimeout()
42
socket.setdefaulttimeout(10)
43
opener = urllib2.build_opener(RedirectHandler())
44
socket.setdefaulttimeout(timeout)
47
file(fname, 'wb').write(opener.open(url, fname).read())
55
def check_gravatar(user, ignore_date_joined=False, ignore_saved_avatar=False):
57
if ignore_date_joined or (datetime.now() - user.date_joined) < timedelta(seconds=3):
58
if ignore_saved_avatar or not user.pybb_profile.avatar:
59
path = fetch_gravatar(user.email)
61
avatars_dir = os.path.join(
62
settings.MEDIA_ROOT, pybb_settings.AVATARS_UPLOAD_TO)
63
avatar_name = '_pybb_%d' % user.id
65
avatar_path = os.path.join(avatars_dir, avatar_name)
66
shutil.copy(path, avatar_path)
68
relpath = os.path.join(
69
pybb_settings.AVATARS_UPLOAD_TO, avatar_name)
70
user.pybb_profile.avatar = relpath
71
user.pybb_profile.save()