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