def get(self, request, course_id): """ Check the status of the specified task """ courselike_key = CourseKey.from_string(course_id) if not has_course_author_access(request.user, courselike_key): return self.make_error_response( status_code=status.HTTP_403_FORBIDDEN, developer_message='The user requested does not have the required permissions.', error_code='user_mismatch' ) try: task_id = request.GET['task_id'] filename = request.GET['filename'] args = {u'course_key_string': course_id, u'archive_name': filename} name = CourseImportTask.generate_name(args) task_status = UserTaskStatus.objects.filter(name=name, task_id=task_id).first() return Response({ 'state': task_status.state }) except Exception as e: return self.make_error_response( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, developer_message=str(e), error_code='internal_error' )
def get(self, request, course_key): """ Check the status of the specified task """ try: task_id = request.GET['task_id'] filename = request.GET['filename'] args = {u'course_key_string': str(course_key), u'archive_name': filename} name = CourseImportTask.generate_name(args) task_status = UserTaskStatus.objects.filter(name=name, task_id=task_id).first() return Response({ 'state': task_status.state }) except Exception as e: log.exception(str(e)) raise self.api_error( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, developer_message=str(e), error_code='internal_error' )
def import_status_handler(request, course_key_string, filename=None): """ Returns an integer corresponding to the status of a file import. These are: -X : Import unsuccessful due to some error with X as stage [0-3] 0 : No status info found (import done or upload still in progress) 1 : Unpacking 2 : Verifying 3 : Updating 4 : Import successful """ course_key = CourseKey.from_string(course_key_string) if not has_course_author_access(request.user, course_key): raise PermissionDenied() # The task status record is authoritative once it's been created args = {u'course_key_string': course_key_string, u'archive_name': filename} name = CourseImportTask.generate_name(args) task_status = UserTaskStatus.objects.filter(name=name) for status_filter in STATUS_FILTERS: task_status = status_filter().filter_queryset(request, task_status, import_status_handler) task_status = task_status.order_by(u'-created').first() if task_status is None: # The task hasn't been initialized yet; did we store info in the session already? try: session_status = request.session["import_status"] status = session_status[course_key_string + filename] except KeyError: status = 0 elif task_status.state == UserTaskStatus.SUCCEEDED: status = 4 elif task_status.state in (UserTaskStatus.FAILED, UserTaskStatus.CANCELED): status = max(-(task_status.completed_steps + 1), -3) else: status = min(task_status.completed_steps + 1, 3) return JsonResponse({"ImportStatus": status})