Skip to content

Commit b790b55

Browse files
bites 228 - Create a Gravatar URL with hashlib and string formatting
1 parent 8d577d2 commit b790b55

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

228/gravatar.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import hashlib
2+
3+
GRAVATAR_URL = ("https://www.gravatar.com/avatar/"
4+
"{hashed_email}?s={size}&r=g&d=robohash")
5+
6+
7+
def create_gravatar_url(email, size=200):
8+
"""Use GRAVATAR_URL above to create a gravatar URL.
9+
10+
You need to create a hash of the email passed in.
11+
12+
PHP example: https://en.gravatar.com/site/implement/hash/
13+
14+
For Python check hashlib check out (md5 / hexdigest):
15+
https://docs.python.org/3/library/hashlib.html#hashlib.hash.hexdigest
16+
"""
17+
email = email.strip().lower()
18+
m = hashlib.md5()
19+
m.update(str.encode(email))
20+
hashed_email = m.hexdigest()
21+
return GRAVATAR_URL.format(hashed_email=hashed_email, size=size)

228/test_gravatar.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import pytest
2+
3+
from gravatar import create_gravatar_url
4+
5+
BASE_URL = "https://www.gravatar.com/avatar/"
6+
HASHED_INFO_EMAIL = "ff2de96de035e1ccdb39ca31d3fe4a5c"
7+
HASHED_SUPPORT_EMAIL = "1c888a408baa7a685c7c06155e48de84"
8+
SIZE, DEFAULT = 200, 'robohash'
9+
10+
EXPECTED = iter([ # make an iterator
11+
f'{BASE_URL}{HASHED_INFO_EMAIL}?s={SIZE}&r=g&d={DEFAULT}',
12+
f'{BASE_URL}{HASHED_INFO_EMAIL}?s={SIZE}&r=g&d={DEFAULT}',
13+
f'{BASE_URL}{HASHED_INFO_EMAIL}?s=40&r=g&d={DEFAULT}',
14+
f'{BASE_URL}{HASHED_SUPPORT_EMAIL}?s={SIZE}&r=g&d={DEFAULT}',
15+
f'{BASE_URL}{HASHED_SUPPORT_EMAIL}?s={SIZE}&r=g&d={DEFAULT}',
16+
f'{BASE_URL}{HASHED_SUPPORT_EMAIL}?s=1000&r=g&d={DEFAULT}',
17+
])
18+
19+
20+
@pytest.mark.parametrize("email, size", [
21+
22+
("[email protected] ", 200),
23+
24+
25+
26+
(' [email protected]', 1000),
27+
])
28+
def test_gravatar(email, size):
29+
actual = create_gravatar_url(email, size=size)
30+
expected = next(EXPECTED)
31+
assert actual == expected

0 commit comments

Comments
 (0)