2016-09-11 22:35:00 +02:00
|
|
|
from django.conf import settings
|
|
|
|
|
2016-09-11 21:39:01 +02:00
|
|
|
from rest_framework.serializers import ModelSerializer
|
|
|
|
|
|
|
|
from ..mapdata.models import Level, Package, Source
|
2016-09-11 22:35:00 +02:00
|
|
|
from .permissions import can_access_package
|
2016-09-11 21:39:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
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(ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = Level
|
|
|
|
fields = ('name', 'altitude', 'package')
|
|
|
|
|
|
|
|
|
|
|
|
class PackageSerializer(BoundsMixin, ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = Package
|
|
|
|
fields = ('name', 'depends')
|
|
|
|
|
2016-09-11 22:35:00 +02:00
|
|
|
def to_representation(self, obj):
|
|
|
|
result = super().to_representation(obj)
|
|
|
|
result['public'] = obj.name in settings.PUBLIC_PACKAGES
|
|
|
|
if 'request' in self.context:
|
|
|
|
result['access'] = can_access_package(self.context['request'], obj)
|
|
|
|
return result
|
|
|
|
|
2016-09-11 21:39:01 +02:00
|
|
|
|
|
|
|
class SourceSerializer(BoundsMixin, ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = Source
|
|
|
|
fields = ('name', 'package')
|