Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance and fix Zoom methods #1092

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions parsons/zoom/zoom.py
Original file line number Diff line number Diff line change
@@ -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, Union
import uuid

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -57,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)

Expand Down Expand Up @@ -158,7 +161,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,
austinweisgrau marked this conversation as resolved.
Show resolved Hide resolved
to_date: Optional[datetime.date] = None,
):
"""
Get meetings scheduled by a user.

Expand All @@ -182,12 +193,21 @@ def get_meetings(self, user_id, meeting_type="scheduled"):
- 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.
"""
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

Expand Down Expand Up @@ -341,7 +361,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.

Expand All @@ -364,7 +384,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:
"""
Expand Down
60 changes: 21 additions & 39 deletions test/test_zoom.py
Original file line number Diff line number Diff line change
Expand Up @@ -642,65 +642,47 @@ 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": "[email protected]",
"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",
}
],
}

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": "[email protected]",
"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):
Expand Down
Loading