Skip to content

Commit 2117c19

Browse files
authored
Cody/feature/fetch zoom webinar occurrences (#1500)
* tests passing * might as well add typing
1 parent e23163c commit 2117c19

File tree

2 files changed

+124
-35
lines changed

2 files changed

+124
-35
lines changed

parsons/zoom/zoom.py

Lines changed: 78 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@
1818

1919

2020
class ZoomV1:
21-
def __init__(self, account_id=None, client_id=None, client_secret=None):
21+
def __init__(
22+
self,
23+
account_id: Optional[str] = None,
24+
client_id: Optional[str] = None,
25+
client_secret: Optional[str] = None,
26+
):
2227
"""
2328
Instantiate the Zoom class.
2429
@@ -49,7 +54,13 @@ def get_oauth_client(self) -> OAuth2APIConnector:
4954
authorization_kwargs={"account_id": self.account_id},
5055
)
5156

52-
def _get_request(self, endpoint, data_key, params=None, **kwargs):
57+
def _get_request(
58+
self,
59+
endpoint: str,
60+
data_key: Optional[str],
61+
params: Optional[Dict[str, str]] = None,
62+
**kwargs,
63+
) -> Table:
5364
"""
5465
TODO: Consider increasing default page size.
5566
@@ -154,7 +165,7 @@ def __process_poll_results(self, tbl: Table) -> Table:
154165

155166
return tbl
156167

157-
def get_users(self, status="active", role_id=None):
168+
def get_users(self, status: str = "active", role_id: Optional[str] = None) -> Table:
158169
"""
159170
Get users.
160171
@@ -180,13 +191,13 @@ def get_users(self, status="active", role_id=None):
180191

181192
def get_meetings(
182193
self,
183-
user_id,
194+
user_id: str,
184195
meeting_type: Literal[
185196
"scheduled", "live", "upcoming", "upcoming_meetings", "previous_meetings"
186197
] = "scheduled",
187198
from_date: Optional[datetime.date] = None,
188199
to_date: Optional[datetime.date] = None,
189-
):
200+
) -> Table:
190201
"""
191202
Get meetings scheduled by a user.
192203
@@ -228,7 +239,7 @@ def get_meetings(
228239
logger.info(f"Retrieved {tbl.num_rows} meetings.")
229240
return tbl
230241

231-
def get_past_meeting(self, meeting_uuid):
242+
def get_past_meeting(self, meeting_uuid: str) -> Table:
232243
"""
233244
Get metadata regarding a past meeting.
234245
@@ -244,7 +255,7 @@ def get_past_meeting(self, meeting_uuid):
244255
logger.info(f"Retrieved meeting {meeting_uuid}.")
245256
return tbl
246257

247-
def get_past_meeting_participants(self, meeting_id):
258+
def get_past_meeting_participants(self, meeting_id: int) -> Table:
248259
"""
249260
Get past meeting participants.
250261
@@ -260,7 +271,7 @@ def get_past_meeting_participants(self, meeting_id):
260271
logger.info(f"Retrieved {tbl.num_rows} participants.")
261272
return tbl
262273

263-
def get_meeting_registrants(self, meeting_id):
274+
def get_meeting_registrants(self, meeting_id: int) -> Table:
264275
"""
265276
Get meeting registrants.
266277
@@ -276,7 +287,7 @@ def get_meeting_registrants(self, meeting_id):
276287
logger.info(f"Retrieved {tbl.num_rows} registrants.")
277288
return tbl
278289

279-
def get_user_webinars(self, user_id):
290+
def get_user_webinars(self, user_id: str) -> Table:
280291
"""
281292
Get meeting registrants.
282293
@@ -292,7 +303,7 @@ def get_user_webinars(self, user_id):
292303
logger.info(f"Retrieved {tbl.num_rows} webinars.")
293304
return tbl
294305

295-
def get_past_webinar_report(self, webinar_id):
306+
def get_past_webinar_report(self, webinar_id: str) -> Optional[Dict]:
296307
"""
297308
Get past meeting participants
298309
@@ -309,7 +320,7 @@ def get_past_webinar_report(self, webinar_id):
309320
logger.info(f"Retrieved webinar_report for webinar: {webinar_id}.")
310321
return dic
311322

312-
def get_past_webinar_participants(self, webinar_id):
323+
def get_past_webinar_participants(self, webinar_id: str) -> Table:
313324
"""
314325
Get past meeting participants
315326
@@ -325,7 +336,7 @@ def get_past_webinar_participants(self, webinar_id):
325336
logger.info(f"Retrieved {tbl.num_rows} webinar participants.")
326337
return tbl
327338

328-
def get_webinar_registrants(self, webinar_id):
339+
def get_webinar_registrants(self, webinar_id: str) -> Table:
329340
"""
330341
Get past meeting participants
331342
@@ -341,7 +352,7 @@ def get_webinar_registrants(self, webinar_id):
341352
logger.info(f"Retrieved {tbl.num_rows} webinar registrants.")
342353
return tbl
343354

344-
def get_meeting_poll_metadata(self, meeting_id, poll_id, version: int = 1) -> Table:
355+
def get_meeting_poll_metadata(self, meeting_id: int, poll_id: int, version: int = 1) -> Table:
345356
"""
346357
Get metadata about a specific poll for a given meeting ID
347358
@@ -374,7 +385,7 @@ def get_meeting_poll_metadata(self, meeting_id, poll_id, version: int = 1) -> Ta
374385
else:
375386
return tbl
376387

377-
def get_meeting_all_polls_metadata(self, meeting_id, version: int = 1) -> Table:
388+
def get_meeting_all_polls_metadata(self, meeting_id: int, version: int = 1) -> Table:
378389
"""
379390
Get metadata for all polls for a given meeting ID
380391
@@ -399,7 +410,7 @@ def get_meeting_all_polls_metadata(self, meeting_id, version: int = 1) -> Table:
399410

400411
return self.__handle_nested_json(table=tbl, column="questions", version=version)
401412

402-
def get_past_meeting_poll_metadata(self, meeting_id, version: int = 1) -> Table:
413+
def get_past_meeting_poll_metadata(self, meeting_id: int, version: int = 1) -> Table:
403414
"""
404415
List poll metadata of a past meeting.
405416
@@ -427,7 +438,7 @@ def get_past_meeting_poll_metadata(self, meeting_id, version: int = 1) -> Table:
427438

428439
return self.__handle_nested_json(table=tbl, column="question_details", version=version)
429440

430-
def get_webinar_poll_metadata(self, webinar_id, poll_id, version: int = 1) -> Table:
441+
def get_webinar_poll_metadata(self, webinar_id: str, poll_id: int, version: int = 1) -> Table:
431442
"""
432443
Get metadata for a specific poll for a given webinar ID
433444
@@ -456,7 +467,7 @@ def get_webinar_poll_metadata(self, webinar_id, poll_id, version: int = 1) -> Ta
456467

457468
return self.__handle_nested_json(table=tbl, column="prompts", version=version)
458469

459-
def get_webinar_all_polls_metadata(self, webinar_id, version: int = 1) -> Table:
470+
def get_webinar_all_polls_metadata(self, webinar_id: str, version: int = 1) -> Table:
460471
"""
461472
Get metadata for all polls for a given webinar ID
462473
@@ -481,7 +492,7 @@ def get_webinar_all_polls_metadata(self, webinar_id, version: int = 1) -> Table:
481492

482493
return self.__handle_nested_json(table=tbl, column="questions", version=version)
483494

484-
def get_past_webinar_poll_metadata(self, webinar_id, version: int = 1) -> Table:
495+
def get_past_webinar_poll_metadata(self, webinar_id: str, version: int = 1) -> Table:
485496
"""
486497
Retrieves the metadata for Webinar Polls of a specific Webinar
487498
@@ -506,7 +517,7 @@ def get_past_webinar_poll_metadata(self, webinar_id, version: int = 1) -> Table:
506517

507518
return self.__handle_nested_json(table=tbl, column="question_details", version=version)
508519

509-
def get_meeting_poll_results(self, meeting_id) -> Table:
520+
def get_meeting_poll_results(self, meeting_id: int) -> Table:
510521
"""
511522
Get a report of poll results for a past meeting
512523
@@ -524,7 +535,7 @@ def get_meeting_poll_results(self, meeting_id) -> Table:
524535

525536
return self.__process_poll_results(tbl=tbl)
526537

527-
def get_webinar_poll_results(self, webinar_id) -> Table:
538+
def get_webinar_poll_results(self, webinar_id: str) -> Table:
528539
"""
529540
Get a report of poll results for a past webinar
530541
@@ -575,10 +586,21 @@ class ZoomV2(ZoomV1):
575586
ZoomV1 (cls): version 1 Zoom connector class
576587
"""
577588

578-
def __init__(self, account_id=None, client_id=None, client_secret=None):
589+
def __init__(
590+
self,
591+
account_id: Optional[str] = None,
592+
client_id: Optional[str] = None,
593+
client_secret: Optional[str] = None,
594+
):
579595
super().__init__(account_id, client_id, client_secret)
580596

581-
def _get_request(self, endpoint: str, data_key: str, params: dict = None, **kwargs):
597+
def _get_request(
598+
self,
599+
endpoint: str,
600+
data_key: Optional[str],
601+
params: Optional[Dict[str, str]] = None,
602+
**kwargs,
603+
) -> Table:
582604
"""
583605
`Args`:
584606
endpoint: str
@@ -623,7 +645,7 @@ def _get_request(self, endpoint: str, data_key: str, params: dict = None, **kwar
623645

624646
return Table(data)
625647

626-
def get_webinars(self, user_id: int):
648+
def get_webinars(self, user_id: int) -> Table:
627649
"""
628650
Get webinars scheduled by or on behalf of a webinar host.
629651
@@ -639,12 +661,27 @@ def get_webinars(self, user_id: int):
639661
logger.info(f"Retrieved {tbl.num_rows} webinars.")
640662
return tbl
641663

642-
def get_user_webinars(self, user_id):
664+
def get_webinar_occurrences(self, webinar_id: int) -> Table:
665+
"""
666+
Get webinar occurrences for a given webinar ID.
667+
668+
`Args:`
669+
webinar_id: int
670+
The webinar id
671+
`Returns:`
672+
Parsons Table
673+
See :ref:`parsons-table` for output options.
674+
"""
675+
tbl = self._get_request(f"webinars/{webinar_id}/", "occurrences")
676+
logger.info(f"Retrieved {tbl.num_rows} webinar occurrences.")
677+
return tbl
678+
679+
def get_user_webinars(self, user_id: str) -> AttributeError:
643680
return AttributeError(
644681
"Method get_user_webinars has been deprecated in favor of get_webinars"
645682
)
646683

647-
def get_past_meeting_participants(self, meeting_id: int):
684+
def get_past_meeting_participants(self, meeting_id: int) -> Table:
648685
"""
649686
Get past meeting participants.
650687
@@ -660,7 +697,7 @@ def get_past_meeting_participants(self, meeting_id: int):
660697
logger.info(f"Retrieved {tbl.num_rows} participants.")
661698
return tbl
662699

663-
def get_past_webinar_participants(self, webinar_id: int):
700+
def get_past_webinar_participants(self, webinar_id: int) -> Table:
664701
"""
665702
Get past webinar participants.
666703
@@ -676,7 +713,7 @@ def get_past_webinar_participants(self, webinar_id: int):
676713
logger.info(f"Retrieved {tbl.num_rows} participants.")
677714
return tbl
678715

679-
def get_meeting_poll(self, meeting_id: int, poll_id: str):
716+
def get_meeting_poll(self, meeting_id: int, poll_id: str) -> Table:
680717
"""
681718
Get information about a single poll for a given meeting ID.
682719
The returned data is identical to get_meeting_polls.
@@ -702,7 +739,7 @@ def get_meeting_poll_metadata(self, meeting_id, poll_id, version=1):
702739
"Method get_meeting_poll_metadata is deprecated in favor of get_meeting_poll"
703740
)
704741

705-
def get_meeting_polls(self, meeting_id: int):
742+
def get_meeting_polls(self, meeting_id: int) -> Table:
706743
"""
707744
Get information about all polls for a given meeting ID.
708745
The returned data is identical to get_meeting_poll but for
@@ -727,7 +764,7 @@ def get_meeting_all_polls_metadata(self, meeting_id, version=1):
727764
"Method get_meeting_all_polls_metadata is deprecated in favor of get_meeting_polls"
728765
)
729766

730-
def get_past_meeting_poll_results(self, meeting_id: int):
767+
def get_past_meeting_poll_results(self, meeting_id: int) -> Table:
731768
"""
732769
Get results for all polls for a given past meeting ID
733770
@@ -750,7 +787,7 @@ def get_past_meeting_poll_metadata(self, meeting_id, version=1):
750787
"Method get_past_meeting_poll_metadata is deprecated in favor of get_past_meeting_poll_results"
751788
)
752789

753-
def get_webinar_poll(self, webinar_id: int, poll_id: str):
790+
def get_webinar_poll(self, webinar_id: int, poll_id: str) -> Table:
754791
"""
755792
Get information about a single poll for a given webinar ID.
756793
The returned data is identical to get_webinar_polls.
@@ -776,7 +813,7 @@ def get_webinar_poll_metadata(self, webinar_id, poll_id, version=1):
776813
"Method get_webinar_poll_metadata is deprecated in favor of get_webinar_poll"
777814
)
778815

779-
def get_webinar_polls(self, webinar_id: int):
816+
def get_webinar_polls(self, webinar_id: int) -> Table:
780817
"""
781818
Get information for all polls for a given webinar ID
782819
The returned data is identical to get_webinar_poll but includes
@@ -801,7 +838,7 @@ def get_webinar_all_polls_metadata(self, webinar_id, version=1):
801838
"Method get_webinar_all_polls_metadata is deprecated in favor of get_webinar_polls"
802839
)
803840

804-
def get_past_webinar_poll_results(self, webinar_id: int):
841+
def get_past_webinar_poll_results(self, webinar_id: int) -> Table:
805842
"""
806843
Get results for all polls for a given past webinar ID
807844
@@ -824,7 +861,7 @@ def get_past_webinar_poll_metadata(self, webinar_id, version=1):
824861
"Method get_past_webinar_poll_metadata is deprecated in favor of get_past_webinar_poll_results"
825862
)
826863

827-
def get_meeting_poll_reports(self, meeting_id: int):
864+
def get_meeting_poll_reports(self, meeting_id: int) -> Table:
828865
"""
829866
Get polls reports for a given past meeting ID
830867
@@ -847,7 +884,7 @@ def get_meeting_poll_results(self, meeting_id):
847884
"Method get_meeting_poll_results is deprecated in favor of get_meeting_poll_reports"
848885
)
849886

850-
def get_webinar_poll_reports(self, webinar_id: int):
887+
def get_webinar_poll_reports(self, webinar_id: int) -> Table:
851888
"""
852889
Get results for all polls for a given past webinar ID
853890
@@ -872,7 +909,13 @@ def get_webinar_poll_results(self, webinar_id):
872909

873910

874911
class Zoom:
875-
def __new__(cls, account_id=None, client_id=None, client_secret=None, parsons_version="v1"):
912+
def __new__(
913+
cls,
914+
account_id: Optional[str] = None,
915+
client_id: Optional[str] = None,
916+
client_secret: Optional[str] = None,
917+
parsons_version: str = "v1",
918+
) -> ZoomV1:
876919
"""
877920
Create and return Zoom instance base on chosen version (1 or 2)
878921

0 commit comments

Comments
 (0)