update api прохождения

feature/fix_generate_pass
Andrey 8 years ago
parent 048c99b8c7
commit b11f269c27
  1. 2
      courses/serializers.py
  2. 20624
      csv/access/progress.csv
  3. 24
      csv/final_perm.py
  4. 8
      progress/tasks.py
  5. 32
      progress/views.py
  6. 3
      storage/views.py

@ -26,7 +26,7 @@ class LessonSerializer(MiniLessonSerializer):
class Meta: class Meta:
model = Lesson model = Lesson
exclude = ('id', 'topic', 'free', 'key') exclude = ('id', 'topic', 'key')
class CourseInitSerializer(serializers.ModelSerializer): class CourseInitSerializer(serializers.ModelSerializer):

File diff suppressed because one or more lines are too long

@ -0,0 +1,24 @@
import django
import os
import sys
sys.path.append("../")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from progress.models import ProgressLesson, Progress
from courses.models import Course
if __name__ == '__main__':
i = 0
for course in Course.objects.all():
print(i)
i += 1
first_lesson = course.get_first()
for progress in Progress.objects.filter(course_token=course.token):
if not progress.progresslesson_set.count() and not first_lesson is None:
ProgressLesson.objects.get(
progress=progress,
lesson_token=first_lesson.token,
checker=progress.teacher if first_lesson.is_hm else progress.user,
)

@ -8,18 +8,20 @@ def add_next_lesson(progress):
[i.lesson_token for i in progress.progresslesson_set.all()] [i.lesson_token for i in progress.progresslesson_set.all()]
) )
pl = None
for lesson, is_hw in lesson_list: for lesson, is_hw in lesson_list:
if is_hw: if is_hw:
ProgressLesson.objects.get( pl = ProgressLesson.objects.create(
progress=progress, progress=progress,
lesson_token=lesson, lesson_token=lesson,
checker=progress.teacher, checker=progress.teacher,
) )
else: else:
ProgressLesson.objects.get( pl = ProgressLesson.objects.create(
progress=progress, progress=progress,
lesson_token=lesson, lesson_token=lesson,
checker=progress.user, checker=progress.user,
) )
return "access update course %s" % progress.course_token return pl

@ -59,9 +59,6 @@ class UpdateProgress(APIView):
@staticmethod @staticmethod
def post(request): def post(request):
"""
На вход обязательно передаётся параметр id (id узла).
"""
lesson_token = request.JSON.get('lesson_token', None) lesson_token = request.JSON.get('lesson_token', None)
course_token = request.JSON.get('course_token', None) course_token = request.JSON.get('course_token', None)
student_out_key = request.JSON.get('student_out_key', None) student_out_key = request.JSON.get('student_out_key', None)
@ -89,19 +86,29 @@ class UpdateProgress(APIView):
lesson_token=lesson_token, lesson_token=lesson_token,
) )
if is_student and not pv.status == ProgressLesson.STATUSES.wait\ if is_student and not pv.status == ProgressLesson.STATUSES.wait \
and not pv.status == ProgressLesson.STATUSES.done: and not pv.status == ProgressLesson.STATUSES.done:
if pv.checker == p.teacher: if pv.checker == p.teacher:
pv.status = ProgressLesson.STATUSES.wait pv.status = ProgressLesson.STATUSES.wait
elif pv.checker == p.user: elif pv.checker == p.user:
pv.status = ProgressLesson.STATUSES.done pv.status = ProgressLesson.STATUSES.done
pv.finish_date = datetime.datetime.now()
else: else:
raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт") raise ValueError("Этого никогда не должно происходить, но я уверен, что произойдёт")
elif not is_student and pv.status == ProgressLesson.STATUSES.wait: elif not is_student and pv.status == ProgressLesson.STATUSES.wait:
pv.status = action if action == "fail":
pv.finish_date = datetime.datetime.now() pv.status = ProgressLesson.STATUSES.fail
elif action == "done":
pv.status = ProgressLesson.STATUSES.done
pv.finish_date = datetime.datetime.now()
else:
Response("Свойство action должно иметь значение либо done, либо fail", status=400)
else: else:
return Response("Ошибка прав доступа", status=403) return Response("Ошибка прав доступа", status=403)
@ -113,11 +120,14 @@ class UpdateProgress(APIView):
pv.save() pv.save()
pl = None
if pv.status == ProgressLesson.STATUSES.done: if pv.status == ProgressLesson.STATUSES.done:
#TODO: Ассинхроннаязадача для celery # TODO: Ассинхроннаязадача для celery
add_next_lesson(p) pl = add_next_lesson(p)
return Response(ProgressLessonSerializer(pv).data, status=200) return Response({
"current": ProgressLessonSerializer(pv).data,
"next": ProgressLessonSerializer(pl).data}, status=200)
except Progress.DoesNotExist: except Progress.DoesNotExist:
return Response('Не найден прогресс по заданным параметрам', status=404) return Response('Не найден прогресс по заданным параметрам', status=404)
@ -180,4 +190,4 @@ class UserGuardView(APIView):
if page == 'profile' and (request.user.is_superuser or request.user.is_staff): if page == 'profile' and (request.user.is_superuser or request.user.is_staff):
return res_204 return res_204
return res_403 return res_403

@ -49,6 +49,9 @@ class CommentView(APIView):
if not tokens: if not tokens:
return Response("Attribute tokens not set", status=400) return Response("Attribute tokens not set", status=400)
if tokens == ["null"]:
return Response([], status=200)
comment_list = [] comment_list = []
for token in tokens: for token in tokens:

Loading…
Cancel
Save