From eb4b8479f3c7ac4ab6481de1eec3df605616db68 Mon Sep 17 00:00:00 2001 From: Ross Scroggs Date: Wed, 6 Dec 2017 16:09:21 -0800 Subject: [PATCH] Minor cleanups (#636) * Minor cleanups In print users allow actual field names isenforcedin2sv and isenrolledin2sv In print users, add delimiter and sortheaders options In print groups, add sortheaders option * Fixed bug in gam oauth create where entering `e` to exit without changes didn't exit. --- src/GamCommands.txt | 9 ++++++--- src/gam.py | 26 ++++++++++++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/GamCommands.txt b/src/GamCommands.txt index db4913dd..3fc1dc1e 100644 --- a/src/GamCommands.txt +++ b/src/GamCommands.txt @@ -422,8 +422,8 @@ Named items ipwhitelisted| isdelegatedadmin|admin|isadmin| ismailboxsetup| - is2svenforced| - is2svenrolled| + isenforcedin2sv|is2svenforced| + isenrolledin2sv|is2svenrolled| lastlogintime| locations|location| noneditablealiases|aliases|nicknames| @@ -468,6 +468,7 @@ Items, separated by spaces, with spaces or commas in the items themselves: "'it ::= "(,)*" ::= "(,)*" ::= "(, ::= "(, ::= "(,)*" ::= "(,)*" ::= "(,)*" @@ -802,8 +803,9 @@ gam delete group gam info group [nousers] [noaliases] [groups] gam print groups [todrive] ([domain ] [member ]) - [maxresults ] [allfields|([settings] * [fields ])] [delimiter ] + [maxresults ] [allfields|([settings] * [fields ])] [members|memberscount] [managers|managerscount] [owners|ownerscount] + [delimiter ] [sortheaders] gam print group-members|groups-members [todrive] ([domain ] [member ])|[group ] [membernames] [fields ] @@ -837,6 +839,7 @@ gam print users [todrive] ([domain ] [query ] [deleted_on [groups] [license|licenses|licence|licences] [emailpart|emailparts|username] [orderby [ascending|descending]] [userview] [allfields|basic|full | ((* | fields ) [schemas|custom all|])] + [delimiter ] [sortheaders] gam print Summary of printing: diff --git a/src/gam.py b/src/gam.py index 09e16c63..36cf9783 100755 --- a/src/gam.py +++ b/src/gam.py @@ -9918,6 +9918,8 @@ USER_ARGUMENT_TO_PROPERTY_MAP = { u'ipwhitelisted': [u'ipWhitelisted',], u'isadmin': [u'isAdmin', u'isDelegatedAdmin',], u'isdelegatedadmin': [u'isAdmin', u'isDelegatedAdmin',], + u'isenforcedin2sv': [u'isEnforcedIn2Sv',], + u'isenrolledin2sv': [u'isEnrolledIn2Sv',], u'is2svenforced': [u'isEnforcedIn2Sv',], u'is2svenrolled': [u'isEnrolledIn2Sv',], u'ismailboxsetup': [u'isMailboxSetup',], @@ -9971,6 +9973,8 @@ def doPrintUsers(): customFieldMask = None sortHeaders = getGroupFeed = getLicenseFeed = email_parts = False viewType = deleted_only = orderBy = sortOrder = None + groupDelimiter = u' ' + licenseDelimiter = u',' i = 3 while i < len(sys.argv): myarg = sys.argv[i].lower().replace(u'_', u'') @@ -9984,6 +9988,12 @@ def doPrintUsers(): sortHeaders = True fieldsList = [] i += 1 + elif myarg == u'delimiter': + groupDelimiter = licenseDelimiter = sys.argv[i+1] + i += 2 + elif myarg == u'sortheaders': + sortHeaders = True + i += 1 elif myarg in [u'custom', u'schemas']: fieldsList.append(u'customSchemas') if sys.argv[i+1].lower() == u'all': @@ -10079,12 +10089,7 @@ def doPrintUsers(): user_email = user[u'primaryEmail'] sys.stderr.write(u"Getting Group Membership for %s (%s/%s)\r\n" % (user_email, user_count, total_users)) groups = callGAPIpages(cd.groups(), u'list', u'groups', userKey=user_email) - grouplist = u'' - for groupname in groups: - grouplist += groupname[u'email']+u' ' - if grouplist[-1:] == u' ': - grouplist = grouplist[:-1] - user.update(Groups=grouplist) + user[u'Groups'] = groupDelimiter.join([groupname[u'email'] for groupname in groups]) user_count += 1 if getLicenseFeed: titles.append(u'Licenses') @@ -10093,7 +10098,7 @@ def doPrintUsers(): for user in csvRows: u_licenses = licenses.get(user[u'primaryEmail'].lower()) if u_licenses: - user[u'Licenses'] = u','.join([_skuIdToDisplayName(skuId) for skuId in u_licenses]) + user[u'Licenses'] = licenseDelimiter.join([_skuIdToDisplayName(skuId) for skuId in u_licenses]) writeCSVfile(csvRows, titles, u'Users', todrive) GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP = { @@ -10188,6 +10193,9 @@ def doPrintGroups(): for field in GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP: addFieldTitleToCSVfile(field, GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP, cdfieldsList, fieldsTitles, titles) i += 1 + elif myarg == u'sortheaders': + sortHeaders = True + i += 1 elif myarg == u'fields': fieldNameList = sys.argv[i+1] for field in fieldNameList.lower().replace(u',', u' ').split(): @@ -11331,6 +11339,8 @@ def doRequestOAuth(login_hint=None): http = httplib2.Http(disable_ssl_certificate_validation=GC_Values[GC_NO_VERIFY_SSL]) flags = cmd_flags(noLocalWebserver=GC_Values[GC_NO_BROWSER]) scopes = getScopesFromUser() + if scopes is None: + return client_id, client_secret = getOAuthClientIDAndSecret() login_hint = getValidateLoginHint(login_hint) flow = oauth2client.client.OAuth2WebServerFlow(client_id=client_id, @@ -11551,7 +11561,7 @@ def getScopesFromUser(): for i in range(num_scopes): selected_scopes[i] = u' ' elif selection == u'e': - return + return None break sys.stdout.write(u'{0}Invalid input "{1}"\n'.format(ERROR_PREFIX, choice)) if selection == u'c':