nicer indented json encoding now also in rest api

This commit is contained in:
Laura Klünder 2016-09-13 16:20:37 +02:00
parent 55fc17e872
commit 84bb9ad73a
10 changed files with 62 additions and 40 deletions

View file

@ -0,0 +1,15 @@
from rest_framework.renderers import JSONRenderer
from ..mapdata.utils import json_encoder_reindent
from functools import wraps
orig_render = JSONRenderer.render
@wraps(JSONRenderer.render)
def nicer_renderer(self, data, accepted_media_type=None, renderer_context=None):
if self.get_indent(accepted_media_type, renderer_context) is None:
return orig_render(self, data, accepted_media_type, renderer_context)
return json_encoder_reindent(lambda d: orig_render(self, d, accepted_media_type, renderer_context), data)
# Monkey patch for nicer indentation in the django rest framework
JSONRenderer.render = nicer_renderer

View file

@ -1,5 +1,6 @@
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from rest_framework.exceptions import PermissionDenied
from rest_framework.permissions import BasePermission

View file

@ -1,4 +1,5 @@
from django.conf import settings
from rest_framework import serializers
from ..editor.hosters import get_hoster_for_package
@ -6,24 +7,16 @@ from ..mapdata.models import Level, Package, Source
from .permissions import can_access_package
class BoundsMixin:
def to_representation(self, obj):
result = super().to_representation(obj)
if obj.bottom is not None:
result['bounds'] = ((obj.bottom, obj.left), (obj.top, obj.right))
return result
class LevelSerializer(serializers.ModelSerializer):
class Meta:
model = Level
fields = ('name', 'altitude', 'package')
class PackageSerializer(BoundsMixin, serializers.ModelSerializer):
class PackageSerializer(serializers.ModelSerializer):
class Meta:
model = Package
fields = ('name', 'home_repo', 'depends')
fields = ('name', 'home_repo', 'depends', 'bounds')
def to_representation(self, obj):
result = super().to_representation(obj)
@ -36,10 +29,10 @@ class PackageSerializer(BoundsMixin, serializers.ModelSerializer):
return result
class SourceSerializer(BoundsMixin, serializers.ModelSerializer):
class SourceSerializer(serializers.ModelSerializer):
class Meta:
model = Source
fields = ('name', 'package')
fields = ('name', 'package', 'bounds')
class HosterSerializer(serializers.Serializer):

View file

@ -1,4 +1,5 @@
from django.conf.urls import include, url
from rest_framework.routers import DefaultRouter
from .views import editor as editor_views

View file

@ -1,4 +1,5 @@
from django.http import Http404
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet

View file

@ -4,6 +4,7 @@ import os
from django.conf import settings
from django.core.files import File
from django.http import HttpResponse
from rest_framework.decorators import detail_route
from rest_framework.viewsets import ReadOnlyModelViewSet