Example #1
0
    def events(self, course):
        parameters = {
            'tLinkType': 'modules',
            'dlFilter': '',
            'tWildcard': '',
            'dlObject': course.identifier,
            'lbWeeks': 't',
            'lbDays': '1-7',
            'dlPeriod': '1-32',
            'dlType': 'TextSpreadsheet;swsurl;SWSCUST Object TextSpreadsheet',
            'bGetTimetable': '',
        }
        timetable_page = self.post(Client.base_url, parameters=parameters)
        day_numbered_trs = enumerate(
            timetable_page.xpath(
                '//table[@class="spreadsheet"]//tr[not(contains(@class, "columnTitles"))]'
            ))

        events = []
        for (day_number, event_row) in day_numbered_trs:
            event_tds = event_row.xpath('./td')
            event = Event()
            event.uid = course.identifier + '-' + event_tds[
                0].text + '@timetab.benjeffrey.com'
            event.add('summary', event_tds[0].text)
            event.add('description', event_tds[1].text)
            event.add('dtstamp', datetime.now())

            start_time = datetime.strptime(event_tds[3].text.strip(),
                                           '%H:%M').time()
            end_time = datetime.strptime(event_tds[4].text.strip(),
                                         '%H:%M').time()
            weeks = self.dateranges_for_week_str(event_tds[5].text)
            event.add(
                'dtstart',
                datetime.combine(weeks[0].date + timedelta(days=day_number),
                                 start_time))
            event.add(
                'dtend',
                datetime.combine(weeks[0].date + timedelta(days=day_number),
                                 start_time))
            for week in weeks:
                event.add('rdate', week.date + timedelta(days=day_number))

            location = event_tds[7].text.strip() + ', ' + event_tds[6].xpath(
                './a/text()')[0].strip()
            event.add('location', location)

            event.add('categories', ['EDUCATION', event_tds[2].text])

            events.append(event)
        return events
Example #2
0
    def events(self, course):
        parameters = {
            'tLinkType': 'modules',
            'dlFilter':  '',
            'tWildcard': '',
            'dlObject':  course.identifier,
            'lbWeeks':   't',
            'lbDays':    '1-7',
            'dlPeriod':  '1-32',
            'dlType':    'TextSpreadsheet;swsurl;SWSCUST Object TextSpreadsheet',
            'bGetTimetable': '',
        }
        timetable_page = self.post(Client.base_url, parameters=parameters)
        day_numbered_trs = enumerate(timetable_page.xpath('//table[@class="spreadsheet"]//tr[not(contains(@class, "columnTitles"))]'))

        events = []
        for (day_number, event_row) in day_numbered_trs:
            event_tds = event_row.xpath('./td')
            event = Event()
            event.uid = course.identifier + '-' + event_tds[0].text + '@timetab.benjeffrey.com'
            event.add('summary', event_tds[0].text)
            event.add('description', event_tds[1].text)
            event.add('dtstamp', datetime.now())

            start_time = datetime.strptime(event_tds[3].text.strip(), '%H:%M').time()
            end_time = datetime.strptime(event_tds[4].text.strip(), '%H:%M').time()
            weeks = self.dateranges_for_week_str(event_tds[5].text)
            event.add('dtstart',
                      datetime.combine(weeks[0].date + timedelta(days=day_number),
                                       start_time))
            event.add('dtend',
                      datetime.combine(weeks[0].date + timedelta(days=day_number),
                                       start_time))
            for week in weeks:
                event.add('rdate', week.date + timedelta(days=day_number))

            location = event_tds[7].text.strip() + ', ' + event_tds[6].xpath('./a/text()')[0].strip()
            event.add('location', location)

            event.add('categories', ['EDUCATION', event_tds[2].text])

            events.append(event)
        return events