def run_arguments(GG_ARGUMENTS, preference=None): """ Run different algorithms with input arguments """ STUDENT_IDENTIFIERS = remove_absent_students.remove_missing_students( GG_ARGUMENTS.absentees, read_student_file.read_csv_data(GG_ARGUMENTS.file)) logging.info("GatorGrouper will group these students:") logging.info("\n %s", display.create_escaped_string_from_list(STUDENT_IDENTIFIERS)) # shuffle the student identifiers SHUFFLED_STUDENT_IDENTIFIERS = group_creation.shuffle_students( STUDENT_IDENTIFIERS) logging.info("GatorGrouper randomly ordered the students:") logging.info( "\n %s", display.create_escaped_string_from_list(SHUFFLED_STUDENT_IDENTIFIERS)) GROUPED_STUDENTS = input_interface( students=SHUFFLED_STUDENT_IDENTIFIERS, method=GG_ARGUMENTS.method, num_group=GG_ARGUMENTS.num_group, preferences=preference, preferences_weight=GG_ARGUMENTS.preferences_weight, preferences_weight_match=GG_ARGUMENTS.preferences_weight_match, objective_weights=GG_ARGUMENTS.objective_weights, objective_measures=GG_ARGUMENTS.objective_measures, ) return GROUPED_STUDENTS
def test_file_argument_empty(): """Check that invalid file arguments will not verify correctly""" wrong_arguments = ["--file", ""] parsed_arguments = parse_arguments.parse_arguments(wrong_arguments) input_list = read_student_file.read_csv_data(parsed_arguments.file) checker = parse_arguments.check_valid(parsed_arguments, input_list) assert checker is False
def test_valid_size(generate_csv): """Check that valid size arguments will not verify correctly""" correct_arguments = ["--file", generate_csv, "--group-size", "3"] parsed_arguments = parse_arguments.parse_arguments(correct_arguments) input_list = read_student_file.read_csv_data(parsed_arguments.file) checker = parse_arguments.check_valid(parsed_arguments, input_list) assert checker is True
def test_invalid_input(generate_csv): """Check that invalid size and number arguments will not verify correctly""" wrong_arguments = ["--file", generate_csv, "--num-group", "7"] parsed_arguments = parse_arguments.parse_arguments(wrong_arguments) input_list = read_student_file.read_csv_data(parsed_arguments.file) checker = parse_arguments.check_valid(parsed_arguments, input_list) assert checker is False
def test_file_argument_verifiable(generate_csv): """Check that valid file arguments will verify correctly""" correct_arguments = ["--file", generate_csv] parsed_arguments = parse_arguments.parse_arguments(correct_arguments) input_list = read_student_file.read_csv_data(parsed_arguments.file) checker = parse_arguments.check_valid(parsed_arguments, input_list) assert checker is True
def test_read_student_file_no_header_float(generate_csv_float_no_header): """ Test read_student_file """ expectedoutput = [ ["delgrecoj", 1.2, 0.7, 1.1, 0.2], ["delgrecoj2", 0.1, 0.5, 0.8, 0.6], ] assert (read_student_file.read_csv_data(generate_csv_float_no_header) == expectedoutput)
def test_read_student_file_no_header(generate_csv_no_header): """ Test read_student_file """ expectedoutput = [ ["delgrecoj", True, True, False, True], ["delgrecoj2", True, True, True, True], ] assert read_student_file.read_csv_data( generate_csv_no_header) == expectedoutput
def test_read_student_file(generate_csv): """ Test read_student_file """ expectedoutput = [ ["delgrecoj", True, True, False, True], ["delgrecoj2", True, True, False, True], ["delgrecoj3", True, True, False, True], ["delgrecoj4", True, True, False, True], ["delgrecoj5", True, True, False, True], ["delgrecoj6", True, True, False, True], ] assert read_student_file.read_csv_data(generate_csv) == expectedoutput
def check_valid(args, students_list): """Verify the command-line arguments""" verified_arguments = False students_list_length = len(students_list) if args.group_size > 1 and args.group_size <= students_list_length / 2: verified_arguments = True if args.num_group > 1 and args.group_size <= students_list_length / 2: verified_arguments = True if args.file is constants.NONE: verified_arguments = False if read_student_file.read_csv_data(args.file) == "": verified_arguments = False return verified_arguments
def test_run_graph(generate_csv, generate_csv_preference): """ Test if the main program can run group graph with preference """ command = [ "--file", generate_csv, "--num-group", "2", "--method", "graph", "--preferences", generate_csv_preference, "--preferences-weight", "1.1", "--preferences-weight-match", "1.3", ] input_arguments = parse_arguments.parse_arguments(command) preference = dict(read_student_file.read_csv_data(input_arguments.preferences)) output = run.run_arguments(input_arguments, preference) assert len(output) == 2
from gatorgrouper.utils import parse_arguments from gatorgrouper.utils import read_student_file from gatorgrouper.utils import display from gatorgrouper.utils import run if __name__ == "__main__": # pragma: no cover # parse the arguments and display welcome message GG_ARGUMENTS = parse_arguments.parse_arguments(sys.argv[1:]) display.display_welcome_message() logging.info("Configuration of GatorGrouper:") logging.debug(GG_ARGUMENTS) # read in the student identifiers from the specified file input_list = read_student_file.read_csv_data(GG_ARGUMENTS.file) if GG_ARGUMENTS.preferences is None: preference = None else: # Filter out empty names and students without preferences from the preferences CSV preference_list = [[ entry for entry in row if entry != "" ] for row in read_student_file.read_csv_data(GG_ARGUMENTS.preferences) if len(row) > 1] # Associate student with set of preferred students preference = {row[0]: set(row[1:]) for row in preference_list} check_if_arguments_valid = parse_arguments.check_valid( GG_ARGUMENTS, input_list) if check_if_arguments_valid is False: print("Incorrect command-line arguments.") sys.exit(1)
def test_read_student_file_float(generate_csv_float): """ Test read_student_file """ expectedoutput = [["delgrecoj", 1.2, 1.1, 0.9, 2.3]] assert read_student_file.read_csv_data( generate_csv_float) == expectedoutput
def test_no_file_found(): """ No file found """ assert read_student_file.read_csv_data("fakepath") == ""
from gatorgrouper.utils import group_rrobin from gatorgrouper.utils import group_random from gatorgrouper.utils import group_graph from gatorgrouper.utils import display from gatorgrouper.utils import constants if __name__ == "__main__": # pragma: no cover # parse the arguments and display welcome message GG_ARGUMENTS = parse_arguments.parse_arguments(sys.argv[1:]) display.display_welcome_message() logging.info("Configuration of GatorGrouper:") logging.debug(GG_ARGUMENTS) # read in the student identifiers from the specified file input_list = read_student_file.read_csv_data(GG_ARGUMENTS.file) check_if_arguments_valid = parse_arguments.check_valid( GG_ARGUMENTS, input_list) if check_if_arguments_valid is False: print("Incorrect command-line arguments.") sys.exit(1) else: STUDENT_IDENTIFIERS = remove_absent_students.remove_missing_students( GG_ARGUMENTS.absentees, read_student_file.read_csv_data(GG_ARGUMENTS.file)) logging.info("GatorGrouper will group these students:") logging.info( "\n %s", display.create_escaped_string_from_list(STUDENT_IDENTIFIERS)) # shuffle the student identifiers