22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
1 |
try: |
438.1.6
by franku
run the script |
2 |
from hashlib import md5 |
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
3 |
except ImportError: |
438.1.6
by franku
run the script |
4 |
from md5 import md5 |
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
5 |
import os |
6 |
import os.path |
|
7 |
import warnings |
|
8 |
import logging |
|
9 |
import urllib |
|
10 |
import urllib2 |
|
11 |
from datetime import datetime, timedelta |
|
12 |
import shutil |
|
13 |
import socket |
|
14 |
||
15 |
from pybb import settings as pybb_settings |
|
16 |
from django.core.files.uploadedfile import SimpleUploadedFile |
|
17 |
from django.conf import settings |
|
18 |
||
19 |
warnings.filterwarnings('ignore', r'tmpnam') |
|
20 |
||
438.1.6
by franku
run the script |
21 |
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
22 |
def fetch_gravatar(email): |
438.1.6
by franku
run the script |
23 |
"""Fetch avatar from gravatar.com service.
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
24 |
|
25 |
Return None if avatar was not found.
|
|
438.1.6
by franku
run the script |
26 |
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
27 |
"""
|
28 |
||
29 |
hash = md5(email).hexdigest() |
|
30 |
size = max(pybb_settings.AVATAR_WIDTH, pybb_settings.AVATAR_HEIGHT) |
|
31 |
default = urllib.quote('http://spam.egg/') |
|
32 |
||
33 |
url = 'http://www.gravatar.com/avatar/%s?s=%d&d=%s' % (hash, size, default) |
|
34 |
fname = os.tmpnam() |
|
35 |
||
36 |
class RedirectHandler(urllib2.HTTPRedirectHandler): |
|
438.1.6
by franku
run the script |
37 |
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
38 |
def http_error_302(*args): |
39 |
raise IOError('Redirect found') |
|
40 |
||
41 |
timeout = socket.getdefaulttimeout() |
|
42 |
socket.setdefaulttimeout(10) |
|
43 |
opener = urllib2.build_opener(RedirectHandler()) |
|
44 |
socket.setdefaulttimeout(timeout) |
|
45 |
||
46 |
try: |
|
47 |
file(fname, 'wb').write(opener.open(url, fname).read()) |
|
48 |
except IOError, ex: |
|
438.1.6
by franku
run the script |
49 |
# logging.error(ex)
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
50 |
return None |
51 |
else: |
|
52 |
return fname |
|
53 |
||
54 |
||
55 |
def check_gravatar(user, ignore_date_joined=False, ignore_saved_avatar=False): |
|
56 |
if user.is_active: |
|
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) |
|
60 |
if path: |
|
438.1.6
by franku
run the script |
61 |
avatars_dir = os.path.join( |
62 |
settings.MEDIA_ROOT, pybb_settings.AVATARS_UPLOAD_TO) |
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
63 |
avatar_name = '_pybb_%d' % user.id |
64 |
||
65 |
avatar_path = os.path.join(avatars_dir, avatar_name) |
|
66 |
shutil.copy(path, avatar_path) |
|
67 |
||
438.1.6
by franku
run the script |
68 |
relpath = os.path.join( |
69 |
pybb_settings.AVATARS_UPLOAD_TO, avatar_name) |
|
22
by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :( |
70 |
user.pybb_profile.avatar = relpath |
71 |
user.pybb_profile.save() |
|
72 |
return True |
|
73 |
return False |