3
from hashlib import md5
5
_valid_gravatar_sizes = (32, 64, 140)
10
log = logging.getLogger("moksha.hub")
13
def gravatar_url(username, size=64, default=None):
16
system = fedora.client.AccountSystem()
17
return system.gravatar_url(
18
username, size, default, lookup_email=False)
20
email = username + "@fedoraproject.org"
21
return gravatar_url_from_email(email, size, default)
24
def gravatar_url_from_email(email, size=64, default=None):
26
Our own implementation since fas doesn't support this nicely yet.
29
if size not in _valid_gravatar_sizes:
31
'Size %(size)i disallowed. Must be in %(valid_sizes)r') % {
32
'size': size, 'valid_sizes': _valid_gravatar_sizes})
35
default = ("http://fedoraproject.org/static/images/"
36
"fedora_infinity_%ix%i.png" % (size, size))
38
return _kernel(email, size, default, service='gravatar')
41
def _kernel(email, size, default, service='gravatar'):
42
""" Copy-and-paste of some code from python-fedora. """
44
if service == 'libravatar':
46
return libravatar.libravatar_url(
52
query_string = urllib.urlencode({
57
hash = md5(email).hexdigest()
59
return "http://www.gravatar.com/avatar/%s?%s" % (hash, query_string)
62
def make_fas_cache(**config):
67
log.warn("No previous fas cache found. Looking to rebuild.")
71
import fedora.client.fas2
73
log.warn("No python-fedora installed. Not caching fas.")
76
if not 'fas_credentials' in config:
77
log.warn("No fas_credentials found. Not caching fas.")
80
creds = config['fas_credentials']
82
fasclient = fedora.client.fas2.AccountSystem(
83
username=creds['username'],
84
password=creds['password'],
87
timeout = socket.getdefaulttimeout()
88
socket.setdefaulttimeout(600)
90
log.info("Downloading FAS cache")
91
request = fasclient.send_request('/user/list',
92
req_params={'search': '*'},
94
except fedora.client.ServerError as e:
95
log.error("Failed to download fas cache %r" % e)
98
socket.setdefaulttimeout(timeout)
100
log.info("Caching necessary user data")
101
for user in request['people']:
102
nick = user['ircnick']
104
_fas_cache[nick] = user['username']
106
email = user['email']
108
_fas_cache[email] = user['username']
112
del fedora.client.fas2
117
def nick2fas(nickname, **config):
118
fas_cache = make_fas_cache(**config)
119
return fas_cache.get(nickname, nickname)
122
def email2fas(email, **config):
123
fas_cache = make_fas_cache(**config)
124
return fas_cache.get(email, email)