From 49216089517c9b75a26d980860c45ca6426a5e75 Mon Sep 17 00:00:00 2001 From: Austin Weisgrau Date: Thu, 11 Jul 2024 16:28:47 -0700 Subject: [PATCH 1/4] Enable date filter on Zoom get_meetings method --- parsons/zoom/zoom.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/parsons/zoom/zoom.py b/parsons/zoom/zoom.py index 7c71bbe32d..770159ffc9 100644 --- a/parsons/zoom/zoom.py +++ b/parsons/zoom/zoom.py @@ -1,7 +1,9 @@ from parsons.utilities import check_env from parsons.utilities.oauth_api_connector import OAuth2APIConnector from parsons import Table +import datetime import logging +from typing import Literal, Optional, Dict import uuid logger = logging.getLogger(__name__) @@ -158,7 +160,15 @@ def get_users(self, status="active", role_id=None): logger.info(f"Retrieved {tbl.num_rows} users.") return tbl - def get_meetings(self, user_id, meeting_type="scheduled"): + def get_meetings( + self, + user_id, + meeting_type: Literal[ + "scheduled", "live", "upcoming", "upcoming_meetings", "previous_meetings" + ] = "scheduled", + from_date: Optional[datetime.date] = None, + to_date: Optional[datetime.date] = None, + ): """ Get meetings scheduled by a user. @@ -186,8 +196,13 @@ def get_meetings(self, user_id, meeting_type="scheduled"): Parsons Table See :ref:`parsons-table` for output options. """ + params: Dict[str, str] = {"type": meeting_type} + if from_date: + params["from"] = from_date.isoformat() + if to_date: + params["to"] = to_date.isoformat() - tbl = self._get_request(f"users/{user_id}/meetings", "meetings") + tbl = self._get_request(f"users/{user_id}/meetings", "meetings", params=params) logger.info(f"Retrieved {tbl.num_rows} meetings.") return tbl From 0d5c8bc2bc4eae9dc861f3e87e8b118ec06cbd90 Mon Sep 17 00:00:00 2001 From: Austin Weisgrau Date: Thu, 11 Jul 2024 16:36:06 -0700 Subject: [PATCH 2/4] Fix Zoom method by using correct post-processing method --- parsons/zoom/zoom.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/parsons/zoom/zoom.py b/parsons/zoom/zoom.py index 770159ffc9..f341fe4c96 100644 --- a/parsons/zoom/zoom.py +++ b/parsons/zoom/zoom.py @@ -3,7 +3,7 @@ from parsons import Table import datetime import logging -from typing import Literal, Optional, Dict +from typing import Literal, Optional, Dict, Union import uuid logger = logging.getLogger(__name__) @@ -356,7 +356,7 @@ def get_meeting_all_polls_metadata(self, meeting_id) -> Table: return self.__handle_nested_json(table=tbl, column="questions") - def get_past_meeting_poll_metadata(self, meeting_id) -> Table: + def get_past_meeting_poll_metadata(self, meeting_id) -> Union[Table, None]: """ List poll metadata of a past meeting. @@ -379,7 +379,7 @@ def get_past_meeting_poll_metadata(self, meeting_id) -> Table: logger.info(f"Retrieved {tbl.num_rows} polls for meeting ID {meeting_id}") - return self.__handle_nested_json(table=tbl, column="prompts") + return self.__process_poll_results(tbl=tbl) def get_webinar_poll_metadata(self, webinar_id, poll_id) -> Table: """ From bef1d205b62954d9167b5d480c5654ffa81895fc Mon Sep 17 00:00:00 2001 From: Austin Weisgrau Date: Wed, 18 Sep 2024 18:07:19 -0700 Subject: [PATCH 3/4] Fix test on zoom poll method Original test did not use data that matched what is returned by the API --- parsons/zoom/zoom.py | 3 ++- test/test_zoom.py | 60 ++++++++++++++++---------------------------- 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/parsons/zoom/zoom.py b/parsons/zoom/zoom.py index f341fe4c96..f726841c98 100644 --- a/parsons/zoom/zoom.py +++ b/parsons/zoom/zoom.py @@ -59,7 +59,8 @@ def _get_request(self, endpoint, data_key, params=None, **kwargs): Parsons Table of API responses """ - r = self.client.get_request(endpoint, params=params, **kwargs) + resp = self.client.get_request(endpoint, params=params, **kwargs) + r = resp self.client.data_key = data_key data = self.client.data_parse(r) diff --git a/test/test_zoom.py b/test/test_zoom.py index 2569e24e8c..fcf7532b9d 100644 --- a/test/test_zoom.py +++ b/test/test_zoom.py @@ -642,33 +642,24 @@ def test_get_meeting_all_polls_metadata(self, m): def test_get_past_meeting_poll_metadata(self, m): poll = { "id": 1, - "status": "started", - "anonymous": "False", - "poll_type": 1, + "uuid": "12345", + "start_time": "2024-05-03 12:34:56", "questions": [ { - "answer_max_character": 1, - "answer_min_character": 1, - "answer_required": "False", - "answers": "Larry David's Curb Your Enthusiasm", - "case_sensitive": "True", "name": "Secret Truth", - "prompts": [ + "email": "larrydavid@gmail.com", + "first_name": "Larry", + "last_name": "David", + "answer": "42", + "polling_id": "12345", + "question_details": [ { - "prompt_question": "What's the secret truth of the universe?", - "prompt_right_answers": [ - "Pizza delivery", - "Larry David's Curb Your Enthusiasm", - ], + "question": "What's the secret truth of the univese?", + "date_time": "2024-06-20 23:50:11", + "polling_id": "245385359483", + "answer": "pizza party", } ], - "rating_max_label": "", - "rating_max_value": 1, - "rating_min_label": "", - "rating_min_value": 0, - "right_answers": "", - "show_as_dropdown": False, - "type": "short_answer", } ], } @@ -676,31 +667,22 @@ def test_get_past_meeting_poll_metadata(self, m): tbl = Table( [ { - "answer_max_character": 1, - "answer_min_character": 1, - "answer_required": "False", - "answers": "Larry David's Curb Your Enthusiasm", - "case_sensitive": "True", "name": "Secret Truth", - "rating_max_label": "", - "rating_max_value": 1, - "rating_min_label": "", - "rating_min_value": 0, - "right_answers": "", - "show_as_dropdown": False, - "type": "short_answer", - "prompts__prompt_question": "What's the secret truth of the universe?", - "prompts__prompt_right_answers": [ - "Pizza delivery", - "Larry David's Curb Your Enthusiasm", - ], + "email": "larrydavid@gmail.com", + "first_name": "Larry", + "last_name": "David", + "answer": "pizza party", + "polling_id": "245385359483", + "date_time": "2024-06-20 23:50:11", + "question": "What's the secret truth of the univese?", } ] ) m.post(ZOOM_AUTH_CALLBACK, json={"access_token": "fakeAccessToken"}) m.get(ZOOM_URI + "past_meetings/123/polls", json=poll) - assert_matching_tables(self.zoom.get_past_meeting_poll_metadata(123), tbl) + actual_result = self.zoom.get_past_meeting_poll_metadata(123) + assert_matching_tables(actual_result, tbl) @requests_mock.Mocker() def test_get_webinar_poll_metadata(self, m): From cce145e5d9d11e0e8ef7a0bb316f7a412f595a77 Mon Sep 17 00:00:00 2001 From: Austin Weisgrau Date: Thu, 10 Oct 2024 08:38:15 -0700 Subject: [PATCH 4/4] Add documentation on new parameters --- parsons/zoom/zoom.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/parsons/zoom/zoom.py b/parsons/zoom/zoom.py index f726841c98..0b460a01bb 100644 --- a/parsons/zoom/zoom.py +++ b/parsons/zoom/zoom.py @@ -193,6 +193,10 @@ def get_meetings( - All the ongoing meetings. * - ``upcoming`` - All upcoming meetings including live meetings. + from_date: datetime.date or None + Optional start date for the range of meetings to retrieve. + to_date: datetime.date or None + Optional end date for the range of meetings to retrieve. `Returns:` Parsons Table See :ref:`parsons-table` for output options.