mirror of
				https://github.com/netbox-community/netbox.git
				synced 2024-05-10 07:54:54 +00:00 
			
		
		
		
	Removed custom renderers
This commit is contained in:
		@@ -1,7 +1,6 @@
 | 
			
		||||
from rest_framework.decorators import detail_route
 | 
			
		||||
from rest_framework.permissions import IsAuthenticated
 | 
			
		||||
from rest_framework.response import Response
 | 
			
		||||
from rest_framework.settings import api_settings
 | 
			
		||||
from rest_framework.viewsets import ModelViewSet, ViewSet
 | 
			
		||||
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
@@ -14,7 +13,6 @@ from dcim.models import (
 | 
			
		||||
    RackRole, Region, Site,
 | 
			
		||||
)
 | 
			
		||||
from dcim import filters
 | 
			
		||||
from extras.api.renderers import BINDZoneRenderer, FlatJSONRenderer
 | 
			
		||||
from extras.api.serializers import RenderedGraphSerializer
 | 
			
		||||
from extras.api.views import CustomFieldModelViewSet
 | 
			
		||||
from extras.models import Graph, GRAPH_TYPE_INTERFACE, GRAPH_TYPE_SITE
 | 
			
		||||
@@ -216,7 +214,6 @@ class DeviceViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
 | 
			
		||||
    serializer_class = serializers.DeviceSerializer
 | 
			
		||||
    write_serializer_class = serializers.WritableDeviceSerializer
 | 
			
		||||
    filter_class = filters.DeviceFilter
 | 
			
		||||
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [BINDZoneRenderer, FlatJSONRenderer]
 | 
			
		||||
 | 
			
		||||
    @detail_route(url_path='lldp-neighbors')
 | 
			
		||||
    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)
 | 
			
		||||
		Reference in New Issue
	
	Block a user