Scott Baker | 99dac10 | 2016-06-08 16:35:39 -0700 | [diff] [blame] | 1 | import json |
| 2 | from django.http import HttpResponse |
| 3 | from rest_framework.decorators import api_view |
| 4 | from rest_framework.response import Response |
| 5 | from rest_framework.reverse import reverse |
| 6 | from rest_framework import serializers |
| 7 | from rest_framework import generics |
| 8 | from rest_framework import status |
| 9 | from core.models import * |
| 10 | from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied |
| 11 | from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField |
| 12 | |
| 13 | class OnboardingViewSet(XOSViewSet): |
| 14 | base_name = "onboarding" |
| 15 | method_name = "onboarding" |
| 16 | method_kind = "viewset" |
| 17 | |
| 18 | @classmethod |
| 19 | def get_urlpatterns(self, api_path="^"): |
| 20 | patterns = [] #super(CordSubscriberViewSet, self).get_urlpatterns(api_path=api_path) |
| 21 | |
| 22 | patterns.append( self.list_url("xos/ready/$", {"get": "get_xos_ready"}, "xos_ready") ) |
| 23 | |
| 24 | patterns.append( self.list_url("summary/$", {"get": "get_summary"}, "summary") ) |
| 25 | |
| 26 | patterns.append( self.list_url("services/$", {"get": "get_service_list"}, "service_list") ) |
| 27 | patterns.append( self.list_url("services/(?P<service>[a-zA-Z0-9\-_]+)/ready/$", {"get": "get_service_ready"}, "service_ready") ) |
| 28 | |
| 29 | |
| 30 | return patterns |
| 31 | |
| 32 | def is_ready(self, obj): |
| 33 | return (obj.enacted is not None) and (obj.updated is not None) and (obj.enacted>=obj.updated) and (obj.backend_status.startswith("1")) |
| 34 | |
| 35 | def get_xos_ready(self, request): |
| 36 | xos = XOS.objects.all() |
| 37 | if not xos: |
| 38 | return Response(false) |
| 39 | |
| 40 | xos=xos[0] |
| 41 | |
| 42 | result = (xos.enacted is not None) and (xos.updated is not None) and (xos.enacted>=xos.updated) and (xos.backend_status.startswith("1")) |
| 43 | return HttpResponse( json.dumps(result), content_type="application/javascript" ) |
| 44 | |
| 45 | def get_summary(self, request): |
| 46 | result = [] |
| 47 | |
| 48 | xos = XOS.objects.all() |
| 49 | if not xos: |
| 50 | result.append( ("XOS", false) ) |
| 51 | else: |
| 52 | xos=xos[0] |
| 53 | |
| 54 | result.append( ("XOS", self.is_ready(xos)) ) |
| 55 | |
| 56 | for sc in xos.service_controllers.all(): |
| 57 | result.append( (sc.name, self.is_ready(sc)) ) |
| 58 | |
| 59 | result = "\n".join( ["%s: %s" % (x[0], x[1]) for x in result] ) |
| 60 | if result: |
| 61 | result = result + "\n" |
| 62 | |
| 63 | return HttpResponse( result, content_type="text/ascii" ) |
| 64 | |
| 65 | def get_service_list(self, request): |
| 66 | xos = XOS.objects.all() |
| 67 | if not xos: |
| 68 | return Response([]) |
| 69 | |
| 70 | xos=xos[0] |
| 71 | |
| 72 | result = [] |
| 73 | for sc in xos.service_controllers.all(): |
| 74 | result.append(sc.name) |
| 75 | |
| 76 | return HttpResponse( json.dumps(result), content_type="application/javascript") |
| 77 | |
| 78 | def get_service_ready(self, request, service): |
| 79 | xos = XOS.objects.all() |
| 80 | if not xos: |
| 81 | return Response([]) |
| 82 | |
| 83 | xos=xos[0] |
| 84 | |
| 85 | sc=xos.service_controllers.filter(name=service) |
| 86 | if not sc: |
| 87 | return HttpResponse("Not Found", status_code=404) |
| 88 | |
| 89 | sc=sc[0] |
| 90 | result = self.is_ready(sc) |
| 91 | |
| 92 | return HttpResponse( json.dumps(result), content_type="application/javascript") |
| 93 | |
| 94 | |
| 95 | |
| 96 | |
| 97 | |