Skip to content

Commit 5e0f4c0

Browse files
committed
Gate promo 404/500's by donate app
1 parent c84ad30 commit 5e0f4c0

File tree

3 files changed

+56
-27
lines changed

3 files changed

+56
-27
lines changed

readthedocs/core/views/__init__.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
from readthedocs.builds.models import Build
1919
from readthedocs.builds.models import Version
2020
from readthedocs.core.utils import broadcast
21-
from readthedocs.donate.models import SupporterPromo
22-
from readthedocs.donate.utils import offer_promo
2321
from readthedocs.projects import constants
2422
from readthedocs.projects.models import Project, ImportedFile
2523
from readthedocs.projects.tasks import remove_dir
@@ -106,38 +104,20 @@ def divide_by_zero(request):
106104
return 1 / 0
107105

108106

109-
def add_promo_data(display_type):
110-
promo_queryset = SupporterPromo.objects.filter(live=True, display_type=display_type)
111-
promo_obj = promo_queryset.order_by('?').first()
112-
if promo_obj:
113-
promo_dict = offer_promo(promo_obj=promo_obj, project=None)
114-
else:
115-
promo_dict = None
116-
return promo_dict
117-
118-
119-
def server_error(request, template_name='500.html', **kwargs):
107+
def server_error_500(request, exception, template_name='500.html'):
120108
"""A simple 500 handler so we get media"""
121-
promo_dict = add_promo_data(display_type='error')
122109
r = render_to_response(template_name,
123-
context_instance=RequestContext(request),
124-
context={
125-
'promo_data': promo_dict,
126-
})
110+
context_instance=RequestContext(request))
127111
r.status_code = 500
128112
return r
129113

130114

131-
def server_error_404(request, template_name='404.html', **kwargs):
115+
def server_error_404(request, exception, template_name='404.html'):
132116
"""A simple 404 handler so we get media"""
133-
promo_dict = add_promo_data(display_type='error')
134117
response = get_redirect_response(request, path=request.get_full_path())
135118
if response:
136119
return response
137120
r = render_to_response(template_name,
138-
context_instance=RequestContext(request),
139-
context={
140-
'promo_data': promo_dict,
141-
})
121+
context_instance=RequestContext(request))
142122
r.status_code = 404
143123
return r

readthedocs/donate/views.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@
55
from django.views.generic import TemplateView
66
from django.core.urlresolvers import reverse
77
from django.utils.translation import ugettext_lazy as _
8-
from django.shortcuts import redirect, get_object_or_404
8+
from django.shortcuts import redirect, get_object_or_404, render_to_response
9+
from django.template import RequestContext
910
from django.core.cache import cache
1011
from django.http import Http404
1112

1213
from vanilla import CreateView, ListView
1314

15+
from readthedocs.donate.models import SupporterPromo
16+
from readthedocs.donate.utils import offer_promo
1417
from readthedocs.payments.mixins import StripeMixin
1518
from readthedocs.projects.models import Project
19+
from readthedocs.redirects.utils import get_redirect_response
1620

1721
from .models import Supporter, SupporterPromo, CLICKS, VIEWS
1822
from .forms import SupporterForm, EthicalAdForm
@@ -146,3 +150,40 @@ def view_proxy(request, promo_id, hash):
146150
log.warning('Duplicate view logged. {count} total clicks tried.'.format(count=count))
147151
cache.incr(promo.cache_key(type=VIEWS, hash=hash))
148152
return redirect(promo.image)
153+
154+
155+
def add_promo_data(display_type):
156+
promo_queryset = SupporterPromo.objects.filter(live=True, display_type=display_type)
157+
promo_obj = promo_queryset.order_by('?').first()
158+
if promo_obj:
159+
promo_dict = offer_promo(promo_obj=promo_obj, project=None)
160+
else:
161+
promo_dict = None
162+
return promo_dict
163+
164+
165+
def promo_500(request, template_name='500.html', **kwargs):
166+
"""A simple 500 handler so we get media"""
167+
promo_dict = add_promo_data(display_type='error')
168+
r = render_to_response(template_name,
169+
context_instance=RequestContext(request),
170+
context={
171+
'promo_data': promo_dict,
172+
})
173+
r.status_code = 500
174+
return r
175+
176+
177+
def promo_404(request, template_name='404.html', **kwargs):
178+
"""A simple 404 handler so we get media"""
179+
promo_dict = add_promo_data(display_type='error')
180+
response = get_redirect_response(request, path=request.get_full_path())
181+
if response:
182+
return response
183+
r = render_to_response(template_name,
184+
context_instance=RequestContext(request),
185+
context={
186+
'promo_data': promo_dict,
187+
})
188+
r.status_code = 404
189+
return r

readthedocs/urls.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@
2525

2626
admin.autodiscover()
2727

28-
handler500 = 'readthedocs.core.views.server_error'
29-
handler404 = 'readthedocs.core.views.server_error_404'
28+
if 'readthedocs.donate' in settings.INSTALLED_APPS:
29+
handler404 = 'readthedocs.donate.views.promo_404'
30+
handler500 = 'readthedocs.donate.views.promo_500'
31+
else:
32+
handler404 = 'readthedocs.core.views.server_error_404'
33+
handler500 = 'readthedocs.core.views.server_error_500'
3034

3135
basic_urls = [
3236
url(r'^$', HomepageView.as_view(), name='homepage'),
@@ -44,6 +48,10 @@
4448
url(r'^notifications/', include('readthedocs.notifications.urls')),
4549
# For redirects
4650
url(r'^builds/', include('readthedocs.builds.urls')),
51+
# For testing the 404's with DEBUG on.
52+
url(r'^404/$', handler404),
53+
# For testing the 500's with DEBUG on.
54+
url(r'^500/$', handler500),
4755
]
4856

4957
project_urls = [

0 commit comments

Comments
 (0)