gam7 7.3.8__py3-none-any.whl → 7.4.0__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 +117 -882
- gam/gamlib/glapi.py +0 -11
- gam/gamlib/glclargs.py +4 -0
- gam/gamlib/glentity.py +0 -4
- gam/gamlib/glglobals.py +5 -2
- gam/gamlib/glmsgs.py +1 -0
- {gam7-7.3.8.dist-info → gam7-7.4.0.dist-info}/METADATA +1 -1
- {gam7-7.3.8.dist-info → gam7-7.4.0.dist-info}/RECORD +11 -11
- {gam7-7.3.8.dist-info → gam7-7.4.0.dist-info}/WHEEL +0 -0
- {gam7-7.3.8.dist-info → gam7-7.4.0.dist-info}/entry_points.txt +0 -0
- {gam7-7.3.8.dist-info → gam7-7.4.0.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.
|
|
28
|
+
__version__ = '7.04.00'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -142,14 +142,11 @@ from gamlib import glskus as SKU
|
|
|
142
142
|
from gamlib import gluprop as UProp
|
|
143
143
|
from gamlib import glverlibs
|
|
144
144
|
|
|
145
|
-
import atom
|
|
146
145
|
import gdata.apps.service
|
|
147
146
|
import gdata.apps.audit
|
|
148
147
|
import gdata.apps.audit.service
|
|
149
148
|
import gdata.apps.contacts
|
|
150
149
|
import gdata.apps.contacts.service
|
|
151
|
-
import gdata.apps.sites
|
|
152
|
-
import gdata.apps.sites.service
|
|
153
150
|
# Import local library, does not include discovery documents
|
|
154
151
|
import googleapiclient
|
|
155
152
|
import googleapiclient.discovery
|
|
@@ -825,6 +822,9 @@ def deprecatedArgument(argument):
|
|
|
825
822
|
def deprecatedArgumentExit(argument):
|
|
826
823
|
usageErrorExit(f'{Cmd.ARGUMENT_ERROR_NAMES[Cmd.ARGUMENT_DEPRECATED][1]}: <{argument}>')
|
|
827
824
|
|
|
825
|
+
def deprecatedCommandExit():
|
|
826
|
+
systemErrorExit(USAGE_ERROR_RC, Msg.SITES_COMMAND_DEPRECATED.format(Cmd.CommandDeprecated()))
|
|
827
|
+
|
|
828
828
|
# Choices is the valid set of choices that was expected
|
|
829
829
|
def formatChoiceList(choices):
|
|
830
830
|
choiceList = [c if c else "''" for c in choices]
|
|
@@ -1749,33 +1749,6 @@ def protectedSheetId(spreadsheet, sheetId):
|
|
|
1749
1749
|
return True
|
|
1750
1750
|
return False
|
|
1751
1751
|
|
|
1752
|
-
SITENAME_PATTERN = re.compile(r'^[a-z0-9\-_]+$')
|
|
1753
|
-
SITENAME_FORMAT_REQUIRED = '[a-z,0-9,-_]+'
|
|
1754
|
-
|
|
1755
|
-
def validateSplitSiteName(fullSite):
|
|
1756
|
-
siteParts = fullSite.lower().split('/', 1)
|
|
1757
|
-
if (len(siteParts) == 1) or not siteParts[1]:
|
|
1758
|
-
domain = GC.Values[GC.DOMAIN]
|
|
1759
|
-
site = siteParts[0]
|
|
1760
|
-
elif not siteParts[0]:
|
|
1761
|
-
domain = GC.Values[GC.DOMAIN]
|
|
1762
|
-
site = siteParts[1]
|
|
1763
|
-
else:
|
|
1764
|
-
domain = siteParts[0]
|
|
1765
|
-
site = siteParts[1]
|
|
1766
|
-
if SITENAME_PATTERN.match(site):
|
|
1767
|
-
return (domain, site, f'{domain}/{site}')
|
|
1768
|
-
return (domain, site, None)
|
|
1769
|
-
|
|
1770
|
-
def getSiteName():
|
|
1771
|
-
if Cmd.ArgumentsRemaining():
|
|
1772
|
-
domain, site, domainSite = validateSplitSiteName(Cmd.Current())
|
|
1773
|
-
if domainSite:
|
|
1774
|
-
Cmd.Advance()
|
|
1775
|
-
return (domain, site, domainSite)
|
|
1776
|
-
invalidArgumentExit(SITENAME_FORMAT_REQUIRED)
|
|
1777
|
-
missingArgumentExit(SITENAME_FORMAT_REQUIRED)
|
|
1778
|
-
|
|
1779
1752
|
def getString(item, checkBlank=False, optional=False, minLen=1, maxLen=None):
|
|
1780
1753
|
if Cmd.ArgumentsRemaining():
|
|
1781
1754
|
argstr = Cmd.Current()
|
|
@@ -5674,21 +5647,6 @@ def getContactsQuery(**kwargs):
|
|
|
5674
5647
|
def getEmailAuditObject():
|
|
5675
5648
|
return initGDataObject(gdata.apps.audit.service.AuditService(), API.EMAIL_AUDIT)
|
|
5676
5649
|
|
|
5677
|
-
def getSitesObject(entityType=Ent.DOMAIN, entityName=None, i=0, count=0):
|
|
5678
|
-
if entityType == Ent.DOMAIN:
|
|
5679
|
-
sitesObject = initGDataObject(gdata.apps.sites.service.SitesService(), API.SITES)
|
|
5680
|
-
return (entityName or GC.Values[GC.DOMAIN], sitesObject)
|
|
5681
|
-
userEmail, credentials = getGDataUserCredentials(API.SITES, entityName, i, count)
|
|
5682
|
-
if not credentials:
|
|
5683
|
-
return (userEmail, None)
|
|
5684
|
-
if GC.Values[GC.NO_VERIFY_SSL]:
|
|
5685
|
-
ssl._create_default_https_context = ssl._create_unverified_context
|
|
5686
|
-
sitesObject = gdata.apps.sites.service.SitesService(source=GAM_USER_AGENT,
|
|
5687
|
-
additional_headers={'Authorization': f'Bearer {credentials.token}'})
|
|
5688
|
-
if GC.Values[GC.DEBUG_LEVEL] > 0:
|
|
5689
|
-
sitesObject.debug = True
|
|
5690
|
-
return (userEmail, sitesObject)
|
|
5691
|
-
|
|
5692
5650
|
def getUserEmailFromID(uid, cd):
|
|
5693
5651
|
try:
|
|
5694
5652
|
result = callGAPI(cd.users(), 'get',
|
|
@@ -8495,14 +8453,18 @@ class CSVPrintFile():
|
|
|
8495
8453
|
self.AddTitle(title)
|
|
8496
8454
|
return RowFilterMatch(row, self.titlesList, self.rowFilter, self.rowFilterMode, self.rowDropFilter, self.rowDropFilterMode)
|
|
8497
8455
|
|
|
8498
|
-
def UpdateMimeTypeCounts(self, row, mimeTypeInfo):
|
|
8456
|
+
def UpdateMimeTypeCounts(self, row, mimeTypeInfo, sizeField):
|
|
8457
|
+
saveList = self.titlesList[:]
|
|
8458
|
+
saveSet = set(self.titlesSet)
|
|
8499
8459
|
for title in row:
|
|
8500
8460
|
if title not in self.titlesSet:
|
|
8501
8461
|
self.AddTitle(title)
|
|
8502
8462
|
if RowFilterMatch(row, self.titlesList, self.rowFilter, self.rowFilterMode, self.rowDropFilter, self.rowDropFilterMode):
|
|
8503
8463
|
mimeTypeInfo.setdefault(row['mimeType'], {'count': 0, 'size': 0})
|
|
8504
8464
|
mimeTypeInfo[row['mimeType']]['count'] += 1
|
|
8505
|
-
mimeTypeInfo[row['mimeType']]['size'] += int(row.get(
|
|
8465
|
+
mimeTypeInfo[row['mimeType']]['size'] += int(row.get(sizeField, '0'))
|
|
8466
|
+
self.titlesList = saveList[:]
|
|
8467
|
+
self.titlesSet = set(saveSet)
|
|
8506
8468
|
|
|
8507
8469
|
def SetZeroBlankMimeTypeCounts(self, zeroBlankMimeTypeCounts):
|
|
8508
8470
|
self.zeroBlankMimeTypeCounts = zeroBlankMimeTypeCounts
|
|
@@ -41661,23 +41623,22 @@ def printShowUserVaultHolds(entityList):
|
|
|
41661
41623
|
else:
|
|
41662
41624
|
printKeyValueList(['Total Holds', totalHolds])
|
|
41663
41625
|
|
|
41664
|
-
def _cleanVaultQuery(query, cd
|
|
41626
|
+
def _cleanVaultQuery(query, cd):
|
|
41665
41627
|
if 'query' in query:
|
|
41666
41628
|
if cd is not None:
|
|
41667
41629
|
if 'orgUnitInfo' in query['query']:
|
|
41668
41630
|
query['query']['orgUnitInfo']['orgUnitPath'] = convertOrgUnitIDtoPath(cd, query['query']['orgUnitInfo']['orgUnitId'])
|
|
41669
|
-
if drive is not None:
|
|
41670
41631
|
if 'sharedDriveInfo' in query['query']:
|
|
41671
41632
|
query['query']['sharedDriveInfo']['sharedDriveNames'] = []
|
|
41672
41633
|
for sharedDriveId in query['query']['sharedDriveInfo']['sharedDriveIds']:
|
|
41673
|
-
query['query']['sharedDriveInfo']['sharedDriveNames'].append(_getSharedDriveNameFromId(
|
|
41634
|
+
query['query']['sharedDriveInfo']['sharedDriveNames'].append(_getSharedDriveNameFromId(sharedDriveId))
|
|
41674
41635
|
query['query'].pop('searchMethod', None)
|
|
41675
41636
|
query['query'].pop('teamDriveInfo', None)
|
|
41676
41637
|
|
|
41677
41638
|
VAULT_QUERY_TIME_OBJECTS = {'createTime', 'endTime', 'startTime', 'versionDate'}
|
|
41678
41639
|
|
|
41679
|
-
def _showVaultQuery(matterNameId, query, cd,
|
|
41680
|
-
_cleanVaultQuery(query, cd
|
|
41640
|
+
def _showVaultQuery(matterNameId, query, cd, FJQC, k=0, kcount=0):
|
|
41641
|
+
_cleanVaultQuery(query, cd)
|
|
41681
41642
|
if FJQC is not None and FJQC.formatJSON:
|
|
41682
41643
|
printLine(json.dumps(cleanJSON(query, timeObjects=VAULT_QUERY_TIME_OBJECTS), ensure_ascii=False, sort_keys=False))
|
|
41683
41644
|
return
|
|
@@ -41709,7 +41670,7 @@ def doInfoVaultQuery():
|
|
|
41709
41670
|
queryId, queryName, queryNameId = convertQueryNameToID(v, getString(Cmd.OB_QUERY_ITEM), matterId, matterNameId)
|
|
41710
41671
|
else:
|
|
41711
41672
|
queryName = getString(Cmd.OB_QUERY_ITEM)
|
|
41712
|
-
cd =
|
|
41673
|
+
cd = None
|
|
41713
41674
|
fieldsList = []
|
|
41714
41675
|
FJQC = FormatJSONQuoteChar()
|
|
41715
41676
|
while Cmd.ArgumentsRemaining():
|
|
@@ -41719,8 +41680,8 @@ def doInfoVaultQuery():
|
|
|
41719
41680
|
queryId, queryName, queryNameId = convertQueryNameToID(v, queryName, matterId, matterNameId)
|
|
41720
41681
|
elif myarg == 'shownames':
|
|
41721
41682
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
41722
|
-
_,
|
|
41723
|
-
if
|
|
41683
|
+
_, GM.Globals[GM.ADMIN_DRIVE] = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
41684
|
+
if GM.Globals[GM.ADMIN_DRIVE] is None:
|
|
41724
41685
|
return
|
|
41725
41686
|
elif getFieldsList(myarg, VAULT_QUERY_FIELDS_CHOICE_MAP, fieldsList, initialField=['savedQueryId', 'displayName']):
|
|
41726
41687
|
pass
|
|
@@ -41731,7 +41692,7 @@ def doInfoVaultQuery():
|
|
|
41731
41692
|
query = callGAPI(v.matters().savedQueries(), 'get',
|
|
41732
41693
|
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
41733
41694
|
matterId=matterId, savedQueryId=queryId, fields=fields)
|
|
41734
|
-
_showVaultQuery(matterNameId, query, cd,
|
|
41695
|
+
_showVaultQuery(matterNameId, query, cd, FJQC)
|
|
41735
41696
|
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden) as e:
|
|
41736
41697
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, queryNameId], str(e))
|
|
41737
41698
|
|
|
@@ -41748,7 +41709,7 @@ def doPrintShowVaultQueries():
|
|
|
41748
41709
|
csvPF = CSVPrintFile(PRINT_VAULT_QUERIES_TITLES, 'sortall') if Act.csvFormat() else None
|
|
41749
41710
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
41750
41711
|
matters = []
|
|
41751
|
-
cd =
|
|
41712
|
+
cd = None
|
|
41752
41713
|
fieldsList = []
|
|
41753
41714
|
while Cmd.ArgumentsRemaining():
|
|
41754
41715
|
myarg = getArgument()
|
|
@@ -41758,8 +41719,8 @@ def doPrintShowVaultQueries():
|
|
|
41758
41719
|
matters = shlexSplitList(getString(Cmd.OB_MATTER_ITEM_LIST))
|
|
41759
41720
|
elif myarg == 'shownames':
|
|
41760
41721
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
41761
|
-
_,
|
|
41762
|
-
if
|
|
41722
|
+
_, GM.Globals[GM.ADMIN_DRIVE] = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
41723
|
+
if GM.Globals[GM.ADMIN_DRIVE] is None:
|
|
41763
41724
|
return
|
|
41764
41725
|
elif getFieldsList(myarg, VAULT_QUERY_FIELDS_CHOICE_MAP, fieldsList, initialField=['savedQueryId', 'displayName']):
|
|
41765
41726
|
pass
|
|
@@ -41821,11 +41782,11 @@ def doPrintShowVaultQueries():
|
|
|
41821
41782
|
k = 0
|
|
41822
41783
|
for query in queries:
|
|
41823
41784
|
k += 1
|
|
41824
|
-
_showVaultQuery(matterNameId, query, cd,
|
|
41785
|
+
_showVaultQuery(matterNameId, query, cd, FJQC, k, kcount)
|
|
41825
41786
|
Ind.Decrement()
|
|
41826
41787
|
else:
|
|
41827
41788
|
for query in queries:
|
|
41828
|
-
_cleanVaultQuery(query, cd
|
|
41789
|
+
_cleanVaultQuery(query, cd)
|
|
41829
41790
|
row = flattenJSON(query, flattened={'matterId': matterId, 'matterName': matterName}, timeObjects=VAULT_QUERY_TIME_OBJECTS)
|
|
41830
41791
|
if not FJQC.formatJSON:
|
|
41831
41792
|
csvPF.WriteRowTitles(row)
|
|
@@ -42263,776 +42224,26 @@ def doPrintVaultCounts():
|
|
|
42263
42224
|
csvPF.WriteRow({'account': account, 'count': 0})
|
|
42264
42225
|
csvPF.writeCSVfile('Vault Counts')
|
|
42265
42226
|
|
|
42266
|
-
def checkSiteExists(sitesObject, domain, site):
|
|
42267
|
-
try:
|
|
42268
|
-
callGData(sitesObject, 'GetSite',
|
|
42269
|
-
throwErrors=[GDATA.NOT_FOUND],
|
|
42270
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42271
|
-
domain=domain, site=site)
|
|
42272
|
-
return True
|
|
42273
|
-
except GDATA.notFound:
|
|
42274
|
-
return None
|
|
42275
|
-
|
|
42276
|
-
SITE_ACLS = 'ACLs'
|
|
42277
|
-
SITE_CATEGORIES = 'Categories'
|
|
42278
|
-
SITE_LINK = 'Link'
|
|
42279
|
-
SITE_NAME = 'Name'
|
|
42280
|
-
SITE_SITE = 'Site'
|
|
42281
|
-
SITE_SOURCELINK = 'SourceLink'
|
|
42282
|
-
SITE_SUMMARY = 'Summary'
|
|
42283
|
-
SITE_THEME = 'Theme'
|
|
42284
|
-
SITE_UPDATED = 'Updated'
|
|
42285
|
-
SITE_WEB_ADDRESS_MAPPINGS = 'WebAddressMappings'
|
|
42286
|
-
|
|
42287
|
-
SITE_DATA_DOMAIN = 'domain'
|
|
42288
|
-
SITE_DATA_SITE = 'site'
|
|
42289
|
-
SITE_DATA_DOMAIN_SITE = 'domainSite'
|
|
42290
|
-
SITE_DATA_FIELDS = 'fields'
|
|
42291
|
-
|
|
42292
|
-
class SitesManager():
|
|
42293
|
-
|
|
42294
|
-
SITE_ARGUMENT_TO_PROPERTY_MAP = {
|
|
42295
|
-
'categories': SITE_CATEGORIES,
|
|
42296
|
-
'name': SITE_NAME,
|
|
42297
|
-
'sourcelink': SITE_SOURCELINK,
|
|
42298
|
-
'summary': SITE_SUMMARY,
|
|
42299
|
-
'theme': SITE_THEME,
|
|
42300
|
-
}
|
|
42301
|
-
|
|
42302
|
-
@staticmethod
|
|
42303
|
-
def AclEntryToFields(acl_entry):
|
|
42304
|
-
|
|
42305
|
-
def GetAclAttr(attrlist):
|
|
42306
|
-
objAttr = acl_entry
|
|
42307
|
-
for attr in attrlist:
|
|
42308
|
-
objAttr = getattr(objAttr, attr)
|
|
42309
|
-
if not objAttr:
|
|
42310
|
-
return None
|
|
42311
|
-
return objAttr
|
|
42312
|
-
|
|
42313
|
-
fields = {}
|
|
42314
|
-
fields['role'] = GetAclAttr(['role', 'value'])
|
|
42315
|
-
if not fields['role']:
|
|
42316
|
-
fields['role'] = GetAclAttr(['withKey', 'role', 'value'])+' (with link)'
|
|
42317
|
-
fields['scope'] = {'type': GetAclAttr(['scope', 'type']),
|
|
42318
|
-
'value': GetAclAttr(['scope', 'value'])}
|
|
42319
|
-
link = acl_entry.FindInviteLink()
|
|
42320
|
-
if link:
|
|
42321
|
-
fields['inviteLink'] = link
|
|
42322
|
-
return fields
|
|
42323
|
-
|
|
42324
|
-
@staticmethod
|
|
42325
|
-
def FieldsToAclEntry(fields):
|
|
42326
|
-
acl_entry = gdata.apps.sites.AclEntry()
|
|
42327
|
-
acl_entry.role = gdata.apps.sites.AclRole(value=fields['role'])
|
|
42328
|
-
acl_entry.scope = gdata.apps.sites.AclScope(stype=fields['scope']['type'], value=fields['scope'].get('value'))
|
|
42329
|
-
return acl_entry
|
|
42330
|
-
|
|
42331
|
-
@staticmethod
|
|
42332
|
-
def ActivityEntryToFields(activity_entry):
|
|
42333
|
-
fields = {}
|
|
42334
|
-
|
|
42335
|
-
def GetActivityField(fieldName, attrlist):
|
|
42336
|
-
objAttr = activity_entry
|
|
42337
|
-
for attr in attrlist:
|
|
42338
|
-
objAttr = getattr(objAttr, attr)
|
|
42339
|
-
if not objAttr:
|
|
42340
|
-
return
|
|
42341
|
-
fields[fieldName] = objAttr
|
|
42342
|
-
|
|
42343
|
-
def GetActivityFieldData(objAttr, attrlist, default):
|
|
42344
|
-
for attr in attrlist:
|
|
42345
|
-
objAttr = getattr(objAttr, attr)
|
|
42346
|
-
if not objAttr:
|
|
42347
|
-
return default
|
|
42348
|
-
return objAttr
|
|
42349
|
-
|
|
42350
|
-
def AppendItemToFieldsList(fieldName, fieldValue):
|
|
42351
|
-
fields.setdefault(fieldName, [])
|
|
42352
|
-
fields[fieldName].append(fieldValue)
|
|
42353
|
-
|
|
42354
|
-
GetActivityField('Summary', ['title', 'text'])
|
|
42355
|
-
GetActivityField('Updated', ['updated', 'text'])
|
|
42356
|
-
for author in activity_entry.author:
|
|
42357
|
-
AppendItemToFieldsList('Authors', f'{GetActivityFieldData(author, ["name", "text"], "Unknown Name")}/{GetActivityFieldData(author, ["email", "text"], "Unknown Email")}')
|
|
42358
|
-
fields['Operation'] = activity_entry.Kind()
|
|
42359
|
-
return fields
|
|
42360
|
-
|
|
42361
|
-
@staticmethod
|
|
42362
|
-
def SiteToFields(site_entry):
|
|
42363
|
-
fields = {}
|
|
42364
|
-
|
|
42365
|
-
def GetSiteField(fieldName, attrlist):
|
|
42366
|
-
objAttr = site_entry
|
|
42367
|
-
for attr in attrlist:
|
|
42368
|
-
objAttr = getattr(objAttr, attr)
|
|
42369
|
-
if not objAttr:
|
|
42370
|
-
return
|
|
42371
|
-
fields[fieldName] = objAttr
|
|
42372
|
-
|
|
42373
|
-
def AppendItemToFieldsList(fieldName, fieldValue):
|
|
42374
|
-
fields.setdefault(fieldName, [])
|
|
42375
|
-
fields[fieldName].append(fieldValue)
|
|
42376
|
-
|
|
42377
|
-
GetSiteField(SITE_SITE, ['siteName', 'text'])
|
|
42378
|
-
GetSiteField(SITE_NAME, ['title', 'text'])
|
|
42379
|
-
GetSiteField(SITE_SUMMARY, ['summary', 'text'])
|
|
42380
|
-
GetSiteField(SITE_THEME, ['theme', 'text'])
|
|
42381
|
-
GetSiteField(SITE_UPDATED, ['updated', 'text'])
|
|
42382
|
-
if site_entry.category:
|
|
42383
|
-
for category in site_entry.category:
|
|
42384
|
-
if category.term:
|
|
42385
|
-
AppendItemToFieldsList(SITE_CATEGORIES, category.term)
|
|
42386
|
-
link = site_entry.FindAlternateLink()
|
|
42387
|
-
if link:
|
|
42388
|
-
fields[SITE_LINK] = link
|
|
42389
|
-
link = site_entry.FindSourceLink()
|
|
42390
|
-
if link:
|
|
42391
|
-
fields[SITE_SOURCELINK] = link
|
|
42392
|
-
for link in site_entry.FindWebAddressMappings():
|
|
42393
|
-
AppendItemToFieldsList(SITE_WEB_ADDRESS_MAPPINGS, link)
|
|
42394
|
-
return fields
|
|
42395
|
-
|
|
42396
|
-
@staticmethod
|
|
42397
|
-
def GetSiteFields():
|
|
42398
|
-
|
|
42399
|
-
fields = {}
|
|
42400
|
-
while Cmd.ArgumentsRemaining():
|
|
42401
|
-
myarg = getArgument()
|
|
42402
|
-
if myarg in SitesManager.SITE_ARGUMENT_TO_PROPERTY_MAP:
|
|
42403
|
-
fieldName = SitesManager.SITE_ARGUMENT_TO_PROPERTY_MAP[myarg]
|
|
42404
|
-
if fieldName == SITE_NAME:
|
|
42405
|
-
fields[fieldName] = getString(Cmd.OB_STRING)
|
|
42406
|
-
elif fieldName == SITE_SOURCELINK:
|
|
42407
|
-
fields[fieldName] = getString(Cmd.OB_URI)
|
|
42408
|
-
elif fieldName == SITE_SUMMARY:
|
|
42409
|
-
fields[fieldName] = getStringWithCRsNLs()
|
|
42410
|
-
elif fieldName == SITE_THEME:
|
|
42411
|
-
fields[fieldName] = getString(Cmd.OB_STRING)
|
|
42412
|
-
elif fieldName == SITE_CATEGORIES:
|
|
42413
|
-
fields[fieldName] = getString(Cmd.OB_STRING, minLen=0).split(',')
|
|
42414
|
-
else:
|
|
42415
|
-
unknownArgumentExit()
|
|
42416
|
-
return fields
|
|
42417
|
-
|
|
42418
|
-
@staticmethod
|
|
42419
|
-
def FieldsToSite(fields):
|
|
42420
|
-
def GetField(fieldName):
|
|
42421
|
-
return fields.get(fieldName)
|
|
42422
|
-
|
|
42423
|
-
def GetSiteField(fieldName, fieldClass):
|
|
42424
|
-
value = fields.get(fieldName)
|
|
42425
|
-
if value:
|
|
42426
|
-
return fieldClass(text=value)
|
|
42427
|
-
return None
|
|
42428
|
-
|
|
42429
|
-
site_entry = gdata.apps.sites.SiteEntry(sourceSite=GetField(SITE_SOURCELINK))
|
|
42430
|
-
site_entry.siteName = GetSiteField(SITE_SITE, gdata.apps.sites.SiteName)
|
|
42431
|
-
site_entry.title = GetSiteField(SITE_NAME, atom.Title)
|
|
42432
|
-
site_entry.summary = GetSiteField(SITE_SUMMARY, atom.Summary)
|
|
42433
|
-
site_entry.theme = GetSiteField(SITE_THEME, gdata.apps.sites.Theme)
|
|
42434
|
-
value = GetField(SITE_CATEGORIES)
|
|
42435
|
-
if value:
|
|
42436
|
-
for category in value:
|
|
42437
|
-
site_entry.category.append(atom.Category(term=category, scheme=gdata.apps.sites.TAG_KIND_TERM))
|
|
42438
|
-
return site_entry
|
|
42439
|
-
|
|
42440
|
-
def getSiteEntity():
|
|
42441
|
-
siteEntity = {'list': getEntityList(Cmd.OB_SITE_ENTITY), 'dict': None}
|
|
42442
|
-
if isinstance(siteEntity['list'], dict):
|
|
42443
|
-
siteEntity['dict'] = siteEntity['list']
|
|
42444
|
-
return siteEntity
|
|
42445
|
-
|
|
42446
|
-
def _validateUserGetSites(entityType, user, i, count, siteEntity, itemType=None, modifier=None):
|
|
42447
|
-
if siteEntity['dict']:
|
|
42448
|
-
sites = siteEntity['dict'][user]
|
|
42449
|
-
else:
|
|
42450
|
-
sites = siteEntity['list']
|
|
42451
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42452
|
-
if not sitesObject:
|
|
42453
|
-
return (user, None, None, 0)
|
|
42454
|
-
jcount = len(sites)
|
|
42455
|
-
if not itemType:
|
|
42456
|
-
entityPerformActionNumItems([entityType, user], jcount, Ent.SITE, i, count)
|
|
42457
|
-
else:
|
|
42458
|
-
entityPerformActionSubItemModifierNumItems([entityType, user], itemType, modifier, jcount, Ent.SITE, i, count)
|
|
42459
|
-
if jcount == 0:
|
|
42460
|
-
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
42461
|
-
return (user, sitesObject, sites, jcount)
|
|
42462
|
-
|
|
42463
|
-
def _validateSite(fullSite, i, count):
|
|
42464
|
-
domain, site, domainSite = validateSplitSiteName(fullSite)
|
|
42465
|
-
if domainSite:
|
|
42466
|
-
return (domain, site, domainSite)
|
|
42467
|
-
entityActionNotPerformedWarning([Ent.SITE, site], Msg.INVALID_SITE.format(site, SITENAME_FORMAT_REQUIRED), i, count)
|
|
42468
|
-
return (domain, site, None)
|
|
42469
|
-
|
|
42470
|
-
def _validateSiteGetRuleIds(origUser, fullSite, j, jcount, ACLScopeEntity, showAction=True):
|
|
42471
|
-
domain, site, domainSite = _validateSite(fullSite, j, jcount)
|
|
42472
|
-
if not domainSite:
|
|
42473
|
-
return (domain, site, None, None, 0)
|
|
42474
|
-
if ACLScopeEntity:
|
|
42475
|
-
if ACLScopeEntity['dict']:
|
|
42476
|
-
if not GM.Globals[GM.CSV_SUBKEY_FIELD]:
|
|
42477
|
-
ruleIds = ACLScopeEntity['dict'][fullSite]
|
|
42478
|
-
else:
|
|
42479
|
-
ruleIds = ACLScopeEntity['dict'][origUser][fullSite]
|
|
42480
|
-
else:
|
|
42481
|
-
ruleIds = ACLScopeEntity['list']
|
|
42482
|
-
kcount = len(ruleIds)
|
|
42483
|
-
if kcount == 0:
|
|
42484
|
-
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
42485
|
-
else:
|
|
42486
|
-
ruleIds = []
|
|
42487
|
-
kcount = 0
|
|
42488
|
-
if showAction:
|
|
42489
|
-
entityPerformActionNumItems([Ent.SITE, domainSite], kcount, Ent.SITE_ACL, j, jcount)
|
|
42490
|
-
return (domain, site, domainSite, ruleIds, kcount)
|
|
42491
|
-
|
|
42492
|
-
def _createSite(users, entityType):
|
|
42493
|
-
sitesManager = SitesManager()
|
|
42494
|
-
domain, site, domainSite = getSiteName()
|
|
42495
|
-
fields = sitesManager.GetSiteFields()
|
|
42496
|
-
if not fields.get(SITE_NAME):
|
|
42497
|
-
fields[SITE_NAME] = site
|
|
42498
|
-
i, count, users = getEntityArgument(users)
|
|
42499
|
-
for user in users:
|
|
42500
|
-
i += 1
|
|
42501
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42502
|
-
if not sitesObject:
|
|
42503
|
-
continue
|
|
42504
|
-
try:
|
|
42505
|
-
siteEntry = sitesManager.FieldsToSite(fields)
|
|
42506
|
-
callGData(sitesObject, 'CreateSite',
|
|
42507
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.ENTITY_EXISTS, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42508
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42509
|
-
siteentry=siteEntry, domain=domain, site=None)
|
|
42510
|
-
entityActionPerformed([Ent.SITE, domainSite])
|
|
42511
|
-
except GDATA.notFound as e:
|
|
42512
|
-
entityActionFailedWarning([Ent.DOMAIN, domain], str(e))
|
|
42513
|
-
except (GDATA.entityExists, GDATA.badRequest, GDATA.forbidden) as e:
|
|
42514
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42515
|
-
|
|
42516
42227
|
# gam [<UserTypeEntity>] create site <SiteName> <SiteAttribute>*
|
|
42517
|
-
def createUserSite(users):
|
|
42518
|
-
_createSite(users, Ent.USER)
|
|
42519
|
-
|
|
42520
|
-
def doCreateDomainSite():
|
|
42521
|
-
_createSite([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42522
|
-
|
|
42523
|
-
def _updateSites(users, entityType):
|
|
42524
|
-
sitesManager = SitesManager()
|
|
42525
|
-
siteEntity = getSiteEntity()
|
|
42526
|
-
updateFields = sitesManager.GetSiteFields()
|
|
42527
|
-
i, count, users = getEntityArgument(users)
|
|
42528
|
-
for user in users:
|
|
42529
|
-
i += 1
|
|
42530
|
-
user, sitesObject, sites, jcount = _validateUserGetSites(entityType, user, i, count, siteEntity)
|
|
42531
|
-
if jcount == 0:
|
|
42532
|
-
continue
|
|
42533
|
-
Ind.Increment()
|
|
42534
|
-
j = 0
|
|
42535
|
-
for site in sites:
|
|
42536
|
-
j += 1
|
|
42537
|
-
domain, site, domainSite = _validateSite(site, j, jcount)
|
|
42538
|
-
if not domainSite:
|
|
42539
|
-
continue
|
|
42540
|
-
try:
|
|
42541
|
-
siteEntry = callGData(sitesObject, 'GetSite',
|
|
42542
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42543
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42544
|
-
domain=domain, site=site)
|
|
42545
|
-
fields = sitesManager.SiteToFields(siteEntry)
|
|
42546
|
-
for field, value in iter(updateFields.items()):
|
|
42547
|
-
if field != SITE_SOURCELINK:
|
|
42548
|
-
fields[field] = value
|
|
42549
|
-
newSiteEntry = sitesManager.FieldsToSite(fields)
|
|
42550
|
-
callGData(sitesObject, 'UpdateSite',
|
|
42551
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42552
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42553
|
-
siteentry=newSiteEntry, domain=domain, site=site, extra_headers={'If-Match': siteEntry.etag})
|
|
42554
|
-
entityActionPerformed([Ent.SITE, domainSite])
|
|
42555
|
-
except (GDATA.notFound, GDATA.badRequest, GDATA.forbidden) as e:
|
|
42556
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42557
|
-
|
|
42558
42228
|
# gam [<UserTypeEntity>] update site <SiteEntity> <SiteAttribute>+
|
|
42559
|
-
def updateUserSites(users):
|
|
42560
|
-
_updateSites(users, Ent.USER)
|
|
42561
|
-
|
|
42562
|
-
def doUpdateDomainSites():
|
|
42563
|
-
_updateSites([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42564
|
-
|
|
42565
|
-
SITE_FIELD_PRINT_ORDER = [
|
|
42566
|
-
SITE_UPDATED,
|
|
42567
|
-
SITE_NAME,
|
|
42568
|
-
SITE_SUMMARY,
|
|
42569
|
-
SITE_THEME,
|
|
42570
|
-
SITE_SOURCELINK,
|
|
42571
|
-
SITE_CATEGORIES,
|
|
42572
|
-
SITE_LINK,
|
|
42573
|
-
]
|
|
42574
|
-
|
|
42575
|
-
def _showSite(sitesManager, sitesObject, domain, site, roles, j, jcount):
|
|
42576
|
-
fields = sitesManager.SiteToFields(site)
|
|
42577
|
-
domainSite = f'{domain}/{fields[SITE_SITE]}'
|
|
42578
|
-
printKeyValueListWithCount([SITE_SITE, domainSite], j, jcount)
|
|
42579
|
-
Ind.Increment()
|
|
42580
|
-
for field in SITE_FIELD_PRINT_ORDER:
|
|
42581
|
-
if field in fields:
|
|
42582
|
-
if not isinstance(fields[field], list):
|
|
42583
|
-
if field != SITE_SUMMARY:
|
|
42584
|
-
printKeyValueList([field, fields[field]])
|
|
42585
|
-
else:
|
|
42586
|
-
printKeyValueWithCRsNLs(field, fields[field])
|
|
42587
|
-
else:
|
|
42588
|
-
printKeyValueList([field, ','.join(fields[field])])
|
|
42589
|
-
if fields.get(SITE_WEB_ADDRESS_MAPPINGS):
|
|
42590
|
-
printKeyValueList([SITE_WEB_ADDRESS_MAPPINGS, None])
|
|
42591
|
-
Ind.Increment()
|
|
42592
|
-
for link in fields[SITE_WEB_ADDRESS_MAPPINGS]:
|
|
42593
|
-
printKeyValueList([link, None])
|
|
42594
|
-
Ind.Decrement()
|
|
42595
|
-
if roles:
|
|
42596
|
-
try:
|
|
42597
|
-
acls = callGDataPages(sitesObject, 'GetAclFeed',
|
|
42598
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42599
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42600
|
-
domain=domain, site=fields[SITE_SITE])
|
|
42601
|
-
printKeyValueList([SITE_ACLS, None])
|
|
42602
|
-
Ind.Increment()
|
|
42603
|
-
for acl in acls:
|
|
42604
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42605
|
-
if fields['role'] in roles:
|
|
42606
|
-
printKeyValueList([formatACLRule(fields)])
|
|
42607
|
-
Ind.Decrement()
|
|
42608
|
-
except GDATA.notFound as e:
|
|
42609
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42610
|
-
except GDATA.forbidden:
|
|
42611
|
-
pass
|
|
42612
|
-
Ind.Decrement()
|
|
42613
|
-
|
|
42614
|
-
SITE_ACL_ROLES_MAP = {
|
|
42615
|
-
'editor': 'writer',
|
|
42616
|
-
'invite': 'invite',
|
|
42617
|
-
'owner': 'owner',
|
|
42618
|
-
'read': 'reader',
|
|
42619
|
-
'reader': 'reader',
|
|
42620
|
-
'writer': 'writer',
|
|
42621
|
-
}
|
|
42622
|
-
|
|
42623
|
-
def _infoSites(users, entityType):
|
|
42624
|
-
siteEntity = getSiteEntity()
|
|
42625
|
-
url_params = {}
|
|
42626
|
-
roles = set()
|
|
42627
|
-
while Cmd.ArgumentsRemaining():
|
|
42628
|
-
myarg = getArgument()
|
|
42629
|
-
if myarg == 'withmappings':
|
|
42630
|
-
url_params['with-mappings'] = 'true'
|
|
42631
|
-
elif myarg in {'role', 'roles'}:
|
|
42632
|
-
roles = getACLRoles(SITE_ACL_ROLES_MAP)
|
|
42633
|
-
else:
|
|
42634
|
-
unknownArgumentExit()
|
|
42635
|
-
sitesManager = SitesManager()
|
|
42636
|
-
i, count, users = getEntityArgument(users)
|
|
42637
|
-
for user in users:
|
|
42638
|
-
i += 1
|
|
42639
|
-
user, sitesObject, sites, jcount = _validateUserGetSites(entityType, user, i, count, siteEntity)
|
|
42640
|
-
if jcount == 0:
|
|
42641
|
-
continue
|
|
42642
|
-
Ind.Increment()
|
|
42643
|
-
j = 0
|
|
42644
|
-
for site in sites:
|
|
42645
|
-
j += 1
|
|
42646
|
-
domain, site, domainSite = _validateSite(site, j, jcount)
|
|
42647
|
-
if not domainSite:
|
|
42648
|
-
continue
|
|
42649
|
-
try:
|
|
42650
|
-
result = callGData(sitesObject, 'GetSite',
|
|
42651
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42652
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42653
|
-
domain=domain, site=site, url_params=url_params)
|
|
42654
|
-
if result:
|
|
42655
|
-
_showSite(sitesManager, sitesObject, domain, result, roles, j, jcount)
|
|
42656
|
-
except (GDATA.notFound, GDATA.forbidden) as e:
|
|
42657
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42658
|
-
Ind.Decrement()
|
|
42659
|
-
|
|
42660
42229
|
# gam [<UserTypeEntity>] info site <SiteEntity> [withmappings] [role|roles all|<SiteACLRoleList>]
|
|
42661
|
-
def infoUserSites(users):
|
|
42662
|
-
_infoSites(users, Ent.USER)
|
|
42663
|
-
|
|
42664
|
-
def doInfoDomainSites():
|
|
42665
|
-
_infoSites([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42666
|
-
|
|
42667
|
-
def printShowSites(entityList, entityType):
|
|
42668
|
-
def _getSites(domain, i, count):
|
|
42669
|
-
try:
|
|
42670
|
-
return callGDataPages(sitesObject, 'GetSiteFeed',
|
|
42671
|
-
pageMessage=getPageMessageForWhom(),
|
|
42672
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42673
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42674
|
-
domain=domain, url_params=url_params)
|
|
42675
|
-
except (GDATA.notFound, GDATA.forbidden) as e:
|
|
42676
|
-
entityActionFailedWarning([Ent.DOMAIN, domain], str(e), i, count)
|
|
42677
|
-
return []
|
|
42678
|
-
|
|
42679
|
-
def _printSites(entity, i, count, domain, sites):
|
|
42680
|
-
for site in sites:
|
|
42681
|
-
fields = sitesManager.SiteToFields(site)
|
|
42682
|
-
if fields[SITE_SITE] in sitesSet:
|
|
42683
|
-
continue
|
|
42684
|
-
sitesSet.add(fields[SITE_SITE])
|
|
42685
|
-
domainSite = f'{domain}/{fields[SITE_SITE]}'
|
|
42686
|
-
siteRow = {Ent.Singular(entityType): entity, SITE_SITE: domainSite}
|
|
42687
|
-
for field, value in iter(fields.items()):
|
|
42688
|
-
if field != SITE_SITE:
|
|
42689
|
-
if not isinstance(value, list):
|
|
42690
|
-
if field != SITE_SUMMARY or not convertCRNL:
|
|
42691
|
-
siteRow[field] = value
|
|
42692
|
-
else:
|
|
42693
|
-
siteRow[field] = escapeCRsNLs(value)
|
|
42694
|
-
else:
|
|
42695
|
-
siteRow[field] = delimiter.join(value)
|
|
42696
|
-
rowShown = False
|
|
42697
|
-
if roles:
|
|
42698
|
-
try:
|
|
42699
|
-
acls = callGDataPages(sitesObject, 'GetAclFeed',
|
|
42700
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42701
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42702
|
-
domain=domain, site=fields[SITE_SITE])
|
|
42703
|
-
for acl in acls:
|
|
42704
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42705
|
-
if fields['role'] in roles:
|
|
42706
|
-
siteACLRow = siteRow.copy()
|
|
42707
|
-
siteACLRow.update(ACLRuleDict(fields))
|
|
42708
|
-
csvPF.WriteRowTitles(siteACLRow)
|
|
42709
|
-
rowShown = True
|
|
42710
|
-
except GDATA.notFound as e:
|
|
42711
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e), i, count)
|
|
42712
|
-
except GDATA.forbidden:
|
|
42713
|
-
pass
|
|
42714
|
-
if not rowShown:
|
|
42715
|
-
csvPF.WriteRowTitles(siteRow)
|
|
42716
|
-
|
|
42717
|
-
def _showSites(entity, i, count, domain, sites):
|
|
42718
|
-
jcount = len(sites)
|
|
42719
|
-
if entityType == Ent.USER:
|
|
42720
|
-
entityPerformActionNumItems([entityType, entity, Ent.DOMAIN, domain], jcount, Ent.SITE, i, count)
|
|
42721
|
-
else:
|
|
42722
|
-
entityPerformActionNumItems([entityType, entity], jcount, Ent.SITE, i, count)
|
|
42723
|
-
Ind.Increment()
|
|
42724
|
-
j = 0
|
|
42725
|
-
for site in sites:
|
|
42726
|
-
j += 1
|
|
42727
|
-
_showSite(sitesManager, sitesObject, domain, site, roles, j, jcount)
|
|
42728
|
-
Ind.Decrement()
|
|
42729
|
-
|
|
42730
|
-
domains = []
|
|
42731
|
-
domainLists = []
|
|
42732
|
-
url_params = {}
|
|
42733
|
-
includeAllSites = 'true' if entityType == Ent.DOMAIN else 'false'
|
|
42734
|
-
roles = set()
|
|
42735
|
-
convertCRNL = GC.Values[GC.CSV_OUTPUT_CONVERT_CR_NL]
|
|
42736
|
-
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
|
42737
|
-
csvPF = CSVPrintFile([Ent.Singular(entityType), SITE_SITE, SITE_NAME, SITE_SUMMARY], 'sortall') if Act.csvFormat() else None
|
|
42738
|
-
while Cmd.ArgumentsRemaining():
|
|
42739
|
-
myarg = getArgument()
|
|
42740
|
-
if csvPF and myarg == 'todrive':
|
|
42741
|
-
csvPF.GetTodriveParameters()
|
|
42742
|
-
elif myarg in {'domain', 'domains'}:
|
|
42743
|
-
if entityType == Ent.DOMAIN:
|
|
42744
|
-
entityList = getEntityList(Cmd.OB_DOMAIN_NAME_ENTITY)
|
|
42745
|
-
else:
|
|
42746
|
-
domains = getEntityList(Cmd.OB_DOMAIN_NAME_ENTITY)
|
|
42747
|
-
domainLists = domains if isinstance(domains, dict) else None
|
|
42748
|
-
elif myarg == 'includeallsites':
|
|
42749
|
-
includeAllSites = 'true'
|
|
42750
|
-
elif myarg == 'maxresults':
|
|
42751
|
-
url_params['max-results'] = getInteger(minVal=1)
|
|
42752
|
-
elif myarg == 'startindex':
|
|
42753
|
-
url_params['start-index'] = getInteger(minVal=1)
|
|
42754
|
-
elif myarg == 'withmappings':
|
|
42755
|
-
url_params['with-mappings'] = 'true'
|
|
42756
|
-
elif myarg in {'role', 'roles'}:
|
|
42757
|
-
roles = getACLRoles(SITE_ACL_ROLES_MAP)
|
|
42758
|
-
elif myarg in {'convertcrnl', 'converttextnl', 'convertsummarynl'}:
|
|
42759
|
-
convertCRNL = True
|
|
42760
|
-
elif myarg == 'delimiter':
|
|
42761
|
-
delimiter = getCharacter()
|
|
42762
|
-
else:
|
|
42763
|
-
unknownArgumentExit()
|
|
42764
|
-
sitesManager = SitesManager()
|
|
42765
|
-
sitesSet = set()
|
|
42766
|
-
i, count, entityList = getEntityArgument(entityList)
|
|
42767
|
-
if entityType == Ent.USER:
|
|
42768
|
-
for user in entityList:
|
|
42769
|
-
i += 1
|
|
42770
|
-
if domainLists:
|
|
42771
|
-
domainList = domainLists[user]
|
|
42772
|
-
elif domains:
|
|
42773
|
-
domainList = domains
|
|
42774
|
-
else:
|
|
42775
|
-
_, domain = splitEmailAddress(user)
|
|
42776
|
-
domainList = [domain]
|
|
42777
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42778
|
-
if not sitesObject:
|
|
42779
|
-
continue
|
|
42780
|
-
jcount = len(domainList)
|
|
42781
|
-
j = 0
|
|
42782
|
-
for domain in domainList:
|
|
42783
|
-
j += 1
|
|
42784
|
-
if domain != 'site':
|
|
42785
|
-
url_params['include-all-sites'] = includeAllSites
|
|
42786
|
-
else:
|
|
42787
|
-
url_params.pop('include-all-sites', None)
|
|
42788
|
-
printGettingAllEntityItemsForWhom(Ent.SITE, f'{Ent.Singular(Ent.USER)}: {user}, {Ent.Singular(Ent.DOMAIN)}: {domain}')
|
|
42789
|
-
sites = _getSites(domain, i, count)
|
|
42790
|
-
if not csvPF:
|
|
42791
|
-
_showSites(domain, j, jcount, domain, sites)
|
|
42792
|
-
else:
|
|
42793
|
-
_printSites(user, j, jcount, domain, sites)
|
|
42794
|
-
else:
|
|
42795
|
-
for domain in entityList:
|
|
42796
|
-
i += 1
|
|
42797
|
-
domain, sitesObject = getSitesObject(entityType, domain, i, count)
|
|
42798
|
-
if not sitesObject:
|
|
42799
|
-
continue
|
|
42800
|
-
if domain != 'site':
|
|
42801
|
-
url_params['include-all-sites'] = includeAllSites
|
|
42802
|
-
else:
|
|
42803
|
-
url_params.pop('include-all-sites', None)
|
|
42804
|
-
printGettingAllEntityItemsForWhom(Ent.SITE, f'{Ent.Singular(Ent.DOMAIN)}: {domain}')
|
|
42805
|
-
sites = _getSites(domain, i, count)
|
|
42806
|
-
if not csvPF:
|
|
42807
|
-
_showSites(domain, i, count, domain, sites)
|
|
42808
|
-
else:
|
|
42809
|
-
_printSites(domain, i, count, domain, sites)
|
|
42810
|
-
if csvPF:
|
|
42811
|
-
csvPF.SortTitles()
|
|
42812
|
-
csvPF.SetSortTitles([])
|
|
42813
|
-
if roles:
|
|
42814
|
-
csvPF.MoveTitlesToEnd(['Scope', 'Role'])
|
|
42815
|
-
csvPF.writeCSVfile('Sites')
|
|
42816
|
-
|
|
42817
|
-
# gam print sites [todrive <ToDriveAttribute>*] [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42818
|
-
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl] [delimiter <Character>]
|
|
42819
|
-
# gam show sites [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42820
|
-
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl]
|
|
42821
|
-
def doPrintShowDomainSites():
|
|
42822
|
-
printShowSites([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42823
|
-
|
|
42824
42230
|
# gam [<UserTypeEntity>] print sites [todrive <ToDriveAttribute>*] [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42825
42231
|
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl] [delimiter <Character>]
|
|
42826
42232
|
# gam [<UserTypeEntity>] show sites [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42827
42233
|
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl]
|
|
42828
|
-
def printShowUserSites(users):
|
|
42829
|
-
printShowSites(users, Ent.USER)
|
|
42830
|
-
|
|
42831
|
-
SITE_ACTION_TO_MODIFIER_MAP = {
|
|
42832
|
-
Act.ADD: Act.MODIFIER_TO,
|
|
42833
|
-
Act.UPDATE: Act.MODIFIER_IN,
|
|
42834
|
-
Act.DELETE: Act.MODIFIER_FROM,
|
|
42835
|
-
Act.INFO: Act.MODIFIER_FROM,
|
|
42836
|
-
Act.PRINT: Act.MODIFIER_FROM,
|
|
42837
|
-
Act.SHOW: Act.MODIFIER_FROM,
|
|
42838
|
-
}
|
|
42839
|
-
|
|
42840
|
-
def _processSiteACLs(users, entityType):
|
|
42841
|
-
action = Act.Get()
|
|
42842
|
-
siteEntity = getSiteEntity()
|
|
42843
|
-
csvPF = None
|
|
42844
|
-
if action in [Act.ADD, Act.UPDATE]:
|
|
42845
|
-
role = getChoice(SITE_ACL_ROLES_MAP, mapChoice=True)
|
|
42846
|
-
elif action == Act.PRINT:
|
|
42847
|
-
csvPF = CSVPrintFile([Ent.Singular(entityType), SITE_SITE, 'Scope', 'Role'])
|
|
42848
|
-
else:
|
|
42849
|
-
role = None
|
|
42850
|
-
actionPrintShow = action in [Act.PRINT, Act.SHOW]
|
|
42851
|
-
ACLScopeEntity = getCalendarSiteACLScopeEntity() if not actionPrintShow else {}
|
|
42852
|
-
getTodriveOnly(csvPF)
|
|
42853
|
-
modifier = SITE_ACTION_TO_MODIFIER_MAP[action]
|
|
42854
|
-
sitesManager = SitesManager()
|
|
42855
|
-
i, count, users = getEntityArgument(users)
|
|
42856
|
-
for user in users:
|
|
42857
|
-
i += 1
|
|
42858
|
-
origUser = user
|
|
42859
|
-
user, sitesObject, sites, jcount = _validateUserGetSites(entityType, user, i, count, siteEntity, Ent.SITE_ACL, modifier)
|
|
42860
|
-
if jcount == 0:
|
|
42861
|
-
continue
|
|
42862
|
-
Ind.Increment()
|
|
42863
|
-
j = 0
|
|
42864
|
-
for site in sites:
|
|
42865
|
-
j += 1
|
|
42866
|
-
domain, site, domainSite, ruleIds, kcount = _validateSiteGetRuleIds(origUser, site, j, jcount, ACLScopeEntity, showAction=not actionPrintShow)
|
|
42867
|
-
if not domainSite:
|
|
42868
|
-
continue
|
|
42869
|
-
if not actionPrintShow:
|
|
42870
|
-
Ind.Increment()
|
|
42871
|
-
k = 0
|
|
42872
|
-
for ruleId in ruleIds:
|
|
42873
|
-
k += 1
|
|
42874
|
-
ruleId = normalizeRuleId(ruleId)
|
|
42875
|
-
try:
|
|
42876
|
-
if action in [Act.CREATE, Act.ADD]:
|
|
42877
|
-
acl = callGData(sitesObject, 'CreateAclEntry',
|
|
42878
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.ENTITY_EXISTS, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42879
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42880
|
-
aclentry=sitesManager.FieldsToAclEntry(makeRoleRuleIdBody(role, ruleId)), domain=domain, site=site)
|
|
42881
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42882
|
-
if not fields.get('inviteLink'):
|
|
42883
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42884
|
-
else:
|
|
42885
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, f'{formatACLRule(fields)} (Link: {fields["inviteLink"]})'], k, kcount)
|
|
42886
|
-
elif action == Act.UPDATE:
|
|
42887
|
-
acl = callGData(sitesObject, 'GetAclEntry',
|
|
42888
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42889
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42890
|
-
domain=domain, site=site, ruleId=ruleId)
|
|
42891
|
-
acl.role.value = role
|
|
42892
|
-
acl = callGData(sitesObject, 'UpdateAclEntry',
|
|
42893
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42894
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42895
|
-
aclentry=acl, domain=domain, site=site, ruleId=ruleId, extra_headers={'If-Match': acl.etag})
|
|
42896
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42897
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42898
|
-
elif action == Act.DELETE:
|
|
42899
|
-
acl = callGData(sitesObject, 'GetAclEntry',
|
|
42900
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42901
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42902
|
-
domain=domain, site=site, ruleId=ruleId)
|
|
42903
|
-
callGData(sitesObject, 'DeleteAclEntry',
|
|
42904
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42905
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42906
|
-
domain=domain, site=site, ruleId=ruleId, extra_headers={'If-Match': acl.etag})
|
|
42907
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLScopeRole(ruleId, None)], k, kcount)
|
|
42908
|
-
elif action == Act.INFO:
|
|
42909
|
-
acl = callGData(sitesObject, 'GetAclEntry',
|
|
42910
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42911
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42912
|
-
domain=domain, site=site, ruleId=ruleId)
|
|
42913
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42914
|
-
printEntity([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42915
|
-
except GDATA.notFound as e:
|
|
42916
|
-
if not checkSiteExists(sitesObject, domain, site):
|
|
42917
|
-
entityUnknownWarning(Ent.SITE, domainSite, j, jcount)
|
|
42918
|
-
break
|
|
42919
|
-
entityActionFailedWarning([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLScopeRole(ruleId, role)], str(e), k, kcount)
|
|
42920
|
-
except (GDATA.entityExists, GDATA.badRequest, GDATA.forbidden) as e:
|
|
42921
|
-
entityActionFailedWarning([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLScopeRole(ruleId, role)], str(e), k, kcount)
|
|
42922
|
-
Ind.Decrement()
|
|
42923
|
-
else:
|
|
42924
|
-
try:
|
|
42925
|
-
acls = callGDataPages(sitesObject, 'GetAclFeed',
|
|
42926
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42927
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42928
|
-
domain=domain, site=site)
|
|
42929
|
-
if not csvPF:
|
|
42930
|
-
kcount = len(acls)
|
|
42931
|
-
entityPerformActionNumItems([Ent.SITE, domainSite], kcount, Ent.SITE_ACL, j, jcount)
|
|
42932
|
-
if kcount == 0:
|
|
42933
|
-
continue
|
|
42934
|
-
Ind.Increment()
|
|
42935
|
-
k = 0
|
|
42936
|
-
for acl in acls:
|
|
42937
|
-
k += 1
|
|
42938
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42939
|
-
printEntity([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42940
|
-
Ind.Decrement()
|
|
42941
|
-
else:
|
|
42942
|
-
siteRow = {Ent.Singular(entityType): user, SITE_SITE: domainSite}
|
|
42943
|
-
for acl in acls:
|
|
42944
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42945
|
-
siteACLRow = siteRow.copy()
|
|
42946
|
-
siteACLRow.update(ACLRuleDict(fields))
|
|
42947
|
-
csvPF.WriteRowTitles(siteACLRow)
|
|
42948
|
-
except GDATA.notFound:
|
|
42949
|
-
entityUnknownWarning(Ent.SITE, domainSite, j, jcount)
|
|
42950
|
-
except GDATA.forbidden as e:
|
|
42951
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e), j, jcount)
|
|
42952
|
-
Ind.Decrement()
|
|
42953
|
-
if csvPF:
|
|
42954
|
-
csvPF.writeCSVfile('Site ACLs')
|
|
42955
|
-
|
|
42956
42234
|
# gam [<UserTypeEntity>] create siteacls <SiteEntity> <SiteACLRole> <SiteACLScopeEntity>
|
|
42957
42235
|
# gam [<UserTypeEntity>] update siteacls <SiteEntity> <SiteACLRole> <SiteACLScopeEntity>
|
|
42958
42236
|
# gam [<UserTypeEntity>] delete siteacls <SiteEntity> <SiteACLScopeEntity>
|
|
42959
42237
|
# gam [<UserTypeEntity>] info siteacls <SiteEntity> <SiteACLScopeEntity>
|
|
42960
42238
|
# gam [<UserTypeEntity>] show siteacls <SiteEntity>
|
|
42961
42239
|
# gam [<UserTypeEntity>] print siteacls <SiteEntity> [todrive <ToDriveAttribute>*]
|
|
42962
|
-
def processUserSiteACLs(users):
|
|
42963
|
-
_processSiteACLs(users, Ent.USER)
|
|
42964
|
-
|
|
42965
|
-
def doProcessDomainSiteACLs():
|
|
42966
|
-
_processSiteACLs([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42967
|
-
|
|
42968
|
-
def _printSiteActivity(users, entityType):
|
|
42969
|
-
sitesManager = SitesManager()
|
|
42970
|
-
url_params = {}
|
|
42971
|
-
csvPF = CSVPrintFile([SITE_SITE, SITE_SUMMARY, SITE_UPDATED], 'sortall')
|
|
42972
|
-
sites = getEntityList(Cmd.OB_SITE_ENTITY)
|
|
42973
|
-
siteLists = sites if isinstance(sites, dict) else None
|
|
42974
|
-
while Cmd.ArgumentsRemaining():
|
|
42975
|
-
myarg = getArgument()
|
|
42976
|
-
if myarg == 'todrive':
|
|
42977
|
-
csvPF.GetTodriveParameters()
|
|
42978
|
-
elif myarg == 'maxresults':
|
|
42979
|
-
url_params['max-results'] = getInteger(minVal=1)
|
|
42980
|
-
elif myarg == 'startindex':
|
|
42981
|
-
url_params['start-index'] = getInteger(minVal=1)
|
|
42982
|
-
elif myarg == 'updatedmin':
|
|
42983
|
-
url_params['updated-min'] = getYYYYMMDD()
|
|
42984
|
-
elif myarg == 'updatedmax':
|
|
42985
|
-
url_params['updated-max'] = getYYYYMMDD()
|
|
42986
|
-
else:
|
|
42987
|
-
unknownArgumentExit()
|
|
42988
|
-
i, count, users = getEntityArgument(users)
|
|
42989
|
-
for user in users:
|
|
42990
|
-
i += 1
|
|
42991
|
-
if siteLists:
|
|
42992
|
-
sites = siteLists[user]
|
|
42993
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42994
|
-
if not sitesObject:
|
|
42995
|
-
continue
|
|
42996
|
-
jcount = len(sites)
|
|
42997
|
-
if jcount == 0:
|
|
42998
|
-
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
42999
|
-
continue
|
|
43000
|
-
Ind.Increment()
|
|
43001
|
-
j = 0
|
|
43002
|
-
for site in sites:
|
|
43003
|
-
j += 1
|
|
43004
|
-
domain, site, domainSite = _validateSite(site, j, jcount)
|
|
43005
|
-
if not domainSite:
|
|
43006
|
-
continue
|
|
43007
|
-
printGettingAllEntityItemsForWhom(Ent.ACTIVITY, domainSite)
|
|
43008
|
-
try:
|
|
43009
|
-
activities = callGDataPages(sitesObject, 'GetActivityFeed',
|
|
43010
|
-
pageMessage=getPageMessageForWhom(),
|
|
43011
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
43012
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
43013
|
-
domain=domain, site=site, url_params=url_params)
|
|
43014
|
-
for activity in activities:
|
|
43015
|
-
fields = sitesManager.ActivityEntryToFields(activity)
|
|
43016
|
-
activityRow = {SITE_SITE: domainSite}
|
|
43017
|
-
for key, value in iter(fields.items()):
|
|
43018
|
-
if not isinstance(value, list):
|
|
43019
|
-
activityRow[key] = value
|
|
43020
|
-
else:
|
|
43021
|
-
activityRow[key] = ','.join(value)
|
|
43022
|
-
csvPF.WriteRowTitles(activityRow)
|
|
43023
|
-
except GDATA.notFound:
|
|
43024
|
-
entityUnknownWarning(Ent.SITE, domainSite, j, jcount)
|
|
43025
|
-
except GDATA.forbidden as e:
|
|
43026
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e), j, jcount)
|
|
43027
|
-
csvPF.writeCSVfile('Site Activities')
|
|
43028
|
-
|
|
43029
42240
|
# gam [<UserTypeEntity>] print siteactivity <SiteEntity> [todrive <ToDriveAttribute>*]
|
|
43030
42241
|
# [startindex <Number>] [maxresults <Number>] [updated_min <Date>] [updated_max <Date>]
|
|
43031
|
-
def
|
|
43032
|
-
|
|
42242
|
+
def deprecatedUserSites(users):
|
|
42243
|
+
deprecatedCommandExit()
|
|
43033
42244
|
|
|
43034
|
-
def
|
|
43035
|
-
|
|
42245
|
+
def deprecatedDomainSites():
|
|
42246
|
+
deprecatedCommandExit()
|
|
43036
42247
|
|
|
43037
42248
|
# <CSVFileInput> [keyfield <FieldName>] [datafield <FieldName>]
|
|
43038
42249
|
def _getGroupOrgUnitMap():
|
|
@@ -52817,15 +52028,20 @@ def _convertSharedDriveNameToId(drive, user, i, count, fileIdEntity, useDomainAd
|
|
|
52817
52028
|
','.join([td['id'] for td in tdlist])), i, count)
|
|
52818
52029
|
return False
|
|
52819
52030
|
|
|
52820
|
-
def _getSharedDriveNameFromId(
|
|
52031
|
+
def _getSharedDriveNameFromId(sharedDriveId):
|
|
52821
52032
|
sharedDriveName = GM.Globals[GM.MAP_SHAREDDRIVE_ID_TO_NAME].get(sharedDriveId)
|
|
52822
52033
|
if not sharedDriveName:
|
|
52823
|
-
|
|
52824
|
-
|
|
52825
|
-
|
|
52826
|
-
|
|
52827
|
-
|
|
52828
|
-
|
|
52034
|
+
if not GM.Globals[GM.ADMIN_DRIVE]:
|
|
52035
|
+
_, GM.Globals[GM.ADMIN_DRIVE] = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
52036
|
+
if GM.Globals[GM.ADMIN_DRIVE]:
|
|
52037
|
+
try:
|
|
52038
|
+
sharedDriveName = callGAPI(GM.Globals[GM.ADMIN_DRIVE].drives(), 'get',
|
|
52039
|
+
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND],
|
|
52040
|
+
useDomainAdminAccess=True,
|
|
52041
|
+
driveId=sharedDriveId, fields='name')['name']
|
|
52042
|
+
except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy):
|
|
52043
|
+
sharedDriveName = TEAM_DRIVE
|
|
52044
|
+
else:
|
|
52829
52045
|
sharedDriveName = TEAM_DRIVE
|
|
52830
52046
|
GM.Globals[GM.MAP_SHAREDDRIVE_ID_TO_NAME][sharedDriveId] = sharedDriveName
|
|
52831
52047
|
return sharedDriveName
|
|
@@ -52838,7 +52054,7 @@ def _getDriveFileNameFromId(drive, fileId, combineTitleId=True, useDomainAdminAc
|
|
|
52838
52054
|
if result:
|
|
52839
52055
|
fileName = result['name']
|
|
52840
52056
|
if (result['mimeType'] == MIMETYPE_GA_FOLDER) and result.get('driveId') and (result['name'] == TEAM_DRIVE):
|
|
52841
|
-
fileName = _getSharedDriveNameFromId(
|
|
52057
|
+
fileName = _getSharedDriveNameFromId(result['driveId'])
|
|
52842
52058
|
if combineTitleId:
|
|
52843
52059
|
fileName += '('+fileId+')'
|
|
52844
52060
|
return (fileName, _getEntityMimeType(result), result['mimeType'])
|
|
@@ -53920,7 +53136,7 @@ def getFilePaths(drive, fileTree, initialResult, filePathInfo, addParentsToTree=
|
|
|
53920
53136
|
fullpath=False, showDepth=False, folderPathOnly=False):
|
|
53921
53137
|
def _getParentName(result):
|
|
53922
53138
|
if (result['mimeType'] == MIMETYPE_GA_FOLDER) and result.get('driveId') and (result['name'] == TEAM_DRIVE):
|
|
53923
|
-
parentName = _getSharedDriveNameFromId(
|
|
53139
|
+
parentName = _getSharedDriveNameFromId(result['driveId'])
|
|
53924
53140
|
if parentName != TEAM_DRIVE:
|
|
53925
53141
|
return f'{SHARED_DRIVES}{filePathInfo["delimiter"]}{parentName}'
|
|
53926
53142
|
return result['name']
|
|
@@ -54619,9 +53835,9 @@ def showFileInfo(users):
|
|
|
54619
53835
|
driveId = result.get('driveId')
|
|
54620
53836
|
if driveId:
|
|
54621
53837
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
54622
|
-
result['name'] = _getSharedDriveNameFromId(
|
|
53838
|
+
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
54623
53839
|
if DFF.showSharedDriveNames:
|
|
54624
|
-
result['driveName'] = _getSharedDriveNameFromId(
|
|
53840
|
+
result['driveName'] = _getSharedDriveNameFromId(driveId)
|
|
54625
53841
|
if showNoParents:
|
|
54626
53842
|
result.setdefault('parents', [])
|
|
54627
53843
|
if getPermissionsForSharedDrives and driveId and 'permissions' not in result:
|
|
@@ -55309,7 +54525,7 @@ def extendFileTreeParents(drive, fileTree, fields):
|
|
|
55309
54525
|
result['parents'] = [ORPHANS] if result.get('ownedByMe', False) and 'sharedWithMeTime' not in result else [SHARED_WITHME]
|
|
55310
54526
|
else:
|
|
55311
54527
|
if result['name'] == TEAM_DRIVE:
|
|
55312
|
-
result['name'] = _getSharedDriveNameFromId(
|
|
54528
|
+
result['name'] = _getSharedDriveNameFromId(result['driveId'])
|
|
55313
54529
|
result['parents'] = [SHARED_DRIVES] if 'sharedWithMeTime' not in result else [SHARED_WITHME]
|
|
55314
54530
|
fileTree[fileId]['info'] = result
|
|
55315
54531
|
fileTree[fileId]['info']['noDisplay'] = True
|
|
@@ -56048,7 +55264,7 @@ def printFileList(users):
|
|
|
56048
55264
|
if not pmselect and 'permissions' in fileInfo:
|
|
56049
55265
|
fileInfo['permissions'] = DLP.GetFileMatchingPermission(fileInfo)
|
|
56050
55266
|
if DFF.showSharedDriveNames and driveId:
|
|
56051
|
-
fileInfo['driveName'] = _getSharedDriveNameFromId(
|
|
55267
|
+
fileInfo['driveName'] = _getSharedDriveNameFromId(driveId)
|
|
56052
55268
|
if filepath:
|
|
56053
55269
|
if not FJQC.formatJSON or not addPathsToJSON:
|
|
56054
55270
|
addFilePathsToRow(drive, fileTree, fileInfo, filePathInfo, csvPF, row,
|
|
@@ -56103,7 +55319,7 @@ def printFileList(users):
|
|
|
56103
55319
|
else:
|
|
56104
55320
|
if not countsRowFilter:
|
|
56105
55321
|
csvPFco.UpdateMimeTypeCounts(flattenJSON(fileInfo, flattened=row, skipObjects=skipObjects, timeObjects=timeObjects,
|
|
56106
|
-
simpleLists=simpleLists, delimiter=delimiter), mimeTypeInfo)
|
|
55322
|
+
simpleLists=simpleLists, delimiter=delimiter), mimeTypeInfo, sizeField)
|
|
56107
55323
|
else:
|
|
56108
55324
|
mimeTypeInfo.setdefault(fileInfo['mimeType'], {'count': 0, 'size': 0})
|
|
56109
55325
|
mimeTypeInfo[fileInfo['mimeType']]['count'] += 1
|
|
@@ -56924,7 +56140,7 @@ def printShowFilePaths(users):
|
|
|
56924
56140
|
driveId = result.get('driveId')
|
|
56925
56141
|
if driveId:
|
|
56926
56142
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
56927
|
-
result['name'] = _getSharedDriveNameFromId(
|
|
56143
|
+
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
56928
56144
|
if returnPathOnly:
|
|
56929
56145
|
if fullpath:
|
|
56930
56146
|
writeStdout(f'{SHARED_DRIVES}/{result["name"]}\n')
|
|
@@ -57014,7 +56230,7 @@ def printFileParentTree(users):
|
|
|
57014
56230
|
driveId = result.get('driveId')
|
|
57015
56231
|
if driveId:
|
|
57016
56232
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
57017
|
-
result['name'] = _getSharedDriveNameFromId(
|
|
56233
|
+
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
57018
56234
|
result['isRoot'] = True
|
|
57019
56235
|
result['parents'] = ['']
|
|
57020
56236
|
fileList.append(result)
|
|
@@ -57212,10 +56428,7 @@ def printShowFileCounts(users):
|
|
|
57212
56428
|
if not drive:
|
|
57213
56429
|
continue
|
|
57214
56430
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
57215
|
-
if sharedDriveId
|
|
57216
|
-
sharedDriveName = _getSharedDriveNameFromId(drive, sharedDriveId)
|
|
57217
|
-
else:
|
|
57218
|
-
sharedDriveName = ''
|
|
56431
|
+
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
57219
56432
|
mimeTypeInfo = {}
|
|
57220
56433
|
userLastModification = {
|
|
57221
56434
|
'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
@@ -57444,7 +56657,7 @@ def printDiskUsage(users):
|
|
|
57444
56657
|
includeOwner = False
|
|
57445
56658
|
csvPF.RemoveTitles(['Owner', 'ownedByMe'])
|
|
57446
56659
|
if topFolder['name'] == TEAM_DRIVE and not topFolder.get('parents'):
|
|
57447
|
-
topFolder['name'] = _getSharedDriveNameFromId(
|
|
56660
|
+
topFolder['name'] = _getSharedDriveNameFromId(driveId)
|
|
57448
56661
|
topFolder['path'] = f'{SHARED_DRIVES}{pathDelimiter}{topFolder["name"]}'
|
|
57449
56662
|
else:
|
|
57450
56663
|
topFolder['path'] = topFolder['name']
|
|
@@ -59509,7 +58722,7 @@ def _getCopyMoveParentInfo(drive, user, i, count, j, jcount, newParentId, statis
|
|
|
59509
58722
|
result['destParentType'] = DEST_PARENT_MYDRIVE_FOLDER
|
|
59510
58723
|
else:
|
|
59511
58724
|
if result['name'] == TEAM_DRIVE and not result.get('parents', []):
|
|
59512
|
-
result['name'] = _getSharedDriveNameFromId(
|
|
58725
|
+
result['name'] = _getSharedDriveNameFromId(result['driveId'])
|
|
59513
58726
|
result['destParentType'] = DEST_PARENT_SHAREDDRIVE_ROOT
|
|
59514
58727
|
else:
|
|
59515
58728
|
result['destParentType'] = DEST_PARENT_SHAREDDRIVE_FOLDER
|
|
@@ -60055,7 +59268,7 @@ def copyDriveFile(users):
|
|
|
60055
59268
|
# Source at root of Shared Drive?
|
|
60056
59269
|
sourceMimeType = source['mimeType']
|
|
60057
59270
|
if sourceMimeType == MIMETYPE_GA_FOLDER and source.get('driveId') and source['name'] == TEAM_DRIVE and not source.get('parents', []):
|
|
60058
|
-
source['name'] = _getSharedDriveNameFromId(
|
|
59271
|
+
source['name'] = _getSharedDriveNameFromId(source['driveId'])
|
|
60059
59272
|
sourceName = source['name']
|
|
60060
59273
|
sourceNameId = f"{sourceName}({source['id']})"
|
|
60061
59274
|
copyMoveOptions['sourceDriveId'] = source.get('driveId')
|
|
@@ -60823,7 +60036,7 @@ def moveDriveFile(users):
|
|
|
60823
60036
|
if sourceMimeType == MIMETYPE_GA_FOLDER and source['name'] in [MY_DRIVE, TEAM_DRIVE] and not source.get('parents', []):
|
|
60824
60037
|
copyMoveOptions['sourceIsMyDriveSharedDrive'] = True
|
|
60825
60038
|
if source.get('driveId'):
|
|
60826
|
-
source['name'] = _getSharedDriveNameFromId(
|
|
60039
|
+
source['name'] = _getSharedDriveNameFromId(source['driveId'])
|
|
60827
60040
|
sourceName = source['name']
|
|
60828
60041
|
sourceNameId = f"{sourceName}({source['id']})"
|
|
60829
60042
|
copyMoveOptions['sourceDriveId'] = source.get('driveId')
|
|
@@ -63248,7 +62461,7 @@ def printEmptyDriveFolders(users):
|
|
|
63248
62461
|
fileIdEntity['shareddrive'] = {'driveId': sharedDriveId, 'corpora': 'drive', 'includeItemsFromAllDrives': True, 'supportsAllDrives': True}
|
|
63249
62462
|
csvPF.AddTitles(['driveId'])
|
|
63250
62463
|
csvPF.MoveTitlesToEnd(['name'])
|
|
63251
|
-
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(
|
|
62464
|
+
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(sharedDriveId)}']
|
|
63252
62465
|
else:
|
|
63253
62466
|
pathList = [fileEntryInfo['name']]
|
|
63254
62467
|
mimeType = fileEntryInfo['mimeType']
|
|
@@ -63338,7 +62551,7 @@ def deleteEmptyDriveFolders(users):
|
|
|
63338
62551
|
if 'driveId' in fileEntryInfo:
|
|
63339
62552
|
sharedDriveId = fileEntryInfo['driveId']
|
|
63340
62553
|
fileIdEntity['shareddrive'] = {'driveId': sharedDriveId, 'corpora': 'drive', 'includeItemsFromAllDrives': True, 'supportsAllDrives': True}
|
|
63341
|
-
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(
|
|
62554
|
+
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(sharedDriveId)}']
|
|
63342
62555
|
else:
|
|
63343
62556
|
pathList = [fileEntryInfo['name']]
|
|
63344
62557
|
mimeType = fileEntryInfo['mimeType']
|
|
@@ -65754,7 +64967,7 @@ def doPrintShowSharedDrives():
|
|
|
65754
64967
|
def doPrintShowOrgunitSharedDrives():
|
|
65755
64968
|
def _getOrgUnitSharedDriveInfo(shareddrive):
|
|
65756
64969
|
shareddrive['driveId'] = shareddrive['name'].rsplit(';')[1]
|
|
65757
|
-
shareddrive['driveName'] = _getSharedDriveNameFromId(
|
|
64970
|
+
shareddrive['driveName'] = _getSharedDriveNameFromId(shareddrive['driveId'])
|
|
65758
64971
|
shareddrive['orgUnitPath'] = orgUnitPath
|
|
65759
64972
|
|
|
65760
64973
|
def _showOrgUnitSharedDrive(shareddrive, j, jcount, FJQC):
|
|
@@ -65773,8 +64986,8 @@ def doPrintShowOrgunitSharedDrives():
|
|
|
65773
64986
|
|
|
65774
64987
|
ci = buildGAPIObject(API.CLOUDIDENTITY_ORGUNITS_BETA)
|
|
65775
64988
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
65776
|
-
_,
|
|
65777
|
-
if not
|
|
64989
|
+
_, GM.Globals[GM.ADMIN_DRIVE] = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
64990
|
+
if not GM.Globals[GM.ADMIN_DRIVE]:
|
|
65778
64991
|
return
|
|
65779
64992
|
csvPF = CSVPrintFile(['name', 'type', 'member', 'memberUri', 'driveId', 'driveName', 'orgUnitPath']) if Act.csvFormat() else None
|
|
65780
64993
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
@@ -65853,13 +65066,13 @@ def copySyncSharedDriveACLs(users, useDomainAdminAccess=False):
|
|
|
65853
65066
|
if not drive:
|
|
65854
65067
|
continue
|
|
65855
65068
|
if not srcFileIdEntity.get('shareddrivename'):
|
|
65856
|
-
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(
|
|
65069
|
+
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(srcFileIdEntity['shareddrive']['driveId'])
|
|
65857
65070
|
if tgtFileIdEntity.get('shareddrivename'):
|
|
65858
65071
|
if not _convertSharedDriveNameToId(drive, user, i, count, tgtFileIdEntity, useDomainAdminAccess):
|
|
65859
65072
|
continue
|
|
65860
65073
|
tgtFileIdEntity['shareddrive']['corpora'] = 'drive'
|
|
65861
65074
|
else:
|
|
65862
|
-
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(
|
|
65075
|
+
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(tgtFileIdEntity['shareddrive']['driveId'])
|
|
65863
65076
|
statistics = _initStatistics()
|
|
65864
65077
|
copyMoveOptions['sourceDriveId'] = srcFileIdEntity['shareddrive']['driveId']
|
|
65865
65078
|
copyMoveOptions['destDriveId'] = tgtFileIdEntity['shareddrive']['driveId']
|
|
@@ -69692,7 +68905,7 @@ def _initMessageThreadParameters(entityType, doIt, maxToProcess):
|
|
|
69692
68905
|
'query': '', 'queryTimes': {},
|
|
69693
68906
|
'entityType': entityType, 'messageEntity': None, 'doIt': doIt, 'quick': True,
|
|
69694
68907
|
'labelMatchPattern': None, 'senderMatchPattern': None,
|
|
69695
|
-
'maxToProcess': maxToProcess, 'maxItems': 0,
|
|
68908
|
+
'maxToProcess': maxToProcess, 'maxItems': 0, 'maxMessagesPerThread': 0,
|
|
69696
68909
|
'maxToKeywords': [MESSAGES_MAX_TO_KEYWORDS[Act.Get()], 'maxtoprocess'],
|
|
69697
68910
|
'listType': listType, 'fields': f'nextPageToken,{listType}(id)'}
|
|
69698
68911
|
|
|
@@ -69734,6 +68947,8 @@ def _getMessageSelectParameters(myarg, parameters):
|
|
|
69734
68947
|
parameters['doIt'] = True
|
|
69735
68948
|
elif myarg in parameters['maxToKeywords']:
|
|
69736
68949
|
parameters['maxToProcess'] = getInteger(minVal=0)
|
|
68950
|
+
elif myarg == 'maxmessagesperthread':
|
|
68951
|
+
parameters['maxMessagesPerThread'] = getInteger(minVal=0)
|
|
69737
68952
|
else:
|
|
69738
68953
|
return False
|
|
69739
68954
|
return True
|
|
@@ -70873,8 +70088,6 @@ def printShowMessagesThreads(users, entityType):
|
|
|
70873
70088
|
return None
|
|
70874
70089
|
|
|
70875
70090
|
def _qualifyMessage(user, result):
|
|
70876
|
-
if parameters['maxToProcess'] and parameters['messagesProcessed'] == parameters['maxToProcess']:
|
|
70877
|
-
return (False, None)
|
|
70878
70091
|
if senderMatchPattern:
|
|
70879
70092
|
sender = _checkSenderMatchCount(result)
|
|
70880
70093
|
if not sender:
|
|
@@ -70902,7 +70115,9 @@ def printShowMessagesThreads(users, entityType):
|
|
|
70902
70115
|
except ValueError:
|
|
70903
70116
|
return headerValue
|
|
70904
70117
|
|
|
70905
|
-
def _showMessage(user, result, j, jcount):
|
|
70118
|
+
def _showMessage(user, result, j, jcount, checkMax=True):
|
|
70119
|
+
if checkMax and parameters['maxToProcess'] and parameters['messagesProcessed'] == parameters['maxToProcess']:
|
|
70120
|
+
return
|
|
70906
70121
|
status, messageLabels = _qualifyMessage(user, result)
|
|
70907
70122
|
if not status:
|
|
70908
70123
|
return
|
|
@@ -70938,7 +70153,8 @@ def printShowMessagesThreads(users, entityType):
|
|
|
70938
70153
|
if show_attachments or save_attachments or upload_attachments:
|
|
70939
70154
|
_showSaveAttachments(result['id'], result['payload'], attachmentNamePattern, j, jcount)
|
|
70940
70155
|
Ind.Decrement()
|
|
70941
|
-
|
|
70156
|
+
if checkMax:
|
|
70157
|
+
parameters['messagesProcessed'] += 1
|
|
70942
70158
|
|
|
70943
70159
|
def _getAttachments(messageId, payload, attachmentNamePattern, attachments):
|
|
70944
70160
|
for part in payload.get('parts', []):
|
|
@@ -70960,7 +70176,9 @@ def printShowMessagesThreads(users, entityType):
|
|
|
70960
70176
|
else:
|
|
70961
70177
|
_getAttachments(messageId, part, attachmentNamePattern, attachments)
|
|
70962
70178
|
|
|
70963
|
-
def _printMessage(user, result):
|
|
70179
|
+
def _printMessage(user, result, checkMax=True):
|
|
70180
|
+
if checkMax and parameters['maxToProcess'] and parameters['messagesProcessed'] == parameters['maxToProcess']:
|
|
70181
|
+
return
|
|
70964
70182
|
status, messageLabels = _qualifyMessage(user, result)
|
|
70965
70183
|
if not status:
|
|
70966
70184
|
return
|
|
@@ -71014,7 +70232,8 @@ def printShowMessagesThreads(users, entityType):
|
|
|
71014
70232
|
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}size'] = attachment[2]
|
|
71015
70233
|
row[f'Attachments{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{i}{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}charset'] = attachment[3]
|
|
71016
70234
|
csvPF.WriteRowTitles(row)
|
|
71017
|
-
|
|
70235
|
+
if checkMax:
|
|
70236
|
+
parameters['messagesProcessed'] += 1
|
|
71018
70237
|
|
|
71019
70238
|
def _countMessageLabels(user, result):
|
|
71020
70239
|
if senderMatchPattern:
|
|
@@ -71044,6 +70263,8 @@ def printShowMessagesThreads(users, entityType):
|
|
|
71044
70263
|
messageThreadCounts['size'] += result['sizeEstimate']
|
|
71045
70264
|
|
|
71046
70265
|
def _showThread(user, result, j, jcount):
|
|
70266
|
+
if parameters['maxToProcess'] and parameters['messagesProcessed'] == parameters['maxToProcess']:
|
|
70267
|
+
return
|
|
71047
70268
|
if senderMatchPattern:
|
|
71048
70269
|
for message in result['messages']:
|
|
71049
70270
|
if _checkSenderMatch(message):
|
|
@@ -71059,19 +70280,29 @@ def printShowMessagesThreads(users, entityType):
|
|
|
71059
70280
|
k = 0
|
|
71060
70281
|
for message in result['messages']:
|
|
71061
70282
|
k += 1
|
|
71062
|
-
_showMessage(user, message, k, kcount)
|
|
70283
|
+
_showMessage(user, message, k, kcount, False)
|
|
70284
|
+
if k == parameters['maxMessagesPerThread']:
|
|
70285
|
+
break
|
|
71063
70286
|
Ind.Decrement()
|
|
70287
|
+
parameters['messagesProcessed'] += 1
|
|
71064
70288
|
|
|
71065
70289
|
def _printThread(user, result):
|
|
70290
|
+
if parameters['maxToProcess'] and parameters['messagesProcessed'] == parameters['maxToProcess']:
|
|
70291
|
+
return
|
|
71066
70292
|
if senderMatchPattern:
|
|
71067
70293
|
for message in result['messages']:
|
|
71068
70294
|
if _checkSenderMatch(message):
|
|
71069
70295
|
break
|
|
71070
70296
|
else:
|
|
71071
70297
|
return
|
|
70298
|
+
k = 0
|
|
71072
70299
|
for message in result['messages']:
|
|
71073
|
-
|
|
70300
|
+
k += 1
|
|
70301
|
+
_printMessage(user, message, False)
|
|
70302
|
+
if k == parameters['maxMessagesPerThread']:
|
|
70303
|
+
break
|
|
71074
70304
|
messageThreadCounts['threads'] += 1
|
|
70305
|
+
parameters['messagesProcessed'] += 1
|
|
71075
70306
|
|
|
71076
70307
|
def _countThreadLabels(user, result):
|
|
71077
70308
|
for message in result['messages']:
|
|
@@ -71086,8 +70317,12 @@ def printShowMessagesThreads(users, entityType):
|
|
|
71086
70317
|
else:
|
|
71087
70318
|
return
|
|
71088
70319
|
else:
|
|
70320
|
+
k = 0
|
|
71089
70321
|
for message in result['messages']:
|
|
70322
|
+
k += 1
|
|
71090
70323
|
messageThreadCounts['size'] += message['sizeEstimate']
|
|
70324
|
+
if k == parameters['maxMessagesPerThread']:
|
|
70325
|
+
break
|
|
71091
70326
|
messageThreadCounts['threads'] += 1
|
|
71092
70327
|
|
|
71093
70328
|
_GMAIL_ERROR_REASON_TO_MESSAGE_MAP = {GAPI.NOT_FOUND: Msg.DOES_NOT_EXIST, GAPI.INVALID_MESSAGE_ID: Msg.INVALID_MESSAGE_ID}
|
|
@@ -74669,14 +73904,14 @@ def createNotesACLs(users):
|
|
|
74669
73904
|
request['parent'] = name
|
|
74670
73905
|
try:
|
|
74671
73906
|
permissions = callGAPI(keep.notes().permissions(), 'batchCreate',
|
|
74672
|
-
throwReasons=GAPI.KEEP_THROW_REASONS,
|
|
73907
|
+
throwReasons=GAPI.KEEP_THROW_REASONS+[GAPI.FAILED_PRECONDITION],
|
|
74673
73908
|
parent=name, body=rbody)
|
|
74674
73909
|
entityNumItemsActionPerformed(entityKVList, kcount, Ent.NOTE_ACL, j, jcount)
|
|
74675
73910
|
if showDetails:
|
|
74676
73911
|
Ind.Increment()
|
|
74677
73912
|
_showNotePermissions(permissions['permissions'])
|
|
74678
73913
|
Ind.Decrement()
|
|
74679
|
-
except (GAPI.badRequest, GAPI.invalidArgument, GAPI.notFound) as e:
|
|
73914
|
+
except (GAPI.badRequest, GAPI.invalidArgument, GAPI.notFound, GAPI.failedPrecondition) as e:
|
|
74680
73915
|
entityActionFailedWarning(entityKVList, str(e), i, count)
|
|
74681
73916
|
except GAPI.authError:
|
|
74682
73917
|
userKeepServiceNotEnabledWarning(user, i, count)
|
|
@@ -75706,8 +74941,8 @@ MAIN_ADD_CREATE_FUNCTIONS = {
|
|
|
75706
74941
|
Cmd.ARG_SAKEY: doCreateSvcAcctKeys,
|
|
75707
74942
|
Cmd.ARG_SCHEMA: doCreateUpdateUserSchemas,
|
|
75708
74943
|
Cmd.ARG_SHAREDDRIVE: doCreateSharedDrive,
|
|
75709
|
-
Cmd.ARG_SITE:
|
|
75710
|
-
Cmd.ARG_SITEACL:
|
|
74944
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
74945
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75711
74946
|
Cmd.ARG_SVCACCT: doCreateSvcAcct,
|
|
75712
74947
|
Cmd.ARG_USER: doCreateUser,
|
|
75713
74948
|
Cmd.ARG_VAULTEXPORT: doCreateVaultExport,
|
|
@@ -75821,7 +75056,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75821
75056
|
Cmd.ARG_SAKEY: doDeleteSvcAcctKeys,
|
|
75822
75057
|
Cmd.ARG_SCHEMA: doDeleteUserSchemas,
|
|
75823
75058
|
Cmd.ARG_SHAREDDRIVE: doDeleteSharedDrive,
|
|
75824
|
-
Cmd.ARG_SITEACL:
|
|
75059
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75825
75060
|
Cmd.ARG_SVCACCT: doDeleteSvcAcct,
|
|
75826
75061
|
Cmd.ARG_USER: doDeleteUser,
|
|
75827
75062
|
Cmd.ARG_USERS: doDeleteUsers,
|
|
@@ -75910,8 +75145,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75910
75145
|
Cmd.ARG_RESOURCES: doInfoResourceCalendars,
|
|
75911
75146
|
Cmd.ARG_SCHEMA: doInfoUserSchemas,
|
|
75912
75147
|
Cmd.ARG_SHAREDDRIVE: doInfoSharedDrive,
|
|
75913
|
-
Cmd.ARG_SITE:
|
|
75914
|
-
Cmd.ARG_SITEACL:
|
|
75148
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75149
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75915
75150
|
Cmd.ARG_USER: doInfoUser,
|
|
75916
75151
|
Cmd.ARG_USERS: doInfoUsers,
|
|
75917
75152
|
Cmd.ARG_USERINVITATION: doInfoCIUserInvitations,
|
|
@@ -76013,9 +75248,9 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
76013
75248
|
Cmd.ARG_SCHEMA: doPrintShowUserSchemas,
|
|
76014
75249
|
Cmd.ARG_SHAREDDRIVE: doPrintShowSharedDrives,
|
|
76015
75250
|
Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
|
|
76016
|
-
Cmd.ARG_SITE:
|
|
76017
|
-
Cmd.ARG_SITEACL:
|
|
76018
|
-
Cmd.ARG_SITEACTIVITY:
|
|
75251
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75252
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75253
|
+
Cmd.ARG_SITEACTIVITY: deprecatedDomainSites,
|
|
76019
75254
|
Cmd.ARG_SVCACCT: doPrintShowSvcAccts,
|
|
76020
75255
|
Cmd.ARG_TOKEN: doPrintShowTokens,
|
|
76021
75256
|
Cmd.ARG_TRANSFERAPPS: doShowTransferApps,
|
|
@@ -76131,8 +75366,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
76131
75366
|
Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
|
|
76132
75367
|
Cmd.ARG_SHAREDDRIVEINFO: doInfoSharedDrive,
|
|
76133
75368
|
Cmd.ARG_SHAREDDRIVETHEMES: doShowSharedDriveThemes,
|
|
76134
|
-
Cmd.ARG_SITE:
|
|
76135
|
-
Cmd.ARG_SITEACL:
|
|
75369
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75370
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
76136
75371
|
Cmd.ARG_SVCACCT: doPrintShowSvcAccts,
|
|
76137
75372
|
Cmd.ARG_TOKEN: doPrintShowTokens,
|
|
76138
75373
|
Cmd.ARG_TRANSFERAPPS: doShowTransferApps,
|
|
@@ -76197,8 +75432,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
76197
75432
|
Cmd.ARG_SAKEY: doUpdateSvcAcctKeys,
|
|
76198
75433
|
Cmd.ARG_SCHEMA: doCreateUpdateUserSchemas,
|
|
76199
75434
|
Cmd.ARG_SHAREDDRIVE: doUpdateSharedDrive,
|
|
76200
|
-
Cmd.ARG_SITE:
|
|
76201
|
-
Cmd.ARG_SITEACL:
|
|
75435
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75436
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
76202
75437
|
Cmd.ARG_SVCACCT: doCheckUpdateSvcAcct,
|
|
76203
75438
|
Cmd.ARG_USER: doUpdateUser,
|
|
76204
75439
|
Cmd.ARG_USERS: doUpdateUsers,
|
|
@@ -76737,8 +75972,8 @@ USER_ADD_CREATE_FUNCTIONS = {
|
|
|
76737
75972
|
Cmd.ARG_SENDAS: createUpdateSendAs,
|
|
76738
75973
|
Cmd.ARG_SHAREDDRIVE: createSharedDrive,
|
|
76739
75974
|
Cmd.ARG_SHEET: createSheet,
|
|
76740
|
-
Cmd.ARG_SITE:
|
|
76741
|
-
Cmd.ARG_SITEACL:
|
|
75975
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
75976
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76742
75977
|
Cmd.ARG_SMIME: createSmime,
|
|
76743
75978
|
Cmd.ARG_TASK: processTasks,
|
|
76744
75979
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
@@ -76856,7 +76091,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76856
76091
|
Cmd.ARG_SENDAS: deleteInfoSendAs,
|
|
76857
76092
|
Cmd.ARG_SMIME: deleteSmime,
|
|
76858
76093
|
Cmd.ARG_SHAREDDRIVE: deleteSharedDrive,
|
|
76859
|
-
Cmd.ARG_SITEACL:
|
|
76094
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76860
76095
|
Cmd.ARG_TASK: processTasks,
|
|
76861
76096
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
76862
76097
|
Cmd.ARG_THREAD: processThreads,
|
|
@@ -76945,8 +76180,8 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76945
76180
|
Cmd.ARG_SENDAS: deleteInfoSendAs,
|
|
76946
76181
|
Cmd.ARG_SHAREDDRIVE: infoSharedDrive,
|
|
76947
76182
|
Cmd.ARG_SHEET: infoPrintShowSheets,
|
|
76948
|
-
Cmd.ARG_SITE:
|
|
76949
|
-
Cmd.ARG_SITEACL:
|
|
76183
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76184
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76950
76185
|
Cmd.ARG_TASK: processTasks,
|
|
76951
76186
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
76952
76187
|
Cmd.ARG_USER: infoUsers,
|
|
@@ -77058,9 +76293,9 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77058
76293
|
Cmd.ARG_SHEETRANGE: printShowSheetRanges,
|
|
77059
76294
|
Cmd.ARG_SIGNATURE: printShowSignature,
|
|
77060
76295
|
Cmd.ARG_SMIME: printShowSmimes,
|
|
77061
|
-
Cmd.ARG_SITE:
|
|
77062
|
-
Cmd.ARG_SITEACL:
|
|
77063
|
-
Cmd.ARG_SITEACTIVITY:
|
|
76296
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76297
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76298
|
+
Cmd.ARG_SITEACTIVITY: deprecatedUserSites,
|
|
77064
76299
|
Cmd.ARG_TASK: printShowTasks,
|
|
77065
76300
|
Cmd.ARG_TASKLIST: printShowTasklists,
|
|
77066
76301
|
Cmd.ARG_THREAD: printShowThreads,
|
|
@@ -77164,8 +76399,8 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77164
76399
|
Cmd.ARG_SHEET: infoPrintShowSheets,
|
|
77165
76400
|
Cmd.ARG_SHEETRANGE: printShowSheetRanges,
|
|
77166
76401
|
Cmd.ARG_SIGNATURE: printShowSignature,
|
|
77167
|
-
Cmd.ARG_SITE:
|
|
77168
|
-
Cmd.ARG_SITEACL:
|
|
76402
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76403
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
77169
76404
|
Cmd.ARG_SMIME: printShowSmimes,
|
|
77170
76405
|
Cmd.ARG_TASK: printShowTasks,
|
|
77171
76406
|
Cmd.ARG_TASKLIST: printShowTasklists,
|
|
@@ -77268,8 +76503,8 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77268
76503
|
Cmd.ARG_SHEET: updateSheets,
|
|
77269
76504
|
Cmd.ARG_SHEETRANGE: updateSheetRanges,
|
|
77270
76505
|
Cmd.ARG_SMIME: updateSmime,
|
|
77271
|
-
Cmd.ARG_SITE:
|
|
77272
|
-
Cmd.ARG_SITEACL:
|
|
76506
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76507
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
77273
76508
|
Cmd.ARG_TASK: processTasks,
|
|
77274
76509
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
77275
76510
|
Cmd.ARG_USER: updateUsers,
|