kopia lustrzana https://github.com/OpenDroneMap/WebODM
Merge pull request #1159 from AuScalableDroneCloud/swagger
Swagger and Django,DRF versionpull/1162/head
commit
2a09d27903
|
@ -1,6 +1,6 @@
|
|||
from guardian.shortcuts import get_perms, get_users_with_perms, assign_perm, remove_perm
|
||||
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 import status
|
||||
from django.db import transaction
|
||||
|
@ -53,7 +53,7 @@ class ProjectViewSet(viewsets.ModelViewSet):
|
|||
return None
|
||||
return super().paginate_queryset(queryset)
|
||||
|
||||
@detail_route(methods=['post'])
|
||||
@action(detail=True, methods=['post'])
|
||||
def duplicate(self, request, pk=None):
|
||||
"""
|
||||
Duplicate a task
|
||||
|
@ -66,7 +66,7 @@ class ProjectViewSet(viewsets.ModelViewSet):
|
|||
else:
|
||||
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):
|
||||
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)
|
||||
return Response(result, status=status.HTTP_200_OK)
|
||||
|
||||
@detail_route(methods=['post'])
|
||||
@action(detail=True, methods=['post'])
|
||||
def edit(self, request, pk=None):
|
||||
project = get_and_check_project(request, pk, ('change_project', ))
|
||||
|
||||
|
@ -135,4 +135,4 @@ class ProjectViewSet(viewsets.ModelViewSet):
|
|||
except AttributeError as e:
|
||||
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)
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.db import transaction
|
|||
from django.http import FileResponse
|
||||
from django.http import HttpResponse
|
||||
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.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
@ -117,19 +117,19 @@ class TaskViewSet(viewsets.ViewSet):
|
|||
|
||||
return Response({'success': True})
|
||||
|
||||
@detail_route(methods=['post'])
|
||||
@action(detail=True, methods=['post'])
|
||||
def cancel(self, *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):
|
||||
return self.set_pending_action(pending_actions.RESTART, *args, **kwargs)
|
||||
|
||||
@detail_route(methods=['post'])
|
||||
@action(detail=True, methods=['post'])
|
||||
def remove(self, *args, **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):
|
||||
"""
|
||||
Retrieve the console output for this task.
|
||||
|
@ -165,7 +165,7 @@ class TaskViewSet(viewsets.ViewSet):
|
|||
serializer = TaskSerializer(task)
|
||||
return Response(serializer.data)
|
||||
|
||||
@detail_route(methods=['post'])
|
||||
@action(detail=True, methods=['post'])
|
||||
def commit(self, request, pk=None, project_pk=None):
|
||||
"""
|
||||
Commit a task after all images have been uploaded
|
||||
|
@ -188,7 +188,7 @@ class TaskViewSet(viewsets.ViewSet):
|
|||
serializer = TaskSerializer(task)
|
||||
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):
|
||||
"""
|
||||
Add images to a task
|
||||
|
@ -216,7 +216,7 @@ class TaskViewSet(viewsets.ViewSet):
|
|||
|
||||
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):
|
||||
"""
|
||||
Duplicate a task
|
||||
|
|
|
@ -18,14 +18,14 @@ from webodm import settings
|
|||
router = routers.DefaultRouter()
|
||||
router.register(r'projects', ProjectViewSet)
|
||||
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.register(r'tasks', TaskViewSet, base_name='projects-tasks')
|
||||
tasks_router.register(r'tasks', TaskViewSet, basename='projects-tasks')
|
||||
|
||||
admin_router = routers.DefaultRouter()
|
||||
admin_router.register(r'admin/users', AdminUserViewSet, base_name='admin-users')
|
||||
admin_router.register(r'admin/groups', AdminGroupViewSet, base_name='admin-groups')
|
||||
admin_router.register(r'admin/users', AdminUserViewSet, basename='admin-users')
|
||||
admin_router.register(r'admin/groups', AdminGroupViewSet, basename='admin-groups')
|
||||
|
||||
urlpatterns = [
|
||||
url(r'processingnodes/options/$', ProcessingNodeOptionsView.as_view()),
|
||||
|
|
|
@ -151,8 +151,8 @@ def welcome(request):
|
|||
})
|
||||
|
||||
|
||||
def handler404(request):
|
||||
def handler404(request, exception):
|
||||
return render(request, '404.html', status=404)
|
||||
|
||||
def handler500(request):
|
||||
return render(request, '500.html', status=500)
|
||||
return render(request, '500.html', status=500)
|
||||
|
|
|
@ -3,20 +3,21 @@ appdirs==1.4.0
|
|||
APScheduler==3.2.0
|
||||
billiard==3.6.3.0
|
||||
celery==4.4.0
|
||||
coreapi==2.0.9
|
||||
Django==2.1.15
|
||||
coreapi>=2.3.3
|
||||
Django==2.2.27
|
||||
django-appconf==1.0.2
|
||||
django-codemirror2==0.2
|
||||
django-colorfield==0.1.15
|
||||
django-compressor==2.2
|
||||
django-cors-headers==3.0.2
|
||||
django-filter==2.0.0
|
||||
django-filter==2.4.0
|
||||
django-guardian==1.4.9
|
||||
django-imagekit==4.0.1
|
||||
django-libsass==0.7
|
||||
django-webpack-loader==0.6.0
|
||||
djangorestframework==3.9.1
|
||||
djangorestframework==3.13.1
|
||||
djangorestframework-jwt==1.9.0
|
||||
djangorestframework-guardian==0.3.0
|
||||
drf-nested-routers==0.11.1
|
||||
funcsigs==1.0.2
|
||||
futures==3.1.1
|
||||
|
@ -33,7 +34,6 @@ piexif==1.0.13
|
|||
pilkit==2.0
|
||||
Pillow==8.3.2
|
||||
pip-autoremove==0.9.0
|
||||
psycopg2==2.8.6
|
||||
psycopg2-binary==2.8.6
|
||||
PyJWT==1.5.3
|
||||
pyodm==1.5.9
|
||||
|
@ -61,4 +61,6 @@ https://github.com/OpenDroneMap/WebODM/releases/download/v1.9.7/GDAL-3.3.3-cp39-
|
|||
Shapely==1.7.0 ; sys_platform == "win32"
|
||||
eventlet==0.32.0 ; sys_platform == "win32"
|
||||
pyopenssl==19.1.0 ; sys_platform == "win32"
|
||||
numpy==1.21.1
|
||||
numpy==1.21.1
|
||||
drf-yasg==1.20.0
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ INSTALLED_APPS = [
|
|||
'guardian',
|
||||
'rest_framework',
|
||||
'rest_framework_nested',
|
||||
'drf_yasg',
|
||||
'webpack_loader',
|
||||
'corsheaders',
|
||||
'colorfield',
|
||||
|
@ -311,7 +312,7 @@ REST_FRAMEWORK = {
|
|||
'rest_framework.permissions.DjangoObjectPermissions',
|
||||
],
|
||||
'DEFAULT_FILTER_BACKENDS': [
|
||||
'rest_framework.filters.DjangoObjectPermissionsFilter',
|
||||
'rest_framework_guardian.filters.ObjectPermissionsFilter',
|
||||
'django_filters.rest_framework.DjangoFilterBackend',
|
||||
'rest_framework.filters.OrderingFilter',
|
||||
],
|
||||
|
|
|
@ -16,16 +16,36 @@ Including another URLconf
|
|||
import os
|
||||
|
||||
from django.conf.urls import include, url
|
||||
from django.urls import re_path
|
||||
from django.contrib import admin
|
||||
from . import settings
|
||||
from django.views.static import serve
|
||||
|
||||
from rest_framework import permissions
|
||||
from drf_yasg.views import get_schema_view
|
||||
from drf_yasg import openapi
|
||||
|
||||
admin.site.site_header = 'WebODM Administration'
|
||||
|
||||
schema_view = get_schema_view(
|
||||
openapi.Info(
|
||||
title="WebODM API",
|
||||
default_version='v1.0.0',
|
||||
description="WebODM API",
|
||||
#terms_of_service="",
|
||||
#contact=openapi.Contact(email=""),
|
||||
),
|
||||
public=True,
|
||||
permission_classes=[permissions.AllowAny],
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^', include('app.urls')),
|
||||
url(r'^', include('django.contrib.auth.urls')),
|
||||
url(r'^admin/', admin.site.urls),
|
||||
re_path(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
|
||||
re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
|
||||
re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
|
||||
]
|
||||
|
||||
if settings.DEBUG or settings.FORCE_MEDIA_STATICFILES:
|
||||
|
@ -40,6 +60,6 @@ if settings.DEBUG or settings.FORCE_MEDIA_STATICFILES:
|
|||
|
||||
]
|
||||
|
||||
|
||||
#from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||
#urlpatterns += staticfiles_urlpatterns()
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue