From 0d9e35d0139b3a6db88e213ec0fd9ad423f1ebd4 Mon Sep 17 00:00:00 2001 From: Ross Scroggs Date: Sun, 16 Feb 2025 10:35:35 -0800 Subject: [PATCH] Updated `gam print group-members|cigroup-members` to include the `email` column when `fields ` did not include `email`. --- src/GamCommands.txt | 5 +++-- src/GamUpdate.txt | 7 +++++++ src/gam/__init__.py | 34 +++++++++++++++++++++------------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/GamCommands.txt b/src/GamCommands.txt index fa03e22b1..01f747bd2 100644 --- a/src/GamCommands.txt +++ b/src/GamCommands.txt @@ -3997,13 +3997,14 @@ gam print cigroups [todrive *] ::= createtime + email|useremail| expiretime| memberkey| name| role| type| - updatetime| - useremail + updatetime + ::= "(,)*" gam info cimember diff --git a/src/GamUpdate.txt b/src/GamUpdate.txt index 82ea0bc6b..e07c0da74 100644 --- a/src/GamUpdate.txt +++ b/src/GamUpdate.txt @@ -1,3 +1,8 @@ +7.04.04 + +Updated `gam print group-members|cigroup-members` to include the `email` column +when `fields ` did not include `email`. + 7.04.03 Added option `minimal|basic|full` to `gam print cigroup-members`: @@ -10,6 +15,8 @@ Added option `minimal|basic|full` to `gam show cigroup-members`: * `basic` - Fields displayed: type, role, email * `full` - Fields displayed: type, role, email, createTime, updateTime; this is the default +Upgraded `gam print cigroup-members ... recursive` to display sub-group email addresses rather than IDs. + 7.04.02 Improved output formatting for the following commands: diff --git a/src/gam/__init__.py b/src/gam/__init__.py index f27ce2fd3..ecec529dd 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -25,7 +25,7 @@ """ __author__ = 'GAM Team ' -__version__ = '7.04.03' +__version__ = '7.04.04' __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)' #pylint: disable=wrong-import-position @@ -7324,12 +7324,6 @@ def _getRawFields(requiredField=None): return rawFields return f'{requiredField},{rawFields}' -def _addInitialField(fieldsList, initialField): - if isinstance(initialField, list): - fieldsList.extend(initialField) - else: - fieldsList.append(initialField) - def CheckInputRowFilterHeaders(titlesList, rowFilter, rowDropFilter): status = True for filterVal in rowFilter: @@ -7744,6 +7738,12 @@ def filterMatch(filterVal): # } # fieldsList is the list of API fields def getFieldsList(myarg, fieldsChoiceMap, fieldsList, initialField=None, fieldsArg='fields', onlyFieldsArg=False): + def addInitialField(): + if isinstance(initialField, list): + fieldsList.extend(initialField) + else: + fieldsList.append(initialField) + def addMappedFields(mappedFields): if isinstance(mappedFields, list): fieldsList.extend(mappedFields) @@ -7752,11 +7752,11 @@ def addMappedFields(mappedFields): if not onlyFieldsArg and myarg in fieldsChoiceMap: if not fieldsList and initialField is not None: - _addInitialField(fieldsList, initialField) + addInitialField() addMappedFields(fieldsChoiceMap[myarg]) elif myarg == fieldsArg: if not fieldsList and initialField is not None: - _addInitialField(fieldsList, initialField) + addInitialField() for field in _getFieldsList(): if field in fieldsChoiceMap: addMappedFields(fieldsChoiceMap[field]) @@ -7933,14 +7933,21 @@ def AddField(self, fieldName, fieldNameMap, fieldsList): fieldsList.append(fields) self.AddTitles(fields.replace('.', GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER])) + def addInitialField(self, initialField, fieldsChoiceMap, fieldsList): + if isinstance(initialField, list): + for field in initialField: + self.AddField(field, fieldsChoiceMap, fieldsList) + else: + self.AddField(initialField, fieldsChoiceMap, fieldsList) + def GetFieldsListTitles(self, fieldName, fieldsChoiceMap, fieldsList, initialField=None): if fieldName in fieldsChoiceMap: if not fieldsList and initialField is not None: - _addInitialField(fieldsList, initialField) + self.addInitialField(initialField, fieldsChoiceMap, fieldsList) self.AddField(fieldName, fieldsChoiceMap, fieldsList) elif fieldName == 'fields': if not fieldsList and initialField is not None: - _addInitialField(fieldsList, initialField) + self.addInitialField(initialField, fieldsChoiceMap, fieldsList) for field in _getFieldsList(): if field in fieldsChoiceMap: self.AddField(field, fieldsChoiceMap, fieldsList) @@ -34206,7 +34213,7 @@ def getNameFromPeople(memberId): pass elif getMemberMatchOptions(myarg, memberOptions): pass - elif csvPF.GetFieldsListTitles(myarg, GROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList): + elif csvPF.GetFieldsListTitles(myarg, GROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList, initialField='email'): pass elif myarg == 'membernames': memberOptions[MEMBEROPTION_MEMBERNAMES] = True @@ -36223,6 +36230,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co 'createtime': 'createTime', 'delivery': 'deliverySetting', 'deliverysettings': 'deliverySetting', + 'email': 'preferredMemberKey', 'expiretime': 'expireTime', 'id': 'name', 'memberkey': 'preferredMemberKey', @@ -36309,7 +36317,7 @@ def doPrintCIGroupMembers(): pass elif getMemberMatchOptions(myarg, memberOptions): pass - elif getFieldsList(myarg, CIGROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList): + elif getFieldsList(myarg, CIGROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList, initialField='preferredMemberKey'): pass elif myarg == 'noduplicates': memberOptions[MEMBEROPTION_NODUPLICATES] = True