import json from datetime import datetime from zvk.misc.timetable_pb2 import Timetable import zipfile import numpy as np def test_read_timetable_pb(): zfile = zipfile.ZipFile('relics/6407-2.ftt') timetable_pb_bytes = zfile.read('timetable.pb') timetable = Timetable.FromString(timetable_pb_bytes) term_start = datetime.fromtimestamp(timetable.properties.term_start / 1000) weeks_count = timetable.properties.weeks_count def convert_weeks(s): if s == 'a': return list(range(1, weeks_count + 1)) if s == 'o': return list(range(1, weeks_count + 1, 2)) if s == 'e': return list(range(2, weeks_count + 1, 2)) if s.startswith('c'): return list(map(int, s[1:].split(','))) raise Exception(f'Bad week identifier {s}') timetable_dict = { 'term_start': term_start.timestamp(), 'weeks_count': weeks_count, 'lessons': [] } for lesson in timetable.lesson: timetable_dict['lessons'].append({ 'day': lesson.day, 'time': [lesson.time[:4], lesson.time[4:]], 'weeks': convert_weeks(lesson.weeks), 'subject': timetable.subject[lesson.subject_id - 1].name, 'kind': timetable.kind[lesson.kind_id - 1].name, 'place': timetable.place[lesson.place_id - 1].name, 'teachers': [timetable.teacher[teacher_id - 1].name for teacher_id in lesson.teacher_id] }) timetable_json = json.dumps(timetable_dict) print(timetable_json) assert 'Дегтярев А. А.' in np.sum([ i['teachers'] for i in timetable_dict['lessons'] ])