You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.6 KiB

import csv
import django
import os
import sys
import json
from datetime import datetime
from django.db import IntegrityError
sys.path.append("../")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from courses.api import CourseProgressApi
from django.contrib.auth.models import Group
from django.contrib.auth import get_user_model
from progress.models import ProgressLesson, Progress
from courses.models import Lesson, Course
if __name__ == '__main__':
Progress.objects.all().delete()
ProgressLesson.objects.all().delete()
with open('./access/progress.csv') as progress_csv:
progress_reader = csv.DictReader(progress_csv)
for row in progress_reader:
course = Course.objects.get(slug=row['course'])
try:
teacher = get_user_model().objects.get(email=row['teacher'])
user = get_user_model().objects.get(email=row['user'])
except get_user_model().DoesNotExist:
continue
try:
p = Progress.objects.create(
course_token=course.token,
user=user,
teacher=teacher,
)
except IntegrityError:
continue
g = Group.objects.get(name='students')
g.user_set.add(user)
pivots = json.loads(row['success'])
for pivot in pivots:
l = Lesson.objects.get(old_id=pivot['id'])
pv = ProgressLesson.objects.create(
progress=p,
lesson_token=l.token,
checker=get_user_model().objects.get(email=pivot['teacher']) if l.is_hm else p.user,
)
pv.start_date = datetime.strptime(pivot['start_date'].split('.')[0], '%Y-%m-%d %H:%M:%S')
if pivot['finish_date'] and not pivot['finish_date'] == 'None':
pv.finish_date = datetime.strptime(pivot['finish_date'].split('.')[0], '%Y-%m-%d %H:%M:%S')
pv.status = ProgressLesson.STATUSES.done
pv.save()
is_next = False
for lesson_list in CourseProgressApi.get_topic_lesson(p.course_token):
for lesson_token in lesson_list:
if is_next:
p.active_lesson = lesson_token
p.save()
last_progress_lesson = p.progresslesson_set.filter(status=ProgressLesson.STATUSES.done).last()
is_next = True if last_progress_lesson is None else \
last_progress_lesson.lesson_token == lesson_token