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:
model = Lesson
exclude = ('id', 'topic', 'free', 'key')
exclude = ('id', 'topic', 'key')
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()]
)
pl = None
for lesson, is_hw in lesson_list:
if is_hw:
ProgressLesson.objects.get(
pl = ProgressLesson.objects.create(
progress=progress,
lesson_token=lesson,
checker=progress.teacher,
)
else:
ProgressLesson.objects.get(
pl = ProgressLesson.objects.create(
progress=progress,
lesson_token=lesson,
checker=progress.user,
)
return "access update course %s" % progress.course_token
return pl

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

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

Loading…
Cancel
Save