Update Django to 2.2.27 and drf to 3.13.1

Required some fixes:
- detail_route replaced with action(detail=True)
- base_name replaced with basename
- handler404 requires exception arg
- DjangoObjectPermissionsFilter deprecated and moved to
djangorestframework-guardian, now called ObjectPermissionsFilter
pull/1159/head
Owen Kaluza 2022-03-18 17:51:55 +11:00
rodzic ae917662c9
commit 980ee89501
6 zmienionych plików z 25 dodań i 25 usunięć

Wyświetl plik

@ -1,6 +1,6 @@
from guardian.shortcuts import get_perms, get_users_with_perms, assign_perm, remove_perm from guardian.shortcuts import get_perms, get_users_with_perms, assign_perm, remove_perm
from rest_framework import serializers, viewsets from rest_framework import serializers, viewsets
from rest_framework.decorators import detail_route from rest_framework.decorators import action
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from django.db import transaction from django.db import transaction
@ -53,7 +53,7 @@ class ProjectViewSet(viewsets.ModelViewSet):
return None return None
return super().paginate_queryset(queryset) return super().paginate_queryset(queryset)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def duplicate(self, request, pk=None): def duplicate(self, request, pk=None):
""" """
Duplicate a task Duplicate a task
@ -66,7 +66,7 @@ class ProjectViewSet(viewsets.ModelViewSet):
else: else:
return Response({'error': _("Cannot duplicate project")}, status=status.HTTP_200_OK) return Response({'error': _("Cannot duplicate project")}, status=status.HTTP_200_OK)
@detail_route(methods=['get']) @action(detail=True, methods=['get'])
def permissions(self, request, pk=None): def permissions(self, request, pk=None):
project = get_and_check_project(request, pk, ('change_project', )) project = get_and_check_project(request, pk, ('change_project', ))
@ -81,7 +81,7 @@ class ProjectViewSet(viewsets.ModelViewSet):
result.sort(key=lambda r: r['owner'], reverse=True) result.sort(key=lambda r: r['owner'], reverse=True)
return Response(result, status=status.HTTP_200_OK) return Response(result, status=status.HTTP_200_OK)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def edit(self, request, pk=None): def edit(self, request, pk=None):
project = get_and_check_project(request, pk, ('change_project', )) project = get_and_check_project(request, pk, ('change_project', ))
@ -135,4 +135,4 @@ class ProjectViewSet(viewsets.ModelViewSet):
except AttributeError as e: except AttributeError as e:
return Response({'error': _("Invalid permissions")}, status=status.HTTP_400_BAD_REQUEST) return Response({'error': _("Invalid permissions")}, status=status.HTTP_400_BAD_REQUEST)
return Response({'success': True}, status=status.HTTP_200_OK) return Response({'success': True}, status=status.HTTP_200_OK)

Wyświetl plik

@ -10,7 +10,7 @@ from django.db import transaction
from django.http import FileResponse from django.http import FileResponse
from django.http import HttpResponse from django.http import HttpResponse
from rest_framework import status, serializers, viewsets, filters, exceptions, permissions, parsers from rest_framework import status, serializers, viewsets, filters, exceptions, permissions, parsers
from rest_framework.decorators import detail_route from rest_framework.decorators import action
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
@ -117,19 +117,19 @@ class TaskViewSet(viewsets.ViewSet):
return Response({'success': True}) return Response({'success': True})
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def cancel(self, *args, **kwargs): def cancel(self, *args, **kwargs):
return self.set_pending_action(pending_actions.CANCEL, *args, **kwargs) return self.set_pending_action(pending_actions.CANCEL, *args, **kwargs)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def restart(self, *args, **kwargs): def restart(self, *args, **kwargs):
return self.set_pending_action(pending_actions.RESTART, *args, **kwargs) return self.set_pending_action(pending_actions.RESTART, *args, **kwargs)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def remove(self, *args, **kwargs): def remove(self, *args, **kwargs):
return self.set_pending_action(pending_actions.REMOVE, *args, perms=('delete_project', ), **kwargs) return self.set_pending_action(pending_actions.REMOVE, *args, perms=('delete_project', ), **kwargs)
@detail_route(methods=['get']) @action(detail=True, methods=['get'])
def output(self, request, pk=None, project_pk=None): def output(self, request, pk=None, project_pk=None):
""" """
Retrieve the console output for this task. Retrieve the console output for this task.
@ -165,7 +165,7 @@ class TaskViewSet(viewsets.ViewSet):
serializer = TaskSerializer(task) serializer = TaskSerializer(task)
return Response(serializer.data) return Response(serializer.data)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def commit(self, request, pk=None, project_pk=None): def commit(self, request, pk=None, project_pk=None):
""" """
Commit a task after all images have been uploaded Commit a task after all images have been uploaded
@ -188,7 +188,7 @@ class TaskViewSet(viewsets.ViewSet):
serializer = TaskSerializer(task) serializer = TaskSerializer(task)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def upload(self, request, pk=None, project_pk=None): def upload(self, request, pk=None, project_pk=None):
""" """
Add images to a task Add images to a task
@ -216,7 +216,7 @@ class TaskViewSet(viewsets.ViewSet):
return Response({'success': True}, status=status.HTTP_200_OK) return Response({'success': True}, status=status.HTTP_200_OK)
@detail_route(methods=['post']) @action(detail=True, methods=['post'])
def duplicate(self, request, pk=None, project_pk=None): def duplicate(self, request, pk=None, project_pk=None):
""" """
Duplicate a task Duplicate a task

Wyświetl plik

@ -18,14 +18,14 @@ from webodm import settings
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'projects', ProjectViewSet) router.register(r'projects', ProjectViewSet)
router.register(r'processingnodes', ProcessingNodeViewSet) router.register(r'processingnodes', ProcessingNodeViewSet)
router.register(r'presets', PresetViewSet, base_name='presets') router.register(r'presets', PresetViewSet, basename='presets')
tasks_router = routers.NestedSimpleRouter(router, r'projects', lookup='project') tasks_router = routers.NestedSimpleRouter(router, r'projects', lookup='project')
tasks_router.register(r'tasks', TaskViewSet, base_name='projects-tasks') tasks_router.register(r'tasks', TaskViewSet, basename='projects-tasks')
admin_router = routers.DefaultRouter() admin_router = routers.DefaultRouter()
admin_router.register(r'admin/users', AdminUserViewSet, base_name='admin-users') admin_router.register(r'admin/users', AdminUserViewSet, basename='admin-users')
admin_router.register(r'admin/groups', AdminGroupViewSet, base_name='admin-groups') admin_router.register(r'admin/groups', AdminGroupViewSet, basename='admin-groups')
urlpatterns = [ urlpatterns = [
url(r'processingnodes/options/$', ProcessingNodeOptionsView.as_view()), url(r'processingnodes/options/$', ProcessingNodeOptionsView.as_view()),

Wyświetl plik

@ -151,8 +151,8 @@ def welcome(request):
}) })
def handler404(request): def handler404(request, exception):
return render(request, '404.html', status=404) return render(request, '404.html', status=404)
def handler500(request): def handler500(request):
return render(request, '500.html', status=500) return render(request, '500.html', status=500)

Wyświetl plik

@ -3,20 +3,21 @@ appdirs==1.4.0
APScheduler==3.2.0 APScheduler==3.2.0
billiard==3.6.3.0 billiard==3.6.3.0
celery==4.4.0 celery==4.4.0
coreapi==2.0.9 coreapi>=2.3.3
Django==2.1.15 Django==2.2.27
django-appconf==1.0.2 django-appconf==1.0.2
django-codemirror2==0.2 django-codemirror2==0.2
django-colorfield==0.1.15 django-colorfield==0.1.15
django-compressor==2.2 django-compressor==2.2
django-cors-headers==3.0.2 django-cors-headers==3.0.2
django-filter==2.0.0 django-filter==2.4.0
django-guardian==1.4.9 django-guardian==1.4.9
django-imagekit==4.0.1 django-imagekit==4.0.1
django-libsass==0.7 django-libsass==0.7
django-webpack-loader==0.6.0 django-webpack-loader==0.6.0
djangorestframework==3.9.1 djangorestframework==3.13.1
djangorestframework-jwt==1.9.0 djangorestframework-jwt==1.9.0
djangorestframework-guardian==0.3.0
drf-nested-routers==0.11.1 drf-nested-routers==0.11.1
funcsigs==1.0.2 funcsigs==1.0.2
futures==3.1.1 futures==3.1.1
@ -33,7 +34,6 @@ piexif==1.0.13
pilkit==2.0 pilkit==2.0
Pillow==8.3.2 Pillow==8.3.2
pip-autoremove==0.9.0 pip-autoremove==0.9.0
psycopg2==2.8.6
psycopg2-binary==2.8.6 psycopg2-binary==2.8.6
PyJWT==1.5.3 PyJWT==1.5.3
pyodm==1.5.9 pyodm==1.5.9

Wyświetl plik

@ -311,7 +311,7 @@ REST_FRAMEWORK = {
'rest_framework.permissions.DjangoObjectPermissions', 'rest_framework.permissions.DjangoObjectPermissions',
], ],
'DEFAULT_FILTER_BACKENDS': [ 'DEFAULT_FILTER_BACKENDS': [
'rest_framework.filters.DjangoObjectPermissionsFilter', 'rest_framework_guardian.filters.ObjectPermissionsFilter',
'django_filters.rest_framework.DjangoFilterBackend', 'django_filters.rest_framework.DjangoFilterBackend',
'rest_framework.filters.OrderingFilter', 'rest_framework.filters.OrderingFilter',
], ],