diff --git a/timetabling/get-practical-groups.py b/timetabling/get-practical-groups.py index e04c6c41712c7a79c581206fb4b503b959b1788f..52f0e5a86ab7541ab8e3d87c509ce594510b7d01 100644 --- a/timetabling/get-practical-groups.py +++ b/timetabling/get-practical-groups.py @@ -36,12 +36,13 @@ from getpass import getpass from typing import Dict, Optional -if len(sys.argv) < 3: - print("Usage: python get-practical-groups.py <mod_code> <student-list.csv>") +if len(sys.argv) < 4: + print("Usage: python get-practical-groups.py <mod_code> <term1|term2|term3> <student-list.csv>") exit(-1) mod_code = sys.argv[1] -student_list_csv = sys.argv[2] +term = sys.argv[2] +student_list_csv = sys.argv[3] ACADEMIC_YEAR = "2425" TT_HOST = "webtimetables.royalholloway.ac.uk" @@ -76,6 +77,12 @@ HEADERS = { BATCH_SIZE = 50 BATCH_PAUSE = 3 # seconds +TERMS = { + "term1": "2;3;4;5;6;7;8;9;10;11;12", + "term2": "18;19;20;21;22;23;24;25;26;27;28", + "term3": "33;34;35;36;37;38" +} + @dataclass class Student: sid : str @@ -134,9 +141,10 @@ def make_request(form_data, cookies): update_form_data(response, form_data) return response.text -def get_timetable(students : Dict[str, Student]): +def get_timetable(students : Dict[str, Student], weeks : str): """Get the timetable and update student info - Adds timetable data to each student""" + Adds timetable data to each student + :param weeks: see TERMS variable""" form_data = dict() initialise_form_data(form_data) cookies = login(form_data) @@ -185,7 +193,7 @@ def get_timetable(students : Dict[str, Student]): time.sleep(BATCH_PAUSE) form_data.update({ "dlObject": batch_ids, - "lbWeeks": "2;3;4;5;6;7;8;9;10;11;12", + "lbWeeks": weeks, "lbDays": "1-5", "dlPeriod": "1-28", "RadioType": "individual;swsurl;swsurl", @@ -200,7 +208,7 @@ def parse_timetable(students : Dict[str, Student], timetable : str): """Add lab session data from timetable html Assumes timetable_name filled in per student""" name_to_id = { s.timetable_name : s.sid for s in students.values() } - soup = BeautifulSoup(timetable, "lxml") + soup = BeautifulSoup(timetable, "html.parser") current_student = None @@ -232,8 +240,13 @@ def get_students(student_list_csv : str) -> Dict[str, Student]: students[sid] = Student(sid) return students +weeks = TERMS.get(term.lower()) +if weeks is None: + print("Unrecognised term:", term) + exit(-1) + students = get_students(student_list_csv) -get_timetable(students) +get_timetable(students, weeks) writer = csv.writer(sys.stdout) writer.writerow(["ID", "Group"])