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.
 
 
 
 
 
 

228 lines
7.7 KiB

# 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 '<span class="label label-success">Задача принята! </span><br>' in comment.text.encode('utf8'):
_try.f_date = comment.date
_try.success = True
must_del = True
if '<span class="label label-danger">Отправлено на доработку!</span><br>' 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'))