This repository has been archived on 2024-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
2020-11-04 12:18:20 +11:00

138 lines
5.0 KiB
Python

import datetime
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect, JsonResponse, Http404
from django.views import generic
from django.urls import reverse
from django.utils import timezone
from rest_framework import status, viewsets
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.decorators import action
from .serializers import MigrationSerializer, MigrationOverView
from .models import Migration
def checkLimit(limit):
if limit == "":
limit = None
else:
limit = int(limit)
return limit
class MigrationList(APIView):
'''
Returns a list of migrations with simpleData
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = Migration.objects.all()[:limit]
serializer = MigrationOverView(migrations, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = MigrationSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class MigrationDetails(APIView):
'''
Returns full migration details
'''
def getObject(self, pk):
try:
migration = Migration.objects.get(id=pk)
return migration
except Migration.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
migration = self.getObject(pk)
serializer = MigrationSerializer(migration)
return Response(serializer.data)
def put(self, request, pk, format=None):
migration = self.getObject(pk)
serializer = MigrationSerializer(migration, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class MigrationsBooked(APIView):
'''
Returns list of booked migrations
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = MigrationOverView(Migration.objects.filter(
migration_status="Booked",)[:limit], many=True)
return Response(migrations.data, status=status.HTTP_200_OK)
class MigrationsWaitingTerm(APIView):
'''
Returns list of booked migrations
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = MigrationOverView(Migration.objects.filter(
migration_status="Waiting Termination",)[:limit], many=True)
return Response(migrations.data, status=status.HTTP_200_OK)
class MigrationsCompleted(APIView):
'''
Returns list of booked migrations
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = MigrationOverView(Migration.objects.filter(
migration_status="Completed",)[:limit], many=True)
return Response(migrations.data, status=status.HTTP_200_OK)
class PendingMigrations(APIView):
'''
Returns list of 'pending' migrations (migrations that are booked for today (maybe before timezone.now))
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = Migration.objects.filter(
migration_status="Booked", booked_time__lte=timezone.now() + datetime.timedelta(1),
booked_time__gte=(timezone.now() + datetime.timedelta(-1))
)[:limit]
serializer = MigrationOverView(migrations, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
class MissedMigrations(APIView):
'''
Returns a list of missed migrations
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = Migration.objects.filter(
booked_time__lte=timezone.now() + datetime.timedelta(-1),
migration_status="Booked"
)[:limit]
serializer = MigrationOverView(migrations, many=True)
return Response(serializer.data)
class PendingTerm(APIView):
'''
Returns a list of accounts pending termination (might add an arg so we can specify how many days)
'''
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = Migration.objects.filter(
migration_status="Waiting Termination", term_date__lte=timezone.now() + datetime.timedelta(1)
)[:limit]
serializer = MigrationOverView(migrations, many=True)
return Response(serializer.data)
class MigrationListAll(APIView):
def get(self, request, format=None):
limit = checkLimit(request.GET.get('limit', ''))
migrations = Migration.objects.all()[:limit]
serializer = MigrationSerializer(migrations, many=True)
return Response(serializer.data)