# coding=utf-8 import os import django import sys import simplejson as json sys.path.append("/var/www/projects/lms/") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") django.setup() from __migrate.post_fixtures import show_progress from courses.models import Course, CourseTheme, Lesson, Homework, Exam, Skills, SkillJ, Achievements, CourseBuilder from management.models import Comment from storage.models import Storage _fixture = json.load(open('fixtures/courses.json')) user_pk = 1 courses = [] lessons = [] themes = [] homeworks = [] exams = [] skills = [] skillsj = [] achs = [] def new_index(model, key, obj): if str(key) in pk_map[model]: return obj.objects.get(id=pk_map[model][str(key)]) return None # Пример записи маршрута pk_map = json.load(open('pk_maps.json')) if 'courses.course' not in pk_map.keys(): pk_map['courses.course'] = {} if 'courses.coursetheme' not in pk_map.keys(): pk_map['courses.coursetheme'] = {} if 'courses.lesson' not in pk_map.keys(): pk_map['courses.lesson'] = {} if 'courses.homework' not in pk_map.keys(): pk_map['courses.homework'] = {} if 'courses.exam' not in pk_map.keys(): pk_map['courses.exam'] = {} if 'courses.skills' not in pk_map.keys(): pk_map['courses.skills'] = {} if 'courses.skillj' not in pk_map.keys(): pk_map['courses.skillj'] = {} if 'courses.achievements' not in pk_map.keys(): pk_map['courses.achievements'] = {} for i in _fixture: if i['model'] == 'courses.course': if i not in courses: courses.append(i) elif i['model'] == 'courses.coursetheme': if i not in themes: themes.append(i) elif i['model'] == 'courses.lesson': if i not in lessons: lessons.append(i) elif i['model'] == 'courses.homework': if i not in homeworks: homeworks.append(i) elif i['model'] == 'courses.exam': if i not in exams: exams.append(i) elif i['model'] == 'courses.skills': if i not in skillsj: skills.append(i) elif i['model'] == 'courses.skillj': if i not in skillsj: skillsj.append(i) elif i['model'] == 'courses.achievements': if i not in achs: achs.append(i) print '\nCourse' _now = 0 big_len = len(courses) show_progress(big_len, _now) for i in courses: c = Course.objects.create( level=i['fields']['level'], public=True, title=i['fields']['title'], description=i['fields']['description'], image=i['fields']['image'], big_image=i['fields']['big_image'], page=i['fields']['page'], preview=i['fields']['preview'], sort=i['fields']['sort'], use_fail=i['fields']['use_fail'], basic_len=i['fields']['basic_len'], addition_len=i['fields']['addition_len'], min_price=i['fields']['min_price'], buy_icon=i['fields']['buy_icon'] ) pk_map['courses.course'][str(i['pk'])] = str(c.id) _now += 1 show_progress(big_len, _now) print u'\nCourseTheme' _now = 0 big_len = len(themes) show_progress(big_len, _now) for i in themes: c = CourseTheme.objects.create( price_type='E' if i['fields']['type'] == 'A' else i['fields']['type'], _type='E' if i['fields']['type'] == 'A' else i['fields']['type'], icon=i['fields']['icon'], course=new_index('courses.course', i['fields']['course'], Course), sort=i['fields']['sort'], title=i['fields']['title'], description=i['fields']['description'], ) # print i['fields']['course'] # print new_index('courses.course', i['fields']['course'], Course) pk_map['courses.coursetheme'][str(i['pk'])] = str(c.id) _now += 1 show_progress(big_len, _now) print u'\nLessons' _now = 0 big_len = len(lessons) show_progress(big_len, _now) for i in lessons: c = Lesson.objects.create( free=i['fields']['free'], token=i['fields']['token'], title=i['fields']['title'], sort=i['fields']['sort'], course=new_index('courses.course', i['fields']['course'], Course), theme=new_index('courses.coursetheme', i['fields']['theme'], CourseTheme), description=i['fields']['description'], video=i['fields']['video'] ) for key in i['fields']['materials']: c.materials.add(new_index('storage.storage', key, Storage)) for key in i['fields']['comments']: # print key # print new_index('management.comment', key, Comment) c.comments.add(new_index('management.comment', key, Comment)) pk_map['courses.lesson'][str(i['pk'])] = str(c.id) _now += 1 show_progress(big_len, _now) print u'\nHomework' _now = 0 big_len = len(homeworks) show_progress(big_len, _now) for i in homeworks: c = Homework.objects.create( token=i['fields']['token'], course=new_index('courses.course', i['fields']['course'], Course), theme=new_index('courses.coursetheme', i['fields']['theme'], CourseTheme), description=i['fields']['description'], sort=1 ) for key in i['fields']['materials']: c.materials.add(new_index('storage.storage', key, Storage)) _now += 1 show_progress(big_len, _now) pk_map['courses.homework'][str(i['pk'])] = str(c.id) print u'\nExams' _now = 0 big_len = len(exams) show_progress(big_len, _now) for i in exams: tm = CourseTheme.objects.create( course=new_index('courses.course', i['fields']['course'], Course), _type='Ex' ) pk_map['courses.coursetheme'][str(tm.id)] = str(tm.id) c = Exam.objects.create( token=i['fields']['token'], sort=1, course=new_index('courses.course', i['fields']['course'], Course), theme=tm, icon=new_index('storage.storage', i['fields']['diploma'], Storage), title=i['fields']['title'], description=i['fields']['description'], diploma=new_index('storage.storage', i['fields']['diploma'], Storage) ) for key in i['fields']['materials']: c.materials.add(new_index('storage.storage', key, Storage)) _now += 1 show_progress(big_len, _now) pk_map['courses.exam'][str(i['pk'])] = str(c.id) print u'\nПереформировать порядок' for course in Course.objects.all(): _count = 1 #print course for _type in ['B', 'M', 'Ex', 'E', 'P']: for theme in CourseTheme.objects.filter(course=course, _type=_type): theme.sort = _count _count += 1 theme.save() #print _count print u'\nКарты курсов' for course in Course.objects.all(): CourseBuilder(course).main() print u'\nSkills' _now = 0 big_len = len(skills) show_progress(big_len, _now) for i in skills: c, c2 = Skills.objects.get_or_create( title=i['fields']['title'], color=i['fields']['color'] ) _now += 1 show_progress(big_len, _now) pk_map['courses.skills'][str(i['pk'])] = str(c.id) print u'\nSkillsJ' _now = 0 big_len = len(skillsj) show_progress(big_len, _now) for i in skillsj: c, c2 = SkillJ.objects.get_or_create( skill=new_index('courses.skills', i['fields']['skill'], Skills), lesson=new_index('courses.lesson', i['fields']['lesson'], Lesson), size=i['fields']['size'] ) _now += 1 show_progress(big_len, _now) pk_map['courses.skillj'][str(i['pk'])] = str(c.id) print u'\nAchivements' _now = 0 big_len = len(achs) show_progress(big_len, _now) for i in achs: c, c2 = Achievements.objects.get_or_create( tech_name=i['fields']['tech_name'], icon=i['fields']['icon'], title=i['fields']['title'], image=i['fields']['image'], background=i['fields']['background'], border=i['fields']['border'], ) _now += 1 show_progress(big_len, _now) pk_map['courses.achievements'][str(i['pk'])] = str(c.id) for course in Course.objects.all(): course.build_map() json.dump(pk_map, open('pk_maps.json', 'w'))