def courses_to_slots(courses, locked_sections, semester, optional_course_ids): """ Return a list of lists of Slots. Each Slot sublist represents the list of possibilities for a given course and section type, i.e. a valid timetable consists of any one slot from each sublist. """ slots = [] optional_course_ids = set(optional_course_ids) for course in courses: is_optional = course.id in optional_course_ids grouped = get_sections_by_section_type(course, semester) for section_type, sections in grouped.iteritems(): locked_section_code = locked_sections.get(str(course.id), {}).get(section_type) section_codes = [section.meeting_section for section in sections] if locked_section_code in section_codes: locked_section = next( s for s in sections if s.meeting_section == locked_section_code) locked_slot = Slot(course, locked_section, locked_section.offering_set.all(), is_optional=is_optional, is_locked=True) slots.append([locked_slot]) else: possibilities = [ Slot(course, section, section.offering_set.all(), is_optional=is_optional, is_locked=False) for section in sections ] slots.append(possibilities) return slots
def courses_to_slots(courses, locked_sections, semester, optional_course_ids): """ Return a list of lists of Slots. Each Slot sublist represents the list of possibilities for a given course and section type, i.e. a valid timetable consists of any one slot from each sublist. """ slots = [] optional_course_ids = set(optional_course_ids) for course in courses: is_optional = course.id in optional_course_ids grouped = get_sections_by_section_type(course, semester) for section_type, sections in grouped.iteritems(): locked_section_code = locked_sections.get(str(course.id), {}).get(section_type) section_codes = [section.meeting_section for section in sections] if locked_section_code in section_codes: locked_section = next(s for s in sections if s.meeting_section == locked_section_code) locked_slot = Slot(course, locked_section, locked_section.offering_set.all(), is_optional=is_optional, is_locked=True) slots.append([locked_slot]) else: possibilities = [Slot(course, section, section.offering_set.all(), is_optional=is_optional, is_locked=False) for section in sections] slots.append(possibilities) return slots