mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-20 19:19:22 -06:00
Removed custom renderers
This commit is contained in:
parent
ffde2c96c7
commit
4a2206ecb1
@ -1,7 +1,6 @@
|
|||||||
from rest_framework.decorators import detail_route
|
from rest_framework.decorators import detail_route
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.settings import api_settings
|
|
||||||
from rest_framework.viewsets import ModelViewSet, ViewSet
|
from rest_framework.viewsets import ModelViewSet, ViewSet
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -14,7 +13,6 @@ from dcim.models import (
|
|||||||
RackRole, Region, Site,
|
RackRole, Region, Site,
|
||||||
)
|
)
|
||||||
from dcim import filters
|
from dcim import filters
|
||||||
from extras.api.renderers import BINDZoneRenderer, FlatJSONRenderer
|
|
||||||
from extras.api.serializers import RenderedGraphSerializer
|
from extras.api.serializers import RenderedGraphSerializer
|
||||||
from extras.api.views import CustomFieldModelViewSet
|
from extras.api.views import CustomFieldModelViewSet
|
||||||
from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
|
from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
|
||||||
@ -216,7 +214,6 @@ class DeviceViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
|
|||||||
serializer_class = serializers.DeviceSerializer
|
serializer_class = serializers.DeviceSerializer
|
||||||
write_serializer_class = serializers.WritableDeviceSerializer
|
write_serializer_class = serializers.WritableDeviceSerializer
|
||||||
filter_class = filters.DeviceFilter
|
filter_class = filters.DeviceFilter
|
||||||
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [BINDZoneRenderer, FlatJSONRenderer]
|
|
||||||
|
|
||||||
@detail_route(url_path='lldp-neighbors')
|
@detail_route(url_path='lldp-neighbors')
|
||||||
def lldp_neighbors(self, request, pk):
|
def lldp_neighbors(self, request, pk):
|
||||||
|
@ -1,88 +0,0 @@
|
|||||||
import json
|
|
||||||
from rest_framework import renderers
|
|
||||||
|
|
||||||
|
|
||||||
# IP address family designations
|
|
||||||
AF = {
|
|
||||||
4: 'A',
|
|
||||||
6: 'AAAA',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class FormlessBrowsableAPIRenderer(renderers.BrowsableAPIRenderer):
|
|
||||||
"""
|
|
||||||
An instance of the browseable API with forms suppressed. Useful for POST endpoints that don't create objects.
|
|
||||||
"""
|
|
||||||
def show_form_for_method(self, *args, **kwargs):
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class BINDZoneRenderer(renderers.BaseRenderer):
|
|
||||||
"""
|
|
||||||
Generate a BIND zone file from a list of DNS records.
|
|
||||||
Required fields: `name`, `primary_ip`
|
|
||||||
"""
|
|
||||||
media_type = 'text/plain'
|
|
||||||
format = 'bind-zone'
|
|
||||||
|
|
||||||
def render(self, data, media_type=None, renderer_context=None):
|
|
||||||
records = []
|
|
||||||
for record in data['results']:
|
|
||||||
if record.get('name') and record.get('primary_ip'):
|
|
||||||
try:
|
|
||||||
records.append("{} IN {} {}".format(
|
|
||||||
record['name'],
|
|
||||||
AF[record['primary_ip']['family']],
|
|
||||||
record['primary_ip']['address'].split('/')[0],
|
|
||||||
))
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
return '\n'.join(records)
|
|
||||||
|
|
||||||
|
|
||||||
class FlatJSONRenderer(renderers.BaseRenderer):
|
|
||||||
"""
|
|
||||||
Flattens a nested JSON response.
|
|
||||||
"""
|
|
||||||
format = 'json_flat'
|
|
||||||
media_type = 'application/json'
|
|
||||||
|
|
||||||
def render(self, data, media_type=None, renderer_context=None):
|
|
||||||
|
|
||||||
def flatten(entry):
|
|
||||||
for key, val in entry.items():
|
|
||||||
if isinstance(val, dict):
|
|
||||||
for child_key, child_val in flatten(val):
|
|
||||||
yield "{}_{}".format(key, child_key), child_val
|
|
||||||
else:
|
|
||||||
yield key, val
|
|
||||||
|
|
||||||
return json.dumps([dict(flatten(i)) for i in data['results']])
|
|
||||||
|
|
||||||
|
|
||||||
class FreeRADIUSClientsRenderer(renderers.BaseRenderer):
|
|
||||||
"""
|
|
||||||
Generate a FreeRADIUS clients.conf file from a list of Secrets.
|
|
||||||
"""
|
|
||||||
media_type = 'text/plain'
|
|
||||||
format = 'freeradius'
|
|
||||||
|
|
||||||
CLIENT_TEMPLATE = """client {name} {{
|
|
||||||
ipaddr = {ip}
|
|
||||||
secret = {secret}
|
|
||||||
}}"""
|
|
||||||
|
|
||||||
def render(self, data, media_type=None, renderer_context=None):
|
|
||||||
clients = []
|
|
||||||
try:
|
|
||||||
for secret in data['results']:
|
|
||||||
if secret['device']['primary_ip'] and secret['plaintext']:
|
|
||||||
client = self.CLIENT_TEMPLATE.format(
|
|
||||||
name=secret['device']['name'],
|
|
||||||
ip=secret['device']['primary_ip']['address'].split('/')[0],
|
|
||||||
secret=secret['plaintext']
|
|
||||||
)
|
|
||||||
clients.append(client)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return '\n'.join(clients)
|
|
Loading…
Reference in New Issue
Block a user