Skip to content

Commit b991107

Browse files
authored
Update django version to 2.2.9 (#578)
* Update django version to 2.2.9 * Replace django.core.urlresolvers with django.urls * Replace --exit with --check * Replace filter_class with filterset_class * Update django-filter and django-nose * Update error handler views to accept exception argument * Update django version in docs-requirements.txt * Update urls usage to work with django2.2 * Add app_name for orchestra * Replace MIDDLEWARE_CLASSES with MIDDLEWARE * Update migrations check * Add set atomic=False * Add renderer argument * Replace name with field_name in filters * Fix tests * Fix linting error * Add --dry-run to migrations check * Update django-bitfield to 2.0.1 * Update ajax-selects version
1 parent a1ed03f commit b991107

30 files changed

+67
-46
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ lint:
1414
flake8 . # && isort --check-only --recursive .
1515
gulp lint --production
1616
!(find . -wholename '**migrations**/*.py' -print0 | xargs -0 grep 'RemoveField\|DeleteModel\|AlterModelTable\|AlterUniqueTogether\|RunSQL\|RunPython\|SeparateDatabaseAndState' | grep -v '# manually-reviewed') || { echo "Migrations need to be manually reviewed!"; exit 1; }
17-
!(cd example_project && python3 manage.py makemigrations --dry-run --exit) || { printf "Migrations need to be created. Try: \n\t python3 manage.py makemigrations\n"; exit 1; }
17+
cd example_project && python3 manage.py makemigrations --dry-run --check || { printf "Migrations need to be created. Try: \n\t python3 manage.py makemigrations\n"; exit 1; }
1818

1919
test: lint
2020
cd example_project && python3 $(TEST_CMD)

docs-requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Packages needed to build docs on https://readthedocs.org
2-
Django==1.11.10
2+
Django==2.2.9
33
Sphinx==1.6.3
44
sphinx-autobuild==0.7.1
55
sphinxcontrib-httpdomain==1.5.0

example_project/example_project/settings.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,11 @@
5555
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
5656
)
5757

58-
MIDDLEWARE_CLASSES = (
58+
MIDDLEWARE = (
5959
'django.contrib.sessions.middleware.SessionMiddleware',
6060
'django.middleware.common.CommonMiddleware',
6161
'django.middleware.csrf.CsrfViewMiddleware',
6262
'django.contrib.auth.middleware.AuthenticationMiddleware',
63-
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
6463
'django.contrib.messages.middleware.MessageMiddleware',
6564
'django.middleware.clickjacking.XFrameOptionsMiddleware',
6665
'django.middleware.security.SecurityMiddleware',

orchestra/accounts/bitformfield.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def render(self, *args, **kwargs):
2626

2727
class BitFieldCheckboxSelectMultiple(CheckboxSelectMultipleP):
2828

29-
def render(self, name, value, attrs=None):
29+
def render(self, name, value, attrs=None, renderer=None):
3030
if isinstance(value, BitHandler):
3131
value = [k for k, v in value if v]
3232
return super().render(name, value, attrs=attrs)

orchestra/accounts/tests/test_register.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.contrib.auth import get_user_model
2-
from django.core.urlresolvers import reverse
2+
from django.urls import reverse
33
from rest_framework import status
44

55
from orchestra.models import Worker

orchestra/accounts/tests/test_views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from unittest.mock import patch
22

3-
from django.core.urlresolvers import reverse
3+
from django.urls import reverse
44

55
from orchestra.models import CommunicationPreference
66
from orchestra.tests.helpers import OrchestraAuthenticatedTestCase

orchestra/admin.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from bitfield.admin import BitFieldListFilter
55
from bitfield.forms import BitFieldCheckboxSelectMultiple
66
from django.contrib import admin
7-
from django.core.urlresolvers import reverse
7+
from django.urls import reverse
88
from django.utils.html import format_html
99
from phonenumber_field.modelfields import PhoneNumberField
1010
from phonenumber_field.widgets import PhoneNumberPrefixWidget

orchestra/api_urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
from orchestra.views import update_timer
2222
from orchestra.views import upload_image
2323

24+
app_name = 'api'
25+
2426
urlpatterns = [
2527
# Interface API
2628
url(r'^interface/dashboard_tasks/$',

orchestra/bots/staffbot.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33

44
from django.conf import settings
5-
from django.core.urlresolvers import reverse
5+
from django.urls import reverse
66
from django.db.models import Q
77
from django.template.loader import render_to_string
88

orchestra/bots/tests/test_views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from unittest.mock import patch
22

3-
from django.core.urlresolvers import reverse
3+
from django.urls import reverse
44
from django.test import Client as RequestClient
55
from django.test import override_settings
66

orchestra/bots/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from orchestra.bots.views import StaffBotView
44

5+
app_name = 'bots'
6+
57
urlpatterns = [
68
url(r'^staffbot/$',
79
StaffBotView.as_view(), name='staffbot'),

orchestra/communication/staffing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from annoying.functions import get_object_or_None
22
from collections import defaultdict
33
from django.conf import settings
4-
from django.core.urlresolvers import reverse
4+
from django.urls import reverse
55
from django.db import transaction
66
from django.db.models import Q
77
from django.utils import timezone

orchestra/communication/tests/test_views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from django.core.urlresolvers import reverse
1+
from django.urls import reverse
22

33
from orchestra.tests.helpers import OrchestraAuthenticatedTestCase
44
from orchestra.tests.helpers.fixtures import StaffingResponseFactory

orchestra/communication/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from orchestra.communication.views import available_staffing_requests
55
from orchestra.communication.views import reject_staffing_request_inquiry
66

7+
app_name = 'communication'
8+
79
urlpatterns = [
810
# Interface API
911
url(r'^accept_staffing_request_inquiry/(?P<staffing_request_inquiry_id>[0-9]+)/$', # noqa

orchestra/filters.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55

66
class TimeEntryFilter(django_filters.FilterSet):
7-
min_date = django_filters.DateFilter(name='date', lookup_expr='gte')
8-
max_date = django_filters.DateFilter(name='date', lookup_expr='lte')
7+
min_date = django_filters.DateFilter(field_name='date', lookup_expr='gte')
8+
max_date = django_filters.DateFilter(field_name='date', lookup_expr='lte')
99

1010
class Meta:
1111
model = TimeEntry

orchestra/interface_api/project_management/project_management.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from urllib.parse import urljoin
33

44
from django.conf import settings
5-
from django.core import urlresolvers
5+
from django import urls
66
from django.utils import timezone
77

88
from orchestra.communication.slack import OrchestraSlackService
@@ -19,28 +19,28 @@ def project_management_information(project_id):
1919
Project.STATUS_CHOICES).get(project.status, None)
2020
project_information[project.id]['project']['admin_url'] = urljoin(
2121
settings.ORCHESTRA_URL,
22-
urlresolvers.reverse(
22+
urls.reverse(
2323
'admin:orchestra_project_change',
2424
args=(project_id,)))
2525

2626
for slug, task in project_information[project.id]['tasks'].items():
2727
task['admin_url'] = urljoin(
2828
settings.ORCHESTRA_URL,
29-
urlresolvers.reverse(
29+
urls.reverse(
3030
'admin:orchestra_task_change',
3131
args=(task['id'],)))
3232

3333
for assignment in task['assignments']:
3434
assignment['admin_url'] = urljoin(
3535
settings.ORCHESTRA_URL,
36-
urlresolvers.reverse(
36+
urls.reverse(
3737
'admin:orchestra_taskassignment_change',
3838
args=(assignment['id'],)))
3939

4040
for iteration in assignment['iterations']:
4141
iteration['admin_url'] = urljoin(
4242
settings.ORCHESTRA_URL,
43-
urlresolvers.reverse(
43+
urls.reverse(
4444
'admin:orchestra_iteration_change',
4545
args=(iteration['id'],)))
4646
if not iteration['end_datetime']:

orchestra/interface_api/project_management/tests/test_project_management_api.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from django.conf import settings
55
from django.contrib.auth.models import Group
6-
from django.core.urlresolvers import reverse
6+
from django.urls import reverse
77
from django.test import Client
88
from django.test import override_settings
99

orchestra/interface_api/project_management/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from orchestra.interface_api.project_management import views
44

5+
app_name = 'project_management'
6+
57
urlpatterns = [
68
url(r'^projects/$',
79
views.ProjectList.as_view(),

orchestra/lookups.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from ajax_select import LookupChannel
22
from ajax_select import register
33
from django.contrib.auth import get_user_model
4-
from django.core.urlresolvers import reverse
4+
from django.urls import reverse
55
from django.db.models import Q
66
from django.utils.html import escape
77

orchestra/migrations/0060_auto_20160505_1349.py

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77

88
class Migration(migrations.Migration):
9+
atomic = False
910

1011
dependencies = [
1112
('orchestra', '0059_step_description_function'),

orchestra/project_api/tests/test_project_api.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from django.conf import settings
55
from django.contrib.auth.models import AnonymousUser
6-
from django.core.urlresolvers import reverse
6+
from django.urls import reverse
77
from django.test import override_settings
88
from rest_framework.exceptions import AuthenticationFailed
99
from rest_framework.test import APIClient

orchestra/project_api/views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from urllib.parse import urlparse
33
from urllib.parse import urlunsplit
44

5-
from django.core.urlresolvers import reverse
5+
from django.urls import reverse
66
from jsonview.exceptions import BadRequest
77

88
from orchestra.core.errors import TaskAssignmentError

orchestra/tests/test_dashboard.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -304,13 +304,13 @@ def test_submit_entry_level_task_assignment(self):
304304
# user 0 can't submit a task if its submission prerequisites aren't
305305
# complete
306306
step = task.step
307-
step.submission_depends_on = [
307+
step.submission_depends_on.set([
308308
Step.objects.create(
309309
workflow_version=step.workflow_version,
310310
slug='imaginary_test_step',
311311
is_human=True,
312312
)
313-
]
313+
])
314314
step.save()
315315
response = self._submit_assignment(
316316
self.clients[0], task.id)

orchestra/tests/test_todos.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from django.utils import timezone
44
from dateutil.parser import parse
5-
from django.core.urlresolvers import reverse
5+
from django.urls import reverse
66

77
from orchestra.models import Task
88
from orchestra.models import Todo

orchestra/tests/test_views.py

+17-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import datetime
22
import json
3-
from unittest.mock import MagicMock
3+
44
from unittest.mock import patch
55

6-
from django.core.urlresolvers import reverse
6+
from django.urls import reverse
77
from django.utils import timezone
8+
from django.test import RequestFactory
9+
from django.contrib.sessions.middleware import SessionMiddleware
810

911
from orchestra.core.errors import TimerError
1012
from orchestra.models import Task
@@ -238,19 +240,26 @@ def test_get_timer(self, mock_get):
238240

239241
class TestErrorViews(OrchestraTestCase):
240242

241-
def assert_error_view(self, handler, status_code):
242-
request = MagicMock()
243-
response = handler(request)
243+
def assert_error_view(self, handler, status_code, exception=None):
244+
request = RequestFactory().get('/')
245+
middleware = SessionMiddleware()
246+
middleware.process_request(request)
247+
request.session.save()
248+
249+
if exception:
250+
response = handler(request, exception)
251+
else:
252+
response = handler(request)
244253
self.assertEqual(response.status_code, status_code)
245254

246255
def test_bad_request(self):
247-
self.assert_error_view(bad_request, 400)
256+
self.assert_error_view(bad_request, 400, exception=Exception())
248257

249258
def test_forbidden(self):
250-
self.assert_error_view(forbidden, 403)
259+
self.assert_error_view(forbidden, 403, exception=Exception())
251260

252261
def test_not_found(self):
253-
self.assert_error_view(not_found, 404)
262+
self.assert_error_view(not_found, 404, exception=Exception())
254263

255264
def test_internal_server_error(self):
256265
self.assert_error_view(internal_server_error, 500)

orchestra/todos/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from orchestra.todos.views import TodoListTemplateList
99
import orchestra.todos.views as views
1010

11+
app_name = 'todos'
12+
1113
urlpatterns = [
1214
url(r'^todo/$',
1315
TodoList.as_view(), name='todos'),

orchestra/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from orchestra.views import index
55
from orchestra.views import status
66

7+
app_name = 'orchestra'
8+
79
urlpatterns = [
810
url(r'^api/',
911
include('orchestra.api_urls', namespace='orchestra')),

orchestra/utils/notifications.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from urllib.parse import urljoin
22

33
from django.conf import settings
4-
from django.core.urlresolvers import reverse
4+
from django.urls import reverse
55

66
from orchestra.communication.mail import send_mail
77
from orchestra.communication.slack import OrchestraSlackService

orchestra/views.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -301,23 +301,23 @@ def error_handler(request, error_code, context):
301301

302302

303303
@requires_csrf_token
304-
def bad_request(request):
304+
def bad_request(request, exception):
305305
error_code = http_status.HTTP_400_BAD_REQUEST
306306
return error_handler(request, error_code, context={
307307
'page_title': '400 Bad Request',
308308
})
309309

310310

311311
@requires_csrf_token
312-
def forbidden(request):
312+
def forbidden(request, exception):
313313
error_code = http_status.HTTP_403_FORBIDDEN
314314
return error_handler(request, error_code, context={
315315
'page_title': '403 Forbidden',
316316
})
317317

318318

319319
@requires_csrf_token
320-
def not_found(request):
320+
def not_found(request, exception):
321321
error_code = http_status.HTTP_404_NOT_FOUND
322322
return error_handler(request, error_code, context={
323323
'page_title': '404 Not Found',
@@ -336,7 +336,7 @@ class TimeEntryList(generics.ListCreateAPIView):
336336
permission_classes = (permissions.IsAuthenticated,)
337337
serializer_class = TimeEntrySerializer
338338
filter_backends = (filters.DjangoFilterBackend,)
339-
filter_class = TimeEntryFilter
339+
filterset_class = TimeEntryFilter
340340

341341
def get_queryset(self):
342342
"""

0 commit comments

Comments
 (0)