def add_sections_to_rooms(buildings, filename, intersession=False, only_active=True, debug=False, include_all_rooms=False): with open(filename, 'rt', encoding='utf8') as csvfile: reader = csv.reader(csvfile) next(reader, None) # skip the header date_format = "%m/%d/%y" n_prev = 5 prev_rows = [None] * n_prev i_prev = 0 alphabetic_zero_regex = re.compile(r"^[A-Z]0") for row in reader: if len(row) > 22: subject = row[1] number = row[2] title = row[5] primary_instructor = row[6] instructor_id = row[7] status = row[8] campus = row[9] start_date_str = row[16] end_date_str = row[17] building_code = row[18] room_number = row[19] meeting_days = row[20].split('/') start_time = row[21] end_time = row[22] if ~intersession and campus == "Intersession": if debug: print("Intersession class excluded", row) continue if only_active and status != "Active": if debug: print("Not Active class excluded", row) continue if len(start_date_str) < 1: if debug: print("ERROR: Start date invalid XXXX ", row) end_date = datetime.strptime(end_date_str, date_format) start_date = datetime.strptime(start_date_str, date_format) enrollment_cap = int('0' + row[11]) # default to zero actual_enrollment = int('0' + row[12]) # default to zero # Replace ...'s with values from previous row if CRN is the same cur_crn = row[4] if "..." in { title, primary_instructor, instructor_id, status, campus }: for prev_row in prev_rows: if prev_row is None: continue prev_crn = prev_row[4] if prev_crn == cur_crn: title = prev_row[5] primary_instructor = prev_row[6] instructor_id = prev_row[7] status = prev_row[8] campus = prev_row[9] prev_rows[i_prev] = row i_prev = (i_prev + 1) % n_prev building = get_building_by_code(buildings, building_code) if building is not None: if building_code == "SEC": # For sarkeys numbering, remove padded zero # M0204 -> M204 if alphabetic_zero_regex.match( room_number) is not None: room_number = room_number[0] + room_number[2:] room = building.get_room(room_number) if room is None and include_all_rooms: room = Room(building, room_number, 1) building.add_room(room) if room is not None: section = Section(subject, number, title, instructor_id, building, room, start_time, end_time, meeting_days, campus, enrollment_cap, actual_enrollment, start_date, end_date) room.addSection(section, debug=debug) else: if debug: print( "Building {} Room {} not found in centrally scheduled rooms" .format(building_code, room_number)) else: if debug: print( "Building {} not found in centrally scheduled rooms" .format(building_code)) return buildings