Advertisement
shubhamgoyal

Untitled

Feb 16th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 17.98 KB | None | 0 0
  1. from django.shortcuts import render
  2. from tutor.models import UserState, StateTransition, QuestionType, ConfigType
  3. from django.db.models import Q
  4. from django.views.decorators.csrf import csrf_exempt, csrf_protect
  5. from rest_framework.decorators import api_view, permission_classes,\
  6.         authentication_classes, renderer_classes
  7. from rest_framework.renderers import JSONRenderer
  8. from django.http import JsonResponse
  9. from rest_framework import status
  10. from tutor.constants import *
  11. from tutor.models import *
  12. from user.views import check_user_status, get_user_from_jwt, check_token_auth,\
  13.     get_user_history
  14. from tutor.views import get_subtopic_details, subtopic_selection_handler,\
  15.     user_action_hanlder, video_handler, user_response_handler,\
  16.     doubt_error_hanlder, get_test_detail
  17. import json
  18. import logging
  19. import traceback
  20.  
  21. logger = logging.getLogger('api')
  22.  
  23.  
  24. @csrf_exempt
  25. @renderer_classes((JSONRenderer,))
  26. def register_user(request):
  27.     logger.info("-------------------------------------------------------------------------------------------")
  28.     logger.info("API called - register_user")
  29.     if request.method == 'POST':
  30.         try:
  31.             resp = {}
  32.             if not request.body:
  33.                 return JsonResponse({'msg': 'Data Missing', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  34.  
  35.             data = json.loads(request.body)
  36.  
  37.             if data.get('device_token') is None or data.get('email') is None or\
  38.                     'HTTP_AP_ORIGIN' not in request.META or data.get('provider_name') is None or\
  39.                     data.get('provider_token') is None or data.get('provider_userid') is None:
  40.                 return JsonResponse({'msg': 'Parameter Missing', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  41.  
  42.             mode = request.META['HTTP_AP_ORIGIN']
  43.             user = check_user_status(data, mode)
  44.  
  45.             resp['id'] = user.id
  46.             resp['name'] = user.first_name
  47.             resp['email'] = user.email
  48.             resp['jwt-token'] = user.profile.jwt_token if user.profile else None
  49.  
  50.             resp_data = {"data": resp, "user_id": user.id, "msg": "success","status": status.HTTP_200_OK}
  51.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  52.         except:
  53.             logger.info("Exception in registration: "+str(traceback.format_exc()))
  54.             return JsonResponse({'msg': 'Error in registration.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  55.     else:
  56.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  57.  
  58. @csrf_exempt
  59. @renderer_classes((JSONRenderer,))
  60. def topics(request):
  61.     logger.info("-------------------------------------------------------------------------------------------")
  62.     logger.info("API called - topics")
  63.     if request.method == 'GET':
  64.         try:
  65.             topic_dict = {}
  66.  
  67.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  68.             if not valid_token:
  69.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  70.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  71.  
  72.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  73.             if user is None:
  74.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  75.                     status=status.HTTP_200_OK)
  76.  
  77.             topics = Topic.objects.all()
  78.            
  79.             for topic in topics:
  80.                 topic_dict[topic.id] = topic.display_name
  81.            
  82.             resp_data = {"topics": topic_dict, "status": status.HTTP_200_OK}
  83.             logger.info("Topic details api response {} ".format(resp_data,))
  84.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  85.         except:
  86.             logger.info("Topic List Error api Response {} ".format(resp_data,))
  87.             return JsonResponse({'msg': 'Error in topics List.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  88.     else:
  89.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  90.  
  91. @csrf_exempt
  92. @renderer_classes((JSONRenderer,))
  93. def subtopics(request):
  94.     logger.info("-------------------------------------------------------------------------------------------")
  95.     logger.info("API called - subtopics")
  96.     if request.method == 'POST':
  97.         try:
  98.             logger.info("Subtopic details api data {} ".format(request.body,))
  99.             try:
  100.                 data = json.loads(request.body)
  101.             except:
  102.                 return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
  103.                     status=status.HTTP_200_OK)
  104.  
  105.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  106.             if not valid_token:
  107.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  108.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  109.  
  110.             if data.get('topic_id') is None:
  111.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  112.  
  113.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  114.             if user is None:
  115.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  116.                     status=status.HTTP_200_OK)
  117.  
  118.             detail_list, progress = get_subtopic_details(data, user)
  119.  
  120.             resp_data = {"subtopics": detail_list, "progress": progress, "status": status.HTTP_200_OK}
  121.             logger.info("Subtopic details api Response {} ".format(data,))
  122.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  123.         except:
  124.             logger.info("Subtopic List Error api Response {} ".format(resp_data,))
  125.             return JsonResponse({'msg': 'Error in subtopics List.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  126.     else:
  127.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  128.  
  129. @csrf_exempt
  130. @renderer_classes((JSONRenderer,))
  131. def subtopics_selection(request):
  132.     logger.info("-------------------------------------------------------------------------------------------")
  133.     logger.info("API called - subtopics_selection")
  134.     if request.method == 'POST':
  135.         try:
  136.             logger.info("Subtopic Selection api data {} ".format(request.body,))
  137.             try:
  138.                 data = json.loads(request.body)
  139.             except:
  140.                 return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
  141.                     status=status.HTTP_200_OK)
  142.  
  143.             if data.get('subtopic_id') is None:
  144.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  145.  
  146.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  147.             if not valid_token:
  148.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  149.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  150.  
  151.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  152.             if user is None:
  153.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  154.                 status=status.HTTP_200_OK)
  155.  
  156.             resp, video, progress = subtopic_selection_handler(data, user)
  157.  
  158.             resp_data= {"data": {"question": resp, "video": video, "progress": progress}}
  159.             logger.info("Subtopic Selection api response {} ".format(resp_data,))
  160.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  161.         except:
  162.             logger.info("Subtopic Selection Error api Response {} ".format(resp_data,))
  163.             return JsonResponse({'msg': 'Error in subtopics_selection.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  164.     else:
  165.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  166.  
  167. @csrf_exempt
  168. @renderer_classes((JSONRenderer,))
  169. def action_hanlder(request):
  170.     logger.info("-------------------------------------------------------------------------------------------")
  171.     logger.info("API called - action_hanlder")
  172.     if request.method == 'POST':
  173.         try:
  174.             logger.info("Action Handler api data {} ".format(request.body,))
  175.             try:
  176.                 data = json.loads(request.body)
  177.             except:
  178.                 return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
  179.                     status=status.HTTP_200_OK)
  180.  
  181.             if data.get('subtopic_id') is None:
  182.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  183.            
  184.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  185.             if not valid_token:
  186.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  187.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  188.  
  189.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  190.             if user is None:
  191.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  192.                     status=status.HTTP_200_OK)
  193.  
  194.             resp, video, state = user_action_hanlder(data, user)
  195.  
  196.             resp_data = {"data": {"question": resp, "video": video, "state": state}}
  197.             logger.info("Action Handler api Response {} ".format(resp_data,))
  198.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  199.         except:
  200.             logger.info("Action Handler Error api Response {} ".format(resp_data,))
  201.             return JsonResponse({'msg': 'Error in action_hanlder.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  202.     else:
  203.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  204.  
  205. @csrf_exempt
  206. @renderer_classes((JSONRenderer,))
  207. def video_seen(request):
  208.     logger.info("-------------------------------------------------------------------------------------------")
  209.     logger.info("API called - video_seen")
  210.     if request.method == 'POST':
  211.         try:
  212.             logger.info("Action Handler Video seen data {} ".format(request.body,))
  213.             try:
  214.                 data = json.loads(request.body)
  215.             except:
  216.                 return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
  217.                     status=status.HTTP_200_OK)
  218.  
  219.             if data.get('subtopic_id') is None or data.get('video_seen') is None:
  220.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  221.            
  222.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  223.             if not valid_token:
  224.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  225.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  226.  
  227.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  228.             if user is None:
  229.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  230.                     status=status.HTTP_200_OK)
  231.  
  232.             resp, video_seen, state = video_handler(data, user)
  233.  
  234.             resp_data = {"question": resp, "video_seen": video_seen, "state": state}
  235.             logger.info("Video seen api Response {} ".format(resp_data,))
  236.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  237.         except:
  238.             logger.info("Video Seen Error api Response {} ".format(resp_data,))
  239.             return JsonResponse({'msg': 'Error in video_seen.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  240.     else:
  241.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  242.  
  243. @csrf_exempt
  244. @renderer_classes((JSONRenderer,))
  245. def update_user_response(request):
  246.     logger.info("-------------------------------------------------------------------------------------------")
  247.     logger.info("API called - update_user_response")
  248.     if request.method == 'POST':
  249.         try:
  250.             logger.info("Update user response api data {} ".format(request.body,))
  251.             try:
  252.                 data = json.loads(request.body)
  253.             except:
  254.                 return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
  255.                     status=status.HTTP_200_OK)
  256.  
  257.             if data.get('question_id') is None or\
  258.                 data.get('user_response') is None:
  259.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  260.            
  261.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  262.             if not valid_token:
  263.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  264.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  265.  
  266.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  267.             if user is None:
  268.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  269.                 status=status.HTTP_200_OK)
  270.  
  271.             resp = user_response_handler(data, user)
  272.  
  273.             resp_data = {"msg": resp}
  274.             logger.info("Update user response api Response {} ".format(resp_data,))
  275.             return JsonResponse({"data": resp_data}, status=status.HTTP_200_OK)
  276.         except:
  277.             logger.info("Test Handler Error api Response {} ".format(resp_data,))
  278.             return JsonResponse({'msg': 'Error in update_user_response.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  279.     else:
  280.         logger.info("Exception in update_user_response: "+str(traceback.format_exc()))
  281.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  282.  
  283. @csrf_exempt
  284. @renderer_classes((JSONRenderer,))
  285. def doubt_error(request):
  286.     logger.info("-------------------------------------------------------------------------------------------")
  287.     logger.info("API called - doubt_error")
  288.     if request.method == 'POST':
  289.         try:
  290.             logger.info("Doubt Error api data {} ".format(request.body,))
  291.             try:
  292.                 data = json.loads(request.body)
  293.             except:
  294.                 return JsonResponse({'msg': 'Invalid json.', "status": status.HTTP_401_UNAUTHORIZED}, \
  295.                     status=status.HTTP_200_OK)
  296.  
  297.             if data.get('subtopic_id') is None or data.get('type') is None or\
  298.                 data.get('clicked') is None or data.get('text') is None:
  299.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  300.            
  301.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  302.             if not valid_token:
  303.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  304.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  305.  
  306.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  307.             if user is None:
  308.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  309.                     status=status.HTTP_200_OK)
  310.  
  311.             resp, msg = doubt_error_hanlder(data, user)
  312.  
  313.             resp_data = {"data": resp, "msg": msg}
  314.             logger.info("Doubt Error api Response {} ".format(resp_data,))
  315.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  316.         except:
  317.             logger.info("Doubt Error Error api Response {} ".format(resp_data,))
  318.             return JsonResponse({'msg': 'Error in doubt_error.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  319.     else:
  320.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  321.  
  322. @csrf_exempt
  323. @renderer_classes((JSONRenderer,))
  324. def test_handler(request, test_type):
  325.     logger.info("----------------------------------------------------------------------")
  326.     logger.info("API called - test_handler")
  327.     if request.method == 'GET':
  328.         try:
  329.             logger.info("Doubt Error api data {} ".format(request.body,))
  330.        
  331.             if 'topic_id' not in request.GET:
  332.                 return JsonResponse({'msg': 'Parameter Missing', "status": status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  333.            
  334.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  335.             if not valid_token:
  336.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  337.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  338.  
  339.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  340.             if user is None:
  341.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  342.                     status=status.HTTP_200_OK)
  343.             topic_id = int(request.GET['topic_id'])
  344.             resp, msg = get_test_detail(topic_id, user, test_type)
  345.  
  346.             resp_data = {"data": resp, "msg": msg}
  347.             logger.info("Test Handler api Response {} ".format(resp_data,))
  348.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  349.         except:
  350.             logger.info("Test Handler Error api Response {} ".format(resp_data,))
  351.             return JsonResponse({'msg': 'Error in test_handler.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  352.     else:
  353.         return JsonResponse({'msg': 'Method not Allowed', "status": status.HTTP_405_METHOD_NOT_ALLOWED}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
  354.  
  355. @csrf_exempt
  356. @renderer_classes((JSONRenderer,))
  357. def user_history(request):
  358.     logger.info("-------------------------------------------------------------------------------------------")
  359.     logger.info("API called - user_history")
  360.     if request.method == 'GET':
  361.         try:
  362.             logger.info("User history API: "+str(traceback.format_exc()))
  363.             topic_dict = {}
  364.  
  365.             valid_token = check_token_auth(request.META['HTTP_AUTH_TOKEN'], request.META['HTTP_JWT_TOKEN'])
  366.             if not valid_token:
  367.                 resp_data = {"msg": "Invlid Token.","status": status.HTTP_417_EXPECTATION_FAILED}
  368.                 return JsonResponse(resp_data, status=status.HTTP_200_OK)
  369.  
  370.             user = get_user_from_jwt(request.META['HTTP_JWT_TOKEN'])
  371.             if user is None:
  372.                 return JsonResponse({'msg': 'User not Found.', "status": status.HTTP_400_BAD_REQUEST}, \
  373.                     status=status.HTTP_200_OK)
  374.  
  375.             resp = get_user_history(user)
  376.            
  377.             resp_data = {"questions": resp, "status": status.HTTP_200_OK}
  378.             logger.info("Topic details api response {} for user_id {}".format(resp_data, user.id))
  379.             return JsonResponse(resp_data, status=status.HTTP_200_OK)
  380.         except:
  381.             logger.info("User history Error api Response {} ".format(resp_data,))
  382.             return JsonResponse({'msg': 'Error in user_history.', "status":status.HTTP_400_BAD_REQUEST}, status=status.HTTP_200_OK)
  383.     else:
  384.         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