mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-05 05:11:35 +00:00
fix another lazy import phase 1 introduced which confused PyInstaller
This commit is contained in:
71
src/gam/util/domain_filters.py
Normal file
71
src/gam/util/domain_filters.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""Domain/query filter utilities shared between aliases, groups, and users.
|
||||
|
||||
Moved here to break circular dependencies between cmd/ modules.
|
||||
"""
|
||||
|
||||
from gamlib import glcfg as GC
|
||||
from gamlib import glclargs
|
||||
|
||||
from gam.util.entity import getEntityList, getQueries
|
||||
|
||||
Cmd = glclargs.GamCLArgs()
|
||||
|
||||
|
||||
def initUserGroupDomainQueryFilters():
|
||||
if not GC.Values[GC.PRINT_AGU_DOMAINS]:
|
||||
return {'list': [{'customer': GC.Values[GC.CUSTOMER_ID]}], 'queries': [None]}
|
||||
return {'list': [{'domain': domain.lower()} for domain in GC.Values[GC.PRINT_AGU_DOMAINS].replace(',', ' ').split()], 'queries': [None]}
|
||||
|
||||
def getUserGroupDomainQueryFilters(myarg, kwargsDict):
|
||||
if myarg in {'domain', 'domains'}:
|
||||
kwargsDict['list'] = [{'domain': domain.lower()} for domain in getEntityList(Cmd.OB_DOMAIN_NAME_ENTITY)]
|
||||
elif myarg in {'query', 'queries'}:
|
||||
kwargsDict['queries'] = getQueries(myarg)
|
||||
else:
|
||||
return False
|
||||
return True
|
||||
|
||||
def makeUserGroupDomainQueryFilters(kwargsDict, isSuspended, isArchived, isDisabled):
|
||||
def addToQuery(query, keyword, value):
|
||||
pquery = query
|
||||
if not pquery:
|
||||
pquery = ''
|
||||
else:
|
||||
pquery += ' '
|
||||
pquery += f'{keyword}={value}'
|
||||
kwargsQueries.append((kwargs, pquery))
|
||||
|
||||
kwargsQueries = []
|
||||
for kwargs in kwargsDict['list']:
|
||||
for query in kwargsDict['queries']:
|
||||
if isDisabled is not None:
|
||||
addToQuery(query, 'isArchived', isDisabled)
|
||||
addToQuery(query, 'isSuspended', isDisabled)
|
||||
elif isSuspended is not None or isArchived is not None:
|
||||
if isArchived is not None:
|
||||
addToQuery(query, 'isArchived', isArchived)
|
||||
if isSuspended is not None:
|
||||
addToQuery(query, 'isSuspended', isSuspended)
|
||||
else:
|
||||
kwargsQueries.append((kwargs, query))
|
||||
return kwargsQueries
|
||||
|
||||
def groupFilters(kwargs, query):
|
||||
queryTitle = ''
|
||||
if kwargs.get('domain'):
|
||||
queryTitle += f'domain={kwargs["domain"]}, '
|
||||
if query is not None:
|
||||
queryTitle += f'query="{query}", '
|
||||
if queryTitle:
|
||||
return query, queryTitle[:-2]
|
||||
return query, queryTitle
|
||||
|
||||
def _setUserGroupArgs(user, kwargs):
|
||||
if 'customer' in kwargs:
|
||||
if "'" not in user:
|
||||
kwargs['query'] = f'memberKey={user}'
|
||||
else:
|
||||
quser = user.replace("'", "\\\\'")
|
||||
kwargs['query'] = f'memberKey={quser}'
|
||||
else:
|
||||
kwargs['userKey'] = user
|
||||
70
src/gam/util/group_parents.py
Normal file
70
src/gam/util/group_parents.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Group parent hierarchy utilities shared between groups/members and userop/usergroups.
|
||||
|
||||
Moved here to break circular dependencies between cmd/ modules.
|
||||
"""
|
||||
|
||||
from gamlib import glentity
|
||||
from gamlib import glgapi as GAPI
|
||||
from gamlib import glindent
|
||||
|
||||
from gam.util.access import accessErrorExit
|
||||
from gam.util.api import callGAPIpages
|
||||
from gam.util.csv_pf import flattenJSON
|
||||
from gam.util.display import badRequestWarning, printKeyValueListWithCount
|
||||
from gam.util.domain_filters import _setUserGroupArgs
|
||||
|
||||
Ent = glentity.GamEntity()
|
||||
Ind = glindent.GamIndent()
|
||||
|
||||
|
||||
def getGroupParents(cd, groupParents, groupEmail, groupName, kwargs):
|
||||
groupParents[groupEmail] = {'name': groupName, 'parents': []}
|
||||
_setUserGroupArgs(groupEmail, kwargs)
|
||||
try:
|
||||
entityList = callGAPIpages(cd.groups(), 'list', 'groups',
|
||||
throwReasons=GAPI.GROUP_LIST_USERKEY_THROW_REASONS,
|
||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||
orderBy='email', fields='nextPageToken,groups(email,name)', **kwargs)
|
||||
for parentGroup in entityList:
|
||||
groupParents[groupEmail]['parents'].append(parentGroup['email'])
|
||||
if parentGroup['email'] not in groupParents:
|
||||
getGroupParents(cd, groupParents, parentGroup['email'], parentGroup['name'], kwargs)
|
||||
except (GAPI.invalidMember, GAPI.invalidInput):
|
||||
badRequestWarning(Ent.GROUP, Ent.MEMBER, groupEmail)
|
||||
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.forbidden, GAPI.badRequest):
|
||||
accessErrorExit(cd)
|
||||
|
||||
def showGroupParents(groupParents, groupEmail, role, i, count):
|
||||
kvList = [groupEmail, f'{groupParents[groupEmail]["name"]}']
|
||||
if role:
|
||||
kvList.extend([Ent.Singular(Ent.ROLE), role])
|
||||
printKeyValueListWithCount(kvList, i, count)
|
||||
Ind.Increment()
|
||||
for parentEmail in groupParents[groupEmail]['parents']:
|
||||
showGroupParents(groupParents, parentEmail, None, 0, 0)
|
||||
Ind.Decrement()
|
||||
|
||||
def addJsonGroupParents(groupParents, userGroup, groupEmail):
|
||||
userGroup.setdefault('parents', [])
|
||||
for parentEmail in groupParents[groupEmail]['parents']:
|
||||
userGroup['parents'].append({'email': parentEmail, 'name': groupParents[parentEmail]['name'], 'parents': []})
|
||||
addJsonGroupParents(groupParents, userGroup['parents'][-1], parentEmail)
|
||||
|
||||
def printGroupParents(groupParents, groupEmail, row, csvPF, delimiter, showParentsAsList):
|
||||
if groupParents[groupEmail]['parents']:
|
||||
for parentEmail in groupParents[groupEmail]['parents']:
|
||||
row['parents'].append({'email': parentEmail, 'name': groupParents[parentEmail]['name']})
|
||||
printGroupParents(groupParents, parentEmail, row, csvPF, delimiter, showParentsAsList)
|
||||
del row['parents'][-1]
|
||||
else:
|
||||
if not showParentsAsList:
|
||||
csvPF.WriteRowTitles(flattenJSON(row))
|
||||
else:
|
||||
crow = row.copy()
|
||||
if 'Role' in row:
|
||||
crow['Role'] = row['Role']
|
||||
parents = crow.pop('parents')
|
||||
crow['ParentsCount'] = len(parents)
|
||||
crow['Parents'] = delimiter.join([parent['email'] for parent in parents])
|
||||
crow['ParentsName'] = delimiter.join([parent['name'] for parent in parents])
|
||||
csvPF.WriteRow(flattenJSON(crow))
|
||||
@@ -130,3 +130,9 @@ def getAllParentOrgUnitsForUser(cd, user):
|
||||
except (GAPI.badRequest, GAPI.invalidCustomerId, GAPI.loginRequired):
|
||||
_getMain().accessErrorExit(cd)
|
||||
return orgUnits
|
||||
|
||||
def _getOrgunitsOrgUnitIdPath(cd, orgUnit):
|
||||
if orgUnit.startswith('orgunits/'):
|
||||
orgUnit = f'id:{orgUnit[9:]}'
|
||||
orgUnitPath, orgUnitId = getOrgUnitId(cd, orgUnit)
|
||||
return (orgUnitPath, f'orgunits/{orgUnitId[3:]}')
|
||||
|
||||
32
src/gam/util/schema_utils.py
Normal file
32
src/gam/util/schema_utils.py
Normal file
@@ -0,0 +1,32 @@
|
||||
"""Schema parameter utilities shared between user management and groups.
|
||||
|
||||
Moved here to break circular dependencies between cmd/ modules.
|
||||
"""
|
||||
|
||||
from gamlib import glclargs
|
||||
from gam.util.args import getString
|
||||
|
||||
Cmd = glclargs.GamCLArgs()
|
||||
|
||||
|
||||
def _initSchemaParms(projection):
|
||||
return {'projection': projection, 'customFieldMask': None, 'selectedSchemaFields': {}}
|
||||
|
||||
def _getSchemaNameList(schemaParms):
|
||||
customFieldMask = getString(Cmd.OB_SCHEMA_NAME_LIST).replace(' ', ',')
|
||||
if customFieldMask.lower() == 'all':
|
||||
schemaParms['projection'] = 'full'
|
||||
schemaParms['customFieldMask'] = None
|
||||
schemaParms['selectedSchemaFields'] = {}
|
||||
else:
|
||||
schemaParms['projection'] = 'custom'
|
||||
customFieldMaskList = []
|
||||
for schemaField in customFieldMask.split(','):
|
||||
if schemaField.find('.') == -1:
|
||||
customFieldMaskList.append(schemaField)
|
||||
else:
|
||||
schemaName, fieldName = schemaField.split('.', 1)
|
||||
customFieldMaskList.append(schemaName)
|
||||
schemaParms['selectedSchemaFields'] .setdefault(schemaName, set())
|
||||
schemaParms['selectedSchemaFields'][schemaName].add(fieldName)
|
||||
schemaParms['customFieldMask'] = ','.join(customFieldMaskList)
|
||||
Reference in New Issue
Block a user