adding GeoCourse to API
This commit is contained in:
@@ -1261,7 +1261,7 @@ class GeoCourseEditForm(ModelForm):
|
|||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class GeoPolygon(models.Model):
|
class GeoPolygon(models.Model):
|
||||||
name = models.CharField(max_length=150,blank=True)
|
name = models.CharField(max_length=150,blank=True)
|
||||||
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE)
|
course = models.ForeignKey(GeoCourse, blank=True,on_delete=models.CASCADE,related_name='polygons')
|
||||||
order_in_course = models.IntegerField(default=0)
|
order_in_course = models.IntegerField(default=0)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@@ -1280,7 +1280,7 @@ class GeoPolygon(models.Model):
|
|||||||
class GeoPoint(models.Model):
|
class GeoPoint(models.Model):
|
||||||
latitude = models.FloatField(default=0)
|
latitude = models.FloatField(default=0)
|
||||||
longitude = models.FloatField(default=0)
|
longitude = models.FloatField(default=0)
|
||||||
polygon = models.ForeignKey(GeoPolygon,blank=True,on_delete=models.CASCADE)
|
polygon = models.ForeignKey(GeoPolygon,blank=True,on_delete=models.CASCADE,related_name='points')
|
||||||
order_in_poly = models.IntegerField(default=0)
|
order_in_poly = models.IntegerField(default=0)
|
||||||
|
|
||||||
# need error checking to "insert" new point into existing polygon? This affects order_in_poly
|
# need error checking to "insert" new point into existing polygon? This affects order_in_poly
|
||||||
|
|||||||
@@ -31,3 +31,10 @@ class IsCompetitorOrNot(permissions.BasePermission):
|
|||||||
|
|
||||||
def has_object_permission(self, request, view, obj):
|
def has_object_permission(self, request, view, obj):
|
||||||
return (obj.userid == request.user.id)
|
return (obj.userid == request.user.id)
|
||||||
|
|
||||||
|
class IsManagerOrReadOnly(permissions.BasePermission):
|
||||||
|
def has_object_permission(self, request, view, obj):
|
||||||
|
if request.method in permissions.SAFE_METHODS:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return obj.manager == request.user.rower
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from rest_framework import serializers
|
|||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||||
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
|
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
|
||||||
|
GeoCourse, GeoPolygon, GeoPoint,
|
||||||
)
|
)
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
@@ -245,3 +245,67 @@ class StrokeDataSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
# do something
|
# do something
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
class GeoPointSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = GeoPoint
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'latitude',
|
||||||
|
'longitude',
|
||||||
|
'order_in_poly',
|
||||||
|
)
|
||||||
|
extra_kwargs = {'id': {'read_only': False, 'required': True}}
|
||||||
|
|
||||||
|
class GeoPolygonSerializer(serializers.ModelSerializer):
|
||||||
|
points = GeoPointSerializer(many=True)
|
||||||
|
class Meta:
|
||||||
|
model = GeoPolygon
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'order_in_course',
|
||||||
|
'points',
|
||||||
|
)
|
||||||
|
extra_kwargs = {'id': {'read_only': False, 'required': True}}
|
||||||
|
|
||||||
|
class GeoCourseSerializer(serializers.ModelSerializer):
|
||||||
|
polygons = GeoPolygonSerializer(many=True)
|
||||||
|
class Meta:
|
||||||
|
model = GeoCourse
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'distance',
|
||||||
|
'country',
|
||||||
|
'notes',
|
||||||
|
'polygons',
|
||||||
|
)
|
||||||
|
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
instance.name = validated_data.get('name',instance.name)
|
||||||
|
instance.country = validated_data.get('country',instance.country)
|
||||||
|
instance.notes = validated_data.get('notes',instance.notes)
|
||||||
|
instance.save()
|
||||||
|
|
||||||
|
polygons = validated_data.get('polygons')
|
||||||
|
for polygon in polygons:
|
||||||
|
polygon_id = polygon.get('id',None)
|
||||||
|
if polygon_id:
|
||||||
|
p = GeoPolygon.objects.get(id=polygon_id)
|
||||||
|
p.name = polygon.get('name',p.name)
|
||||||
|
p.order_in_course = polygon.get('order_in_course',p.order_in_course)
|
||||||
|
p.save()
|
||||||
|
|
||||||
|
points = polygon.get('points')
|
||||||
|
|
||||||
|
for point in points:
|
||||||
|
point_id = point.get('id',None)
|
||||||
|
if point_id:
|
||||||
|
pt = GeoPoint.objects.get(id=point_id)
|
||||||
|
pt.latitude = point.get('latitude',pt.latitude)
|
||||||
|
pt.longitude = point.get('longitude',pt.longitude)
|
||||||
|
pt.order_in_poly = point.get('order_in_poly',pt.order_in_poly)
|
||||||
|
pt.save()
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from django.contrib.auth.models import User
|
|||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
Workout,Rower,FavoriteChart,VirtualRaceResult,
|
||||||
VirtualRace,StandardCollection,CourseStandard,
|
VirtualRace,StandardCollection,CourseStandard,GeoCourse,
|
||||||
)
|
)
|
||||||
|
|
||||||
from rest_framework import routers, serializers, viewsets,permissions
|
from rest_framework import routers, serializers, viewsets,permissions
|
||||||
@@ -32,6 +32,9 @@ from rowers.serializers import (
|
|||||||
CourseStandardSerializer,
|
CourseStandardSerializer,
|
||||||
StandardCollectionSerializer,
|
StandardCollectionSerializer,
|
||||||
VirtualRaceSerializer,
|
VirtualRaceSerializer,
|
||||||
|
GeoCourseSerializer,
|
||||||
|
GeoPolygonSerializer,
|
||||||
|
GeoPointSerializer,
|
||||||
)
|
)
|
||||||
|
|
||||||
from oauth2_provider.views import (
|
from oauth2_provider.views import (
|
||||||
@@ -152,6 +155,17 @@ class StandardCollectionViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
http_method_names = ['get']
|
http_method_names = ['get']
|
||||||
|
|
||||||
|
class GeoCourseViewSet(viewsets.ModelViewSet):
|
||||||
|
model = GeoCourse,
|
||||||
|
serializer_class = GeoCourseSerializer
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
try:
|
||||||
|
return GeoCourse.objects.all()
|
||||||
|
except TypeError:
|
||||||
|
return []
|
||||||
|
http_method_names = ['get','patch']
|
||||||
|
|
||||||
class StrokeDataViewSet(viewsets.ModelViewSet):
|
class StrokeDataViewSet(viewsets.ModelViewSet):
|
||||||
serializer_class = StrokeDataSerializer
|
serializer_class = StrokeDataSerializer
|
||||||
|
|
||||||
@@ -164,6 +178,7 @@ router.register(r'api/entries',EntryViewSet,'entries')
|
|||||||
router.register(r'api/challenges',VirtualRaceViewSet,'challenges')
|
router.register(r'api/challenges',VirtualRaceViewSet,'challenges')
|
||||||
router.register(r'api/standards',CourseStandardViewSet,'standards')
|
router.register(r'api/standards',CourseStandardViewSet,'standards')
|
||||||
router.register(r'api/standardcollections',StandardCollectionViewSet,'standardcollections')
|
router.register(r'api/standardcollections',StandardCollectionViewSet,'standardcollections')
|
||||||
|
router.register(r'api/geocourses',GeoCourseViewSet,'geocourses')
|
||||||
|
|
||||||
def permissiondenied_view(request):
|
def permissiondenied_view(request):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|||||||
Reference in New Issue
Block a user