diff --git a/src/GamCommands.txt b/src/GamCommands.txt index c4dfda58..19cea414 100644 --- a/src/GamCommands.txt +++ b/src/GamCommands.txt @@ -5499,6 +5499,7 @@ gam print vaultcounts [todrive *] [excludedrafts ] [] [wait ] + [include_suspended_zeros []] gam print vaultcounts [todrive *] matter operation [wait ] diff --git a/src/GamUpdate.txt b/src/GamUpdate.txt index 1c688075..e07dfc2b 100644 --- a/src/GamUpdate.txt +++ b/src/GamUpdate.txt @@ -1,3 +1,8 @@ +7.43.04 + +Added option `include_suspended_zeros []` to `gam print vaultcounts` that causes +GAM to generate zero count lines for suspended users with zero items as well as non-suspended users. + 7.43.03 Added option `parentpathonly []` to the following commands that causes GAM diff --git a/src/gam/__init__.py b/src/gam/__init__.py index 2dc8f914..569638ae 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki """ __author__ = 'GAM Team ' -__version__ = '7.43.03' +__version__ = '7.43.04' __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)' # pylint: disable=wrong-import-position @@ -45391,11 +45391,13 @@ PRINT_VAULT_COUNTS_TITLES = ['account', 'count', 'error'] # [excludedrafts ] # [] # [wait ] +# [include_suspended_zeros []] # gam print vaultcounts [todrive *] # matter operation [wait ] def doPrintVaultCounts(): v = buildGAPIObject(API.VAULT) csvPF = CSVPrintFile(PRINT_VAULT_COUNTS_TITLES, 'sortall') + includeSuspendedZeros = False matterId = name = None operationWait = 15 body = {'view': 'ALL', 'query': {}} @@ -45413,6 +45415,8 @@ def doPrintVaultCounts(): _buildVaultQuery(myarg, body['query'], VAULT_COUNTS_CORPUS_ARGUMENT_MAP) elif myarg == 'wait': operationWait = getInteger(minVal=1) + elif myarg == "includesuspendedzeros": + includeSuspendedZeros = getBoolean() else: unknownArgumentExit() if not matterId: @@ -45451,9 +45455,13 @@ def doPrintVaultCounts(): if search_method == 'ACCOUNT': query_accounts = query.get('accountInfo', {}).get('emails', []) elif search_method == 'ENTIRE_ORG': - query_accounts = getItemsToModify(Cmd.ENTITY_ALL_USERS, '') + query_accounts = getItemsToModify(Cmd.ENTITY_ALL_USERS if not includeSuspendedZeros else Cmd.ENTITY_ALL_USERS_NS_SUSP, + '') elif search_method == 'ORG_UNIT': - query_accounts = getItemsToModify(Cmd.ENTITY_OU, query['orgUnitInfo']['orgUnitId']) + query_accounts = getItemsToModify(Cmd.ENTITY_OU if not includeSuspendedZeros else Cmd.ENTITY_OU_NS_SUSP, + query['orgUnitInfo']['orgUnitId']) + else: + query_accounts = [] mailcounts = response.get('mailCountResult', {}) groupcounts = response.get('groupsCountResult', {}) for a_count in [mailcounts, groupcounts]: diff --git a/src/gam/gamlib/glclargs.py b/src/gam/gamlib/glclargs.py index 4078b531..a670bd8c 100644 --- a/src/gam/gamlib/glclargs.py +++ b/src/gam/gamlib/glclargs.py @@ -53,6 +53,7 @@ class GamCLArgs(): ENTITY_DOMAINS_ARCH = 'domains_arch' ENTITY_DOMAINS_NS = 'domains_ns' ENTITY_DOMAINS_SUSP = 'domains_susp' + ENTITY_DOMAINS_NS_SUSP = 'domains_ns_susp' ENTITY_DOMAINS_NA_NS = 'domains_na_ns' ENTITY_GROUP = 'group' ENTITY_GROUP_INDE = 'group_inde' @@ -60,6 +61,7 @@ class GamCLArgs(): ENTITY_GROUP_ARCH = 'group_arch' ENTITY_GROUP_NS = 'group_ns' ENTITY_GROUP_SUSP = 'group_susp' + ENTITY_GROUP_NS_SUSP = 'group_ns_susp' ENTITY_GROUP_NA_NS = 'group_na_ns' ENTITY_GROUPS = 'groups' ENTITY_GROUPS_INDE = 'groups_inde' @@ -67,12 +69,14 @@ class GamCLArgs(): ENTITY_GROUPS_ARCH = 'groups_arch' ENTITY_GROUPS_NS = 'groups_ns' ENTITY_GROUPS_SUSP = 'groups_susp' + ENTITY_GROUPS_NS_SUSP = 'groups_ns_susp' ENTITY_GROUPS_NA_NS = 'groups_na_ns' ENTITY_GROUP_USERS = 'group_users' ENTITY_GROUP_USERS_NA = 'group_users_na' ENTITY_GROUP_USERS_ARCH = 'group_users_arch' ENTITY_GROUP_USERS_NS = 'group_users_ns' ENTITY_GROUP_USERS_SUSP = 'group_users_susp' + ENTITY_GROUP_USERS_NS_SUSP = 'group_users_ns_susp' ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns' ENTITY_GROUP_USERS_SELECT = 'group_users_select' ENTITY_LICENSES = 'licenses' @@ -82,24 +86,28 @@ class GamCLArgs(): ENTITY_OU_ARCH = 'ou_arch' ENTITY_OU_NS = 'ou_ns' ENTITY_OU_SUSP = 'ou_susp' + ENTITY_OU_NS_SUSP = 'ou_ns_susp' ENTITY_OU_NA_NS = 'ou_na_ns' ENTITY_OU_AND_CHILDREN = 'ou_and_children' ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na' ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch' ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns' ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp' + ENTITY_OU_AND_CHILDREN_NS_SUSP = 'ou_and_children_ns_susp' ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns' ENTITY_OUS = 'ous' ENTITY_OUS_NA = 'ous_na' ENTITY_OUS_ARCH = 'ous_arch' ENTITY_OUS_NS = 'ous_ns' ENTITY_OUS_SUSP = 'ous_susp' + ENTITY_OUS_NS_SUSP = 'ous_ns_susp' ENTITY_OUS_NA_NS = 'ous_na_ns' ENTITY_OUS_AND_CHILDREN = 'ous_and_children' ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na' ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch' ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns' ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp' + ENTITY_OUS_AND_CHILDREN_NS_SUSP = 'ous_and_children_ns_susp' ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns' ENTITY_QUERIES = 'queries' ENTITY_QUERY = 'query' @@ -111,9 +119,9 @@ class GamCLArgs(): ENTITY_USERS_ARCH = 'users_arch' ENTITY_USERS_NS = 'users_ns' ENTITY_USERS_SUSP = 'users_susp' + ENTITY_USERS_NS_SUSP = 'users_ns_susp' ENTITY_USERS_NA_NS = 'users_na_ns' ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp' - ENTITY_USERS_NS_SUSP = 'users_ns_susp' ENTITY_USERS_AND_GUESTS = 'users_and_guests' ENTITY_USERS_AND_GUESTS_NS = 'users_and_guests_ns' ENTITY_USERS_AND_GUESTS_SUSP = 'users_and_guests_susp' @@ -158,6 +166,7 @@ class GamCLArgs(): ENTITY_DOMAINS_ARCH, ENTITY_DOMAINS_NS, ENTITY_DOMAINS_SUSP, + ENTITY_DOMAINS_NS_SUSP, ENTITY_DOMAINS_NA_NS, ENTITY_GROUP, ENTITY_GROUP_INDE, @@ -165,6 +174,7 @@ class GamCLArgs(): ENTITY_GROUP_ARCH, ENTITY_GROUP_NS, ENTITY_GROUP_SUSP, + ENTITY_GROUP_NS_SUSP, ENTITY_GROUP_NA_NS, ENTITY_GROUPS, ENTITY_GROUPS_INDE, @@ -172,12 +182,14 @@ class GamCLArgs(): ENTITY_GROUPS_ARCH, ENTITY_GROUPS_NS, ENTITY_GROUPS_SUSP, + ENTITY_GROUPS_NS_SUSP, ENTITY_GROUPS_NA_NS, ENTITY_GROUP_USERS, ENTITY_GROUP_USERS_NA, ENTITY_GROUP_USERS_ARCH, ENTITY_GROUP_USERS_NS, ENTITY_GROUP_USERS_SUSP, + ENTITY_GROUP_USERS_NS_SUSP, ENTITY_GROUP_USERS_NA_NS, ENTITY_GROUP_USERS_SELECT, ENTITY_LICENSES, @@ -187,24 +199,28 @@ class GamCLArgs(): ENTITY_OU_ARCH, ENTITY_OU_NS, ENTITY_OU_SUSP, + ENTITY_OU_NS_SUSP, ENTITY_OU_NA_NS, ENTITY_OU_AND_CHILDREN, ENTITY_OU_AND_CHILDREN_NA, ENTITY_OU_AND_CHILDREN_ARCH, ENTITY_OU_AND_CHILDREN_NS, ENTITY_OU_AND_CHILDREN_SUSP, + ENTITY_OU_AND_CHILDREN_NS_SUSP, ENTITY_OU_AND_CHILDREN_NA_NS, ENTITY_OUS, ENTITY_OUS_NA, ENTITY_OUS_ARCH, ENTITY_OUS_NS, ENTITY_OUS_SUSP, + ENTITY_OUS_NS_SUSP, ENTITY_OUS_NA_NS, ENTITY_OUS_AND_CHILDREN, ENTITY_OUS_AND_CHILDREN_NA, ENTITY_OUS_AND_CHILDREN_ARCH, ENTITY_OUS_AND_CHILDREN_NS, ENTITY_OUS_AND_CHILDREN_SUSP, + ENTITY_OUS_AND_CHILDREN_NS_SUSP, ENTITY_OUS_AND_CHILDREN_NA_NS, ENTITY_QUERIES, ENTITY_QUERY, @@ -286,48 +302,56 @@ class GamCLArgs(): 'org_arch': ENTITY_OU_ARCH, 'org_ns': ENTITY_OU_NS, 'org_susp': ENTITY_OU_SUSP, + 'org_ns_susp': ENTITY_OU_NS_SUSP, 'org_na_ns': ENTITY_OU_NA_NS, 'org_and_child': ENTITY_OU_AND_CHILDREN, 'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA, 'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH, 'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS, 'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP, + 'org_and_child_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP, 'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS, 'org_and_children': ENTITY_OU_AND_CHILDREN, 'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA, 'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH, 'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS, 'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP, + 'org_and_children_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP, 'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS, 'orgs': ENTITY_OUS, 'orgs_na': ENTITY_OUS_NA, 'orgs_arch': ENTITY_OUS_ARCH, 'orgs_ns': ENTITY_OUS_NS, 'orgs_susp': ENTITY_OUS_SUSP, + 'orgs_ns_susp': ENTITY_OUS_NS_SUSP, 'orgs_na_ns': ENTITY_OUS_NA_NS, 'orgs_and_child': ENTITY_OUS_AND_CHILDREN, 'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA, 'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH, 'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS, 'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP, + 'orgs_and_child_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP, 'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS, 'orgs_and_children': ENTITY_OUS_AND_CHILDREN, 'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA, 'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH, 'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS, 'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP, + 'orgs_and_children_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP, 'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS, 'ou_and_child': ENTITY_OU_AND_CHILDREN, 'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA, 'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH, 'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS, 'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP, + 'ou_and_child_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP, 'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS, 'ous_and_child': ENTITY_OUS_AND_CHILDREN, 'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA, 'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH, 'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS, 'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP, + 'ous_and_child_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP, 'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS, } # CL entity source selectors @@ -403,9 +427,9 @@ class GamCLArgs(): ENTITY_USERS_ARCH, ENTITY_USERS_NS, ENTITY_USERS_SUSP, + ENTITY_USERS_NS_SUSP, ENTITY_USERS_ARCH_OR_SUSP, ENTITY_USERS_NA_NS, - ENTITY_USERS_NS_SUSP, ENTITY_USERS_AND_GUESTS, ENTITY_USERS_AND_GUESTS_NS, ENTITY_USERS_AND_GUESTS_SUSP, @@ -422,9 +446,9 @@ class GamCLArgs(): ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP + ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP - ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP ENTITY_ALL_USERS_AND_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS ENTITY_ALL_USERS_AND_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS ENTITY_ALL_USERS_AND_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_SUSP @@ -440,8 +464,8 @@ class GamCLArgs(): ENTITY_ALL_USERS_ARCH, ENTITY_ALL_USERS_NS, ENTITY_ALL_USERS_SUSP, - ENTITY_ALL_USERS_NA_NS, ENTITY_ALL_USERS_NS_SUSP, + ENTITY_ALL_USERS_NA_NS, ENTITY_ALL_USERS_AND_GUESTS, ENTITY_ALL_USERS_AND_GUESTS_NS, ENTITY_ALL_USERS_AND_GUESTS_SUSP, @@ -457,6 +481,7 @@ class GamCLArgs(): ENTITY_DOMAINS_ARCH, ENTITY_DOMAINS_NS, ENTITY_DOMAINS_SUSP, + ENTITY_DOMAINS_NS_SUSP, ENTITY_DOMAINS_NA_NS, } GROUP_ENTITY_TYPES = { @@ -465,6 +490,7 @@ class GamCLArgs(): ENTITY_GROUP_ARCH, ENTITY_GROUP_NS, ENTITY_GROUP_SUSP, + ENTITY_GROUP_NS_SUSP, ENTITY_GROUP_NA_NS, ENTITY_GROUP_INDE, } @@ -474,6 +500,7 @@ class GamCLArgs(): ENTITY_GROUPS_ARCH, ENTITY_GROUPS_NS, ENTITY_GROUPS_SUSP, + ENTITY_GROUPS_NS_SUSP, ENTITY_GROUPS_NA_NS, ENTITY_GROUPS_INDE, } @@ -483,6 +510,7 @@ class GamCLArgs(): ENTITY_GROUP_USERS_ARCH, ENTITY_GROUP_USERS_NS, ENTITY_GROUP_USERS_SUSP, + ENTITY_GROUP_USERS_NS_SUSP, ENTITY_GROUP_USERS_NA_NS, ENTITY_GROUP_USERS_SELECT, } @@ -497,6 +525,8 @@ class GamCLArgs(): ENTITY_OU_AND_CHILDREN_NS, ENTITY_OU_SUSP, ENTITY_OU_AND_CHILDREN_SUSP, + ENTITY_OU_NS_SUSP, + ENTITY_OU_AND_CHILDREN_NS_SUSP, ENTITY_OU_NA_NS, ENTITY_OU_AND_CHILDREN_NA_NS, } @@ -511,6 +541,8 @@ class GamCLArgs(): ENTITY_OUS_AND_CHILDREN_NS, ENTITY_OUS_SUSP, ENTITY_OUS_AND_CHILDREN_SUSP, + ENTITY_OUS_NS_SUSP, + ENTITY_OUS_AND_CHILDREN_NS_SUSP, ENTITY_OUS_NA_NS, ENTITY_OUS_AND_CHILDREN_NA_NS, } @@ -525,6 +557,8 @@ class GamCLArgs(): ENTITY_OUS_NS, ENTITY_OU_SUSP, ENTITY_OUS_SUSP, + ENTITY_OU_NS_SUSP, + ENTITY_OUS_NS_SUSP, ENTITY_OU_NA_NS, ENTITY_OUS_NA_NS, } @@ -588,6 +622,7 @@ class GamCLArgs(): ENTITY_DOMAINS_ARCH: 'isArchived=True', ENTITY_DOMAINS_NS: 'isSuspended=False', ENTITY_DOMAINS_SUSP: 'isSuspended=True', + ENTITY_DOMAINS_NS_SUSP: None, ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False', } GROUPS_QUERY_MAP = { #(isArchived, isSuspended) @@ -599,6 +634,8 @@ class GamCLArgs(): ENTITY_GROUPS_NS: (None, False), ENTITY_GROUP_SUSP: (None, True), ENTITY_GROUPS_SUSP: (None, True), + ENTITY_GROUP_NS_SUSP: (None, None), + ENTITY_GROUPS_NS_SUSP: (None, None), ENTITY_GROUP_NA_NS: (False, False), ENTITY_GROUPS_NA_NS: (False, False), } @@ -607,6 +644,7 @@ class GamCLArgs(): ENTITY_GROUP_USERS_ARCH: (True, None), ENTITY_GROUP_USERS_NS: (None, False), ENTITY_GROUP_USERS_SUSP: (None, True), + ENTITY_GROUP_USERS_NS_SUSP: (None, None), ENTITY_GROUP_USERS_NA_NS: (False, False), } OU_QUERY_MAP = { #(isArchived, isSuspended) @@ -626,6 +664,10 @@ class GamCLArgs(): ENTITY_OUS_SUSP: (None, True), ENTITY_OU_AND_CHILDREN_SUSP: (None, True), ENTITY_OUS_AND_CHILDREN_SUSP: (None, True), + ENTITY_OU_NS_SUSP: (None, None), + ENTITY_OUS_NS_SUSP: (None, None), + ENTITY_OU_AND_CHILDREN_NS_SUSP: (None, None), + ENTITY_OUS_AND_CHILDREN_NS_SUSP: (None, None), ENTITY_OU_NA_NS: (False, False), ENTITY_OUS_NA_NS: (False, False), ENTITY_OU_AND_CHILDREN_NA_NS: (False, False), @@ -667,6 +709,7 @@ class GamCLArgs(): ENTITY_DOMAINS_ARCH, ENTITY_DOMAINS_NS, ENTITY_DOMAINS_SUSP, + ENTITY_DOMAINS_NS_SUSP, ENTITY_DOMAINS_NA_NS, ENTITY_GROUPS, ENTITY_GROUPS_INDE, @@ -674,12 +717,14 @@ class GamCLArgs(): ENTITY_GROUPS_ARCH, ENTITY_GROUPS_NS, ENTITY_GROUPS_SUSP, + ENTITY_GROUPS_NS_SUSP, ENTITY_GROUPS_NA_NS, ENTITY_GROUP_USERS, ENTITY_GROUP_USERS_NA, ENTITY_GROUP_USERS_ARCH, ENTITY_GROUP_USERS_NS, ENTITY_GROUP_USERS_SUSP, + ENTITY_GROUP_USERS_NS_SUSP, ENTITY_GROUP_USERS_NA_NS, ENTITY_GROUP_USERS_SELECT, ENTITY_OUS, @@ -687,12 +732,14 @@ class GamCLArgs(): ENTITY_OUS_ARCH, ENTITY_OUS_NS, ENTITY_OUS_SUSP, + ENTITY_OUS_NS_SUSP, ENTITY_OUS_NA_NS, ENTITY_OUS_AND_CHILDREN, ENTITY_OUS_AND_CHILDREN_NA, ENTITY_OUS_AND_CHILDREN_ARCH, ENTITY_OUS_AND_CHILDREN_NS, ENTITY_OUS_AND_CHILDREN_SUSP, + ENTITY_OUS_AND_CHILDREN_NS_SUSP, ENTITY_OUS_AND_CHILDREN_NA_NS, ENTITY_COURSEPARTICIPANTS, ENTITY_STUDENTS,