From f345c16106e34a4ce9a77b9b96e6172bde508c14 Mon Sep 17 00:00:00 2001 From: Mike Cooper Date: Wed, 3 Feb 2016 12:53:12 -0800 Subject: [PATCH 1/3] Replace render_to_response with render for better Django 1.8 compatibility. This makes Badger work with new style non-default templating engines. (like django-jinja) --- badger/views.py | 68 ++++++++++++++++++++++++------------------------- tox.ini | 21 ++++++++++----- 2 files changed, 47 insertions(+), 42 deletions(-) diff --git a/badger/views.py b/badger/views.py index e1be9c1..33b09a1 100644 --- a/badger/views.py +++ b/badger/views.py @@ -5,7 +5,7 @@ from django.conf import settings from django.http import (HttpResponseRedirect, HttpResponse, HttpResponseForbidden, HttpResponseNotFound, Http404) -from django.shortcuts import get_object_or_404, render_to_response +from django.shortcuts import get_object_or_404, render from django.template import RequestContext from django.template.defaultfilters import slugify @@ -54,9 +54,9 @@ def home(request): award_list = Award.objects.order_by('-modified').all()[:bsettings.MAX_RECENT] badge_tags = Badge.objects.top_tags() - return render_to_response('%s/home.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/home.html' % bsettings.TEMPLATE_BASE, dict( badge_list=badge_list, award_list=award_list, badge_tags=badge_tags - ), context_instance=RequestContext(request)) + )) class BadgesListView(ListView): @@ -140,10 +140,10 @@ def detail(request, slug, format="html"): resp['Content-Type'] = 'application/json' return resp else: - return render_to_response('%s/badge_detail.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/badge_detail.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, award_list=awards, sections=sections, claim_groups=claim_groups - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -166,9 +166,9 @@ def create(request): return HttpResponseRedirect(reverse( 'badger.views.detail', args=(new_sub.slug,))) - return render_to_response('%s/badge_create.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/badge_create.html' % bsettings.TEMPLATE_BASE, dict( form=form, - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -190,9 +190,9 @@ def edit(request, slug): return HttpResponseRedirect(reverse( 'badger.views.detail', args=(new_sub.slug,))) - return render_to_response('%s/badge_edit.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/badge_edit.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, form=form, - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -211,9 +211,9 @@ def delete(request, slug): badge.delete() return HttpResponseRedirect(reverse('badger.views.badges_list')) - return render_to_response('%s/badge_delete.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/badge_delete.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, awards_count=awards_count, - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -244,9 +244,9 @@ def award_badge(request, slug): return HttpResponseRedirect(reverse('badger.views.detail', args=(badge.slug,))) - return render_to_response('%s/badge_award.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/badge_award.html' % bsettings.TEMPLATE_BASE, dict( form=form, badge=badge, - ), context_instance=RequestContext(request)) + )) class AwardsListView(ListView): @@ -291,9 +291,9 @@ def award_detail(request, slug, id, format="html"): resp['Content-Type'] = 'application/json' return resp else: - return render_to_response('%s/award_detail.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/award_detail.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, award=award, - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -312,9 +312,9 @@ def award_delete(request, slug, id): url = reverse('badger.views.detail', kwargs=dict(slug=slug)) return HttpResponseRedirect(url) - return render_to_response('%s/award_delete.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/award_delete.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, award=award - ), context_instance=RequestContext(request)) + )) @login_required @@ -392,10 +392,10 @@ def claim_deferred_award(request, claim_code=None): args=(deferred_award.badge.slug,)) return HttpResponseRedirect(url) - return render_to_response('%s/claim_deferred_award.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/claim_deferred_award.html' % bsettings.TEMPLATE_BASE, dict( badge=deferred_award.badge, deferred_award=deferred_award, grant_form=grant_form - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -413,10 +413,10 @@ def claims_list(request, slug, claim_group, format="html"): return render_claims_to_pdf(request, slug, claim_group, deferred_awards) - return render_to_response('%s/claims_list.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/claims_list.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, claim_group=claim_group, deferred_awards=deferred_awards - ), context_instance=RequestContext(request)) + )) @require_GET @@ -424,9 +424,9 @@ def awards_by_user(request, username): """Badge awards by user""" user = get_object_or_404(User, username=username) awards = Award.objects.filter(user=user) - return render_to_response('%s/awards_by_user.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/awards_by_user.html' % bsettings.TEMPLATE_BASE, dict( user=user, award_list=awards, - ), context_instance=RequestContext(request)) + )) @require_GET @@ -434,9 +434,9 @@ def awards_by_badge(request, slug): """Badge awards by badge""" badge = get_object_or_404(Badge, slug=slug) awards = Award.objects.filter(badge=badge) - return render_to_response('%s/awards_by_badge.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/awards_by_badge.html' % bsettings.TEMPLATE_BASE, dict( badge=badge, awards=awards, - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -465,9 +465,9 @@ def staff_tools(request): url = reverse('badger.views.staff_tools') return HttpResponseRedirect(url) - return render_to_response('%s/staff_tools.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/staff_tools.html' % bsettings.TEMPLATE_BASE, dict( grant_form=grant_form - ), context_instance=RequestContext(request)) + )) @require_GET @@ -475,9 +475,9 @@ def badges_by_user(request, username): """Badges created by user""" user = get_object_or_404(User, username=username) badges = Badge.objects.filter(creator=user) - return render_to_response('%s/badges_by_user.html' % bsettings.TEMPLATE_BASE, dict( + return render(request, '%s/badges_by_user.html' % bsettings.TEMPLATE_BASE, dict( user=user, badge_list=badges, - ), context_instance=RequestContext(request)) + )) @require_http_methods(['GET', 'POST']) @@ -501,9 +501,8 @@ def nomination_detail(request, slug, id, format="html"): 'badger.views.nomination_detail', args=(slug, id))) - return render_to_response('%s/nomination_detail.html' % bsettings.TEMPLATE_BASE, - dict(badge=badge, nomination=nomination,), - context_instance=RequestContext(request)) + return render(request, '%s/nomination_detail.html' % bsettings.TEMPLATE_BASE, + dict(badge=badge, nomination=nomination,)) @require_http_methods(['GET', 'POST']) @@ -542,6 +541,5 @@ def nominate_for(request, slug): return HttpResponseRedirect(reverse('badger.views.detail', args=(badge.slug,))) - return render_to_response('%s/badge_nominate_for.html' % bsettings.TEMPLATE_BASE, - dict(form=form, badge=badge,), - context_instance=RequestContext(request)) + return render(request, '%s/badge_nominate_for.html' % bsettings.TEMPLATE_BASE, + dict(form=form, badge=badge,)) diff --git a/tox.ini b/tox.ini index 1f3fc2d..8d4f0dc 100644 --- a/tox.ini +++ b/tox.ini @@ -7,40 +7,47 @@ basepython = python2.6 commands = pip install "Django>=1.4,<1.4.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger [testenv:py27_dj14] basepython = python2.7 commands = pip install "Django>=1.4,<1.4.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger [testenv:py26_dj15] basepython = python2.6 commands = pip install "Django>=1.5,<1.5.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger [testenv:py27_dj15] basepython = python2.7 commands = pip install "Django>=1.5,<1.5.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger [testenv:py26_dj16] basepython = python2.6 commands = pip install "Django>=1.6,<1.6.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger [testenv:py27_dj16] basepython = python2.7 commands = pip install "Django>=1.6,<1.6.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger [testenv:py27_dj17] basepython = python2.7 commands = pip install "Django>=1.7,<1.7.99" pip install -r requirements/dev.txt - {envpython} manage.py test -v2 badger + {envpython} manage.py test badger + + +[testenv:py27_dj18] +basepython = python2.7 +commands = pip install "Django>=1.8,<1.8.99" + pip install -r requirements/dev.txt + {envpython} manage.py test badger From 8e7ebf3badd230ef015f974da44230776a2b6874 Mon Sep 17 00:00:00 2001 From: Mike Cooper Date: Wed, 3 Feb 2016 12:55:48 -0800 Subject: [PATCH 2/3] Update Travis config to run with a bigger matrix. --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2dc01ba..cdf62f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,14 @@ python: env: - DB=mysql DJANGO_VERSION=1.4 - DB=mysql DJANGO_VERSION=1.5 + - DB=mysql DJANGO_VERSION=1.6 + - DB=mysql DJANGO_VERSION=1.7 + - DB=mysql DJANGO_VERSION=1.8 + +matrix: + exclude: + - python: "2.7" + env: DB=mysql DJANGO_VERSION=1.8 before_install: - sudo apt-get update -qq From 78611eb4793a4b0001aa44bf8e2d5e656cb3d04b Mon Sep 17 00:00:00 2001 From: Mike Cooper Date: Wed, 3 Feb 2016 15:04:52 -0800 Subject: [PATCH 3/3] Don't run Travis with Python 2.7 and Django 1.7 or Django 1.8 --- .travis.yml | 4 +++- badger/__init__.py | 2 +- badger/tests/test_views.py | 16 ++++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index cdf62f0..96b218f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,8 +13,10 @@ env: matrix: exclude: - - python: "2.7" + - python: "2.6" env: DB=mysql DJANGO_VERSION=1.8 + - python: "2.6" + env: DB=mysql DJANGO_VERSION=1.7 before_install: - sudo apt-get update -qq diff --git a/badger/__init__.py b/badger/__init__.py index f3e60b3..3c24fad 100644 --- a/badger/__init__.py +++ b/badger/__init__.py @@ -7,7 +7,7 @@ from badger.models import Badge, Award, Progress -# Default settings follow, overridden with BADGER_ prefix in settings.py +# Default settings follow, overridden with BADGER_ prefix in settings.py TEMPLATE_BASE = 'badger' # Skip baking for now (Issue #139) diff --git a/badger/tests/test_views.py b/badger/tests/test_views.py index 314d0e1..d302902 100644 --- a/badger/tests/test_views.py +++ b/badger/tests/test_views.py @@ -65,7 +65,7 @@ def test_badge_detail(self): data = json.loads(r.content) eq_(badge.title, data['name']) eq_(badge.description, data['description']) - eq_('http://testserver%s' % badge.get_absolute_url(), + eq_('http://testserver%s' % badge.get_absolute_url(), data['criteria']) @attr('json') @@ -99,11 +99,11 @@ def test_award_detail(self): .hexdigest()) eq_(recipient_hash, data['recipient']) - eq_('http://testserver%s' % award.get_absolute_url(), + eq_('http://testserver%s' % award.get_absolute_url(), data['evidence']) eq_(award.badge.title, data['badge']['name']) eq_(award.badge.description, data['badge']['description']) - eq_('http://testserver%s' % award.badge.get_absolute_url(), + eq_('http://testserver%s' % award.badge.get_absolute_url(), data['badge']['criteria']) def test_awards_by_user(self): @@ -210,7 +210,7 @@ def test_award_detail_includes_nomination_autoapproved(self): def test_issue_award(self): """Badge creator can issue award to another user""" SAMPLE_DESCRIPTION = u'This is a sample description' - + user1 = self._get_user(username="creator", email="creator@example.com") user2 = self._get_user(username="awardee", email="awardee@example.com") @@ -246,7 +246,7 @@ def test_issue_award(self): award = Award.objects.filter(user=user2, badge=b1)[0] eq_(SAMPLE_DESCRIPTION, award.description) - + r = self.client.get(award.get_absolute_url(), follow=True) eq_(200, r.status_code) @@ -326,7 +326,7 @@ def test_deferred_award_immediate_claim(self): deferred_email = "awardee@example.com" user1 = self._get_user(username="creator", email="creator@example.com") b1 = Badge.objects.create(creator=user1, title="Badge to defer") - + da = DeferredAward(badge=b1, creator=user1) da.save() url = da.get_claim_url() @@ -366,7 +366,7 @@ def test_claim_code_shows_awards_after_claim(self): url = da.get_claim_url() - # Before claim, code URL leads to claim page. + # Before claim, code URL leads to claim page. r = self.client.get(url, follow=False) eq_(200, r.status_code) doc = pq(r.content) @@ -408,7 +408,7 @@ def test_grant_deferred_award(self): deferred_email = "awardee@example.com" user1 = self._get_user(username="creator", email="creator@example.com") b1 = Badge.objects.create(creator=user1, title="Badge to defer") - + da = DeferredAward(badge=b1, creator=user1, email='foobar@example.com') da.save() url = da.get_claim_url()