gam7 7.4.2__py3-none-any.whl → 7.4.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gam7 might be problematic. Click here for more details.
- gam/__init__.py +75 -33
- gam/gamlib/glcfg.py +8 -0
- {gam7-7.4.2.dist-info → gam7-7.4.4.dist-info}/METADATA +1 -1
- {gam7-7.4.2.dist-info → gam7-7.4.4.dist-info}/RECORD +7 -7
- {gam7-7.4.2.dist-info → gam7-7.4.4.dist-info}/WHEEL +0 -0
- {gam7-7.4.2.dist-info → gam7-7.4.4.dist-info}/entry_points.txt +0 -0
- {gam7-7.4.2.dist-info → gam7-7.4.4.dist-info}/licenses/LICENSE +0 -0
gam/__init__.py
CHANGED
|
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
|
28
|
-
__version__ = '7.04.
|
|
28
|
+
__version__ = '7.04.04'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -5981,6 +5981,8 @@ def getCIGroupTransitiveMemberRoleFixType(groupName, tmember):
|
|
|
5981
5981
|
member['type'] = Ent.TYPE_USER if not tid.endswith('.iam.gserviceaccount.com') else Ent.TYPE_SERVICE_ACCOUNT
|
|
5982
5982
|
elif ttype == 'groups':
|
|
5983
5983
|
member['type'] = Ent.TYPE_GROUP
|
|
5984
|
+
elif tid.startswith('cbcm-browser.'):
|
|
5985
|
+
member['type'] = Ent.TYPE_CBCM_BROWSER
|
|
5984
5986
|
else:
|
|
5985
5987
|
member['type'] = Ent.TYPE_OTHER
|
|
5986
5988
|
else:
|
|
@@ -7322,12 +7324,6 @@ def _getRawFields(requiredField=None):
|
|
|
7322
7324
|
return rawFields
|
|
7323
7325
|
return f'{requiredField},{rawFields}'
|
|
7324
7326
|
|
|
7325
|
-
def _addInitialField(fieldsList, initialField):
|
|
7326
|
-
if isinstance(initialField, list):
|
|
7327
|
-
fieldsList.extend(initialField)
|
|
7328
|
-
else:
|
|
7329
|
-
fieldsList.append(initialField)
|
|
7330
|
-
|
|
7331
7327
|
def CheckInputRowFilterHeaders(titlesList, rowFilter, rowDropFilter):
|
|
7332
7328
|
status = True
|
|
7333
7329
|
for filterVal in rowFilter:
|
|
@@ -7742,6 +7738,12 @@ def RowFilterMatch(row, titlesList, rowFilter, rowFilterModeAll, rowDropFilter,
|
|
|
7742
7738
|
# }
|
|
7743
7739
|
# fieldsList is the list of API fields
|
|
7744
7740
|
def getFieldsList(myarg, fieldsChoiceMap, fieldsList, initialField=None, fieldsArg='fields', onlyFieldsArg=False):
|
|
7741
|
+
def addInitialField():
|
|
7742
|
+
if isinstance(initialField, list):
|
|
7743
|
+
fieldsList.extend(initialField)
|
|
7744
|
+
else:
|
|
7745
|
+
fieldsList.append(initialField)
|
|
7746
|
+
|
|
7745
7747
|
def addMappedFields(mappedFields):
|
|
7746
7748
|
if isinstance(mappedFields, list):
|
|
7747
7749
|
fieldsList.extend(mappedFields)
|
|
@@ -7750,11 +7752,11 @@ def getFieldsList(myarg, fieldsChoiceMap, fieldsList, initialField=None, fieldsA
|
|
|
7750
7752
|
|
|
7751
7753
|
if not onlyFieldsArg and myarg in fieldsChoiceMap:
|
|
7752
7754
|
if not fieldsList and initialField is not None:
|
|
7753
|
-
|
|
7755
|
+
addInitialField()
|
|
7754
7756
|
addMappedFields(fieldsChoiceMap[myarg])
|
|
7755
7757
|
elif myarg == fieldsArg:
|
|
7756
7758
|
if not fieldsList and initialField is not None:
|
|
7757
|
-
|
|
7759
|
+
addInitialField()
|
|
7758
7760
|
for field in _getFieldsList():
|
|
7759
7761
|
if field in fieldsChoiceMap:
|
|
7760
7762
|
addMappedFields(fieldsChoiceMap[field])
|
|
@@ -7931,14 +7933,21 @@ class CSVPrintFile():
|
|
|
7931
7933
|
fieldsList.append(fields)
|
|
7932
7934
|
self.AddTitles(fields.replace('.', GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]))
|
|
7933
7935
|
|
|
7936
|
+
def addInitialField(self, initialField, fieldsChoiceMap, fieldsList):
|
|
7937
|
+
if isinstance(initialField, list):
|
|
7938
|
+
for field in initialField:
|
|
7939
|
+
self.AddField(field, fieldsChoiceMap, fieldsList)
|
|
7940
|
+
else:
|
|
7941
|
+
self.AddField(initialField, fieldsChoiceMap, fieldsList)
|
|
7942
|
+
|
|
7934
7943
|
def GetFieldsListTitles(self, fieldName, fieldsChoiceMap, fieldsList, initialField=None):
|
|
7935
7944
|
if fieldName in fieldsChoiceMap:
|
|
7936
7945
|
if not fieldsList and initialField is not None:
|
|
7937
|
-
|
|
7946
|
+
self.addInitialField(initialField, fieldsChoiceMap, fieldsList)
|
|
7938
7947
|
self.AddField(fieldName, fieldsChoiceMap, fieldsList)
|
|
7939
7948
|
elif fieldName == 'fields':
|
|
7940
7949
|
if not fieldsList and initialField is not None:
|
|
7941
|
-
|
|
7950
|
+
self.addInitialField(initialField, fieldsChoiceMap, fieldsList)
|
|
7942
7951
|
for field in _getFieldsList():
|
|
7943
7952
|
if field in fieldsChoiceMap:
|
|
7944
7953
|
self.AddField(field, fieldsChoiceMap, fieldsList)
|
|
@@ -33959,6 +33968,8 @@ def infoGroupMembers(entityList, ciGroupsAPI=False):
|
|
|
33959
33968
|
printKeyValueList(['type', result['type']])
|
|
33960
33969
|
for field in ['createTime', 'updateTime']:
|
|
33961
33970
|
printKeyValueList([field, formatLocalTime(result[field])])
|
|
33971
|
+
if 'deliverySetting' in result:
|
|
33972
|
+
printKeyValueList(['deliverySetting', result['deliverySetting']])
|
|
33962
33973
|
Ind.Decrement()
|
|
33963
33974
|
except (GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.invalid, GAPI.forbidden) as e:
|
|
33964
33975
|
entityActionFailedWarning([entityType, groupKey], str(e), j, jcount)
|
|
@@ -34202,7 +34213,7 @@ def doPrintGroupMembers():
|
|
|
34202
34213
|
pass
|
|
34203
34214
|
elif getMemberMatchOptions(myarg, memberOptions):
|
|
34204
34215
|
pass
|
|
34205
|
-
elif csvPF.GetFieldsListTitles(myarg, GROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList):
|
|
34216
|
+
elif csvPF.GetFieldsListTitles(myarg, GROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList, initialField='email'):
|
|
34206
34217
|
pass
|
|
34207
34218
|
elif myarg == 'membernames':
|
|
34208
34219
|
memberOptions[MEMBEROPTION_MEMBERNAMES] = True
|
|
@@ -36121,8 +36132,9 @@ def getCIGroupTransitiveMembers(ci, groupName, membersList, i, count):
|
|
|
36121
36132
|
return True
|
|
36122
36133
|
|
|
36123
36134
|
def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, count,
|
|
36124
|
-
memberOptions, memberDisplayOptions, level, typesSet):
|
|
36125
|
-
|
|
36135
|
+
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs):
|
|
36136
|
+
nameToPrint = groupEmail if groupEmail else groupName
|
|
36137
|
+
printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, nameToPrint, i, count)
|
|
36126
36138
|
validRoles = _getCIRoleVerification(memberRoles)
|
|
36127
36139
|
if memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP]:
|
|
36128
36140
|
groupMembers = []
|
|
@@ -36137,12 +36149,11 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36137
36149
|
groupMembers = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
|
36138
36150
|
pageMessage=getPageMessageForWhom(),
|
|
36139
36151
|
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36140
|
-
parent=groupName,
|
|
36141
|
-
fields='nextPageToken,memberships(*)', pageSize=GC.Values[GC.MEMBER_MAX_RESULTS])
|
|
36152
|
+
parent=groupName, **kwargs)
|
|
36142
36153
|
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
|
36143
36154
|
GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidArgument, GAPI.systemError,
|
|
36144
36155
|
GAPI.permissionDenied, GAPI.serviceNotAvailable):
|
|
36145
|
-
entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP,
|
|
36156
|
+
entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP, nameToPrint, i, count)
|
|
36146
36157
|
return
|
|
36147
36158
|
checkCategory = memberDisplayOptions['showCategory']
|
|
36148
36159
|
if not memberOptions[MEMBEROPTION_RECURSIVE]:
|
|
@@ -36176,7 +36187,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36176
36187
|
memberName not in membersSet):
|
|
36177
36188
|
membersSet.add(memberName)
|
|
36178
36189
|
member['level'] = level
|
|
36179
|
-
member['subgroup'] =
|
|
36190
|
+
member['subgroup'] = nameToPrint
|
|
36180
36191
|
membersList.append(member)
|
|
36181
36192
|
else:
|
|
36182
36193
|
if memberName not in membersSet:
|
|
@@ -36185,37 +36196,41 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36185
36196
|
checkCIMemberMatch(member, memberOptions) and
|
|
36186
36197
|
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
|
36187
36198
|
member['level'] = level
|
|
36188
|
-
member['subgroup'] =
|
|
36199
|
+
member['subgroup'] = nameToPrint
|
|
36189
36200
|
membersList.append(member)
|
|
36190
36201
|
_, gname = member['name'].rsplit('/', 1)
|
|
36191
|
-
groupMemberList.append(f'groups/{gname}')
|
|
36202
|
+
groupMemberList.append((f'groups/{gname}', memberName))
|
|
36192
36203
|
for member in groupMemberList:
|
|
36193
|
-
getCIGroupMembers(ci, member, memberRoles, membersList, membersSet, i, count,
|
|
36194
|
-
memberOptions, memberDisplayOptions, level+1, typesSet)
|
|
36204
|
+
getCIGroupMembers(ci, member[0], memberRoles, membersList, membersSet, i, count,
|
|
36205
|
+
memberOptions, memberDisplayOptions, level+1, typesSet, member[1], kwargs)
|
|
36195
36206
|
else:
|
|
36196
36207
|
for member in groupMembers:
|
|
36197
36208
|
getCIGroupMemberRoleFixType(member)
|
|
36209
|
+
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36198
36210
|
if member['type'] != Ent.TYPE_GROUP:
|
|
36199
36211
|
if (member['type'] in typesSet and
|
|
36200
36212
|
checkCIMemberMatch(member, memberOptions) and
|
|
36201
36213
|
_checkMemberRole(member, validRoles) and
|
|
36202
36214
|
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
|
36203
36215
|
member['level'] = level
|
|
36204
|
-
member['subgroup'] =
|
|
36216
|
+
member['subgroup'] = nameToPrint
|
|
36205
36217
|
membersList.append(member)
|
|
36206
36218
|
else:
|
|
36207
36219
|
if (member['type'] in typesSet and
|
|
36208
36220
|
checkCIMemberMatch(member, memberOptions) and
|
|
36209
36221
|
(not checkCategory or _checkCIMemberCategory(member, memberDisplayOptions))):
|
|
36210
36222
|
member['level'] = level
|
|
36211
|
-
member['subgroup'] =
|
|
36223
|
+
member['subgroup'] = nameToPrint
|
|
36212
36224
|
membersList.append(member)
|
|
36213
36225
|
_, gname = member['name'].rsplit('/', 1)
|
|
36214
36226
|
getCIGroupMembers(ci, f'groups/{gname}', memberRoles, membersList, membersSet, i, count,
|
|
36215
|
-
memberOptions, memberDisplayOptions, level+1, typesSet)
|
|
36227
|
+
memberOptions, memberDisplayOptions, level+1, typesSet, memberName, kwargs)
|
|
36216
36228
|
|
|
36217
36229
|
CIGROUPMEMBERS_FIELDS_CHOICE_MAP = {
|
|
36218
36230
|
'createtime': 'createTime',
|
|
36231
|
+
'delivery': 'deliverySetting',
|
|
36232
|
+
'deliverysettings': 'deliverySetting',
|
|
36233
|
+
'email': 'preferredMemberKey',
|
|
36219
36234
|
'expiretime': 'expireTime',
|
|
36220
36235
|
'id': 'name',
|
|
36221
36236
|
'memberkey': 'preferredMemberKey',
|
|
@@ -36236,6 +36251,16 @@ CIGROUPMEMBERS_SORT_FIELDS = [
|
|
|
36236
36251
|
]
|
|
36237
36252
|
CIGROUPMEMBERS_TIME_OBJECTS = {'createTime', 'updateTime', 'expireTime'}
|
|
36238
36253
|
|
|
36254
|
+
def _getCIListGroupMembersArgs(listView):
|
|
36255
|
+
if listView == 'full':
|
|
36256
|
+
return {'view': 'FULL', 'pageSize': GC.Values[GC.MEMBER_MAX_RESULTS_CI_FULL],
|
|
36257
|
+
'fields': 'nextPageToken,memberships(*)'}
|
|
36258
|
+
if listView == 'basic':
|
|
36259
|
+
return {'view': 'FULL', 'pageSize': GC.Values[GC.MEMBER_MAX_RESULTS_CI_FULL],
|
|
36260
|
+
'fields': 'nextPageToken,memberships(name,preferredMemberKey,roles,type)'}
|
|
36261
|
+
return {'view': 'BASIC', 'pageSize': GC.Values[GC.MEMBER_MAX_RESULTS_CI_BASIC],
|
|
36262
|
+
'fields': 'nextPageToken,memberships(*)'}
|
|
36263
|
+
|
|
36239
36264
|
# gam print cigroup-members [todrive <ToDriveAttribute>*]
|
|
36240
36265
|
# [(cimember|ciowner <UserItem>)|(cigroup <GroupItem>)|(select <GroupEntity>)]
|
|
36241
36266
|
# [showownedby <UserItem>]
|
|
@@ -36245,6 +36270,7 @@ CIGROUPMEMBERS_TIME_OBJECTS = {'createTime', 'updateTime', 'expireTime'}
|
|
|
36245
36270
|
# [types <CIGroupMemberTypeList>]
|
|
36246
36271
|
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
|
36247
36272
|
# <CIGroupMembersFieldName>* [fields <CIGroupMembersFieldNameList>]
|
|
36273
|
+
# [minimal|basic|full]
|
|
36248
36274
|
# [(recursive [noduplicates])|includederivedmembership] [nogroupeemail]
|
|
36249
36275
|
# [formatjson [quotechar <Character>]]
|
|
36250
36276
|
def doPrintCIGroupMembers():
|
|
@@ -36262,6 +36288,7 @@ def doPrintCIGroupMembers():
|
|
|
36262
36288
|
rolesSet = set()
|
|
36263
36289
|
typesSet = set()
|
|
36264
36290
|
matchPatterns = {}
|
|
36291
|
+
listView = 'full'
|
|
36265
36292
|
while Cmd.ArgumentsRemaining():
|
|
36266
36293
|
myarg = getArgument()
|
|
36267
36294
|
if myarg == 'todrive':
|
|
@@ -36290,7 +36317,7 @@ def doPrintCIGroupMembers():
|
|
|
36290
36317
|
pass
|
|
36291
36318
|
elif getMemberMatchOptions(myarg, memberOptions):
|
|
36292
36319
|
pass
|
|
36293
|
-
elif getFieldsList(myarg, CIGROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList):
|
|
36320
|
+
elif getFieldsList(myarg, CIGROUPMEMBERS_FIELDS_CHOICE_MAP, fieldsList, initialField='preferredMemberKey'):
|
|
36294
36321
|
pass
|
|
36295
36322
|
elif myarg == 'noduplicates':
|
|
36296
36323
|
memberOptions[MEMBEROPTION_NODUPLICATES] = True
|
|
@@ -36302,8 +36329,12 @@ def doPrintCIGroupMembers():
|
|
|
36302
36329
|
memberOptions[MEMBEROPTION_RECURSIVE] = False
|
|
36303
36330
|
elif myarg == 'nogroupemail':
|
|
36304
36331
|
groupColumn = False
|
|
36332
|
+
elif myarg in {'minimal', 'basic', 'full'}:
|
|
36333
|
+
listView = myarg
|
|
36305
36334
|
else:
|
|
36306
36335
|
FJQC.GetFormatJSONQuoteChar(myarg, False)
|
|
36336
|
+
if listView == 'minimal' and memberOptions[MEMBEROPTION_RECURSIVE]:
|
|
36337
|
+
usageErrorExit(Msg.ARE_MUTUALLY_EXCLUSIVE.format('minimal', 'recursive'))
|
|
36307
36338
|
if not typesSet:
|
|
36308
36339
|
typesSet = {Ent.TYPE_USER} if memberOptions[MEMBEROPTION_RECURSIVE] else ALL_CIGROUP_MEMBER_TYPES
|
|
36309
36340
|
fields = ','.join(set(groupFieldsLists['ci']))
|
|
@@ -36330,6 +36361,7 @@ def doPrintCIGroupMembers():
|
|
|
36330
36361
|
if showOwnedBy:
|
|
36331
36362
|
getRolesSet.add(Ent.ROLE_OWNER)
|
|
36332
36363
|
getRoles = ','.join(sorted(getRolesSet))
|
|
36364
|
+
kwargs = _getCIListGroupMembersArgs(listView)
|
|
36333
36365
|
level = 0
|
|
36334
36366
|
i = 0
|
|
36335
36367
|
count = len(entityList)
|
|
@@ -36356,7 +36388,7 @@ def doPrintCIGroupMembers():
|
|
|
36356
36388
|
membersList = []
|
|
36357
36389
|
membersSet = set()
|
|
36358
36390
|
getCIGroupMembers(ci, groupEntity['name'], getRoles, membersList, membersSet, i, count,
|
|
36359
|
-
memberOptions, memberDisplayOptions, level, typesSet)
|
|
36391
|
+
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs)
|
|
36360
36392
|
if showOwnedBy and not checkCIGroupShowOwnedBy(showOwnedBy, membersList):
|
|
36361
36393
|
continue
|
|
36362
36394
|
for member in membersList:
|
|
@@ -36374,6 +36406,8 @@ def doPrintCIGroupMembers():
|
|
|
36374
36406
|
row['subgroup'] = member['subgroup']
|
|
36375
36407
|
if memberDisplayOptions['showCategory']:
|
|
36376
36408
|
row['category'] = member['category']
|
|
36409
|
+
if listView == 'minimal':
|
|
36410
|
+
dmember.pop('type', None)
|
|
36377
36411
|
mapCIGroupMemberFieldNames(dmember)
|
|
36378
36412
|
if not FJQC.formatJSON:
|
|
36379
36413
|
csvPF.WriteRowTitles(flattenJSON(dmember, flattened=row, timeObjects=CIGROUPMEMBERS_TIME_OBJECTS))
|
|
@@ -36403,17 +36437,19 @@ def doPrintCIGroupMembers():
|
|
|
36403
36437
|
# [showownedby <UserItem>]
|
|
36404
36438
|
# [emailmatchpattern [not] <RegularExpression>] [namematchpattern [not] <RegularExpression>]
|
|
36405
36439
|
# [descriptionmatchpattern [not] <RegularExpression>]
|
|
36406
|
-
# [roles <GroupRoleList>] [members] [managers] [owners]
|
|
36440
|
+
# [roles <GroupRoleList>] [members] [managers] [owners]
|
|
36407
36441
|
# [internal] [internaldomains <DomainList>] [external]
|
|
36408
36442
|
# [types <CIGroupMemberTypeList>]
|
|
36409
36443
|
# [memberemaildisplaypattern|memberemailskippattern <RegularExpression>]
|
|
36410
|
-
# [
|
|
36444
|
+
# [minimal|basic|full]
|
|
36445
|
+
# [(depth <Number>) | includederivedmembership]
|
|
36411
36446
|
def doShowCIGroupMembers():
|
|
36412
36447
|
def _roleOrder(key):
|
|
36413
36448
|
return {Ent.ROLE_OWNER: 0, Ent.ROLE_MANAGER: 1, Ent.ROLE_MEMBER: 2}.get(key, 3)
|
|
36414
36449
|
|
|
36415
36450
|
def _typeOrder(key):
|
|
36416
|
-
return {Ent.TYPE_CUSTOMER: 0, Ent.TYPE_USER: 1, Ent.TYPE_GROUP: 2,
|
|
36451
|
+
return {Ent.TYPE_CUSTOMER: 0, Ent.TYPE_USER: 1, Ent.TYPE_GROUP: 2,
|
|
36452
|
+
Ent.TYPE_CBCM_BROWSER: 3, Ent.TYPE_OTHER: 4, Ent.TYPE_EXTERNAL: 5}.get(key, 6)
|
|
36417
36453
|
|
|
36418
36454
|
def _showGroup(groupName, groupEmail, depth):
|
|
36419
36455
|
if includeDerivedMembership:
|
|
@@ -36424,8 +36460,7 @@ def doShowCIGroupMembers():
|
|
|
36424
36460
|
try:
|
|
36425
36461
|
membersList = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
|
36426
36462
|
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36427
|
-
parent=groupName,
|
|
36428
|
-
fields='nextPageToken,memberships(*)', pageSize=GC.Values[GC.MEMBER_MAX_RESULTS])
|
|
36463
|
+
parent=groupName, **kwargs)
|
|
36429
36464
|
for member in membersList:
|
|
36430
36465
|
getCIGroupMemberRoleFixType(member)
|
|
36431
36466
|
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
|
@@ -36446,7 +36481,10 @@ def doShowCIGroupMembers():
|
|
|
36446
36481
|
if (_checkMemberRole(member, rolesSet) and
|
|
36447
36482
|
member['type'] in typesSet and
|
|
36448
36483
|
checkCIMemberMatch(member, memberOptions)):
|
|
36449
|
-
|
|
36484
|
+
if listView != 'minimal':
|
|
36485
|
+
memberDetails = f'{member.get("role", Ent.ROLE_MEMBER)}, {member["type"]}, {member["preferredMemberKey"]["id"]}'
|
|
36486
|
+
else:
|
|
36487
|
+
memberDetails = f'{member.get("role", Ent.ROLE_MEMBER)}, {member["preferredMemberKey"]["id"]}'
|
|
36450
36488
|
if checkCategory:
|
|
36451
36489
|
memberDetails += f', {member["category"]}'
|
|
36452
36490
|
for field in ['createTime', 'updateTime', 'expireTime']:
|
|
@@ -36471,6 +36509,7 @@ def doShowCIGroupMembers():
|
|
|
36471
36509
|
matchPatterns = {}
|
|
36472
36510
|
maxdepth = -1
|
|
36473
36511
|
includeDerivedMembership = False
|
|
36512
|
+
listView = 'full'
|
|
36474
36513
|
while Cmd.ArgumentsRemaining():
|
|
36475
36514
|
myarg = getArgument()
|
|
36476
36515
|
if myarg == 'showownedby':
|
|
@@ -36501,6 +36540,8 @@ def doShowCIGroupMembers():
|
|
|
36501
36540
|
maxdepth = getInteger(minVal=-1)
|
|
36502
36541
|
elif myarg == 'includederivedmembership':
|
|
36503
36542
|
includeDerivedMembership = True
|
|
36543
|
+
elif myarg in {'minimal', 'basic', 'full'}:
|
|
36544
|
+
listView = myarg
|
|
36504
36545
|
else:
|
|
36505
36546
|
unknownArgumentExit()
|
|
36506
36547
|
if not rolesSet:
|
|
@@ -36510,6 +36551,7 @@ def doShowCIGroupMembers():
|
|
|
36510
36551
|
checkCategory = memberDisplayOptions['showCategory']
|
|
36511
36552
|
fields = ','.join(set(groupFieldsLists['ci']))
|
|
36512
36553
|
entityList = getCIGroupMembersEntityList(ci, entityList, query, subTitle, matchPatterns, groupFieldsLists['ci'], None)
|
|
36554
|
+
kwargs = _getCIListGroupMembersArgs(listView)
|
|
36513
36555
|
i = 0
|
|
36514
36556
|
count = len(entityList)
|
|
36515
36557
|
for group in entityList:
|
gam/gamlib/glcfg.py
CHANGED
|
@@ -179,6 +179,10 @@ LICENSE_MAX_RESULTS = 'license_max_results'
|
|
|
179
179
|
LICENSE_SKUS = 'license_skus'
|
|
180
180
|
# When retrieving lists of Google Group members from API, how many should be retrieved in each chunk
|
|
181
181
|
MEMBER_MAX_RESULTS = 'member_max_results'
|
|
182
|
+
# CI API Group members max page size when view=BASIC
|
|
183
|
+
MEMBER_MAX_RESULTS_CI_BASIC = 'member_max_results_ci_basic'
|
|
184
|
+
# CI API Group members max page size when view=FULL
|
|
185
|
+
MEMBER_MAX_RESULTS_CI_FULL = 'member_max_results_ci_full'
|
|
182
186
|
# When deleting or modifying Gmail messages, how many should be processed in each batch
|
|
183
187
|
MESSAGE_BATCH_SIZE = 'message_batch_size'
|
|
184
188
|
# When retrieving lists of Gmail messages from API, how many should be retrieved in each chunk
|
|
@@ -385,6 +389,8 @@ Defaults = {
|
|
|
385
389
|
LICENSE_MAX_RESULTS: '100',
|
|
386
390
|
LICENSE_SKUS: '',
|
|
387
391
|
MEMBER_MAX_RESULTS: '200',
|
|
392
|
+
MEMBER_MAX_RESULTS_CI_BASIC: '1000',
|
|
393
|
+
MEMBER_MAX_RESULTS_CI_FULL: '500',
|
|
388
394
|
MESSAGE_BATCH_SIZE: '50',
|
|
389
395
|
MESSAGE_MAX_RESULTS: '500',
|
|
390
396
|
MOBILE_MAX_RESULTS: '100',
|
|
@@ -550,6 +556,8 @@ VAR_INFO = {
|
|
|
550
556
|
LICENSE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (10, 1000)},
|
|
551
557
|
LICENSE_SKUS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
552
558
|
MEMBER_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
|
559
|
+
MEMBER_MAX_RESULTS_CI_BASIC: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
560
|
+
MEMBER_MAX_RESULTS_CI_FULL: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
|
553
561
|
MESSAGE_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
554
562
|
MESSAGE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10000)},
|
|
555
563
|
MOBILE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=jB1BkvYcWyLUFuiZaIla-CaReu3pDgw7cijBIYaSpQU,3473837
|
|
2
2
|
gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
|
|
3
3
|
gam/cacerts.pem,sha256=nJuWha0xm5dHw_5ptGphwRoO-r36Ccpqiww9pCEDbSc,67484
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -23,7 +23,7 @@ gam/atom/url.py,sha256=pxO1TlORxyKQTQ1bkBE1unFzjnv9c8LjJkm-UEORShY,4276
|
|
|
23
23
|
gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
|
|
24
24
|
gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
|
|
25
25
|
gam/gamlib/glapi.py,sha256=AkZRK0ebSBn7iJApTZl2crRWY3-D0vNmwTI36ZEo34s,34171
|
|
26
|
-
gam/gamlib/glcfg.py,sha256=
|
|
26
|
+
gam/gamlib/glcfg.py,sha256=VkwIonUM8_GqqHy1pfaGPMCGVg9D6U6LNnh6PAP76HU,27941
|
|
27
27
|
gam/gamlib/glclargs.py,sha256=ptSTGELZHQS6SfvGGJ3NrXRoHAToO108NTYsFQE-C4c,42200
|
|
28
28
|
gam/gamlib/glentity.py,sha256=ZLbyMl9NhN-MBf9Rxmho2dBYeS4SNLMctpeaKFZSbQ4,33801
|
|
29
29
|
gam/gamlib/glgapi.py,sha256=W1nFH0sY7P8pnb98_4uzMSCs8gre0rvG5pBRI6HJq0c,38274
|
|
@@ -64,8 +64,8 @@ gam/googleapiclient/discovery_cache/base.py,sha256=yCDPtxnbNN-p5_9fzBacC6P3wcUPl
|
|
|
64
64
|
gam/googleapiclient/discovery_cache/file_cache.py,sha256=sim3Mg4HgRYo3vX75jvcKy_aV568EvIrtBfvfbw-044,4774
|
|
65
65
|
gam/iso8601/__init__.py,sha256=Z2PsYbXgAH5a5xzUvgczCboPzqWpm65kRcIngCnhViU,1218
|
|
66
66
|
gam/iso8601/iso8601.py,sha256=Li2FHZ4sBTWuthuQhyCvmvj0j6At8JbGzkSv2fc2RHU,4384
|
|
67
|
-
gam7-7.4.
|
|
68
|
-
gam7-7.4.
|
|
69
|
-
gam7-7.4.
|
|
70
|
-
gam7-7.4.
|
|
71
|
-
gam7-7.4.
|
|
67
|
+
gam7-7.4.4.dist-info/METADATA,sha256=IjXVDr_1mMsuJxC2rZxGzgYO8NySBWXgRRBm_lCOP_A,2888
|
|
68
|
+
gam7-7.4.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
69
|
+
gam7-7.4.4.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
70
|
+
gam7-7.4.4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
71
|
+
gam7-7.4.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|