diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index d70a0596c..0c0f5c67e 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django.shortcuts import get_object_or_404 -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from rest_framework.response import Response from circuits import filters @@ -32,7 +32,7 @@ class ProviderViewSet(CustomFieldModelViewSet): serializer_class = serializers.ProviderSerializer filter_class = filters.ProviderFilter - @detail_route() + @action(detail=True) def graphs(self, request, pk=None): """ A convenience method for rendering graphs for a particular provider. diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index ce89eb69b..fb29da2b6 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -8,7 +8,7 @@ from django.shortcuts import get_object_or_404 from drf_yasg import openapi from drf_yasg.openapi import Parameter from drf_yasg.utils import swagger_auto_schema -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from rest_framework.mixins import ListModelMixin from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet, ViewSet @@ -63,7 +63,7 @@ class SiteViewSet(CustomFieldModelViewSet): serializer_class = serializers.SiteSerializer filter_class = filters.SiteFilter - @detail_route() + @action(detail=True) def graphs(self, request, pk=None): """ A convenience method for rendering graphs for a particular site. @@ -103,7 +103,7 @@ class RackViewSet(CustomFieldModelViewSet): serializer_class = serializers.RackSerializer filter_class = filters.RackFilter - @detail_route() + @action(detail=True) def units(self, request, pk=None): """ List rack units (by rack) @@ -232,12 +232,12 @@ class DeviceViewSet(CustomFieldModelViewSet): serializer_class = serializers.DeviceSerializer filter_class = filters.DeviceFilter - @detail_route(url_path='config-context') + @action(detail=True, url_path='config-context') def config_context(self, request, pk): device = get_object_or_404(Device, pk=pk) return Response(device.get_config_context()) - @detail_route(url_path='napalm') + @action(detail=True, url_path='napalm') def napalm(self, request, pk): """ Execute a NAPALM method on a Device @@ -337,7 +337,7 @@ class InterfaceViewSet(ModelViewSet): serializer_class = serializers.InterfaceSerializer filter_class = filters.InterfaceFilter - @detail_route() + @action(detail=True) def graphs(self, request, pk=None): """ A convenience method for rendering graphs for a particular interface. diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index 55e4457ce..a5833de6f 100644 --- a/netbox/extras/api/views.py +++ b/netbox/extras/api/views.py @@ -4,7 +4,7 @@ from django.contrib.contenttypes.models import ContentType from django.db.models import Count from django.http import Http404, HttpResponse from django.shortcuts import get_object_or_404 -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied from rest_framework.response import Response from rest_framework.viewsets import ReadOnlyModelViewSet, ViewSet @@ -94,7 +94,7 @@ class TopologyMapViewSet(ModelViewSet): serializer_class = serializers.TopologyMapSerializer filter_class = filters.TopologyMapFilter - @detail_route() + @action(detail=True) def render(self, request, pk): tmap = get_object_or_404(TopologyMap, pk=pk) @@ -199,7 +199,7 @@ class ReportViewSet(ViewSet): return Response(serializer.data) - @detail_route(methods=['post']) + @action(detail=True, methods=['post']) def run(self, request, pk): """ Run a Report and create a new ReportResult, overwriting any previous result for the Report. diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index abbe6e2b1..5cdcc5276 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from django.conf import settings from django.shortcuts import get_object_or_404 from rest_framework import status -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied from rest_framework.response import Response @@ -77,7 +77,7 @@ class PrefixViewSet(CustomFieldModelViewSet): serializer_class = serializers.PrefixSerializer filter_class = filters.PrefixFilter - @detail_route(url_path='available-prefixes', methods=['get', 'post']) + @action(detail=True, url_path='available-prefixes', methods=['get', 'post']) def available_prefixes(self, request, pk=None): """ A convenience method for returning available child prefixes within a parent. @@ -137,7 +137,7 @@ class PrefixViewSet(CustomFieldModelViewSet): return Response(serializer.data) - @detail_route(url_path='available-ips', methods=['get', 'post']) + @action(detail=True, url_path='available-ips', methods=['get', 'post']) def available_ips(self, request, pk=None): """ A convenience method for returning available IP addresses within a prefix. By default, the number of IPs diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index b04248f87..60afb3f9a 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django.shortcuts import get_object_or_404 -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from rest_framework.response import Response from dcim.models import Interface @@ -53,7 +53,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet): serializer_class = serializers.VirtualMachineSerializer filter_class = filters.VirtualMachineFilter - @detail_route(url_path='config-context') + @action(detail=True, url_path='config-context') def config_context(self, request, pk): device = get_object_or_404(VirtualMachine, pk=pk) return Response(device.get_config_context()) diff --git a/requirements.txt b/requirements.txt index 147b42bc8..6a4e3e7b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ django-mptt>=0.9.0 django-tables2>=1.19.0 django-taggit>=0.22.2 django-timezone-field>=2.0 -djangorestframework>=3.7.7,<3.8.2 +djangorestframework>=3.8.0,<3.8.2 drf-yasg[validation]>=1.4.4 graphviz>=0.8.2 Markdown>=2.6.11