From 14de8b4ad04be0a37d38a253512e416c3ff5f32a Mon Sep 17 00:00:00 2001 From: Millian Poquet <millian.poquet@irit.fr> Date: Sun, 11 Sep 2022 14:58:17 +0200 Subject: [PATCH] code: enable fetching data without input data file --- src/script.py | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/script.py b/src/script.py index 1206869..5861c32 100644 --- a/src/script.py +++ b/src/script.py @@ -9,30 +9,34 @@ class CourseRequest: self.df = pd.read_csv(filename, parse_dates=['begin_date', 'end_date']) self.df['course_request_id'] = self.df.index - def generate_request_body(self): + def generate_request_input(self): date_range_min = min(self.df['begin_date']).strftime("%Y-%m-%d") date_range_max = (max(self.df['end_date']) + pd.Timedelta(days=1)).strftime("%Y-%m-%d") apogee_codes = self.df['module_apogee'].unique() - fields = [ - f'start={date_range_min}', - f'end={date_range_max}', - 'resType=100', - 'calView=agendaWeek', - ] + ['federationIds%5B%5D={}'.format(apogee_code) for apogee_code in apogee_codes] - return '&'.join(fields) + return (date_range_min, date_range_max, apogee_codes) def do_request(self, url='https://edt.univ-tlse3.fr/calendar2/Home/GetCalendarData'): - headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} - request_body = self.generate_request_body() - response = requests.post(url, request_body, headers=request_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 + (date_min, date_max, apogee_codes) = self.generate_request_input() + return do_celcat_calendar_request(date_min, date_max, apogee_codes, url) + +def do_celcat_calendar_request(min_date, max_date, module_apogee_codes, url='https://edt.univ-tlse3.fr/calendar2/Home/GetCalendarData'): + headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + fields = [ + f'start={min_date}', + f'end={max_date}', + 'resType=100', + 'calView=agendaWeek', + ] + ['federationIds%5B%5D={}'.format(apogee_code) for apogee_code in module_apogee_codes] + fields_str = '&'.join(fields) + + logging.info(f'Sending a POST request with data={fields_str}') + response = requests.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 class CelcatEvents: def __init__(self, celcat_raw_response): @@ -41,7 +45,7 @@ class CelcatEvents: self.df['end'] = self.df['end'].astype('datetime64[ns]') self.df = self.df[["start", "end", "allDay", "description", "eventCategory", "modules"]] self.df['timeslot_id'] = self.df.index - + class FilteredCelcatEvents: def __init__(self, course_request, celcat_events): self._course_request = course_request @@ -143,6 +147,7 @@ def course_df_to_ics(df): return c +logging.basicConfig(level=logging.INFO) req = CourseRequest('input-data.csv') celcat_raw_response = req.do_request() -- GitLab