def parse_one_shot(row, course_inst):
    """Parses a table row for a one-time meeting and adds it to the course instance"""
    _sect_id, mtg_type, date, _mtg_doy, start_end_times, bldg, room, _ = row
    mtg_type = mtg_type.text
    date = parse_ucsd_date(date.text)
    start, end = parse_start_end_times(start_end_times)
    location = Location.new(bldg.text.strip(), room.text.strip())
    one_shot = OneShotMeeting(date, start, end, location)
    if mtg_type == config.FINAL_CODE:
        if course_inst.final is not None and course_inst.final != one_shot:
            raise ValueError, "Multiple final exams\n(Old: %s\n New: %s)" % (course_inst.final, one_shot)
        course_inst.final = one_shot
    else:
        course_inst.add_meeting(mtg_type, one_shot)
def parse_unseated_meeting(row, course_inst):
    lectures = course_inst.lectures
    _sect_id, mtg_type, sect_num, mtg_days_of_wk, start_end_times, bldg, room, instructor = row
    if _sect_id.text.strip():# req'd, but time+location TBA
        return parse_TBA_seminar_or_sect(row, course_inst)
    mtg_type = mtg_type.text
    sect_num = sect_num.text
    mtg_days_of_wk = mtg_days_of_wk.text
    days = DaysOfWeekSet.from_ucsd_abbrevs(mtg_days_of_wk)
    start, end = parse_start_end_times(start_end_times)
    location = Location.new(bldg.text.strip(), room.text.strip())
    instructor = parse_instructor(instructor) if instructor.text != NBSP else None
    meeting = RecurringMeeting(sect_num, instructor, start, end, days, location)
    course_inst.add_meeting(mtg_type, meeting)
def parse_one_shot(row, course_inst):
    """Parses a table row for a one-time meeting and adds it to the course instance"""
    _sect_id, mtg_type, date, _mtg_doy, start_end_times, bldg, room, _ = row
    mtg_type = mtg_type.text
    date = parse_ucsd_date(date.text)
    start, end = parse_start_end_times(start_end_times)
    location = Location.new(bldg.text.strip(), room.text.strip())
    one_shot = OneShotMeeting(date, start, end, location)
    if mtg_type == config.FINAL_CODE:
        if course_inst.final is not None and course_inst.final != one_shot:
            raise ValueError, "Multiple final exams\n(Old: %s\n New: %s)" % (
                course_inst.final, one_shot)
        course_inst.final = one_shot
    else:
        course_inst.add_meeting(mtg_type, one_shot)
def parse_unseated_meeting(row, course_inst):
    lectures = course_inst.lectures
    _sect_id, mtg_type, sect_num, mtg_days_of_wk, start_end_times, bldg, room, instructor = row
    if _sect_id.text.strip():  # req'd, but time+location TBA
        return parse_TBA_seminar_or_sect(row, course_inst)
    mtg_type = mtg_type.text
    sect_num = sect_num.text
    mtg_days_of_wk = mtg_days_of_wk.text
    days = DaysOfWeekSet.from_ucsd_abbrevs(mtg_days_of_wk)
    start, end = parse_start_end_times(start_end_times)
    location = Location.new(bldg.text.strip(), room.text.strip())
    instructor = parse_instructor(
        instructor) if instructor.text != NBSP else None
    meeting = RecurringMeeting(sect_num, instructor, start, end, days,
                               location)
    course_inst.add_meeting(mtg_type, meeting)
def parse_seated_meeting(row, course_inst):
    sect_id, mtg_type, sect_num, mtg_days_of_wk, start_end_times, bldg, room, instructor, avail, limit, books = row
    mtg_type = mtg_type.text
    #FIXME: PRACTICUM_CODE not strictly problematic
    if mtg_type in PROBLEMATIC_MEETING_TYPES:
        msg = "Instance of course %s deemed problematic due to including meeting of type code %s" % (repr(course_inst.code), repr(mtg_type))
        LOGGER.info(msg)
        raise ProblematicCourse, msg
    sect_id = int(sect_id.text)
    sect_num = sect_num.text
    days = DaysOfWeekSet.from_ucsd_abbrevs(mtg_days_of_wk.text)
    start, end = parse_start_end_times(start_end_times)
    bldg = bldg.text.strip()
    room = room.text.strip()
    location = Location.new(bldg, room)
    available_seats, total_seats = parse_seating(avail, limit)
    books_link = extract_JavaScript_link(books.find(ANCHOR))
    instructor = parse_instructor(instructor) if instructor.text != NBSP else None
    meeting = RecurringSeatedMeeting(sect_id, sect_num, instructor, start, end, days, available_seats, total_seats, books_link, location)
    course_inst.add_meeting(mtg_type, meeting)
def parse_seated_meeting(row, course_inst):
    sect_id, mtg_type, sect_num, mtg_days_of_wk, start_end_times, bldg, room, instructor, avail, limit, books = row
    mtg_type = mtg_type.text
    #FIXME: PRACTICUM_CODE not strictly problematic
    if mtg_type in PROBLEMATIC_MEETING_TYPES:
        msg = "Instance of course %s deemed problematic due to including meeting of type code %s" % (
            repr(course_inst.code), repr(mtg_type))
        LOGGER.info(msg)
        raise ProblematicCourse, msg
    sect_id = int(sect_id.text)
    sect_num = sect_num.text
    days = DaysOfWeekSet.from_ucsd_abbrevs(mtg_days_of_wk.text)
    start, end = parse_start_end_times(start_end_times)
    bldg = bldg.text.strip()
    room = room.text.strip()
    location = Location.new(bldg, room)
    available_seats, total_seats = parse_seating(avail, limit)
    books_link = extract_JavaScript_link(books.find(ANCHOR))
    instructor = parse_instructor(
        instructor) if instructor.text != NBSP else None
    meeting = RecurringSeatedMeeting(sect_id, sect_num, instructor, start, end,
                                     days, available_seats, total_seats,
                                     books_link, location)
    course_inst.add_meeting(mtg_type, meeting)