Skip to content

Commit c798aff

Browse files
authored
Kasiah/zoom single row tables (#1282)
* handle single row tables and versioning * ruff * change version structure * ruff
1 parent de29454 commit c798aff

File tree

1 file changed

+15
-37
lines changed

1 file changed

+15
-37
lines changed

parsons/zoom/zoom.py

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def _get_request(self, endpoint, data_key, params=None, **kwargs):
8080
data.extend(self.client.data_parse(r))
8181
return Table(data)
8282

83-
def __handle_nested_json(self, table: Table, column: str) -> Table:
83+
def __handle_nested_json(self, table: Table, column: str, version: int = 1) -> Table:
8484
"""
8585
This function unpacks JSON values from Zoom's API, which are often
8686
objects nested in lists
@@ -95,6 +95,8 @@ def __handle_nested_json(self, table: Table, column: str) -> Table:
9595
`Returns`:
9696
Parsons Table
9797
"""
98+
if version == 2:
99+
return Table(table.unpack_list(column=column))
98100

99101
return Table(table.unpack_list(column=column)).unpack_dict(
100102
column=f"{column}_0", prepend_value=f"{column}_"
@@ -305,7 +307,7 @@ def get_webinar_registrants(self, webinar_id):
305307
logger.info(f"Retrieved {tbl.num_rows} webinar registrants.")
306308
return tbl
307309

308-
def get_meeting_poll_metadata(self, meeting_id, poll_id) -> Table:
310+
def get_meeting_poll_metadata(self, meeting_id, poll_id, version: int = 1) -> Table:
309311
"""
310312
Get metadata about a specific poll for a given meeting ID
311313
@@ -324,9 +326,6 @@ def get_meeting_poll_metadata(self, meeting_id, poll_id) -> Table:
324326
endpoint = f"meetings/{meeting_id}/polls/{poll_id}"
325327
tbl = self._get_request(endpoint=endpoint, data_key="questions")
326328

327-
if isinstance(tbl, dict):
328-
logger.debug(f"No poll data returned for poll ID {poll_id}")
329-
return Table(tbl)
330329
if tbl.num_rows == 0:
331330
logger.debug(f"No poll data returned for poll ID {poll_id}")
332331
return tbl
@@ -337,11 +336,11 @@ def get_meeting_poll_metadata(self, meeting_id, poll_id) -> Table:
337336

338337
if "prompts" in tbl.columns:
339338
logger.info(f"Unnesting columns 'prompts' from existing table columns: {tbl.columns}")
340-
return self.__handle_nested_json(table=tbl, column="prompts")
339+
return self.__handle_nested_json(table=tbl, column="prompts", version=version)
341340
else:
342341
return tbl
343342

344-
def get_meeting_all_polls_metadata(self, meeting_id) -> Table:
343+
def get_meeting_all_polls_metadata(self, meeting_id, version: int = 1) -> Table:
345344
"""
346345
Get metadata for all polls for a given meeting ID
347346
@@ -358,18 +357,15 @@ def get_meeting_all_polls_metadata(self, meeting_id) -> Table:
358357
endpoint = f"meetings/{meeting_id}/polls"
359358
tbl = self._get_request(endpoint=endpoint, data_key="polls")
360359

361-
if isinstance(tbl, dict):
362-
logger.debug(f"No poll data returned for meeting ID {meeting_id}")
363-
return Table(tbl)
364360
if tbl.num_rows == 0:
365361
logger.debug(f"No poll data returned for meeting ID {meeting_id}")
366362
return tbl
367363

368364
logger.info(f"Retrieved {tbl.num_rows} polls for meeting ID {meeting_id}")
369365

370-
return self.__handle_nested_json(table=tbl, column="questions")
366+
return self.__handle_nested_json(table=tbl, column="questions", version=version)
371367

372-
def get_past_meeting_poll_metadata(self, meeting_id) -> Table:
368+
def get_past_meeting_poll_metadata(self, meeting_id, version: int = 1) -> Table:
373369
"""
374370
List poll metadata of a past meeting.
375371
@@ -386,9 +382,6 @@ def get_past_meeting_poll_metadata(self, meeting_id) -> Table:
386382
endpoint = f"past_meetings/{meeting_id}/polls"
387383
tbl = self._get_request(endpoint=endpoint, data_key="questions")
388384

389-
if isinstance(tbl, dict):
390-
logger.debug(f"No poll data returned for meeting ID {meeting_id}")
391-
return Table(tbl)
392385
if tbl.num_rows == 0:
393386
logger.debug(f"No poll data returned for meeting ID {meeting_id}")
394387
return tbl
@@ -398,9 +391,9 @@ def get_past_meeting_poll_metadata(self, meeting_id) -> Table:
398391
f"Unnesting columns 'question_details' from existing table columns: {tbl.columns}"
399392
)
400393

401-
return self.__handle_nested_json(table=tbl, column="question_details")
394+
return self.__handle_nested_json(table=tbl, column="question_details", version=version)
402395

403-
def get_webinar_poll_metadata(self, webinar_id, poll_id) -> Table:
396+
def get_webinar_poll_metadata(self, webinar_id, poll_id, version: int = 1) -> Table:
404397
"""
405398
Get metadata for a specific poll for a given webinar ID
406399
@@ -419,9 +412,6 @@ def get_webinar_poll_metadata(self, webinar_id, poll_id) -> Table:
419412
endpoint = f"webinars/{webinar_id}/polls/{poll_id}"
420413
tbl = self._get_request(endpoint=endpoint, data_key="questions")
421414

422-
if isinstance(tbl, dict):
423-
logger.debug(f"No poll data returned for poll ID {poll_id}")
424-
return Table(tbl)
425415
if tbl.num_rows == 0:
426416
logger.debug(f"No poll data returned for poll ID {poll_id}")
427417
return tbl
@@ -430,9 +420,9 @@ def get_webinar_poll_metadata(self, webinar_id, poll_id) -> Table:
430420
f"Retrieved {tbl.num_rows} rows of metadata [meeting={webinar_id} poll={poll_id}]"
431421
)
432422

433-
return self.__handle_nested_json(table=tbl, column="prompts")
423+
return self.__handle_nested_json(table=tbl, column="prompts", version=version)
434424

435-
def get_webinar_all_polls_metadata(self, webinar_id) -> Table:
425+
def get_webinar_all_polls_metadata(self, webinar_id, version: int = 1) -> Table:
436426
"""
437427
Get metadata for all polls for a given webinar ID
438428
@@ -449,18 +439,15 @@ def get_webinar_all_polls_metadata(self, webinar_id) -> Table:
449439
endpoint = f"webinars/{webinar_id}/polls"
450440
tbl = self._get_request(endpoint=endpoint, data_key="polls")
451441

452-
if isinstance(tbl, dict):
453-
logger.debug(f"No poll data returned for webinar ID {webinar_id}")
454-
return Table(tbl)
455442
if tbl.num_rows == 0:
456443
logger.debug(f"No poll data returned for webinar ID {webinar_id}")
457444
return tbl
458445

459446
logger.info(f"Retrieved {tbl.num_rows} polls for meeting ID {webinar_id}")
460447

461-
return self.__handle_nested_json(table=tbl, column="questions")
448+
return self.__handle_nested_json(table=tbl, column="questions", version=version)
462449

463-
def get_past_webinar_poll_metadata(self, webinar_id) -> Table:
450+
def get_past_webinar_poll_metadata(self, webinar_id, version: int = 1) -> Table:
464451
"""
465452
Retrieves the metadata for Webinar Polls of a specific Webinar
466453
@@ -477,16 +464,13 @@ def get_past_webinar_poll_metadata(self, webinar_id) -> Table:
477464
endpoint = f"past_webinars/{webinar_id}/polls"
478465
tbl = self._get_request(endpoint=endpoint, data_key="questions")
479466

480-
if isinstance(tbl, dict):
481-
logger.debug(f"No poll data returned for webinar ID {webinar_id}")
482-
return Table(tbl)
483467
if tbl.num_rows == 0:
484468
logger.debug(f"No poll data returned for webinar ID {webinar_id}")
485469
return tbl
486470

487471
logger.info(f"Retrieved {tbl.num_rows} polls for meeting ID {webinar_id}")
488472

489-
return self.__handle_nested_json(table=tbl, column="prompts")
473+
return self.__handle_nested_json(table=tbl, column="prompts", version=version)
490474

491475
def get_meeting_poll_results(self, meeting_id) -> Table:
492476
"""
@@ -498,9 +482,6 @@ def get_meeting_poll_results(self, meeting_id) -> Table:
498482
endpoint = f"report/meetings/{meeting_id}/polls"
499483
tbl = self._get_request(endpoint=endpoint, data_key="questions")
500484

501-
if isinstance(tbl, dict):
502-
logger.debug(f"No poll data returned for meeting ID {meeting_id}")
503-
return Table(tbl)
504485
if tbl.num_rows == 0:
505486
logger.debug(f"No poll data returned for meeting ID {meeting_id}")
506487
return tbl
@@ -519,9 +500,6 @@ def get_webinar_poll_results(self, webinar_id) -> Table:
519500
endpoint = f"report/webinars/{webinar_id}/polls"
520501
tbl = self._get_request(endpoint=endpoint, data_key="questions")
521502

522-
if isinstance(tbl, dict):
523-
logger.debug(f"No poll data returned for webinar ID {webinar_id}")
524-
return Table(tbl)
525503
if tbl.num_rows == 0:
526504
logger.debug(f"No poll data returned for webinar ID {webinar_id}")
527505
return tbl

0 commit comments

Comments
 (0)