示例#1
0
def fetch_and_parse_week(student):
    events = schedule_parser.read(_fetch_raw_html_schedule(student.faculty, student.course, student.group,
                                                           student.form))
    return [Event(title=event['subject'],
                  description=event['description'],
                  location=event['location'],
                  starttime=event['date']['start'],
                  endtime=event['date']['end'],
                  creator=student.student) for event in events]
示例#2
0
    def test_schedule_day_student(self):
        self.assertEqual(
            read(
                open(os.path.join(self.data_dir,
                                  'schedule_day_student.htm')).read()),
            [{
                'date': {
                    'end': datetime.datetime(2013, 5, 17, 14, 25),
                    'start': datetime.datetime(2013, 5, 17, 13, 5)
                },
                'description':
                u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041a\u043e\u0440\u043d\u0435\u0435\u0432\u0435\u0446 \u0418\u0440\u0438\u043d\u0430 \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432\u043d\u0430)',
                'location':
                '3/233',
                'subject':
                u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 17, 15, 55),
                    'start': datetime.datetime(2013, 5, 17, 14, 35)
                },
                'description':
                u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432\u0430 \u042d.\u041c.)',
                'location':
                '3/230',
                'subject':
                u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 17, 17, 25),
                    'start': datetime.datetime(2013, 5, 17, 16, 5)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '3/230',
                'subject':
                u'\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 18, 14, 25),
                    'start': datetime.datetime(2013, 5, 18, 13, 5)
                },
                'description':
                u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432\u0430 \u042d.\u041c.)',
                'location':
                '1/701',
                'subject':
                u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 18, 15, 55),
                    'start': datetime.datetime(2013, 5, 18, 14, 35)
                },
                'description':
                u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u041c\u0430\u043b\u0438\u043d\u043e\u0432\u0441\u043a\u0430\u044f \u041e\u043b\u044c\u0433\u0430 \u041c\u0438\u0445\u0430\u0439\u043b\u043e\u0432\u043d\u0430)',
                'location':
                '1/601',
                'subject':
                u'\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043e\u0446\u0438\u043e\u043b\u043e\u0433\u0438\u044f'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 14, 25),
                    'start': datetime.datetime(2013, 5, 20, 13, 5)
                },
                'description':
                u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041c\u043e\u0440\u043e\u0437\u0435\u0432\u0438\u0447 \u041e\u043b\u044c\u0433\u0430 \u0410\u043d\u0430\u0442\u043e\u043b\u044c\u0435\u0432\u043d\u0430)',
                'location':
                '3/450',
                'subject':
                u'\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 15, 55),
                    'start': datetime.datetime(2013, 5, 20, 14, 35)
                },
                'description':
                u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04331, \u0412\u0438\u0440\u0448\u0438\u0446 \u041d\u0430\u0442\u0430\u043b\u0438\u044f \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/313\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04332, \u041a\u0438\u0440\u0438\u043b\u044c\u0447\u0438\u043a \u0422\u0430\u0442\u044c\u044f\u043d\u0430 \u041a\u0430\u0437\u0438\u043c\u0438\u0440\u043e\u0432\u043d\u0430 - 2/426',
                'subject':
                u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 19, 5),
                    'start': datetime.datetime(2013, 5, 20, 17, 45)
                },
                'description':
                u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0444\u0440\u043d, \u0421\u0430\u043b\u0443\u0449\u0435\u0432\u0430 \u0416\u0430\u043d\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/417',
                'subject':
                u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 21, 15, 55),
                    'start': datetime.datetime(2013, 5, 21, 14, 35)
                },
                'description':
                u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041a\u043e\u043f\u0442\u0443\u0440 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u0438\u0447)',
                'location':
                u'\xa0',
                'subject':
                u'\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 21, 17, 25),
                    'start': datetime.datetime(2013, 5, 21, 16, 5)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '3/454',
                'subject':
                u'\u0412\u044b\u0441\u0448\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 21, 19, 5),
                    'start': datetime.datetime(2013, 5, 21, 17, 45)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0410, \u041f\u0443\u043d\u0447\u0438\u043a \u0417\u043e\u044f \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u043d\u0430 - 2/402\n\u043f\u043e\u0434\u0433\u0440.\u0411, \u041f\u0435\u0442\u043a\u0435\u0432\u0438\u0447 \u041c\u0430\u0440\u0438\u0430\u043d\u043d\u0430 \u0410\u043d\u0430\u0442\u043e\u043b\u044c\u0435\u0432\u043d\u0430 - 2/401',
                'subject':
                u'16 \u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 22, 15, 55),
                    'start': datetime.datetime(2013, 5, 22, 14, 35)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '1/701',
                'subject':
                u'\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 22, 17, 25),
                    'start': datetime.datetime(2013, 5, 22, 16, 5)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '1/701',
                'subject':
                u'\u0412\u044b\u0441\u0448\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 23, 11, 5),
                    'start': datetime.datetime(2013, 5, 23, 9, 45)
                },
                'description':
                u'\u041b\u0435\u043a\u0446\u0438\u0438',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440., \u041a\u043e\u043f\u0442\u0443\u0440 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u0438\u0447 - \xa0',
                'subject':
                u'16 \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 23, 11, 5),
                    'start': datetime.datetime(2013, 5, 23, 9, 45)
                },
                'description':
                u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0440\u0443\u0441, \u0411\u043e\u0436\u043a\u043e\u0432\u0430 \u041c\u0430\u0440\u0438\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/427\u0430',
                'subject':
                u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 23, 12, 35),
                    'start': datetime.datetime(2013, 5, 23, 11, 15)
                },
                'description':
                u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0440\u0443\u0441, \u0411\u043e\u0436\u043a\u043e\u0432\u0430 \u041c\u0430\u0440\u0438\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/427\u0430',
                'subject':
                u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 23, 14, 25),
                    'start': datetime.datetime(2013, 5, 23, 13, 5)
                },
                'description':
                u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432\u0430 \u042d.\u041c.)',
                'location':
                '3/226',
                'subject':
                u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 23, 15, 55),
                    'start': datetime.datetime(2013, 5, 23, 14, 35)
                },
                'description':
                u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04331, \u0412\u0438\u0440\u0448\u0438\u0446 \u041d\u0430\u0442\u0430\u043b\u0438\u044f \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 3/440\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04332, \u041a\u0438\u0440\u0438\u043b\u044c\u0447\u0438\u043a \u0422\u0430\u0442\u044c\u044f\u043d\u0430 \u041a\u0430\u0437\u0438\u043c\u0438\u0440\u043e\u0432\u043d\u0430 - 2/428',
                'subject':
                u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 23, 19, 5),
                    'start': datetime.datetime(2013, 5, 23, 17, 45)
                },
                'description':
                u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0444\u0440\u043d, \u0421\u0430\u043b\u0443\u0449\u0435\u0432\u0430 \u0416\u0430\u043d\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 3/429',
                'subject':
                u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'
            }])

        self.assertEqual(
            read(
                open(os.path.join(self.data_dir,
                                  'schedule_day_student2.htm')).read()),
            [{
                'date': {
                    'end': datetime.datetime(2013, 5, 16, 15, 55),
                    'start': datetime.datetime(2013, 5, 16, 14, 35)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/301',
                'subject':
                u'\u0424\u0438\u043d\u0430\u043d\u0441\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0439'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 16, 17, 25),
                    'start': datetime.datetime(2013, 5, 16, 16, 5)
                },
                'description':
                u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u041a\u043b\u0438\u043d\u043e\u0432\u0430 \u0415\u043a\u0430\u0442\u0435\u0440\u0438\u043d\u0430 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u043d\u0430)',
                'location':
                '4/301',
                'subject':
                u'\u041f\u043e\u043b\u0438\u0442\u043e\u043b\u043e\u0433\u0438\u044f'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 16, 19, 5),
                    'start': datetime.datetime(2013, 5, 16, 17, 45)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/301',
                'subject':
                u'\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 17, 15, 55),
                    'start': datetime.datetime(2013, 5, 17, 14, 35)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041f\u044b\u0442\u043b\u044f\u043a \u0412.\u0412 - 4/801',
                'subject':
                u'15 \u0418\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 17, 17, 25),
                    'start': datetime.datetime(2013, 5, 17, 16, 5)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/606',
                'subject':
                u'\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 18, 14, 25),
                    'start': datetime.datetime(2013, 5, 18, 13, 5)
                },
                'description':
                u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u041a\u043b\u0438\u043d\u043e\u0432\u0430 \u0415\u043a\u0430\u0442\u0435\u0440\u0438\u043d\u0430 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u043d\u0430)',
                'location':
                '4/301',
                'subject':
                u'\u041f\u043e\u043b\u0438\u0442\u043e\u043b\u043e\u0433\u0438\u044f'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 18, 15, 55),
                    'start': datetime.datetime(2013, 5, 18, 14, 35)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/301',
                'subject':
                u'\u0424\u0438\u043d\u0430\u043d\u0441\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0439'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 18, 17, 25),
                    'start': datetime.datetime(2013, 5, 18, 16, 5)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/301',
                'subject':
                u'\u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 15, 55),
                    'start': datetime.datetime(2013, 5, 20, 14, 35)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u0427\u0438\u0442\u0430\u044f \u0413\u0438\u0433\u043b\u0430 \u041e\u0442\u0430\u0440\u043e\u0432\u0438\u0447 - 4/602',
                'subject':
                u'16 \u041c\u0435\u0442\u043e\u0434\u044b \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 15, 55),
                    'start': datetime.datetime(2013, 5, 20, 14, 35)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u041a\u0440\u0443\u043f\u043e\u0434\u0435\u0440\u043e\u0432\u0430 \u0410\u043d\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u043d\u0430 - 2/200',
                'subject':
                u'16 \u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 17, 25),
                    'start': datetime.datetime(2013, 5, 20, 16, 5)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/606',
                'subject':
                u'\u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 19, 5),
                    'start': datetime.datetime(2013, 5, 20, 17, 45)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u0427\u0438\u0442\u0430\u044f \u0413\u0438\u0433\u043b\u0430 \u041e\u0442\u0430\u0440\u043e\u0432\u0438\u0447 - 4/602',
                'subject':
                u'16 \u041c\u0435\u0442\u043e\u0434\u044b \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 20, 20, 35),
                    'start': datetime.datetime(2013, 5, 20, 19, 15)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041a\u0440\u0443\u043f\u043e\u0434\u0435\u0440\u043e\u0432\u0430 \u0410\u043d\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u043d\u0430 - 2/200',
                'subject':
                u'16 \u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 21, 15, 55),
                    'start': datetime.datetime(2013, 5, 21, 14, 35)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u0411\u043e\u0440\u043e\u0434\u0438\u043d\u0430 \u0422\u0430\u0442\u044c\u044f\u043d\u0430 \u0410\u043d\u0430\u0442\u043e\u043b\u044c\u0435\u0432\u043d\u0430 - 4/602\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u041f\u0430\u0440\u0430\u0449\u0435\u043d\u043a\u043e \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u0438\u0447 - 7/8',
                'subject':
                u'16 \u041c\u043e\u0434\u0435\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u043e\u0432\u044b\u0435 \u0438\u0433\u0440\u044b \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0432 \u0410\u041f\u041a, \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0435 \u0438 \u043b\u043e\u0433\u0438\u0441\u0442\u0438\u043a\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 21, 17, 25),
                    'start': datetime.datetime(2013, 5, 21, 16, 5)
                },
                'description':
                u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041d\u0435\u0442\u0435\u0441\u0430 \u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430)',
                'location':
                '4/301',
                'subject':
                u'\u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 21, 19, 5),
                    'start': datetime.datetime(2013, 5, 21, 17, 45)
                },
                'description':
                u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                '4/301',
                'subject':
                u'\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 22, 15, 55),
                    'start': datetime.datetime(2013, 5, 22, 14, 35)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041a\u0440\u0443\u043f\u043e\u0434\u0435\u0440\u043e\u0432\u0430 \u0410\u043d\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u043d\u0430 - 2/200',
                'subject':
                u'16 \u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 22, 15, 55),
                    'start': datetime.datetime(2013, 5, 22, 14, 35)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u041f\u044b\u0442\u043b\u044f\u043a \u0412.\u0412 - 4/801',
                'subject':
                u'16 \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 22, 17, 25),
                    'start': datetime.datetime(2013, 5, 22, 16, 5)
                },
                'description':
                u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                'location':
                u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041f\u044b\u0442\u043b\u044f\u043a \u0412.\u0412 - 4/801',
                'subject':
                u'16 \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'
            }, {
                'date': {
                    'end': datetime.datetime(2013, 5, 22, 19, 5),
                    'start': datetime.datetime(2013, 5, 22, 17, 45)
                },
                'description':
                u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041b\u0430\u0437\u0435\u0431\u043d\u0438\u043a \u042e\u0440\u0438\u0439 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u0438\u0447)',
                'location':
                '4/905',
                'subject':
                u'\u041a\u043e\u0440\u0440\u0443\u043f\u0446\u0438\u044f \u0438 \u0435\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c'
            }])
示例#3
0
    def test_schedule_day_student(self):
        self.assertEqual(read(open(os.path.join(self.data_dir, 'schedule_day_student.htm')).read()),
                         [{'date': {'end': datetime.datetime(2013, 5, 17, 14, 25),
                                    'start': datetime.datetime(2013, 5, 17, 13, 5)},
                           'description': u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041a\u043e\u0440\u043d\u0435\u0435\u0432\u0435\u0446 \u0418\u0440\u0438\u043d\u0430 \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432\u043d\u0430)',
                           'location': '3/233',
                           'subject': u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 17, 15, 55),
                                    'start': datetime.datetime(2013, 5, 17, 14, 35)},
                           'description': u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432\u0430 \u042d.\u041c.)',
                           'location': '3/230',
                           'subject': u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 17, 17, 25),
                                    'start': datetime.datetime(2013, 5, 17, 16, 5)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '3/230',
                           'subject': u'\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433'},
                          {'date': {'end': datetime.datetime(2013, 5, 18, 14, 25),
                                    'start': datetime.datetime(2013, 5, 18, 13, 5)},
                           'description': u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432\u0430 \u042d.\u041c.)',
                           'location': '1/701',
                           'subject': u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 18, 15, 55),
                                    'start': datetime.datetime(2013, 5, 18, 14, 35)},
                           'description': u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u041c\u0430\u043b\u0438\u043d\u043e\u0432\u0441\u043a\u0430\u044f \u041e\u043b\u044c\u0433\u0430 \u041c\u0438\u0445\u0430\u0439\u043b\u043e\u0432\u043d\u0430)',
                           'location': '1/601',
                           'subject': u'\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043e\u0446\u0438\u043e\u043b\u043e\u0433\u0438\u044f'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 14, 25),
                                    'start': datetime.datetime(2013, 5, 20, 13, 5)},
                           'description': u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041c\u043e\u0440\u043e\u0437\u0435\u0432\u0438\u0447 \u041e\u043b\u044c\u0433\u0430 \u0410\u043d\u0430\u0442\u043e\u043b\u044c\u0435\u0432\u043d\u0430)',
                           'location': '3/450',
                           'subject': u'\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 15, 55),
                                    'start': datetime.datetime(2013, 5, 20, 14, 35)},
                           'description': u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04331, \u0412\u0438\u0440\u0448\u0438\u0446 \u041d\u0430\u0442\u0430\u043b\u0438\u044f \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/313\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04332, \u041a\u0438\u0440\u0438\u043b\u044c\u0447\u0438\u043a \u0422\u0430\u0442\u044c\u044f\u043d\u0430 \u041a\u0430\u0437\u0438\u043c\u0438\u0440\u043e\u0432\u043d\u0430 - 2/426',
                           'subject': u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 19, 5),
                                    'start': datetime.datetime(2013, 5, 20, 17, 45)},
                           'description': u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0444\u0440\u043d, \u0421\u0430\u043b\u0443\u0449\u0435\u0432\u0430 \u0416\u0430\u043d\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/417',
                           'subject': u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'},
                          {'date': {'end': datetime.datetime(2013, 5, 21, 15, 55),
                                    'start': datetime.datetime(2013, 5, 21, 14, 35)},
                           'description': u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041a\u043e\u043f\u0442\u0443\u0440 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u0438\u0447)',
                           'location': u'\xa0',
                           'subject': u'\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 21, 17, 25),
                                    'start': datetime.datetime(2013, 5, 21, 16, 5)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '3/454',
                           'subject': u'\u0412\u044b\u0441\u0448\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 21, 19, 5),
                                    'start': datetime.datetime(2013, 5, 21, 17, 45)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0410, \u041f\u0443\u043d\u0447\u0438\u043a \u0417\u043e\u044f \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u043d\u0430 - 2/402\n\u043f\u043e\u0434\u0433\u0440.\u0411, \u041f\u0435\u0442\u043a\u0435\u0432\u0438\u0447 \u041c\u0430\u0440\u0438\u0430\u043d\u043d\u0430 \u0410\u043d\u0430\u0442\u043e\u043b\u044c\u0435\u0432\u043d\u0430 - 2/401',
                           'subject': u'16 \u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438'},
                          {'date': {'end': datetime.datetime(2013, 5, 22, 15, 55),
                                    'start': datetime.datetime(2013, 5, 22, 14, 35)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '1/701',
                           'subject': u'\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433'},
                          {'date': {'end': datetime.datetime(2013, 5, 22, 17, 25),
                                    'start': datetime.datetime(2013, 5, 22, 16, 5)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '1/701',
                           'subject': u'\u0412\u044b\u0441\u0448\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 23, 11, 5),
                                    'start': datetime.datetime(2013, 5, 23, 9, 45)},
                           'description': u'\u041b\u0435\u043a\u0446\u0438\u0438',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440., \u041a\u043e\u043f\u0442\u0443\u0440 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u043e\u0432\u0438\u0447 - \xa0',
                           'subject': u'16 \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 23, 11, 5),
                                    'start': datetime.datetime(2013, 5, 23, 9, 45)},
                           'description': u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0440\u0443\u0441, \u0411\u043e\u0436\u043a\u043e\u0432\u0430 \u041c\u0430\u0440\u0438\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/427\u0430',
                           'subject': u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'},
                          {'date': {'end': datetime.datetime(2013, 5, 23, 12, 35),
                                    'start': datetime.datetime(2013, 5, 23, 11, 15)},
                           'description': u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0440\u0443\u0441, \u0411\u043e\u0436\u043a\u043e\u0432\u0430 \u041c\u0430\u0440\u0438\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 2/427\u0430',
                           'subject': u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'},
                          {'date': {'end': datetime.datetime(2013, 5, 23, 14, 25),
                                    'start': datetime.datetime(2013, 5, 23, 13, 5)},
                           'description': u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432\u0430 \u042d.\u041c.)',
                           'location': '3/226',
                           'subject': u'\u041c\u0438\u043a\u0440\u043e\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 23, 15, 55),
                                    'start': datetime.datetime(2013, 5, 23, 14, 35)},
                           'description': u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04331, \u0412\u0438\u0440\u0448\u0438\u0446 \u041d\u0430\u0442\u0430\u043b\u0438\u044f \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 3/440\n\u043f\u043e\u0434\u0433\u0440.\u0430\u043d\u04332, \u041a\u0438\u0440\u0438\u043b\u044c\u0447\u0438\u043a \u0422\u0430\u0442\u044c\u044f\u043d\u0430 \u041a\u0430\u0437\u0438\u043c\u0438\u0440\u043e\u0432\u043d\u0430 - 2/428',
                           'subject': u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'},
                          {'date': {'end': datetime.datetime(2013, 5, 23, 19, 5),
                                    'start': datetime.datetime(2013, 5, 23, 17, 45)},
                           'description': u'\u0417\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u044b',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0444\u0440\u043d, \u0421\u0430\u043b\u0443\u0449\u0435\u0432\u0430 \u0416\u0430\u043d\u043d\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430 - 3/429',
                           'subject': u'16 \u0418\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a'}])

        self.assertEqual(read(open(os.path.join(self.data_dir, 'schedule_day_student2.htm')).read()),
                         [{'date': {'end': datetime.datetime(2013, 5, 16, 15, 55),
                                    'start': datetime.datetime(2013, 5, 16, 14, 35)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/301',
                           'subject': u'\u0424\u0438\u043d\u0430\u043d\u0441\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0439'},
                          {'date': {'end': datetime.datetime(2013, 5, 16, 17, 25),
                                    'start': datetime.datetime(2013, 5, 16, 16, 5)},
                           'description': u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u041a\u043b\u0438\u043d\u043e\u0432\u0430 \u0415\u043a\u0430\u0442\u0435\u0440\u0438\u043d\u0430 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u043d\u0430)',
                           'location': '4/301',
                           'subject': u'\u041f\u043e\u043b\u0438\u0442\u043e\u043b\u043e\u0433\u0438\u044f'},
                          {'date': {'end': datetime.datetime(2013, 5, 16, 19, 5),
                                    'start': datetime.datetime(2013, 5, 16, 17, 45)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/301',
                           'subject': u'\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 17, 15, 55),
                                    'start': datetime.datetime(2013, 5, 17, 14, 35)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041f\u044b\u0442\u043b\u044f\u043a \u0412.\u0412 - 4/801',
                           'subject': u'15 \u0418\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 17, 17, 25),
                                    'start': datetime.datetime(2013, 5, 17, 16, 5)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/606',
                           'subject': u'\u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 18, 14, 25),
                                    'start': datetime.datetime(2013, 5, 18, 13, 5)},
                           'description': u'\u0421\u0435\u043c\u0438\u043d\u0430\u0440\u044b(\u041a\u043b\u0438\u043d\u043e\u0432\u0430 \u0415\u043a\u0430\u0442\u0435\u0440\u0438\u043d\u0430 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u043d\u0430)',
                           'location': '4/301',
                           'subject': u'\u041f\u043e\u043b\u0438\u0442\u043e\u043b\u043e\u0433\u0438\u044f'},
                          {'date': {'end': datetime.datetime(2013, 5, 18, 15, 55),
                                    'start': datetime.datetime(2013, 5, 18, 14, 35)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/301',
                           'subject': u'\u0424\u0438\u043d\u0430\u043d\u0441\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0439'},
                          {'date': {'end': datetime.datetime(2013, 5, 18, 17, 25),
                                    'start': datetime.datetime(2013, 5, 18, 16, 5)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/301',
                           'subject': u'\u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 15, 55),
                                    'start': datetime.datetime(2013, 5, 20, 14, 35)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u0427\u0438\u0442\u0430\u044f \u0413\u0438\u0433\u043b\u0430 \u041e\u0442\u0430\u0440\u043e\u0432\u0438\u0447 - 4/602',
                           'subject': u'16 \u041c\u0435\u0442\u043e\u0434\u044b \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 15, 55),
                                    'start': datetime.datetime(2013, 5, 20, 14, 35)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u041a\u0440\u0443\u043f\u043e\u0434\u0435\u0440\u043e\u0432\u0430 \u0410\u043d\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u043d\u0430 - 2/200',
                           'subject': u'16 \u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 17, 25),
                                    'start': datetime.datetime(2013, 5, 20, 16, 5)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/606',
                           'subject': u'\u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 19, 5),
                                    'start': datetime.datetime(2013, 5, 20, 17, 45)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u0427\u0438\u0442\u0430\u044f \u0413\u0438\u0433\u043b\u0430 \u041e\u0442\u0430\u0440\u043e\u0432\u0438\u0447 - 4/602',
                           'subject': u'16 \u041c\u0435\u0442\u043e\u0434\u044b \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 20, 20, 35),
                                    'start': datetime.datetime(2013, 5, 20, 19, 15)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041a\u0440\u0443\u043f\u043e\u0434\u0435\u0440\u043e\u0432\u0430 \u0410\u043d\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u043d\u0430 - 2/200',
                           'subject': u'16 \u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'},
                          {'date': {'end': datetime.datetime(2013, 5, 21, 15, 55),
                                    'start': datetime.datetime(2013, 5, 21, 14, 35)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u0411\u043e\u0440\u043e\u0434\u0438\u043d\u0430 \u0422\u0430\u0442\u044c\u044f\u043d\u0430 \u0410\u043d\u0430\u0442\u043e\u043b\u044c\u0435\u0432\u043d\u0430 - 4/602\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u041f\u0430\u0440\u0430\u0449\u0435\u043d\u043a\u043e \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u0438\u0447 - 7/8',
                           'subject': u'16 \u041c\u043e\u0434\u0435\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u043e\u0432\u044b\u0435 \u0438\u0433\u0440\u044b \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0432 \u0410\u041f\u041a, \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0435 \u0438 \u043b\u043e\u0433\u0438\u0441\u0442\u0438\u043a\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 21, 17, 25),
                                    'start': datetime.datetime(2013, 5, 21, 16, 5)},
                           'description': u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041d\u0435\u0442\u0435\u0441\u0430 \u041b\u044e\u0434\u043c\u0438\u043b\u0430 \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430)',
                           'location': '4/301',
                           'subject': u'\u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'},
                          {'date': {'end': datetime.datetime(2013, 5, 21, 19, 5),
                                    'start': datetime.datetime(2013, 5, 21, 17, 45)},
                           'description': u'\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': '4/301',
                           'subject': u'\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0430'},
                          {'date': {'end': datetime.datetime(2013, 5, 22, 15, 55),
                                    'start': datetime.datetime(2013, 5, 22, 14, 35)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041a\u0440\u0443\u043f\u043e\u0434\u0435\u0440\u043e\u0432\u0430 \u0410\u043d\u043d\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u043d\u0430 - 2/200',
                           'subject': u'16 \u041e\u0441\u043d\u043e\u0432\u044b \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u0443\u0447\u0435\u0442'},
                          {'date': {'end': datetime.datetime(2013, 5, 22, 15, 55),
                                    'start': datetime.datetime(2013, 5, 22, 14, 35)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0431, \u041f\u044b\u0442\u043b\u044f\u043a \u0412.\u0412 - 4/801',
                           'subject': u'16 \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 22, 17, 25),
                                    'start': datetime.datetime(2013, 5, 22, 16, 5)},
                           'description': u'\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u044f',
                           'location': u'\xa0\n\u043f\u043e\u0434\u0433\u0440.\u0430, \u041f\u044b\u0442\u043b\u044f\u043a \u0412.\u0412 - 4/801',
                           'subject': u'16 \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0435'},
                          {'date': {'end': datetime.datetime(2013, 5, 22, 19, 5),
                                    'start': datetime.datetime(2013, 5, 22, 17, 45)},
                           'description': u'\u041b\u0435\u043a\u0446\u0438\u0438(\u041b\u0430\u0437\u0435\u0431\u043d\u0438\u043a \u042e\u0440\u0438\u0439 \u0412\u0438\u043a\u0442\u043e\u0440\u043e\u0432\u0438\u0447)',
                           'location': '4/905',
                           'subject': u'\u041a\u043e\u0440\u0440\u0443\u043f\u0446\u0438\u044f \u0438 \u0435\u0435 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c'}]
        )