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')
21
def fetch_gravatar(email):
23
Fetch avatar from gravatar.com service.
25
Return None if avatar was not found.
28
hash = md5(email).hexdigest()
29
size = max(pybb_settings.AVATAR_WIDTH, pybb_settings.AVATAR_HEIGHT)
30
default = urllib.quote('http://spam.egg/')
32
url = 'http://www.gravatar.com/avatar/%s?s=%d&d=%s' % (hash, size, default)
35
class RedirectHandler(urllib2.HTTPRedirectHandler):
36
def http_error_302(*args):
37
raise IOError('Redirect found')
39
timeout = socket.getdefaulttimeout()
40
socket.setdefaulttimeout(10)
41
opener = urllib2.build_opener(RedirectHandler())
42
socket.setdefaulttimeout(timeout)
45
file(fname, 'wb').write(opener.open(url, fname).read())
53
def check_gravatar(user, ignore_date_joined=False, ignore_saved_avatar=False):
55
if ignore_date_joined or (datetime.now() - user.date_joined) < timedelta(seconds=3):
56
if ignore_saved_avatar or not user.pybb_profile.avatar:
57
path = fetch_gravatar(user.email)
59
avatars_dir = os.path.join(settings.MEDIA_ROOT, pybb_settings.AVATARS_UPLOAD_TO)
60
avatar_name = '_pybb_%d' % user.id
62
avatar_path = os.path.join(avatars_dir, avatar_name)
63
shutil.copy(path, avatar_path)
65
relpath = os.path.join(pybb_settings.AVATARS_UPLOAD_TO, avatar_name)
66
user.pybb_profile.avatar = relpath
67
user.pybb_profile.save()