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.
117 lines
4.5 KiB
117 lines
4.5 KiB
import csv
|
|
import os
|
|
import random
|
|
import string
|
|
import sys
|
|
|
|
import django
|
|
|
|
sys.path.append("../")
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
|
|
django.setup()
|
|
|
|
from course_service.courses.api import InApiTeacher
|
|
from django.contrib.auth import get_user_model
|
|
from course_service.courses.models import Course, Vertex, Topic
|
|
from course_service.maps.models import CourseRoute, CourseMap, PivotVertex, PivotCourseMap
|
|
from storage.models import File
|
|
|
|
if __name__ == '__main__':
|
|
CourseMap.objects.all().delete()
|
|
CourseRoute.objects.all().delete()
|
|
PivotVertex.objects.all().delete()
|
|
PivotCourseMap.objects.all().delete()
|
|
Vertex.objects.all().delete()
|
|
Course.objects.all().delete()
|
|
|
|
with open('./course/course.csv') as user_csv:
|
|
user_reader = csv.DictReader(user_csv)
|
|
for row in user_reader:
|
|
row = dict(row)
|
|
teachers = row.pop('teachers', None).split("[")[1].split("]")[0].split(", ")
|
|
row.pop('mentors', None).split("[")[1].split("]")[0].split(", ")
|
|
course, _is_create = Course.objects.get_or_create(**row)
|
|
|
|
map_obj = CourseMap.objects.create(course=course)
|
|
route_obj = CourseRoute.objects.create(
|
|
name='''%s''' % course.title,
|
|
out_key=''.join(random.choice(string.ascii_letters) for x in range(15)),
|
|
)
|
|
PivotCourseMap.objects.create(map_course=map_obj, route=route_obj, sort=0)
|
|
course.route = route_obj
|
|
course.save()
|
|
|
|
try:
|
|
for teacher in teachers:
|
|
if teacher:
|
|
teacher = get_user_model().objects.get(id=teacher).out_key
|
|
InApiTeacher.add_teacher(course.slug, teacher)
|
|
|
|
except get_user_model().DoesNotExist:
|
|
print('Плохо')
|
|
|
|
with open('./course/vertex.csv') as vertex_csv:
|
|
vertex_reader = csv.DictReader(vertex_csv)
|
|
for row in vertex_reader:
|
|
row = dict(row)
|
|
model_type = row.pop('type', None)
|
|
description = row.pop('description', None)
|
|
title = row.pop('title', None)
|
|
pk = row.pop('id', None)
|
|
try:
|
|
m = row.pop('materials', None)
|
|
materials = []
|
|
if m:
|
|
materials = [File.objects.get(id=i).key for i in m.split("[")[1].split("]")[0].split(", ")]
|
|
except ValueError:
|
|
pass
|
|
|
|
if model_type == 'topic':
|
|
course = Course.objects.get(id=row.pop('course', None))
|
|
map_obj = CourseMap.objects.get(course=course)
|
|
Topic.objects.create(
|
|
id=pk,
|
|
icon=row.pop('icon', None),
|
|
course=course,
|
|
description=description,
|
|
title=title,
|
|
)
|
|
|
|
try:
|
|
topic_id = row.pop('topic', None)
|
|
last_pivot = PivotVertex.objects.filter(map_course=map_obj).last()
|
|
if model_type == 'tutorial':
|
|
topic = Topic.objects.get(id=topic_id)
|
|
small_vertex = Vertex.objects.create(
|
|
id=pk,
|
|
video=row.pop('video', None),
|
|
materials=materials,
|
|
topic=topic,
|
|
description=description,
|
|
title=title,
|
|
token=''.join(random.choice(string.ascii_letters) for x in range(15))
|
|
)
|
|
PivotVertex.objects.create(
|
|
map_course=map_obj,
|
|
vertex=small_vertex,
|
|
sort=last_pivot.sort+1 if last_pivot else 1,
|
|
)
|
|
|
|
if model_type == 'task':
|
|
topic = Topic.objects.get(id=topic_id)
|
|
small_vertex = Vertex.objects.create(
|
|
id=pk,
|
|
materials=materials,
|
|
topic=topic,
|
|
description=description,
|
|
title=title,
|
|
valid_type=1,
|
|
token=''.join(random.choice(string.ascii_letters) for x in range(15))
|
|
)
|
|
PivotVertex.objects.create(
|
|
map_course=map_obj,
|
|
vertex=small_vertex,
|
|
sort=last_pivot.sort+1 if last_pivot else 1,
|
|
)
|
|
except Topic.DoesNotExist:
|
|
pass |