blob: ba313d0fdfdb386f167fafe43fce8a825349063c [file] [log] [blame]
import re, urllib, hashlib
_wrapped_email=re.compile(r'.*<(.+)>')
def id(email):
"""Turn an email address into a Gravatar id as per <http://gravatar.com/site/implement/url>
The supplied email address must be of the form 'Wolf@example.com',
or else 'Wolf <wolf@example.com>'
The result may be saved for use in later calls to gravatar.url().
"""
match = _wrapped_email.match(email)
if match:
email = match.group(1)
return hashlib.md5(email.strip().lower().encode('utf8')).hexdigest()
def url(email=None, gravatar_id=None, **kw):
"""Build a complete gravatar URL with our favorite defaults.
Keyword Arguments:
email -- (required if gravatar_id is None) a string containing
an email address to be digested by gravatar.id(), above.
gravatar_id -- (optional) the pre-digested id from which to build
the URL, as generated by gravatar.id(), above.
You must provide at least one of gravatar_id or email. email will
be ignored if both are supplied. Remaining keyword arguments will
be used to construct the URL itself. Gravatar recognizes these
three:
's' or 'size' -- size in pixels of the returned square image,
Gravatar's default is 80x80
'd' or 'default' -- URL for a default image, or a keyword naming
a Gravatar supplied default e.g., 'wavatar', 'identicon'.
'r' or 'rating' -- 'g', 'pg', 'r', or 'x' to refuse any "harder"
rated image. We default to 'pg'.
Example:
gravatar.url('Wolf@example.com', size=24)
Result:
"https://secure.gravatar.com/avatar/d3514940ac1b2051c8aa42970d17e3fe?size=24&r=pg&d=wavatar"
Example:
saved_id = gravatar.id('Wolf@example.com')
url = gravatar.url(gravatar_id=saved_id, r='g')
Result:
"https://secure.gravatar.com/avatar/d3514940ac1b2051c8aa42970d17e3fe?r=g&d=wavatar"
"""
assert gravatar_id or email
if gravatar_id is None:
gravatar_id = id(email)
if 'r' not in kw and 'rating' not in kw: kw['r'] = 'pg'
return ('https://secure.gravatar.com/avatar/%s?%s' % (gravatar_id, urllib.urlencode(kw)))
def for_user(user):
return url(user.get_pref('email_address'))