mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 09:16:10 -06:00
Add a REST API endpoint to synchronize config context data
This commit is contained in:
parent
a97db67237
commit
bb6eff8940
@ -17,6 +17,7 @@ from extras.models import CustomField
|
|||||||
from extras.reports import get_report, get_reports, run_report
|
from extras.reports import get_report, get_reports, run_report
|
||||||
from extras.scripts import get_script, get_scripts, run_script
|
from extras.scripts import get_script, get_scripts, run_script
|
||||||
from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired
|
from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired
|
||||||
|
from netbox.api.features import SyncedDataMixin
|
||||||
from netbox.api.metadata import ContentTypeMetadata
|
from netbox.api.metadata import ContentTypeMetadata
|
||||||
from netbox.api.viewsets import NetBoxModelViewSet
|
from netbox.api.viewsets import NetBoxModelViewSet
|
||||||
from utilities.exceptions import RQWorkerNotRunningException
|
from utilities.exceptions import RQWorkerNotRunningException
|
||||||
@ -147,9 +148,10 @@ class JournalEntryViewSet(NetBoxModelViewSet):
|
|||||||
# Config contexts
|
# Config contexts
|
||||||
#
|
#
|
||||||
|
|
||||||
class ConfigContextViewSet(NetBoxModelViewSet):
|
class ConfigContextViewSet(SyncedDataMixin, NetBoxModelViewSet):
|
||||||
queryset = ConfigContext.objects.prefetch_related(
|
queryset = ConfigContext.objects.prefetch_related(
|
||||||
'regions', 'site_groups', 'sites', 'locations', 'roles', 'platforms', 'tenant_groups', 'tenants',
|
'regions', 'site_groups', 'sites', 'locations', 'roles', 'platforms', 'tenant_groups', 'tenants', 'data_source',
|
||||||
|
'data_file',
|
||||||
)
|
)
|
||||||
serializer_class = serializers.ConfigContextSerializer
|
serializer_class = serializers.ConfigContextSerializer
|
||||||
filterset_class = filtersets.ConfigContextFilterSet
|
filterset_class = filtersets.ConfigContextFilterSet
|
||||||
|
30
netbox/netbox/api/features.py
Normal file
30
netbox/netbox/api/features.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
from rest_framework.exceptions import PermissionDenied
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from utilities.permissions import get_permission_for_model
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
'SyncedDataMixin',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SyncedDataMixin:
|
||||||
|
|
||||||
|
@action(detail=True, methods=['post'])
|
||||||
|
def sync(self, request, pk):
|
||||||
|
"""
|
||||||
|
Provide a /sync API endpoint to synchronize an object's data from its associated DataFile (if any).
|
||||||
|
"""
|
||||||
|
permission = get_permission_for_model(self.queryset.model, 'sync')
|
||||||
|
if not request.user.has_perm(permission):
|
||||||
|
raise PermissionDenied(f"Missing permission: {permission}")
|
||||||
|
|
||||||
|
obj = get_object_or_404(self.queryset, pk=pk)
|
||||||
|
if obj.data_file:
|
||||||
|
obj.sync_data()
|
||||||
|
obj.save()
|
||||||
|
serializer = self.serializer_class(obj, context={'request': request})
|
||||||
|
|
||||||
|
return Response(serializer.data)
|
Loading…
Reference in New Issue
Block a user