From 6ddfdf2514ecac935f023beb527ff91c6036d9be Mon Sep 17 00:00:00 2001 From: Jay Lee Date: Tue, 20 Apr 2021 15:37:21 -0400 Subject: [PATCH] print labels with counts --- src/gam/__init__.py | 66 +++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/src/gam/__init__.py b/src/gam/__init__.py index 3b7c86f0..716b185d 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -5326,20 +5326,27 @@ def gmail_del_result(request_id, response, exception): print(exception) -def showLabels(users): +def printShowLabels(users, show=True): i = 5 - onlyUser = showCounts = False + onlyUser = False + showCounts = False + todrive = False while i < len(sys.argv): myarg = sys.argv[i].lower().replace('_', '') if myarg == 'onlyuser': onlyUser = True i += 1 + elif myarg == 'todrive': + todrive = True + i += 1 elif myarg == 'showcounts': showCounts = True i += 1 else: controlflow.invalid_argument_exit(sys.argv[i], - 'gam show labels') + 'gam show labels') + if not show: + titles = ['email'] for user in users: user, gmail = buildGmailGAPIObject(user) if not gmail: @@ -5347,28 +5354,45 @@ def showLabels(users): labels = gapi.call(gmail.users().labels(), 'list', userId=user, - soft_errors=True) - if labels: - for label in labels['labels']: - if onlyUser and (label['type'] == 'system'): - continue + soft_errors=True).get('labels', []) + i = 0 + for label in labels: + i += 1 + if onlyUser and (label['type'] == 'system'): + continue + if showCounts: + if i >= 50 and not i % 50: + # show label get count for greater than 100 labels + # every 100 labels + sys.stderr.write('\r') + sys.stderr.flush() + sys.stderr.write(f'Getting counts for label {i} of {len(labels)}') + counts = gapi.call( + gmail.users().labels(), + 'get', + userId=user, + id=label['id'], + fields= + 'messagesTotal,messagesUnread,threadsTotal,threadsUnread' + ) + label.update(counts) + if show: print(label['name']) for a_key in label: if a_key == 'name': continue print(f' {a_key}: {label[a_key]}') - if showCounts: - counts = gapi.call( - gmail.users().labels(), - 'get', - userId=user, - id=label['id'], - fields= - 'messagesTotal,messagesUnread,threadsTotal,threadsUnread' - ) - for a_key in counts: - print(f' {a_key}: {counts[a_key]}') print('') + else: + for key in label: + if key not in titles: + titles.append(key) + label['email'] = user + if not show: + display.write_csv_file(labels, + titles, + list_type='Gmail Labels', + todrive=False) def showGmailProfile(users): @@ -11730,7 +11754,7 @@ def ProcessGAMCommand(args): elif command == 'show': showWhat = sys.argv[4].lower() if showWhat in ['labels', 'label']: - showLabels(users) + printShowLabels(users) elif showWhat == 'profile': showProfile(users) elif showWhat == 'calendars': @@ -11819,6 +11843,8 @@ def ProcessGAMCommand(args): printShowTeamDrives(users, True) elif printWhat in ['contactdelegate', 'contactdelegates']: gapi_contactdelegation.print_(users, True) + elif printWhat in ['labels']: + printShowLabels(users, show=False) else: controlflow.invalid_argument_exit(printWhat, 'gam print')