# 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 access.models import User from courses.models import Exam, Homework, Lesson, Achievements, Course, CourseTheme from journals.models import TeacherJ, AchievementJ, LessonJ, HomeworkJ, ExamJ, CourseThemeJ, HomeworkTry, check_journal from storage.models import Storage from management.models import Comment _fixture = json.load(open('fixtures/courses.json')) teachers = [] achss = [] lessonss = [] homeworks = [] exams = [] 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 'journals.teacherj' not in pk_map.keys(): pk_map['journals.teacherj'] = {} if 'journals.achievementj' not in pk_map.keys(): pk_map['journals.achievementj'] = {} if 'journals.lessonj' not in pk_map.keys(): pk_map['journals.lessonj'] = {} if 'journals.homeworkj' not in pk_map.keys(): pk_map['journals.homeworkj'] = {} if 'journals.examj' not in pk_map.keys(): pk_map['journals.examj'] = {} for i in _fixture: if i['model'] == 'courses.teacherj': teachers.append(i) elif i['model'] == 'courses.achievementj': achss.append(i) elif i['model'] == 'courses.lessonj': lessonss.append(i) elif i['model'] == 'courses.homeworkj': homeworks.append(i) elif i['model'] == 'courses.examj': exams.append(i) def achnivs(): print u'\nAchievementJ' _now = 0 big_len = len(achss) show_progress(big_len, _now) for i in achss: s = AchievementJ.objects.create( group=i['fields']['group'], title=i['fields']['title'], text=i['fields']['text'], student=new_index('access.user', i['fields']['student'], User), achievement=new_index('courses.achievements', i['fields']['achievement'], Achievements), got=i['fields']['got'], date=i['fields']['date'] ) _now += 1 show_progress(big_len, _now) pk_map['journals.achievementj'][str(i['pk'])] = str(s.id) def tej(): print u'\nПереформирование журналов TeacherJ' for i in teachers: tj, c = TeacherJ.objects.get_or_create(student=new_index('access.user', i['fields']['student'], User), course=new_index('courses.course', i['fields']['course'], Course)) # print i['fields'] if tj.start_date != i['fields']['start_date']: tj.start_date = i['fields']['start_date'] if tj.teacher != new_index('access.user', i['fields']['teacher'], User): tj.teacher = new_index('access.user', i['fields']['teacher'], User) # check_journal(tj, tj.student, tj.course) tj.save() check_journal(tj) pk_map['journals.teacherj'][str(i['pk'])] = str(tj.id) print u'\nCreate CourseThemeJ' for journal in TeacherJ.objects.all(): for theme in CourseTheme.objects.filter(course=journal.course): c, c2 = CourseThemeJ.objects.get_or_create(material=theme, student=journal.student) if c.parent != journal: c.parent = journal c.save() def get_point(point, t, f): if point: return t else: return f def lj(): print u'\nLessonJ' _now = 0 big_len = len(lessonss) show_progress(big_len, _now) for i in lessonss: # print i c, c2 = LessonJ.objects.get_or_create( student=new_index('access.user', i['fields']['student'], User), material=new_index('courses.lesson', i['fields']['lesson'], Lesson), # parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User), # material=new_index('courses.lesson', i['fields']['lesson'], Lesson).theme) ) c.success = bool(i['fields']['status'] == 'F') c.date = get_point(i['fields']['status'] != 'N', i['fields']['date'], None) c.f_date = get_point(i['fields']['status'] == 'F', i['fields']['f_date'], None) c.save() _now += 1 show_progress(big_len, _now) pk_map['journals.lessonj'][str(i['pk'])] = str(c.id) def create_try(parent, date): return HomeworkTry.objects.create( parent=parent, material=parent.material, student=parent.student, teacher=parent.teacher, date=date ) def hj(): print u'\nHomeworkJ' _now = 0 big_len = len(homeworks) show_progress(big_len, _now) for i in homeworks: c, c2 = HomeworkJ.objects.get_or_create( student=new_index('access.user', i['fields']['student'], User), material=new_index('courses.homework', i['fields']['homework'], Homework) # parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User), # material=new_index('courses.homework', i['fields']['homework'], # Homework).theme) ) c.date = i['fields']['date'] c.f_date = i['fields']['f_date'] c.teacher = new_index('access.user', i['fields']['teacher'], User) c.success = False c.save() comments = [new_index('management.comment', comment, Comment) for comment in i['fields']['comments']] _try = None for comment in comments: must_del = False if not _try: _try = create_try(c, comment.date) if 'Задача принята!
' in comment.text.encode('utf8'): _try.f_date = comment.date _try.success = True must_del = True if 'Отправлено на доработку!
' in comment.text.encode('utf8'): _try.f_date = comment.date must_del = True _try.comments.add(comment) _try.save() if must_del: _try = None must_del = False _now += 1 show_progress(big_len, _now) pk_map['journals.homeworkj'][str(i['pk'])] = str(c.id) def exj(): print u'\nExamJ' _now = 0 big_len = len(exams) show_progress(big_len, _now) for i in exams: # print i c, c2 = ExamJ.objects.get_or_create( material=new_index('courses.exam', i['fields']['exam'], Exam), student=new_index('access.user', i['fields']['student'], User) # parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User), # material___type='Ex', # material__course=new_index('courses.exam', i['fields']['exam'], # Exam).course) ) c.teacher = new_index('access.user', i['fields']['teacher'], User) c.date = i['fields']['date'] c.f_date = i['fields']['f_date'] c.success = False c.diploma = new_index('storage.storage', i['fields']['diploma'], Storage) c.save() _now += 1 show_progress(big_len, _now) pk_map['journals.examj'][str(i['pk'])] = str(c.id) if __name__ == '__main__': # achnivs() lj() hj() exj() tej() json.dump(pk_map, open('pk_maps.json', 'w'))