Rosebotics / CSSE120AutoGradebook

Script for automatically looking through the CSSE120 gradebook for missing grade items
MIT License
0 stars 2 forks source link

Making the system into a two step process with input parameters #1

Closed fisherds closed 4 years ago

fisherds commented 4 years ago

Hey Zach, I talked with Dr. Mutchler today and he has good ideas for the CSSE120 auto grade checker scripts. Rational: Sometimes it's nice to be able to do weird 1 off things. For example, you want to only review 3 quizzes or you want to be able to generate a report for only 1 student, etc. Also we need ways to change other parameters. Anyway here is the direction we want to move:

Two scripts:

Three input files:

prepare_input_files.py

prepare_input_files.py has a clear spot at the top of the code for the input parameters. These variables can be modified before the script is run. For example here are the ones I want:

# Input parameters:
gradebook_file = 'inputs/Grades-20200110_1919.csv'
update_studentlist=True
update_assignments=True
assignment_percentage_threshold=60  # Only used if update_assignments=True

Explaination: The gradebook_file location can be changed as needed in the script before it is run. This script has no authentication needs. It uses the Gradebook.csv to auto-update the studentlist and assignments before the next step. By being two steps those files could be modified for handling weird situations. The list of students in studentlist.txt will just be a raw list of usernames one per line. No other data, no header, not a csv, just one username per line sorted alphabetically. The list of assignments in assignments.csv will have three columns with the header row "assignment name, percent complete, will be processed". Example of a row of data: "Paper quiz Session 4: More Accumulators,0.93,True" or another example "Quiz:Session 11 code: MoreSequences II Dropbox,0.0,False". The order should be the same order that Moodle gives, no category averages should be present, just assignments.

run_autogradebook.py

run_autogradebook.py has a clear spot at the top of the code for the input parameters. These variables can be modified before the script is run. For example here are the ones I want:

# Input parameters:
gradebook_file = 'inputs/Grades-20200110_1919.csv'
#studentlist_file=None  # use all students
#studentlist_file="inputs/section1.txt"  # Example of a manual student list.
#studentlist_file="inputs/onestudent.txt"  # Example of a manual student list.
studentlist_file="inputs/studentslist.txt"
#assignments_file=None   # use the assignment_percentage_threshold to decide
assignments_file="inputs/assignments.csv"
assignment_percentage_threshold=60  # Only used if assignments_file=None
username = "fisherds"
send_emails_to_students=False
min_number_of_missing_assignments_to_get_an_email=1
#cc_email=None
cc_email="fisherds@gmail.com"  #Emails will be sent to cc_email even if students get no emails
sender_email="fisherds@gmail.com"
subject="Missing CSSE120 Assignments"
msg_format_string = MIMEText("Hello {},\n\nYou are currently missing:\n\n{}\nplease submit these as soon as you can. Talk to your professor if you have any questions.\n\nRemember, you must turn in ALL assignments to pass the class!")
signature=MIMEText("\n\nThank you,\nDave Fisher\nCSSE120 Grader

The studentlist_file and assignments_file can be either None or have a specified file, notice above that I have the None like commented out at present and the other line used. That can be swapped, so it's nice to comment them out if you want to switch it later. if studentlist_file=None then all students in the Gradebook file are used. Same with Assignments, if assignments_file=None then the existing method is used what look for which assignments to use. So it's overridable basically with the inputs if needed. The other variables I can explain as needed. :)

Also I have some ideas for an /output file, but we'll save those for another issue request. Also I have ideas for

Oh also it's important to never check into github any gradebook or studentlist.txt files. That would be a FERPA violation. I'll add a .gitignore to the /inputs folder

fisherds commented 4 years ago

Status update: Zach finished the prepare_input_files.py and did it with a GUI. It's cool. Ready to move on to step #2.

fisherds commented 4 years ago

It works. Step #1 is optional, but useful to hand 1 offs. Nice work Zach!