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

# 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'))