diff --git a/ivatar/views.py b/ivatar/views.py
index f1efbbe..ab489d9 100644
--- a/ivatar/views.py
+++ b/ivatar/views.py
@@ -10,6 +10,7 @@ from ssl import SSLError
from django.views.generic.base import TemplateView, View
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
from django.core.exceptions import ObjectDoesNotExist
+from django.core.cache import cache
from django.utils.translation import ugettext_lazy as _
from django.urls import reverse_lazy
from django.db.models import Q
@@ -147,8 +148,6 @@ class AvatarImageView(TemplateView):
+ '?s=%i' % size + '&default=%s&f=y' % default
return HttpResponseRedirect(url)
-
-
if str(default) == str(404):
return HttpResponseNotFound(_('
Image not found
'))
@@ -291,10 +290,14 @@ class GravatarProxyView(View):
# redirect to our default instead.
gravatar_test_url = 'https://secure.gravatar.com/avatar/' + kwargs['digest'] \
+ '?s=%i' % 50
+ if cache.get(gravatar_test_url) == 'default':
+ print("Cached Gravatar response: Default.")
+ return redir_default(default)
try:
testdata = urlopen(gravatar_test_url, timeout=URL_TIMEOUT)
data = BytesIO(testdata.read())
if hashlib.md5(data.read()).hexdigest() == '71bc262d627971d13fe6f3180b93062a':
+ cache.set(gravatar_test_url, 'default', 60)
return redir_default(default)
except Exception as exc:
print('Gravatar test url fetch failed: %s' % exc)
@@ -303,22 +306,29 @@ class GravatarProxyView(View):
+ '?s=%i' % size + '&d=%s' % default
try:
+ if cache.get(gravatar_url) == 'err':
+ print('Cached Gravatar fetch failed with URL error')
+ return redir_default(default)
+
gravatarimagedata = urlopen(gravatar_url, timeout=URL_TIMEOUT)
except HTTPError as exc:
if exc.code != 404 and exc.code != 503:
print(
'Gravatar fetch failed with an unexpected %s HTTP error' %
exc.code)
+ cache.set(gravatar_url, 'err', 30)
return redir_default(default)
except URLError as exc:
print(
'Gravatar fetch failed with URL error: %s' %
exc.reason)
+ cache.set(gravatar_url, 'err', 30)
return redir_default(default)
except SSLError as exc:
print(
'Gravatar fetch failed with SSL error: %s' %
exc.reason)
+ cache.set(gravatar_url, 'err', 30)
return redir_default(default)
try:
data = BytesIO(gravatarimagedata.read())