From 4d8b7336d20cd4006063ad2b3cdf4ba2b2e6b04e Mon Sep 17 00:00:00 2001 From: Millian Poquet <millian.poquet@irit.fr> Date: Thu, 19 Sep 2024 13:23:07 +0200 Subject: [PATCH] code: enable fetching more resource types now you can fetch: - course subjects (e.g., KINXIB11 for BAS) - teachers (some number associated with you on celcat) - rooms (e.g., 'FSI+/+U3-305' for U3-305) - student groups (some number associated with them on celcat) - students (some number associated with them on celcat) --- lflex_celcat_survival/course_request.py | 2 +- lflex_celcat_survival/fetch.py | 38 ++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/lflex_celcat_survival/course_request.py b/lflex_celcat_survival/course_request.py index 68acc46..ab8108c 100644 --- a/lflex_celcat_survival/course_request.py +++ b/lflex_celcat_survival/course_request.py @@ -15,4 +15,4 @@ class CourseRequest: def do_request(self, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): (date_min, date_max, apogee_codes) = self.generate_request_input() - return fetch.do_celcat_calendar_request(date_min, date_max, apogee_codes, session, url) + return fetch.do_celcat_request_subjects(date_min, date_max, apogee_codes, session, url) diff --git a/lflex_celcat_survival/fetch.py b/lflex_celcat_survival/fetch.py index b1deb1d..8a1580d 100644 --- a/lflex_celcat_survival/fetch.py +++ b/lflex_celcat_survival/fetch.py @@ -1,21 +1,51 @@ import logging import requests -def do_celcat_calendar_request(min_date, max_date, module_apogee_codes, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): +def do_celcat_slot_request(min_date, max_date, res_type, codes, session, url): assert min_date < max_date, f"min_date (value={min_date}) should be strictly greater than max_date (value={max_date})" headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} fields = [ f'start={min_date}', f'end={max_date}', - 'resType=100', + f'resType={res_type}', 'calView=agendaWeek', - ] + ['federationIds%5B%5D={}'.format(apogee_code) for apogee_code in module_apogee_codes] + ] + ['federationIds%5B%5D={}'.format(code) for code in codes] fields_str = '&'.join(fields) - logging.info(f'Fetching modules {module_apogee_codes} from {min_date} to {max_date} on url={url}') + logging.info(f'Fetching {codes} (resource type {res_type}) from {min_date} to {max_date} on url={url}') response = session.post(url, data=fields_str, headers=headers) if not response.ok: logging.error(f'POST HTTP request failed (status code {response.status_code}): {response.reason}') logging.error(f'Request response text:\n---\n{response.text}\n---') response.raise_for_status() return response.text + +def do_celcat_request_subjects(min_date, max_date, subject_codes, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): + ''' + Fetch calendar slots associated with specific course subjects (apogee codes) in a date range + ''' + return do_celcat_slot_request(min_date, max_date, 100, subject_codes, session, url) + +def do_celcat_request_teachers(min_date, max_date, teacher_codes, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): + ''' + Fetch calendar slots associated with given teachers in a date range + ''' + return do_celcat_slot_request(min_date, max_date, 101, teacher_codes, session, url) + +def do_celcat_request_rooms(min_date, max_date, room_names, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): + ''' + Fetch calendar slots associated with given rooms in a date range + ''' + return do_celcat_slot_request(min_date, max_date, 102, room_names, session, url) + +def do_celcat_request_groups(min_date, max_date, group_codes, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): + ''' + Fetch calendar slots associated with given student groups in a date range + ''' + return do_celcat_slot_request(min_date, max_date, 103, group_codes, session, url) + +def do_celcat_request_students(min_date, max_date, student_codes, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'): + ''' + Fetch calendar slots associated with given students in a date range + ''' + return do_celcat_slot_request(min_date, max_date, 104, student_codes, session, url) -- GitLab