From 3111eea84f1c06895c097aa002dcf559f87d755c Mon Sep 17 00:00:00 2001
From: Matthew Hague <matthew.hague@rhul.ac.uk>
Date: Sat, 4 Jan 2025 11:38:07 +0000
Subject: [PATCH] add(timetable): add term argument to get_practical_groups

---
 timetabling/get-practical-groups.py | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/timetabling/get-practical-groups.py b/timetabling/get-practical-groups.py
index e04c6c4..52f0e5a 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"])
-- 
GitLab