Views various fixes
This commit is contained in:
parent
5af3b95c8d
commit
51415765da
4 changed files with 41 additions and 12 deletions
|
|
@ -79,6 +79,24 @@ class PredictionRequestSerializer(serializers.Serializer):
|
||||||
data['descent_rate'] = rate_clip(data['descent_rate'])
|
data['descent_rate'] = rate_clip(data['descent_rate'])
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
if 'ascent_curve' in validated_data:
|
||||||
|
validated_data['ascent_curve'] = base64_to_curve(validated_data['ascent_curve'])
|
||||||
|
if 'descent_curve' in validated_data:
|
||||||
|
validated_data['descent_curve'] = base64_to_curve(validated_data['descent_curve'])
|
||||||
|
|
||||||
|
prediction = Prediction(
|
||||||
|
user=validated_data.get('user'),
|
||||||
|
request=validated_data.get('request', {}),
|
||||||
|
result=validated_data.get('result', {}),
|
||||||
|
start_point=validated_data.get('start_point'),
|
||||||
|
template=validated_data.get('template'),
|
||||||
|
rate_profile=validated_data.get('rate_profile')
|
||||||
|
)
|
||||||
|
prediction.save()
|
||||||
|
|
||||||
|
return prediction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ from rest_framework.authtoken.views import obtain_auth_token
|
||||||
from .views import (
|
from .views import (
|
||||||
PredictionViewSet,
|
PredictionViewSet,
|
||||||
SavedPointViewset,
|
SavedPointViewset,
|
||||||
|
PreditctionTemplateViewset,
|
||||||
TelemetryListCreateView,
|
TelemetryListCreateView,
|
||||||
get_csrf,
|
get_csrf,
|
||||||
login_view,
|
login_view,
|
||||||
|
|
@ -17,7 +18,7 @@ from .views import (
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register(r'predictions', PredictionViewSet, basename='predictions')
|
router.register(r'predictions', PredictionViewSet, basename='predictions')
|
||||||
router.register(r'saved-points', SavedPointViewset, basename='saved-points')
|
router.register(r'saved-points', SavedPointViewset, basename='saved-points')
|
||||||
|
router.register(r'saved-templates', PreditctionTemplateViewset, basename='saved-templates')
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
@ -28,8 +29,6 @@ urlpatterns = [
|
||||||
path("session/", SessionView.as_view(), name='api-session'),
|
path("session/", SessionView.as_view(), name='api-session'),
|
||||||
path("whoami/", WhoAmIView.as_view(), name='api-whoami'),
|
path("whoami/", WhoAmIView.as_view(), name='api-whoami'),
|
||||||
path("<uuid:pk>/telemetry/", TelemetryListCreateView.as_view(), name="create_telemetry"),
|
path("<uuid:pk>/telemetry/", TelemetryListCreateView.as_view(), name="create_telemetry"),
|
||||||
path('saved-points/', SavedPointViewset.as_view({'get': 'list', 'post': 'create'}), name='saved_points'),
|
|
||||||
path('saved-points/<int:pk>/', SavedPointViewset.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}), name='saved_point_detail'),
|
|
||||||
path('csrf/', get_csrf, name='api-csrf'),
|
path('csrf/', get_csrf, name='api-csrf'),
|
||||||
path('login/', login_view, name='api-login'),
|
path('login/', login_view, name='api-login'),
|
||||||
path('logout/', logout_view, name='api-logout'),
|
path('logout/', logout_view, name='api-logout'),
|
||||||
|
|
|
||||||
28
api/views.py
28
api/views.py
|
|
@ -6,7 +6,7 @@ from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.viewsets import ModelViewSet, ViewSet
|
from rest_framework.viewsets import ModelViewSet, ViewSet
|
||||||
from rest_framework.permissions import IsAuthenticated, AllowAny
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||||
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
|
from rest_framework.authentication import SessionAuthentication, BasicAuthentication, TokenAuthentication
|
||||||
from rest_framework.decorators import api_view, permission_classes, authentication_classes, action
|
from rest_framework.decorators import api_view, permission_classes, authentication_classes, action
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
@ -54,8 +54,13 @@ class PredictionViewSet(ViewSet):
|
||||||
except requests.RequestException as e:
|
except requests.RequestException as e:
|
||||||
return Response({"error": f"Tawhiri error: {str(e)}"}, status=status.HTTP_502_BAD_GATEWAY)
|
return Response({"error": f"Tawhiri error: {str(e)}"}, status=status.HTTP_502_BAD_GATEWAY)
|
||||||
|
|
||||||
prediction = Prediction.objects.create(
|
# prediction = Prediction.objects.create(
|
||||||
result=prediction_result, user=request.user, request=request.data)
|
# result=prediction_result, user=request.user, request=request.data, validated_data=validated_data)
|
||||||
|
prediction = serializer.save(
|
||||||
|
user=request.user,
|
||||||
|
result=prediction_result,
|
||||||
|
request=request.data
|
||||||
|
)
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
"id": prediction.id,
|
"id": prediction.id,
|
||||||
|
|
@ -72,7 +77,6 @@ class PredictionViewSet(ViewSet):
|
||||||
|
|
||||||
filters = {
|
filters = {
|
||||||
'user': user,
|
'user': user,
|
||||||
'deleted_at__isnull': True
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if created_from:
|
if created_from:
|
||||||
|
|
@ -148,7 +152,6 @@ class TelemetryListCreateView(generics.ListCreateAPIView):
|
||||||
|
|
||||||
|
|
||||||
class SessionView(APIView):
|
class SessionView(APIView):
|
||||||
authentication_classes = [SessionAuthentication, BasicAuthentication]
|
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -157,7 +160,6 @@ class SessionView(APIView):
|
||||||
|
|
||||||
|
|
||||||
class WhoAmIView(APIView):
|
class WhoAmIView(APIView):
|
||||||
authentication_classes = [SessionAuthentication, BasicAuthentication]
|
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -177,7 +179,7 @@ def get_csrf(request):
|
||||||
@extend_schema(methods=["POST"], description="Login user")
|
@extend_schema(methods=["POST"], description="Login user")
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
@api_view(["POST"])
|
@api_view(["POST"])
|
||||||
@authentication_classes([])
|
@authentication_classes([BasicAuthentication])
|
||||||
@permission_classes([AllowAny])
|
@permission_classes([AllowAny])
|
||||||
def login_view(request):
|
def login_view(request):
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
|
|
@ -207,7 +209,6 @@ def logout_view(request):
|
||||||
|
|
||||||
|
|
||||||
class SavedPointViewset(ModelViewSet):
|
class SavedPointViewset(ModelViewSet):
|
||||||
authentication_classes = [SessionAuthentication, BasicAuthentication]
|
|
||||||
permission_classes = [IsOwner]
|
permission_classes = [IsOwner]
|
||||||
serializer_class = SavedPointSerializer
|
serializer_class = SavedPointSerializer
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
|
|
@ -218,6 +219,17 @@ class SavedPointViewset(ModelViewSet):
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
serializer.save(user=self.request.user)
|
serializer.save(user=self.request.user)
|
||||||
|
|
||||||
|
class PreditctionTemplateViewset(ModelViewSet):
|
||||||
|
permission_classes = [IsOwner]
|
||||||
|
serializer_class = PreditctionTemplateSerializer
|
||||||
|
pagination_class = None
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return PreditctionTemplate.objects.filter(user=self.request.user)
|
||||||
|
|
||||||
|
def perform_create(self, serializer):
|
||||||
|
serializer.save(user=self.request.user)
|
||||||
|
|
||||||
# class PredictionCreateView(APIView):
|
# class PredictionCreateView(APIView):
|
||||||
# permission_classes = [IsAuthenticated]
|
# permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ SECRET_KEY = os.getenv(
|
||||||
'SECRET_KEY', 'django-insecure-np(nxnh6mw)v4pa2n2z3pl_5&!2z$jshhak9r3v=y1u9rd*sl!')
|
'SECRET_KEY', 'django-insecure-np(nxnh6mw)v4pa2n2z3pl_5&!2z$jshhak9r3v=y1u9rd*sl!')
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = os.getenv('DEBUG', 'False') == 'True'
|
DEBUG = os.getenv('DEBUG', 'True') == 'True'
|
||||||
|
|
||||||
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', 'localhost').split(',')
|
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', 'localhost').split(',')
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue