add hoster basics

This commit is contained in:
Laura Klünder 2016-09-13 15:18:24 +02:00
parent 6b7f05e2c7
commit 55fc17e872
12 changed files with 122 additions and 13 deletions

View file

@ -1,6 +1,5 @@
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,7 +1,7 @@
from django.conf import settings
from rest_framework import serializers
from rest_framework.serializers import ModelSerializer
from ..editor.hosters import get_hoster_for_package
from ..mapdata.models import Level, Package, Source
from .permissions import can_access_package
@ -14,13 +14,13 @@ class BoundsMixin:
return result
class LevelSerializer(ModelSerializer):
class LevelSerializer(serializers.ModelSerializer):
class Meta:
model = Level
fields = ('name', 'altitude', 'package')
class PackageSerializer(BoundsMixin, ModelSerializer):
class PackageSerializer(BoundsMixin, serializers.ModelSerializer):
class Meta:
model = Package
fields = ('name', 'home_repo', 'depends')
@ -28,12 +28,27 @@ class PackageSerializer(BoundsMixin, ModelSerializer):
def to_representation(self, obj):
result = super().to_representation(obj)
result['public'] = obj.name in settings.PUBLIC_PACKAGES
hoster = get_hoster_for_package(obj)
if 'request' in self.context:
result['access'] = can_access_package(self.context['request'], obj)
result['access_granted'] = can_access_package(self.context['request'], obj)
if hoster is not None:
result['hoster'] = hoster.name
return result
class SourceSerializer(BoundsMixin, ModelSerializer):
class SourceSerializer(BoundsMixin, serializers.ModelSerializer):
class Meta:
model = Source
fields = ('name', 'package')
class HosterSerializer(serializers.Serializer):
name = serializers.CharField()
base_url = serializers.CharField()
def to_representation(self, obj):
result = super().to_representation(obj)
result['packages'] = obj.get_packages().values_list('name', flat=True)
if 'request' in self.context:
result['signed_in'] = obj.is_access_granted(self.context['request'])
return result

View file

@ -1,13 +1,14 @@
from django.conf.urls import include, url
from rest_framework.routers import DefaultRouter
from .views import map as map_views
from .views import editor as editor_views
from .views import mapdata as mapdata_views
router = DefaultRouter()
router.register(r'map/levels', map_views.LevelViewSet)
router.register(r'map/packages', map_views.PackageViewSet)
router.register(r'map/sources', map_views.SourceViewSet)
router.register(r'levels', mapdata_views.LevelViewSet)
router.register(r'packages', mapdata_views.PackageViewSet)
router.register(r'sources', mapdata_views.SourceViewSet)
router.register(r'hosters', editor_views.HosterViewSet, base_name='hoster')
urlpatterns = [

View file

@ -0,0 +1,21 @@
from django.http import Http404
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet
from ...editor.hosters import hosters
from ..serializers import HosterSerializer
class HosterViewSet(ViewSet):
"""
Get Package Hosters
"""
def list(self, request, version=None):
serializer = HosterSerializer(hosters.values(), many=True, context={'request': request})
return Response(serializer.data)
def retrieve(self, request, pk=None, version=None):
if pk not in hosters:
raise Http404
serializer = HosterSerializer(hosters[pk], context={'request': request})
return Response(serializer.data)

View file

@ -4,7 +4,6 @@ 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