Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.shortcuts import render
- from tutor.models import UserState, StateTransition, QuestionType, ConfigType
- from django.db.models import Q
- from django.views.decorators.csrf import csrf_exempt, csrf_protect
- from rest_framework.decorators import api_view, permission_classes,\
- authentication_classes, renderer_classes
- from rest_framework.renderers import JSONRenderer
- from django.http import JsonResponse
- from rest_framework import status
- from tutor.constants import *
- from tutor.models import *
- from user.views import check_user_status, get_user_from_jwt, check_token_auth,\
- get_user_history
- from tutor.views import get_subtopic_details, subtopic_selection_handler,\
- user_action_hanlder, video_handler, user_response_handler,\
- doubt_error_hanlder, get_test_detail
- import json
- import logging
- import traceback
- logger = logging.getLogger('api')
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def register_user(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - register_user")
- if request.method == 'POST':
- try:
- resp = {}
- if not request.body:
- return JsonResponse({'msg': 'Data Missing', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- data = json.loads(request.body)
- if data.get('device_token') is None or data.get('email') is None or\
- 'HTTP_AP_ORIGIN' not in request.META or data.get('provider_name') is None or\
- data.get('provider_token') is None or data.get('provider_userid') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- mode = request.META['HTTP_AP_ORIGIN']
- user = check_user_status(data, mode)
- resp['id'] = user.id
- resp['name'] = user.first_name
- resp['email'] = user.email
- resp['jwt-token'] = user.profile.jwt_token if user.profile else None
- resp_data = {"data": resp, "user_id": user.id, "msg": "success","status": status.HTTP_200_OK}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Exception in registration: "+str(traceback.format_exc()))
- return JsonResponse({'msg': 'Error in registration.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def topics(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - topics")
- if request.method == 'GET':
- try:
- topic_dict = {}
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- topics = Topic.objects.all()
- for topic in topics:
- topic_dict[topic.id] = topic.display_name
- resp_data = {"topics": topic_dict, "status": status.HTTP_200_OK}
- logger.info("Topic details api response {} ".format(resp_data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Topic List Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in topics List.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def subtopics(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - subtopics")
- if request.method == 'POST':
- try:
- logger.info("Subtopic details api data {} ".format(request.body,))
- try:
- data = json.loads(request.body)
- except:
- return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
- status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- if data.get('topic_id') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- detail_list, progress = get_subtopic_details(data, user)
- resp_data = {"subtopics": detail_list, "progress": progress, "status": status.HTTP_200_OK}
- logger.info("Subtopic details api Response {} ".format(data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Subtopic List Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in subtopics List.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def subtopics_selection(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - subtopics_selection")
- if request.method == 'POST':
- try:
- logger.info("Subtopic Selection api data {} ".format(request.body,))
- try:
- data = json.loads(request.body)
- except:
- return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
- status=status.HTTP_200_OK)
- if data.get('subtopic_id') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- resp, video, progress = subtopic_selection_handler(data, user)
- resp_data= {"data": {"question": resp, "video": video, "progress": progress}}
- logger.info("Subtopic Selection api response {} ".format(resp_data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Subtopic Selection Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in subtopics_selection.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def action_hanlder(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - action_hanlder")
- if request.method == 'POST':
- try:
- logger.info("Action Handler api data {} ".format(request.body,))
- try:
- data = json.loads(request.body)
- except:
- return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
- status=status.HTTP_200_OK)
- if data.get('subtopic_id') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- resp, video, state = user_action_hanlder(data, user)
- resp_data = {"data": {"question": resp, "video": video, "state": state}}
- logger.info("Action Handler api Response {} ".format(resp_data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Action Handler Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in action_hanlder.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def video_seen(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - video_seen")
- if request.method == 'POST':
- try:
- logger.info("Action Handler Video seen data {} ".format(request.body,))
- try:
- data = json.loads(request.body)
- except:
- return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
- status=status.HTTP_200_OK)
- if data.get('subtopic_id') is None or data.get('video_seen') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- resp, video_seen, state = video_handler(data, user)
- resp_data = {"question": resp, "video_seen": video_seen, "state": state}
- logger.info("Video seen api Response {} ".format(resp_data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Video Seen Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in video_seen.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def update_user_response(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - update_user_response")
- if request.method == 'POST':
- try:
- logger.info("Update user response api data {} ".format(request.body,))
- try:
- data = json.loads(request.body)
- except:
- return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
- status=status.HTTP_200_OK)
- if data.get('question_id') is None or\
- data.get('user_response') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- resp = user_response_handler(data, user)
- resp_data = {"msg": resp}
- logger.info("Update user response api Response {} ".format(resp_data,))
- return JsonResponse({"data": resp_data}, status=status.HTTP_200_OK)
- except:
- logger.info("Test Handler Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in update_user_response.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- logger.info("Exception in update_user_response: "+str(traceback.format_exc()))
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def doubt_error(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - doubt_error")
- if request.method == 'POST':
- try:
- logger.info("Doubt Error api data {} ".format(request.body,))
- try:
- data = json.loads(request.body)
- except:
- return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
- status=status.HTTP_200_OK)
- if data.get('subtopic_id') is None or data.get('type') is None or\
- data.get('clicked') is None or data.get('text') is None:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- resp, msg = doubt_error_hanlder(data, user)
- resp_data = {"data": resp, "msg": msg}
- logger.info("Doubt Error api Response {} ".format(resp_data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Doubt Error Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in doubt_error.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def test_handler(request, test_type):
- logger.info("----------------------------------------------------------------------")
- logger.info("API called - test_handler")
- if request.method == 'GET':
- try:
- logger.info("Doubt Error api data {} ".format(request.body,))
- if 'topic_id' not in request.GET:
- return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- topic_id = int(request.GET['topic_id'])
- resp, msg = get_test_detail(topic_id, user, test_type)
- resp_data = {"data": resp, "msg": msg}
- logger.info("Test Handler api Response {} ".format(resp_data,))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("Test Handler Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in test_handler.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
- @csrf_exempt
- @renderer_classes((JSONRenderer,))
- def user_history(request):
- logger.info("-------------------------------------------------------------------------------------------")
- logger.info("API called - user_history")
- if request.method == 'GET':
- try:
- logger.info("User history API: "+str(traceback.format_exc()))
- topic_dict = {}
- valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
- if not valid_token:
- resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
- if user is None:
- return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
- status=status.HTTP_200_OK)
- resp = get_user_history(user)
- resp_data = {"questions": resp, "status": status.HTTP_200_OK}
- logger.info("Topic details api response {} for user_id {}".format(resp_data, user.id))
- return JsonResponse(resp_data, status=status.HTTP_200_OK)
- except:
- logger.info("User history Error api Response {} ".format(resp_data,))
- return JsonResponse({'msg': 'Error in user_history.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
- else:
- return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement