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.
105 lines
4.7 KiB
105 lines
4.7 KiB
# coding=utf-8
|
|
|
|
|
|
def set_hm_success(obj):
|
|
# Получить статус домашку в success
|
|
if obj['fields']['status'] == 'F':
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def create_try(obj):
|
|
# Создать попытку со всеми комментариями и результатом
|
|
global HT
|
|
HT += 1
|
|
if obj["fields"]["teacher"]:
|
|
_journal_result.append({"model": "journals.homeworktry",
|
|
"pk": HT, "fields": {"parent": obj['pk'], "student": obj['fields']['student'],
|
|
"teacher": obj['fields']['teacher'],
|
|
"material": obj['fields']['homework'],
|
|
"date": obj['fields']['date'], "f_date": obj['fields']['f_date'],
|
|
"comments": obj['fields']['comments'],
|
|
"success": set_hm_success(obj),
|
|
"expired": False}})
|
|
|
|
print 'Создание карты курса'
|
|
# id: {'themes': {}, 'exam': 'id экзамена'}
|
|
# 'themes': {'id темы': {'lessons': [список id уроков], 'homework': id дз}
|
|
_courses_map = {}
|
|
for i in _fixture:
|
|
if i['model'] == 'courses.course':
|
|
if i['pk'] not in _courses_map.keys():
|
|
# Добавить курс на карту
|
|
_courses_map[i['pk']] = {'themes': {}, 'exam': {}}
|
|
|
|
elif i['model'] == 'courses.coursetheme':
|
|
# Добавить тему в курс
|
|
if i['pk'] not in _courses_map[i['fields']['course']]['themes'].keys():
|
|
_courses_map[i['fields']['course']]['themes'][i['pk']] = {'lessons': set({}), 'homework': ''}
|
|
|
|
elif i['model'] == 'courses.exam':
|
|
# Присвоить курсу ID экзамена
|
|
_courses_map[i['fields']['course']]['exam'] = i['pk']
|
|
|
|
elif i['model'] == 'courses.homework':
|
|
# Добавить домашнее задание в тему
|
|
_courses_map[i['fields']['course']]['themes'][i['fields']['theme']]['homework'] = i['pk']
|
|
|
|
elif i['model'] == 'courses.lesson':
|
|
_courses_map[i['fields']['course']]['themes'][i['fields']['theme']]['lessons'].add(i['pk'])
|
|
|
|
# Вторая обработка
|
|
print 'Постобработка'
|
|
for key, value in _theme_counts.items():
|
|
value['fix'] = int(value['fix']) + 1
|
|
value['last'] = value['fix']
|
|
# +1 - готовый ID для новой темы
|
|
|
|
print 'Обход по карте'
|
|
_merge_map = {
|
|
'journals.teacherj': {'exclude': ['lessons', 'homeworks', 'exam', 'f_date'],
|
|
'new': {'progress': 0},
|
|
'rename': {},
|
|
'rebuild': {}},
|
|
'journals.lessonj': {'exclude': ['status'],
|
|
'new': {'success': True, 'parent': None},
|
|
'rename': {'lesson': 'material'},
|
|
'rebuild': {}},
|
|
'journals.homeworkj': {'exclude': ['status', 'comments'],
|
|
'new': {'success': set_hm_success, 'parent': None},
|
|
'rename': {'homework': 'material'},
|
|
'rebuild': {'comments': create_try}},
|
|
'journals.examj': {'exclude': ['status', 'comments'],
|
|
'new': {'success': False, 'parent': None},
|
|
'rename': {'exam': 'material'},
|
|
'rebuild': {}},
|
|
}
|
|
|
|
# Преобразовать модели объектов
|
|
_journal_result = []
|
|
for i in _journal:
|
|
if i['model'] in _merge_map.keys():
|
|
__tmp = {}
|
|
for key, value in _merge_map[i['model']]['rebuild'].items():
|
|
value(i)
|
|
for key, value in i['fields'].items():
|
|
# Исключить не используемые поля
|
|
if key not in _merge_map[i['model']]['exclude']:
|
|
if key in _merge_map[i['model']]['rename'].keys():
|
|
# Переименовать переменные
|
|
__tmp[_merge_map[i['model']]['rename'][key]] = value
|
|
else:
|
|
__tmp[key] = value
|
|
for key, value in _merge_map[i['model']]['new'].items():
|
|
if type(value) in [str, int, bool] or value is None:
|
|
__tmp[key] = value
|
|
else:
|
|
# Получение не определенного заранее ответа
|
|
__tmp[key] = value(i)
|
|
# Как получить ID журнала темы
|
|
__tmp = {"pk": i['pk'], "model": i['model'], "fields": __tmp}
|
|
_journal_result.append(__tmp)
|
|
else:
|
|
_journal_result.append(i)
|
|
json.dump(_journal_result, open('fixtures/journals.json', 'w')) |