Merge lp:~cjwatson/isitdeployable/django-1.11 into lp:isitdeployable

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 285
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: lp:~cjwatson/isitdeployable/django-1.11
Merge into: lp:isitdeployable
Diff against target: 351 lines (+77/-77)
11 files modified
Makefile.db (+0/-1)
Makefile.docker (+0/-1)
checklist/urls.py (+11/-9)
dependencies.txt (+0/-1)
django_project/settings_base.py (+14/-12)
django_project/urls.py (+13/-10)
requirements.txt (+7/-8)
revtracker/data.py (+2/-2)
revtracker/tests/test_views_logged_in.py (+6/-10)
revtracker/urls.py (+23/-21)
setup.py (+1/-2)
To merge this branch: bzr merge lp:~cjwatson/isitdeployable/django-1.11
Reviewer Review Type Date Requested Status
Ricardo Kirkner (community) Approve
Review via email: mp+336882@code.launchpad.net

Commit message

Upgrade to Django 1.11.

Description of the change

I seem to be on a roll, so let's keep going (but I think this is probably about it for now). This was straightforward enough that I decided to go all the way to the next Django LTS. I've done the usual manual testing of behaviour with both bzr and git projects, as well as ensuring that "make docker-test" passes.

Requires https://code.launchpad.net/~cjwatson/isitdeployable-dependencies/django-1.11/+merge/336881.

To post a comment you must log in.
Revision history for this message
Ricardo Kirkner (ricardokirkner) wrote :

LGTM

review: Approve
285. By Colin Watson

Merge trunk.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Makefile.db'
--- Makefile.db 2017-09-08 12:27:04 +0000
+++ Makefile.db 2018-01-31 14:39:16 +0000
@@ -35,7 +35,6 @@
3535
36start-db:36start-db:
37 $(MAKE) setup-db37 $(MAKE) setup-db
38 $(DJANGO_MANAGE) syncdb --noinput # TODO: Remove once south is dropped.
39 $(MAKE) migrate38 $(MAKE) migrate
4039
41stop-db:40stop-db:
4241
=== modified file 'Makefile.docker'
--- Makefile.docker 2018-01-31 13:04:52 +0000
+++ Makefile.docker 2018-01-31 14:39:16 +0000
@@ -63,7 +63,6 @@
63app-update-db: DB_USER=$(shell echo $(DATABASE_URL) | cut -d ':' -f 2 | cut -d '@' -f 1 | sed -e 's|//||')63app-update-db: DB_USER=$(shell echo $(DATABASE_URL) | cut -d ':' -f 2 | cut -d '@' -f 1 | sed -e 's|//||')
64app-update-db: export DATABASE_URL=$(ADMIN_DATABASE_URL)64app-update-db: export DATABASE_URL=$(ADMIN_DATABASE_URL)
65app-update-db:65app-update-db:
66 $(MAKE) manage ARGS='syncdb --noinput' PYTHON=python
67 $(MAKE) manage ARGS='migrate --noinput' PYTHON=python66 $(MAKE) manage ARGS='migrate --noinput' PYTHON=python
68 $(MAKE) manage ARGS='grantuser $(DB_USER)' PYTHON=python67 $(MAKE) manage ARGS='grantuser $(DB_USER)' PYTHON=python
6968
7069
=== modified file 'checklist/urls.py'
--- checklist/urls.py 2014-03-27 20:10:52 +0000
+++ checklist/urls.py 2018-01-31 14:39:16 +0000
@@ -1,10 +1,12 @@
1from django.conf.urls import patterns, include, url1from django.conf.urls import include, url
22
3api_v1_urls = patterns('checklist.views',3from checklist import views
4 url(r'^step/(?P<step_id>\d+)/\+set-description$', 'api_v1_step_set_description', name="api_v1_step_set_description"),4
5)5api_v1_urls = [
66 url(r'^step/(?P<step_id>\d+)/\+set-description$', views.api_v1_step_set_description, name="api_v1_step_set_description"),
77]
8urlpatterns = patterns('checklist.views',8
9
10urlpatterns = [
9 url(r'^api/v1/', include(api_v1_urls)),11 url(r'^api/v1/', include(api_v1_urls)),
10)12]
1113
=== modified file 'dependencies.txt'
--- dependencies.txt 2018-01-30 15:33:52 +0000
+++ dependencies.txt 2018-01-31 14:39:16 +0000
@@ -32,7 +32,6 @@
32python-paste32python-paste
33python-piston-mini-client33python-piston-mini-client
34python-polib34python-polib
35python-psycopg2
36python-pygooglechart35python-pygooglechart
37python-reportlab36python-reportlab
38python-restrictedpython37python-restrictedpython
3938
=== modified file 'django_project/settings_base.py'
--- django_project/settings_base.py 2018-01-29 15:34:06 +0000
+++ django_project/settings_base.py 2018-01-31 14:39:16 +0000
@@ -50,7 +50,6 @@
50 'django.contrib.messages',50 'django.contrib.messages',
51 'django.contrib.staticfiles',51 'django.contrib.staticfiles',
52 'django.contrib.admin',52 'django.contrib.admin',
53 'devserver',
54 'django_comments',53 'django_comments',
55 'django_openid_auth',54 'django_openid_auth',
56 'djcelery',55 'djcelery',
@@ -126,17 +125,20 @@
126 'django.contrib.staticfiles.finders.FileSystemFinder',125 'django.contrib.staticfiles.finders.FileSystemFinder',
127 'django.contrib.staticfiles.finders.AppDirectoriesFinder',126 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
128)127)
129TEMPLATE_CONTEXT_PROCESSORS = (128TEMPLATES = [
130 "django.contrib.auth.context_processors.auth",129 {
131 "django.core.context_processors.csrf",130 'BACKEND': 'django.template.backends.django.DjangoTemplates',
132 "django.core.context_processors.static",131 'APP_DIRS': True,
133 "django.core.context_processors.request",132 'OPTIONS': {
134)133 'context_processors': [
135TEMPLATE_LOADERS = (134 'django.contrib.auth.context_processors.auth',
136 'django.template.loaders.filesystem.Loader',135 'django.template.context_processors.csrf',
137 'django.template.loaders.app_directories.Loader',136 'django.template.context_processors.static',
138 'django.template.loaders.eggs.Loader',137 'django.template.context_processors.request',
139)138 ],
139 },
140 },
141]
140TEST_RUNNER = 'django.test.runner.DiscoverRunner'142TEST_RUNNER = 'django.test.runner.DiscoverRunner'
141TIME_ZONE = 'UTC'143TIME_ZONE = 'UTC'
142USE_I18N = True144USE_I18N = True
143145
=== modified file 'django_project/urls.py'
--- django_project/urls.py 2016-01-27 04:23:46 +0000
+++ django_project/urls.py 2018-01-31 14:39:16 +0000
@@ -1,28 +1,31 @@
1from django.conf import settings1from django.conf import settings
2from django.contrib import admin2from django.contrib import admin
3from django.conf.urls import patterns, include, url3from django.conf.urls import include, url
4from django.contrib.staticfiles.urls import staticfiles_urlpatterns4from django.contrib.staticfiles.urls import staticfiles_urlpatterns
5from django.views.generic import RedirectView5from django.views.generic import RedirectView
6from django.views.static import serve
6import django_openid_auth.urls7import django_openid_auth.urls
78
8import djcelery9import djcelery
9djcelery.setup_loader()10djcelery.setup_loader()
1011
12from revtracker import views
13
11admin.autodiscover()14admin.autodiscover()
1215
13urlpatterns = patterns('',16urlpatterns = [
14 url(r'^', include('revtracker.urls')),17 url(r'^', include('revtracker.urls')),
15 url(r'^admin/', include(admin.site.urls)),18 url(r'^admin/', include(admin.site.urls)),
16 url(r'^openid/', include(django_openid_auth.urls)),19 url(r'^openid/', include(django_openid_auth.urls)),
17 url(r'^checklist/', include('checklist.urls')),20 url(r'^checklist/', include('checklist.urls')),
18 # combo view for serving css outside dev/ prefi21 # combo view for serving css outside dev/ prefix
19 url(r'^combo/rev-\w+/$', 'revtracker.views.combo_view', name='dpa-combo-link'),22 url(r'^combo/rev-\w+/$', views.combo_view, name='dpa-combo-link'),
20 url(r'^combo/$', 'revtracker.views.combo_view', name='dpa-combo'),23 url(r'^combo/$', views.combo_view, name='dpa-combo'),
21 (r'^favicon\.ico$', RedirectView.as_view(url='%s/favicon.ico' % settings.STATIC_URL)),24 url(r'^favicon\.ico$', RedirectView.as_view(url='%s/favicon.ico' % settings.STATIC_URL)),
22)25]
2326
24urlpatterns += patterns('',27urlpatterns += [
25 (r'^assets/(.*)', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),28 url(r'^assets/(.*)', serve, {'document_root': settings.STATIC_ROOT}),
26)29]
2730
28urlpatterns += staticfiles_urlpatterns()31urlpatterns += staticfiles_urlpatterns()
2932
=== modified file 'requirements.txt'
--- requirements.txt 2018-01-30 15:33:52 +0000
+++ requirements.txt 2018-01-31 14:39:16 +0000
@@ -7,18 +7,17 @@
7bson==0.3.37bson==0.3.3
8celery==3.1.238celery==3.1.23
9convoy==0.2.49convoy==0.2.4
10Django==1.8.1810Django==1.11.9
11django-celery==3.1.1711django-celery==3.2.2
12django-contrib-comments==1.8.012django-contrib-comments==1.8.0
13django-debug-toolbar==1.9.113django-debug-toolbar==1.9.1
14django-devserver==0.7.0
15django-getenv==1.3.114django-getenv==1.3.1
16django-kombu==0.9.415django-kombu==0.9.4
17django-openid-auth==0.916django-openid-auth==0.14
18django-ordered-model==1.1.017django-ordered-model==1.4.3
19django-picklefield==0.2.118django-picklefield==0.2.1
20django-pgtools==0.219django-pgtools==0.4.2
21django-waffle==0.10.120django-waffle==0.13.0
22dj-database-url==0.4.221dj-database-url==0.4.2
23gorun==1.722gorun==1.7
24gunicorn==19.3.023gunicorn==19.3.0
@@ -37,7 +36,7 @@
37oops-dictconfig==0.0.236oops-dictconfig==0.0.2
38oops-wsgi==0.0.1137oops-wsgi==0.0.11
39Paste==1.7.5.138Paste==1.7.5.1
40psycopg2==2.4.539psycopg2==2.7.3.2
41pybars==0.0.440pybars==0.0.4
42pygit2==0.24.241pygit2==0.24.2
43PyMeta==0.5.042PyMeta==0.5.0
4443
=== modified file 'revtracker/data.py'
--- revtracker/data.py 2018-01-29 15:34:06 +0000
+++ revtracker/data.py 2018-01-31 14:39:16 +0000
@@ -341,8 +341,8 @@
341def deployment_requests(status=DeploymentRequest.STATUS_WAITING):341def deployment_requests(status=DeploymentRequest.STATUS_WAITING):
342 requests = DeploymentRequest.objects.filter(342 requests = DeploymentRequest.objects.filter(
343 status=status,343 status=status,
344 ).select_related('project__name', 'deploy_revision__revno',344 ).select_related('project', 'deploy_revision',
345 'requester__username', 'completer__username',345 'requester', 'completer',
346 )346 )
347 if status == DeploymentRequest.STATUS_WAITING:347 if status == DeploymentRequest.STATUS_WAITING:
348 requests = requests.order_by('-date_created')348 requests = requests.order_by('-date_created')
349349
=== modified file 'revtracker/tests/test_views_logged_in.py'
--- revtracker/tests/test_views_logged_in.py 2018-01-29 14:57:56 +0000
+++ revtracker/tests/test_views_logged_in.py 2018-01-31 14:39:16 +0000
@@ -2,6 +2,7 @@
2import soupmatchers2import soupmatchers
33
4from django.core.urlresolvers import reverse4from django.core.urlresolvers import reverse
5from django.test import override_settings
56
6from revtracker.models import Project, Revision7from revtracker.models import Project, Revision
7from revtracker.tests import (8from revtracker.tests import (
@@ -19,10 +20,9 @@
19 )20 )
2021
2122
23@override_settings(ROOT_URLCONF='revtracker.urls')
22class IndexViewTests(TestCase):24class IndexViewTests(TestCase):
2325
24 urls = 'revtracker.urls'
25
26 def setUp(self):26 def setUp(self):
27 super(IndexViewTests, self).setUp()27 super(IndexViewTests, self).setUp()
28 self.create_user_and_log_in()28 self.create_user_and_log_in()
@@ -110,10 +110,9 @@
110 text=re.compile("0 revisions need QA")))))110 text=re.compile("0 revisions need QA")))))
111111
112112
113@override_settings(ROOT_URLCONF='revtracker.urls')
113class ProjectViewTests(TestCase):114class ProjectViewTests(TestCase):
114115
115 urls = 'revtracker.urls'
116
117 def setUp(self):116 def setUp(self):
118 super(ProjectViewTests, self).setUp()117 super(ProjectViewTests, self).setUp()
119 self.create_user_and_log_in()118 self.create_user_and_log_in()
@@ -295,10 +294,9 @@
295 html_matches=ProjectUpdateDeployedRevisionForm(project)))294 html_matches=ProjectUpdateDeployedRevisionForm(project)))
296295
297296
297@override_settings(ROOT_URLCONF='revtracker.urls')
298class ProjectUpdateRevisionTests(TestCase):298class ProjectUpdateRevisionTests(TestCase):
299299
300 urls = 'revtracker.urls'
301
302 def setUp(self):300 def setUp(self):
303 super(ProjectUpdateRevisionTests, self).setUp()301 super(ProjectUpdateRevisionTests, self).setUp()
304 self.create_user_and_log_in()302 self.create_user_and_log_in()
@@ -335,10 +333,9 @@
335 self.assertEqual(revision, project.deployed_revision)333 self.assertEqual(revision, project.deployed_revision)
336334
337335
336@override_settings(ROOT_URLCONF='revtracker.urls')
338class ProjectChangeRevisionStatusTests(TestCase):337class ProjectChangeRevisionStatusTests(TestCase):
339338
340 urls = 'revtracker.urls'
341
342 def setUp(self):339 def setUp(self):
343 super(ProjectChangeRevisionStatusTests, self).setUp()340 super(ProjectChangeRevisionStatusTests, self).setUp()
344 self.create_user_and_log_in()341 self.create_user_and_log_in()
@@ -374,10 +371,9 @@
374 self.assertEqual(400, response.status_code)371 self.assertEqual(400, response.status_code)
375372
376373
374@override_settings(ROOT_URLCONF='revtracker.urls')
377class PersonViewTests(TestCase):375class PersonViewTests(TestCase):
378376
379 urls = 'revtracker.urls'
380
381 def setUp(self):377 def setUp(self):
382 super(PersonViewTests, self).setUp()378 super(PersonViewTests, self).setUp()
383 self.create_user_and_log_in()379 self.create_user_and_log_in()
384380
=== modified file 'revtracker/urls.py'
--- revtracker/urls.py 2018-01-29 15:34:06 +0000
+++ revtracker/urls.py 2018-01-31 14:39:16 +0000
@@ -1,26 +1,28 @@
1from django.conf.urls import patterns, include, url1from django.conf.urls import include, url
2from django_comments import urls as comments_urls2from django_comments import urls as comments_urls
33
4api_v1_urls = patterns('revtracker.views',4from revtracker import views
5 url(r'^project/(?P<project_name>[\w\-]+)$', 'api_v1_project'),5
6 url(r'^project/(?P<project_name>[\w\-]+)/\+set-deployed$', 'api_v1_project_set_deployed'),6
7 url(r'^project/(?P<project_name>[\w\-]+)/\+revision-by-pk/(?P<pk>[\d]+)/\+change-status$', 'api_v1_project_change_revision_status'),7api_v1_urls = [
8 url(r'^project/(?P<project_name>[\w\-]+)/\+set-description$', 'api_v1_project_set_description', name="api_v1_project_set_description"),8 url(r'^project/(?P<project_name>[\w\-]+)$', views.api_v1_project),
9 url(r'^person/(?P<person_name>[\w\.\-]+)$', 'api_v1_person'),9 url(r'^project/(?P<project_name>[\w\-]+)/\+set-deployed$', views.api_v1_project_set_deployed),
10)10 url(r'^project/(?P<project_name>[\w\-]+)/\+revision-by-pk/(?P<pk>[\d]+)/\+change-status$', views.api_v1_project_change_revision_status),
1111 url(r'^project/(?P<project_name>[\w\-]+)/\+set-description$', views.api_v1_project_set_description, name="api_v1_project_set_description"),
12urlpatterns = patterns('revtracker.views',12 url(r'^person/(?P<person_name>[\w\.\-]+)$', views.api_v1_person),
13 url(r'^$', 'index', name="index"),13]
14 url(r'^help$', 'help', name="help"),14
15 url(r'^project/(?P<project_name>[\w\-]+)$', 'project', name="project_view"),15urlpatterns = [
16 url(r'^project/(?P<project_name>[\w\-]+)/\+revision-by-pk/(?P<pk>[\d]+)/\+change-status$', 'project_change_revision_status', name="project_change_revision_status"),16 url(r'^$', views.index, name="index"),
17 url(r'^project/(?P<project_name>[\w\-]+)/\+revision-by-pk/(?P<pk>[\d]+)/\+set-rollback$', 'project_set_revision_rollback', name="project_set_revision_rollback"),17 url(r'^help$', views.help, name="help"),
18 url(r'^project/(?P<project_name>[\w\-]+)/\+deployment-request/(?P<pk>[\d]+)$', 'deployment_request', name="deployment_request"),18 url(r'^project/(?P<project_name>[\w\-]+)$', views.project, name="project_view"),
19 url(r'^project/(?P<project_name>[\w\-]+)/deployment-checklist$', 'project_checklist', name="project_checklist"),19 url(r'^project/(?P<project_name>[\w\-]+)/\+revision-by-pk/(?P<pk>[\d]+)/\+change-status$', views.project_change_revision_status, name="project_change_revision_status"),
20 url(r'^person/(?P<person_name>[\w\.\-]+)$', 'person', name="person_view"),20 url(r'^project/(?P<project_name>[\w\-]+)/\+revision-by-pk/(?P<pk>[\d]+)/\+set-rollback$', views.project_set_revision_rollback, name="project_set_revision_rollback"),
21 url(r'^project/(?P<project_name>[\w\-]+)/\+deployment-request/(?P<pk>[\d]+)$', views.deployment_request, name="deployment_request"),
22 url(r'^project/(?P<project_name>[\w\-]+)/deployment-checklist$', views.project_checklist, name="project_checklist"),
23 url(r'^person/(?P<person_name>[\w\.\-]+)$', views.person, name="person_view"),
21 url(r'^comments/', include(comments_urls)),24 url(r'^comments/', include(comments_urls)),
22 url(r'^deployment-requests/$', 'deployment_requests', name="deployment_requests"),25 url(r'^deployment-requests/$', views.deployment_requests, name="deployment_requests"),
2326
24 url(r'^api/v1/', include(api_v1_urls)),27 url(r'^api/v1/', include(api_v1_urls)),
25)28]
26
2729
=== modified file 'setup.py'
--- setup.py 2018-01-29 15:34:06 +0000
+++ setup.py 2018-01-31 14:39:16 +0000
@@ -7,7 +7,7 @@
7 author_email="canonical-consumer-applications@lists.launchpad.net",7 author_email="canonical-consumer-applications@lists.launchpad.net",
8 license="AGPL3",8 license="AGPL3",
9 install_requires=[9 install_requires=[
10 'Django>=1.8',10 'Django==1.11.*',
11 'soupmatchers==0.2',11 'soupmatchers==0.2',
12 'testtools',12 'testtools',
13 'django-contrib-comments',13 'django-contrib-comments',
@@ -23,7 +23,6 @@
23 'Markdown',23 'Markdown',
24 'psycopg2',24 'psycopg2',
25 'django-waffle',25 'django-waffle',
26 'django-devserver',
27 'django-ordered-model',26 'django-ordered-model',
28 'django-pgtools',27 'django-pgtools',
29 'werkzeug',28 'werkzeug',

Subscribers

People subscribed via source and target branches