gam7 7.3.9__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 +32 -824
- gam/gamlib/glapi.py +0 -11
- gam/gamlib/glclargs.py +4 -0
- gam/gamlib/glentity.py +0 -4
- gam/gamlib/glmsgs.py +1 -0
- {gam7-7.3.9.dist-info → gam7-7.4.0.dist-info}/METADATA +1 -1
- {gam7-7.3.9.dist-info → gam7-7.4.0.dist-info}/RECORD +10 -10
- {gam7-7.3.9.dist-info → gam7-7.4.0.dist-info}/WHEEL +0 -0
- {gam7-7.3.9.dist-info → gam7-7.4.0.dist-info}/entry_points.txt +0 -0
- {gam7-7.3.9.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',
|
|
@@ -42266,776 +42224,26 @@ def doPrintVaultCounts():
|
|
|
42266
42224
|
csvPF.WriteRow({'account': account, 'count': 0})
|
|
42267
42225
|
csvPF.writeCSVfile('Vault Counts')
|
|
42268
42226
|
|
|
42269
|
-
def checkSiteExists(sitesObject, domain, site):
|
|
42270
|
-
try:
|
|
42271
|
-
callGData(sitesObject, 'GetSite',
|
|
42272
|
-
throwErrors=[GDATA.NOT_FOUND],
|
|
42273
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42274
|
-
domain=domain, site=site)
|
|
42275
|
-
return True
|
|
42276
|
-
except GDATA.notFound:
|
|
42277
|
-
return None
|
|
42278
|
-
|
|
42279
|
-
SITE_ACLS = 'ACLs'
|
|
42280
|
-
SITE_CATEGORIES = 'Categories'
|
|
42281
|
-
SITE_LINK = 'Link'
|
|
42282
|
-
SITE_NAME = 'Name'
|
|
42283
|
-
SITE_SITE = 'Site'
|
|
42284
|
-
SITE_SOURCELINK = 'SourceLink'
|
|
42285
|
-
SITE_SUMMARY = 'Summary'
|
|
42286
|
-
SITE_THEME = 'Theme'
|
|
42287
|
-
SITE_UPDATED = 'Updated'
|
|
42288
|
-
SITE_WEB_ADDRESS_MAPPINGS = 'WebAddressMappings'
|
|
42289
|
-
|
|
42290
|
-
SITE_DATA_DOMAIN = 'domain'
|
|
42291
|
-
SITE_DATA_SITE = 'site'
|
|
42292
|
-
SITE_DATA_DOMAIN_SITE = 'domainSite'
|
|
42293
|
-
SITE_DATA_FIELDS = 'fields'
|
|
42294
|
-
|
|
42295
|
-
class SitesManager():
|
|
42296
|
-
|
|
42297
|
-
SITE_ARGUMENT_TO_PROPERTY_MAP = {
|
|
42298
|
-
'categories': SITE_CATEGORIES,
|
|
42299
|
-
'name': SITE_NAME,
|
|
42300
|
-
'sourcelink': SITE_SOURCELINK,
|
|
42301
|
-
'summary': SITE_SUMMARY,
|
|
42302
|
-
'theme': SITE_THEME,
|
|
42303
|
-
}
|
|
42304
|
-
|
|
42305
|
-
@staticmethod
|
|
42306
|
-
def AclEntryToFields(acl_entry):
|
|
42307
|
-
|
|
42308
|
-
def GetAclAttr(attrlist):
|
|
42309
|
-
objAttr = acl_entry
|
|
42310
|
-
for attr in attrlist:
|
|
42311
|
-
objAttr = getattr(objAttr, attr)
|
|
42312
|
-
if not objAttr:
|
|
42313
|
-
return None
|
|
42314
|
-
return objAttr
|
|
42315
|
-
|
|
42316
|
-
fields = {}
|
|
42317
|
-
fields['role'] = GetAclAttr(['role', 'value'])
|
|
42318
|
-
if not fields['role']:
|
|
42319
|
-
fields['role'] = GetAclAttr(['withKey', 'role', 'value'])+' (with link)'
|
|
42320
|
-
fields['scope'] = {'type': GetAclAttr(['scope', 'type']),
|
|
42321
|
-
'value': GetAclAttr(['scope', 'value'])}
|
|
42322
|
-
link = acl_entry.FindInviteLink()
|
|
42323
|
-
if link:
|
|
42324
|
-
fields['inviteLink'] = link
|
|
42325
|
-
return fields
|
|
42326
|
-
|
|
42327
|
-
@staticmethod
|
|
42328
|
-
def FieldsToAclEntry(fields):
|
|
42329
|
-
acl_entry = gdata.apps.sites.AclEntry()
|
|
42330
|
-
acl_entry.role = gdata.apps.sites.AclRole(value=fields['role'])
|
|
42331
|
-
acl_entry.scope = gdata.apps.sites.AclScope(stype=fields['scope']['type'], value=fields['scope'].get('value'))
|
|
42332
|
-
return acl_entry
|
|
42333
|
-
|
|
42334
|
-
@staticmethod
|
|
42335
|
-
def ActivityEntryToFields(activity_entry):
|
|
42336
|
-
fields = {}
|
|
42337
|
-
|
|
42338
|
-
def GetActivityField(fieldName, attrlist):
|
|
42339
|
-
objAttr = activity_entry
|
|
42340
|
-
for attr in attrlist:
|
|
42341
|
-
objAttr = getattr(objAttr, attr)
|
|
42342
|
-
if not objAttr:
|
|
42343
|
-
return
|
|
42344
|
-
fields[fieldName] = objAttr
|
|
42345
|
-
|
|
42346
|
-
def GetActivityFieldData(objAttr, attrlist, default):
|
|
42347
|
-
for attr in attrlist:
|
|
42348
|
-
objAttr = getattr(objAttr, attr)
|
|
42349
|
-
if not objAttr:
|
|
42350
|
-
return default
|
|
42351
|
-
return objAttr
|
|
42352
|
-
|
|
42353
|
-
def AppendItemToFieldsList(fieldName, fieldValue):
|
|
42354
|
-
fields.setdefault(fieldName, [])
|
|
42355
|
-
fields[fieldName].append(fieldValue)
|
|
42356
|
-
|
|
42357
|
-
GetActivityField('Summary', ['title', 'text'])
|
|
42358
|
-
GetActivityField('Updated', ['updated', 'text'])
|
|
42359
|
-
for author in activity_entry.author:
|
|
42360
|
-
AppendItemToFieldsList('Authors', f'{GetActivityFieldData(author, ["name", "text"], "Unknown Name")}/{GetActivityFieldData(author, ["email", "text"], "Unknown Email")}')
|
|
42361
|
-
fields['Operation'] = activity_entry.Kind()
|
|
42362
|
-
return fields
|
|
42363
|
-
|
|
42364
|
-
@staticmethod
|
|
42365
|
-
def SiteToFields(site_entry):
|
|
42366
|
-
fields = {}
|
|
42367
|
-
|
|
42368
|
-
def GetSiteField(fieldName, attrlist):
|
|
42369
|
-
objAttr = site_entry
|
|
42370
|
-
for attr in attrlist:
|
|
42371
|
-
objAttr = getattr(objAttr, attr)
|
|
42372
|
-
if not objAttr:
|
|
42373
|
-
return
|
|
42374
|
-
fields[fieldName] = objAttr
|
|
42375
|
-
|
|
42376
|
-
def AppendItemToFieldsList(fieldName, fieldValue):
|
|
42377
|
-
fields.setdefault(fieldName, [])
|
|
42378
|
-
fields[fieldName].append(fieldValue)
|
|
42379
|
-
|
|
42380
|
-
GetSiteField(SITE_SITE, ['siteName', 'text'])
|
|
42381
|
-
GetSiteField(SITE_NAME, ['title', 'text'])
|
|
42382
|
-
GetSiteField(SITE_SUMMARY, ['summary', 'text'])
|
|
42383
|
-
GetSiteField(SITE_THEME, ['theme', 'text'])
|
|
42384
|
-
GetSiteField(SITE_UPDATED, ['updated', 'text'])
|
|
42385
|
-
if site_entry.category:
|
|
42386
|
-
for category in site_entry.category:
|
|
42387
|
-
if category.term:
|
|
42388
|
-
AppendItemToFieldsList(SITE_CATEGORIES, category.term)
|
|
42389
|
-
link = site_entry.FindAlternateLink()
|
|
42390
|
-
if link:
|
|
42391
|
-
fields[SITE_LINK] = link
|
|
42392
|
-
link = site_entry.FindSourceLink()
|
|
42393
|
-
if link:
|
|
42394
|
-
fields[SITE_SOURCELINK] = link
|
|
42395
|
-
for link in site_entry.FindWebAddressMappings():
|
|
42396
|
-
AppendItemToFieldsList(SITE_WEB_ADDRESS_MAPPINGS, link)
|
|
42397
|
-
return fields
|
|
42398
|
-
|
|
42399
|
-
@staticmethod
|
|
42400
|
-
def GetSiteFields():
|
|
42401
|
-
|
|
42402
|
-
fields = {}
|
|
42403
|
-
while Cmd.ArgumentsRemaining():
|
|
42404
|
-
myarg = getArgument()
|
|
42405
|
-
if myarg in SitesManager.SITE_ARGUMENT_TO_PROPERTY_MAP:
|
|
42406
|
-
fieldName = SitesManager.SITE_ARGUMENT_TO_PROPERTY_MAP[myarg]
|
|
42407
|
-
if fieldName == SITE_NAME:
|
|
42408
|
-
fields[fieldName] = getString(Cmd.OB_STRING)
|
|
42409
|
-
elif fieldName == SITE_SOURCELINK:
|
|
42410
|
-
fields[fieldName] = getString(Cmd.OB_URI)
|
|
42411
|
-
elif fieldName == SITE_SUMMARY:
|
|
42412
|
-
fields[fieldName] = getStringWithCRsNLs()
|
|
42413
|
-
elif fieldName == SITE_THEME:
|
|
42414
|
-
fields[fieldName] = getString(Cmd.OB_STRING)
|
|
42415
|
-
elif fieldName == SITE_CATEGORIES:
|
|
42416
|
-
fields[fieldName] = getString(Cmd.OB_STRING, minLen=0).split(',')
|
|
42417
|
-
else:
|
|
42418
|
-
unknownArgumentExit()
|
|
42419
|
-
return fields
|
|
42420
|
-
|
|
42421
|
-
@staticmethod
|
|
42422
|
-
def FieldsToSite(fields):
|
|
42423
|
-
def GetField(fieldName):
|
|
42424
|
-
return fields.get(fieldName)
|
|
42425
|
-
|
|
42426
|
-
def GetSiteField(fieldName, fieldClass):
|
|
42427
|
-
value = fields.get(fieldName)
|
|
42428
|
-
if value:
|
|
42429
|
-
return fieldClass(text=value)
|
|
42430
|
-
return None
|
|
42431
|
-
|
|
42432
|
-
site_entry = gdata.apps.sites.SiteEntry(sourceSite=GetField(SITE_SOURCELINK))
|
|
42433
|
-
site_entry.siteName = GetSiteField(SITE_SITE, gdata.apps.sites.SiteName)
|
|
42434
|
-
site_entry.title = GetSiteField(SITE_NAME, atom.Title)
|
|
42435
|
-
site_entry.summary = GetSiteField(SITE_SUMMARY, atom.Summary)
|
|
42436
|
-
site_entry.theme = GetSiteField(SITE_THEME, gdata.apps.sites.Theme)
|
|
42437
|
-
value = GetField(SITE_CATEGORIES)
|
|
42438
|
-
if value:
|
|
42439
|
-
for category in value:
|
|
42440
|
-
site_entry.category.append(atom.Category(term=category, scheme=gdata.apps.sites.TAG_KIND_TERM))
|
|
42441
|
-
return site_entry
|
|
42442
|
-
|
|
42443
|
-
def getSiteEntity():
|
|
42444
|
-
siteEntity = {'list': getEntityList(Cmd.OB_SITE_ENTITY), 'dict': None}
|
|
42445
|
-
if isinstance(siteEntity['list'], dict):
|
|
42446
|
-
siteEntity['dict'] = siteEntity['list']
|
|
42447
|
-
return siteEntity
|
|
42448
|
-
|
|
42449
|
-
def _validateUserGetSites(entityType, user, i, count, siteEntity, itemType=None, modifier=None):
|
|
42450
|
-
if siteEntity['dict']:
|
|
42451
|
-
sites = siteEntity['dict'][user]
|
|
42452
|
-
else:
|
|
42453
|
-
sites = siteEntity['list']
|
|
42454
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42455
|
-
if not sitesObject:
|
|
42456
|
-
return (user, None, None, 0)
|
|
42457
|
-
jcount = len(sites)
|
|
42458
|
-
if not itemType:
|
|
42459
|
-
entityPerformActionNumItems([entityType, user], jcount, Ent.SITE, i, count)
|
|
42460
|
-
else:
|
|
42461
|
-
entityPerformActionSubItemModifierNumItems([entityType, user], itemType, modifier, jcount, Ent.SITE, i, count)
|
|
42462
|
-
if jcount == 0:
|
|
42463
|
-
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
42464
|
-
return (user, sitesObject, sites, jcount)
|
|
42465
|
-
|
|
42466
|
-
def _validateSite(fullSite, i, count):
|
|
42467
|
-
domain, site, domainSite = validateSplitSiteName(fullSite)
|
|
42468
|
-
if domainSite:
|
|
42469
|
-
return (domain, site, domainSite)
|
|
42470
|
-
entityActionNotPerformedWarning([Ent.SITE, site], Msg.INVALID_SITE.format(site, SITENAME_FORMAT_REQUIRED), i, count)
|
|
42471
|
-
return (domain, site, None)
|
|
42472
|
-
|
|
42473
|
-
def _validateSiteGetRuleIds(origUser, fullSite, j, jcount, ACLScopeEntity, showAction=True):
|
|
42474
|
-
domain, site, domainSite = _validateSite(fullSite, j, jcount)
|
|
42475
|
-
if not domainSite:
|
|
42476
|
-
return (domain, site, None, None, 0)
|
|
42477
|
-
if ACLScopeEntity:
|
|
42478
|
-
if ACLScopeEntity['dict']:
|
|
42479
|
-
if not GM.Globals[GM.CSV_SUBKEY_FIELD]:
|
|
42480
|
-
ruleIds = ACLScopeEntity['dict'][fullSite]
|
|
42481
|
-
else:
|
|
42482
|
-
ruleIds = ACLScopeEntity['dict'][origUser][fullSite]
|
|
42483
|
-
else:
|
|
42484
|
-
ruleIds = ACLScopeEntity['list']
|
|
42485
|
-
kcount = len(ruleIds)
|
|
42486
|
-
if kcount == 0:
|
|
42487
|
-
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
42488
|
-
else:
|
|
42489
|
-
ruleIds = []
|
|
42490
|
-
kcount = 0
|
|
42491
|
-
if showAction:
|
|
42492
|
-
entityPerformActionNumItems([Ent.SITE, domainSite], kcount, Ent.SITE_ACL, j, jcount)
|
|
42493
|
-
return (domain, site, domainSite, ruleIds, kcount)
|
|
42494
|
-
|
|
42495
|
-
def _createSite(users, entityType):
|
|
42496
|
-
sitesManager = SitesManager()
|
|
42497
|
-
domain, site, domainSite = getSiteName()
|
|
42498
|
-
fields = sitesManager.GetSiteFields()
|
|
42499
|
-
if not fields.get(SITE_NAME):
|
|
42500
|
-
fields[SITE_NAME] = site
|
|
42501
|
-
i, count, users = getEntityArgument(users)
|
|
42502
|
-
for user in users:
|
|
42503
|
-
i += 1
|
|
42504
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42505
|
-
if not sitesObject:
|
|
42506
|
-
continue
|
|
42507
|
-
try:
|
|
42508
|
-
siteEntry = sitesManager.FieldsToSite(fields)
|
|
42509
|
-
callGData(sitesObject, 'CreateSite',
|
|
42510
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.ENTITY_EXISTS, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42511
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42512
|
-
siteentry=siteEntry, domain=domain, site=None)
|
|
42513
|
-
entityActionPerformed([Ent.SITE, domainSite])
|
|
42514
|
-
except GDATA.notFound as e:
|
|
42515
|
-
entityActionFailedWarning([Ent.DOMAIN, domain], str(e))
|
|
42516
|
-
except (GDATA.entityExists, GDATA.badRequest, GDATA.forbidden) as e:
|
|
42517
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42518
|
-
|
|
42519
42227
|
# gam [<UserTypeEntity>] create site <SiteName> <SiteAttribute>*
|
|
42520
|
-
def createUserSite(users):
|
|
42521
|
-
_createSite(users, Ent.USER)
|
|
42522
|
-
|
|
42523
|
-
def doCreateDomainSite():
|
|
42524
|
-
_createSite([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42525
|
-
|
|
42526
|
-
def _updateSites(users, entityType):
|
|
42527
|
-
sitesManager = SitesManager()
|
|
42528
|
-
siteEntity = getSiteEntity()
|
|
42529
|
-
updateFields = sitesManager.GetSiteFields()
|
|
42530
|
-
i, count, users = getEntityArgument(users)
|
|
42531
|
-
for user in users:
|
|
42532
|
-
i += 1
|
|
42533
|
-
user, sitesObject, sites, jcount = _validateUserGetSites(entityType, user, i, count, siteEntity)
|
|
42534
|
-
if jcount == 0:
|
|
42535
|
-
continue
|
|
42536
|
-
Ind.Increment()
|
|
42537
|
-
j = 0
|
|
42538
|
-
for site in sites:
|
|
42539
|
-
j += 1
|
|
42540
|
-
domain, site, domainSite = _validateSite(site, j, jcount)
|
|
42541
|
-
if not domainSite:
|
|
42542
|
-
continue
|
|
42543
|
-
try:
|
|
42544
|
-
siteEntry = callGData(sitesObject, 'GetSite',
|
|
42545
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42546
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42547
|
-
domain=domain, site=site)
|
|
42548
|
-
fields = sitesManager.SiteToFields(siteEntry)
|
|
42549
|
-
for field, value in iter(updateFields.items()):
|
|
42550
|
-
if field != SITE_SOURCELINK:
|
|
42551
|
-
fields[field] = value
|
|
42552
|
-
newSiteEntry = sitesManager.FieldsToSite(fields)
|
|
42553
|
-
callGData(sitesObject, 'UpdateSite',
|
|
42554
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42555
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42556
|
-
siteentry=newSiteEntry, domain=domain, site=site, extra_headers={'If-Match': siteEntry.etag})
|
|
42557
|
-
entityActionPerformed([Ent.SITE, domainSite])
|
|
42558
|
-
except (GDATA.notFound, GDATA.badRequest, GDATA.forbidden) as e:
|
|
42559
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42560
|
-
|
|
42561
42228
|
# gam [<UserTypeEntity>] update site <SiteEntity> <SiteAttribute>+
|
|
42562
|
-
def updateUserSites(users):
|
|
42563
|
-
_updateSites(users, Ent.USER)
|
|
42564
|
-
|
|
42565
|
-
def doUpdateDomainSites():
|
|
42566
|
-
_updateSites([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42567
|
-
|
|
42568
|
-
SITE_FIELD_PRINT_ORDER = [
|
|
42569
|
-
SITE_UPDATED,
|
|
42570
|
-
SITE_NAME,
|
|
42571
|
-
SITE_SUMMARY,
|
|
42572
|
-
SITE_THEME,
|
|
42573
|
-
SITE_SOURCELINK,
|
|
42574
|
-
SITE_CATEGORIES,
|
|
42575
|
-
SITE_LINK,
|
|
42576
|
-
]
|
|
42577
|
-
|
|
42578
|
-
def _showSite(sitesManager, sitesObject, domain, site, roles, j, jcount):
|
|
42579
|
-
fields = sitesManager.SiteToFields(site)
|
|
42580
|
-
domainSite = f'{domain}/{fields[SITE_SITE]}'
|
|
42581
|
-
printKeyValueListWithCount([SITE_SITE, domainSite], j, jcount)
|
|
42582
|
-
Ind.Increment()
|
|
42583
|
-
for field in SITE_FIELD_PRINT_ORDER:
|
|
42584
|
-
if field in fields:
|
|
42585
|
-
if not isinstance(fields[field], list):
|
|
42586
|
-
if field != SITE_SUMMARY:
|
|
42587
|
-
printKeyValueList([field, fields[field]])
|
|
42588
|
-
else:
|
|
42589
|
-
printKeyValueWithCRsNLs(field, fields[field])
|
|
42590
|
-
else:
|
|
42591
|
-
printKeyValueList([field, ','.join(fields[field])])
|
|
42592
|
-
if fields.get(SITE_WEB_ADDRESS_MAPPINGS):
|
|
42593
|
-
printKeyValueList([SITE_WEB_ADDRESS_MAPPINGS, None])
|
|
42594
|
-
Ind.Increment()
|
|
42595
|
-
for link in fields[SITE_WEB_ADDRESS_MAPPINGS]:
|
|
42596
|
-
printKeyValueList([link, None])
|
|
42597
|
-
Ind.Decrement()
|
|
42598
|
-
if roles:
|
|
42599
|
-
try:
|
|
42600
|
-
acls = callGDataPages(sitesObject, 'GetAclFeed',
|
|
42601
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42602
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42603
|
-
domain=domain, site=fields[SITE_SITE])
|
|
42604
|
-
printKeyValueList([SITE_ACLS, None])
|
|
42605
|
-
Ind.Increment()
|
|
42606
|
-
for acl in acls:
|
|
42607
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42608
|
-
if fields['role'] in roles:
|
|
42609
|
-
printKeyValueList([formatACLRule(fields)])
|
|
42610
|
-
Ind.Decrement()
|
|
42611
|
-
except GDATA.notFound as e:
|
|
42612
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42613
|
-
except GDATA.forbidden:
|
|
42614
|
-
pass
|
|
42615
|
-
Ind.Decrement()
|
|
42616
|
-
|
|
42617
|
-
SITE_ACL_ROLES_MAP = {
|
|
42618
|
-
'editor': 'writer',
|
|
42619
|
-
'invite': 'invite',
|
|
42620
|
-
'owner': 'owner',
|
|
42621
|
-
'read': 'reader',
|
|
42622
|
-
'reader': 'reader',
|
|
42623
|
-
'writer': 'writer',
|
|
42624
|
-
}
|
|
42625
|
-
|
|
42626
|
-
def _infoSites(users, entityType):
|
|
42627
|
-
siteEntity = getSiteEntity()
|
|
42628
|
-
url_params = {}
|
|
42629
|
-
roles = set()
|
|
42630
|
-
while Cmd.ArgumentsRemaining():
|
|
42631
|
-
myarg = getArgument()
|
|
42632
|
-
if myarg == 'withmappings':
|
|
42633
|
-
url_params['with-mappings'] = 'true'
|
|
42634
|
-
elif myarg in {'role', 'roles'}:
|
|
42635
|
-
roles = getACLRoles(SITE_ACL_ROLES_MAP)
|
|
42636
|
-
else:
|
|
42637
|
-
unknownArgumentExit()
|
|
42638
|
-
sitesManager = SitesManager()
|
|
42639
|
-
i, count, users = getEntityArgument(users)
|
|
42640
|
-
for user in users:
|
|
42641
|
-
i += 1
|
|
42642
|
-
user, sitesObject, sites, jcount = _validateUserGetSites(entityType, user, i, count, siteEntity)
|
|
42643
|
-
if jcount == 0:
|
|
42644
|
-
continue
|
|
42645
|
-
Ind.Increment()
|
|
42646
|
-
j = 0
|
|
42647
|
-
for site in sites:
|
|
42648
|
-
j += 1
|
|
42649
|
-
domain, site, domainSite = _validateSite(site, j, jcount)
|
|
42650
|
-
if not domainSite:
|
|
42651
|
-
continue
|
|
42652
|
-
try:
|
|
42653
|
-
result = callGData(sitesObject, 'GetSite',
|
|
42654
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42655
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42656
|
-
domain=domain, site=site, url_params=url_params)
|
|
42657
|
-
if result:
|
|
42658
|
-
_showSite(sitesManager, sitesObject, domain, result, roles, j, jcount)
|
|
42659
|
-
except (GDATA.notFound, GDATA.forbidden) as e:
|
|
42660
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e))
|
|
42661
|
-
Ind.Decrement()
|
|
42662
|
-
|
|
42663
42229
|
# gam [<UserTypeEntity>] info site <SiteEntity> [withmappings] [role|roles all|<SiteACLRoleList>]
|
|
42664
|
-
def infoUserSites(users):
|
|
42665
|
-
_infoSites(users, Ent.USER)
|
|
42666
|
-
|
|
42667
|
-
def doInfoDomainSites():
|
|
42668
|
-
_infoSites([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42669
|
-
|
|
42670
|
-
def printShowSites(entityList, entityType):
|
|
42671
|
-
def _getSites(domain, i, count):
|
|
42672
|
-
try:
|
|
42673
|
-
return callGDataPages(sitesObject, 'GetSiteFeed',
|
|
42674
|
-
pageMessage=getPageMessageForWhom(),
|
|
42675
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42676
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42677
|
-
domain=domain, url_params=url_params)
|
|
42678
|
-
except (GDATA.notFound, GDATA.forbidden) as e:
|
|
42679
|
-
entityActionFailedWarning([Ent.DOMAIN, domain], str(e), i, count)
|
|
42680
|
-
return []
|
|
42681
|
-
|
|
42682
|
-
def _printSites(entity, i, count, domain, sites):
|
|
42683
|
-
for site in sites:
|
|
42684
|
-
fields = sitesManager.SiteToFields(site)
|
|
42685
|
-
if fields[SITE_SITE] in sitesSet:
|
|
42686
|
-
continue
|
|
42687
|
-
sitesSet.add(fields[SITE_SITE])
|
|
42688
|
-
domainSite = f'{domain}/{fields[SITE_SITE]}'
|
|
42689
|
-
siteRow = {Ent.Singular(entityType): entity, SITE_SITE: domainSite}
|
|
42690
|
-
for field, value in iter(fields.items()):
|
|
42691
|
-
if field != SITE_SITE:
|
|
42692
|
-
if not isinstance(value, list):
|
|
42693
|
-
if field != SITE_SUMMARY or not convertCRNL:
|
|
42694
|
-
siteRow[field] = value
|
|
42695
|
-
else:
|
|
42696
|
-
siteRow[field] = escapeCRsNLs(value)
|
|
42697
|
-
else:
|
|
42698
|
-
siteRow[field] = delimiter.join(value)
|
|
42699
|
-
rowShown = False
|
|
42700
|
-
if roles:
|
|
42701
|
-
try:
|
|
42702
|
-
acls = callGDataPages(sitesObject, 'GetAclFeed',
|
|
42703
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42704
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42705
|
-
domain=domain, site=fields[SITE_SITE])
|
|
42706
|
-
for acl in acls:
|
|
42707
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42708
|
-
if fields['role'] in roles:
|
|
42709
|
-
siteACLRow = siteRow.copy()
|
|
42710
|
-
siteACLRow.update(ACLRuleDict(fields))
|
|
42711
|
-
csvPF.WriteRowTitles(siteACLRow)
|
|
42712
|
-
rowShown = True
|
|
42713
|
-
except GDATA.notFound as e:
|
|
42714
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e), i, count)
|
|
42715
|
-
except GDATA.forbidden:
|
|
42716
|
-
pass
|
|
42717
|
-
if not rowShown:
|
|
42718
|
-
csvPF.WriteRowTitles(siteRow)
|
|
42719
|
-
|
|
42720
|
-
def _showSites(entity, i, count, domain, sites):
|
|
42721
|
-
jcount = len(sites)
|
|
42722
|
-
if entityType == Ent.USER:
|
|
42723
|
-
entityPerformActionNumItems([entityType, entity, Ent.DOMAIN, domain], jcount, Ent.SITE, i, count)
|
|
42724
|
-
else:
|
|
42725
|
-
entityPerformActionNumItems([entityType, entity], jcount, Ent.SITE, i, count)
|
|
42726
|
-
Ind.Increment()
|
|
42727
|
-
j = 0
|
|
42728
|
-
for site in sites:
|
|
42729
|
-
j += 1
|
|
42730
|
-
_showSite(sitesManager, sitesObject, domain, site, roles, j, jcount)
|
|
42731
|
-
Ind.Decrement()
|
|
42732
|
-
|
|
42733
|
-
domains = []
|
|
42734
|
-
domainLists = []
|
|
42735
|
-
url_params = {}
|
|
42736
|
-
includeAllSites = 'true' if entityType == Ent.DOMAIN else 'false'
|
|
42737
|
-
roles = set()
|
|
42738
|
-
convertCRNL = GC.Values[GC.CSV_OUTPUT_CONVERT_CR_NL]
|
|
42739
|
-
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
|
42740
|
-
csvPF = CSVPrintFile([Ent.Singular(entityType), SITE_SITE, SITE_NAME, SITE_SUMMARY], 'sortall') if Act.csvFormat() else None
|
|
42741
|
-
while Cmd.ArgumentsRemaining():
|
|
42742
|
-
myarg = getArgument()
|
|
42743
|
-
if csvPF and myarg == 'todrive':
|
|
42744
|
-
csvPF.GetTodriveParameters()
|
|
42745
|
-
elif myarg in {'domain', 'domains'}:
|
|
42746
|
-
if entityType == Ent.DOMAIN:
|
|
42747
|
-
entityList = getEntityList(Cmd.OB_DOMAIN_NAME_ENTITY)
|
|
42748
|
-
else:
|
|
42749
|
-
domains = getEntityList(Cmd.OB_DOMAIN_NAME_ENTITY)
|
|
42750
|
-
domainLists = domains if isinstance(domains, dict) else None
|
|
42751
|
-
elif myarg == 'includeallsites':
|
|
42752
|
-
includeAllSites = 'true'
|
|
42753
|
-
elif myarg == 'maxresults':
|
|
42754
|
-
url_params['max-results'] = getInteger(minVal=1)
|
|
42755
|
-
elif myarg == 'startindex':
|
|
42756
|
-
url_params['start-index'] = getInteger(minVal=1)
|
|
42757
|
-
elif myarg == 'withmappings':
|
|
42758
|
-
url_params['with-mappings'] = 'true'
|
|
42759
|
-
elif myarg in {'role', 'roles'}:
|
|
42760
|
-
roles = getACLRoles(SITE_ACL_ROLES_MAP)
|
|
42761
|
-
elif myarg in {'convertcrnl', 'converttextnl', 'convertsummarynl'}:
|
|
42762
|
-
convertCRNL = True
|
|
42763
|
-
elif myarg == 'delimiter':
|
|
42764
|
-
delimiter = getCharacter()
|
|
42765
|
-
else:
|
|
42766
|
-
unknownArgumentExit()
|
|
42767
|
-
sitesManager = SitesManager()
|
|
42768
|
-
sitesSet = set()
|
|
42769
|
-
i, count, entityList = getEntityArgument(entityList)
|
|
42770
|
-
if entityType == Ent.USER:
|
|
42771
|
-
for user in entityList:
|
|
42772
|
-
i += 1
|
|
42773
|
-
if domainLists:
|
|
42774
|
-
domainList = domainLists[user]
|
|
42775
|
-
elif domains:
|
|
42776
|
-
domainList = domains
|
|
42777
|
-
else:
|
|
42778
|
-
_, domain = splitEmailAddress(user)
|
|
42779
|
-
domainList = [domain]
|
|
42780
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42781
|
-
if not sitesObject:
|
|
42782
|
-
continue
|
|
42783
|
-
jcount = len(domainList)
|
|
42784
|
-
j = 0
|
|
42785
|
-
for domain in domainList:
|
|
42786
|
-
j += 1
|
|
42787
|
-
if domain != 'site':
|
|
42788
|
-
url_params['include-all-sites'] = includeAllSites
|
|
42789
|
-
else:
|
|
42790
|
-
url_params.pop('include-all-sites', None)
|
|
42791
|
-
printGettingAllEntityItemsForWhom(Ent.SITE, f'{Ent.Singular(Ent.USER)}: {user}, {Ent.Singular(Ent.DOMAIN)}: {domain}')
|
|
42792
|
-
sites = _getSites(domain, i, count)
|
|
42793
|
-
if not csvPF:
|
|
42794
|
-
_showSites(domain, j, jcount, domain, sites)
|
|
42795
|
-
else:
|
|
42796
|
-
_printSites(user, j, jcount, domain, sites)
|
|
42797
|
-
else:
|
|
42798
|
-
for domain in entityList:
|
|
42799
|
-
i += 1
|
|
42800
|
-
domain, sitesObject = getSitesObject(entityType, domain, i, count)
|
|
42801
|
-
if not sitesObject:
|
|
42802
|
-
continue
|
|
42803
|
-
if domain != 'site':
|
|
42804
|
-
url_params['include-all-sites'] = includeAllSites
|
|
42805
|
-
else:
|
|
42806
|
-
url_params.pop('include-all-sites', None)
|
|
42807
|
-
printGettingAllEntityItemsForWhom(Ent.SITE, f'{Ent.Singular(Ent.DOMAIN)}: {domain}')
|
|
42808
|
-
sites = _getSites(domain, i, count)
|
|
42809
|
-
if not csvPF:
|
|
42810
|
-
_showSites(domain, i, count, domain, sites)
|
|
42811
|
-
else:
|
|
42812
|
-
_printSites(domain, i, count, domain, sites)
|
|
42813
|
-
if csvPF:
|
|
42814
|
-
csvPF.SortTitles()
|
|
42815
|
-
csvPF.SetSortTitles([])
|
|
42816
|
-
if roles:
|
|
42817
|
-
csvPF.MoveTitlesToEnd(['Scope', 'Role'])
|
|
42818
|
-
csvPF.writeCSVfile('Sites')
|
|
42819
|
-
|
|
42820
|
-
# gam print sites [todrive <ToDriveAttribute>*] [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42821
|
-
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl] [delimiter <Character>]
|
|
42822
|
-
# gam show sites [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42823
|
-
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl]
|
|
42824
|
-
def doPrintShowDomainSites():
|
|
42825
|
-
printShowSites([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42826
|
-
|
|
42827
42230
|
# gam [<UserTypeEntity>] print sites [todrive <ToDriveAttribute>*] [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42828
42231
|
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl] [delimiter <Character>]
|
|
42829
42232
|
# gam [<UserTypeEntity>] show sites [domain|domains <DomainNameEntity>] [includeallsites]
|
|
42830
42233
|
# [withmappings] [role|roles all|<SiteACLRoleList>] [startindex <Number>] [maxresults <Number>] [convertcrnl]
|
|
42831
|
-
def printShowUserSites(users):
|
|
42832
|
-
printShowSites(users, Ent.USER)
|
|
42833
|
-
|
|
42834
|
-
SITE_ACTION_TO_MODIFIER_MAP = {
|
|
42835
|
-
Act.ADD: Act.MODIFIER_TO,
|
|
42836
|
-
Act.UPDATE: Act.MODIFIER_IN,
|
|
42837
|
-
Act.DELETE: Act.MODIFIER_FROM,
|
|
42838
|
-
Act.INFO: Act.MODIFIER_FROM,
|
|
42839
|
-
Act.PRINT: Act.MODIFIER_FROM,
|
|
42840
|
-
Act.SHOW: Act.MODIFIER_FROM,
|
|
42841
|
-
}
|
|
42842
|
-
|
|
42843
|
-
def _processSiteACLs(users, entityType):
|
|
42844
|
-
action = Act.Get()
|
|
42845
|
-
siteEntity = getSiteEntity()
|
|
42846
|
-
csvPF = None
|
|
42847
|
-
if action in [Act.ADD, Act.UPDATE]:
|
|
42848
|
-
role = getChoice(SITE_ACL_ROLES_MAP, mapChoice=True)
|
|
42849
|
-
elif action == Act.PRINT:
|
|
42850
|
-
csvPF = CSVPrintFile([Ent.Singular(entityType), SITE_SITE, 'Scope', 'Role'])
|
|
42851
|
-
else:
|
|
42852
|
-
role = None
|
|
42853
|
-
actionPrintShow = action in [Act.PRINT, Act.SHOW]
|
|
42854
|
-
ACLScopeEntity = getCalendarSiteACLScopeEntity() if not actionPrintShow else {}
|
|
42855
|
-
getTodriveOnly(csvPF)
|
|
42856
|
-
modifier = SITE_ACTION_TO_MODIFIER_MAP[action]
|
|
42857
|
-
sitesManager = SitesManager()
|
|
42858
|
-
i, count, users = getEntityArgument(users)
|
|
42859
|
-
for user in users:
|
|
42860
|
-
i += 1
|
|
42861
|
-
origUser = user
|
|
42862
|
-
user, sitesObject, sites, jcount = _validateUserGetSites(entityType, user, i, count, siteEntity, Ent.SITE_ACL, modifier)
|
|
42863
|
-
if jcount == 0:
|
|
42864
|
-
continue
|
|
42865
|
-
Ind.Increment()
|
|
42866
|
-
j = 0
|
|
42867
|
-
for site in sites:
|
|
42868
|
-
j += 1
|
|
42869
|
-
domain, site, domainSite, ruleIds, kcount = _validateSiteGetRuleIds(origUser, site, j, jcount, ACLScopeEntity, showAction=not actionPrintShow)
|
|
42870
|
-
if not domainSite:
|
|
42871
|
-
continue
|
|
42872
|
-
if not actionPrintShow:
|
|
42873
|
-
Ind.Increment()
|
|
42874
|
-
k = 0
|
|
42875
|
-
for ruleId in ruleIds:
|
|
42876
|
-
k += 1
|
|
42877
|
-
ruleId = normalizeRuleId(ruleId)
|
|
42878
|
-
try:
|
|
42879
|
-
if action in [Act.CREATE, Act.ADD]:
|
|
42880
|
-
acl = callGData(sitesObject, 'CreateAclEntry',
|
|
42881
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.ENTITY_EXISTS, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42882
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42883
|
-
aclentry=sitesManager.FieldsToAclEntry(makeRoleRuleIdBody(role, ruleId)), domain=domain, site=site)
|
|
42884
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42885
|
-
if not fields.get('inviteLink'):
|
|
42886
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42887
|
-
else:
|
|
42888
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, f'{formatACLRule(fields)} (Link: {fields["inviteLink"]})'], k, kcount)
|
|
42889
|
-
elif action == Act.UPDATE:
|
|
42890
|
-
acl = callGData(sitesObject, 'GetAclEntry',
|
|
42891
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42892
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42893
|
-
domain=domain, site=site, ruleId=ruleId)
|
|
42894
|
-
acl.role.value = role
|
|
42895
|
-
acl = callGData(sitesObject, 'UpdateAclEntry',
|
|
42896
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42897
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42898
|
-
aclentry=acl, domain=domain, site=site, ruleId=ruleId, extra_headers={'If-Match': acl.etag})
|
|
42899
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42900
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42901
|
-
elif action == Act.DELETE:
|
|
42902
|
-
acl = callGData(sitesObject, 'GetAclEntry',
|
|
42903
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42904
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42905
|
-
domain=domain, site=site, ruleId=ruleId)
|
|
42906
|
-
callGData(sitesObject, 'DeleteAclEntry',
|
|
42907
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42908
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42909
|
-
domain=domain, site=site, ruleId=ruleId, extra_headers={'If-Match': acl.etag})
|
|
42910
|
-
entityActionPerformed([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLScopeRole(ruleId, None)], k, kcount)
|
|
42911
|
-
elif action == Act.INFO:
|
|
42912
|
-
acl = callGData(sitesObject, 'GetAclEntry',
|
|
42913
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.BAD_REQUEST, GDATA.FORBIDDEN],
|
|
42914
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42915
|
-
domain=domain, site=site, ruleId=ruleId)
|
|
42916
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42917
|
-
printEntity([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42918
|
-
except GDATA.notFound as e:
|
|
42919
|
-
if not checkSiteExists(sitesObject, domain, site):
|
|
42920
|
-
entityUnknownWarning(Ent.SITE, domainSite, j, jcount)
|
|
42921
|
-
break
|
|
42922
|
-
entityActionFailedWarning([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLScopeRole(ruleId, role)], str(e), k, kcount)
|
|
42923
|
-
except (GDATA.entityExists, GDATA.badRequest, GDATA.forbidden) as e:
|
|
42924
|
-
entityActionFailedWarning([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLScopeRole(ruleId, role)], str(e), k, kcount)
|
|
42925
|
-
Ind.Decrement()
|
|
42926
|
-
else:
|
|
42927
|
-
try:
|
|
42928
|
-
acls = callGDataPages(sitesObject, 'GetAclFeed',
|
|
42929
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
42930
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
42931
|
-
domain=domain, site=site)
|
|
42932
|
-
if not csvPF:
|
|
42933
|
-
kcount = len(acls)
|
|
42934
|
-
entityPerformActionNumItems([Ent.SITE, domainSite], kcount, Ent.SITE_ACL, j, jcount)
|
|
42935
|
-
if kcount == 0:
|
|
42936
|
-
continue
|
|
42937
|
-
Ind.Increment()
|
|
42938
|
-
k = 0
|
|
42939
|
-
for acl in acls:
|
|
42940
|
-
k += 1
|
|
42941
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42942
|
-
printEntity([Ent.SITE, domainSite, Ent.SITE_ACL, formatACLRule(fields)], k, kcount)
|
|
42943
|
-
Ind.Decrement()
|
|
42944
|
-
else:
|
|
42945
|
-
siteRow = {Ent.Singular(entityType): user, SITE_SITE: domainSite}
|
|
42946
|
-
for acl in acls:
|
|
42947
|
-
fields = sitesManager.AclEntryToFields(acl)
|
|
42948
|
-
siteACLRow = siteRow.copy()
|
|
42949
|
-
siteACLRow.update(ACLRuleDict(fields))
|
|
42950
|
-
csvPF.WriteRowTitles(siteACLRow)
|
|
42951
|
-
except GDATA.notFound:
|
|
42952
|
-
entityUnknownWarning(Ent.SITE, domainSite, j, jcount)
|
|
42953
|
-
except GDATA.forbidden as e:
|
|
42954
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e), j, jcount)
|
|
42955
|
-
Ind.Decrement()
|
|
42956
|
-
if csvPF:
|
|
42957
|
-
csvPF.writeCSVfile('Site ACLs')
|
|
42958
|
-
|
|
42959
42234
|
# gam [<UserTypeEntity>] create siteacls <SiteEntity> <SiteACLRole> <SiteACLScopeEntity>
|
|
42960
42235
|
# gam [<UserTypeEntity>] update siteacls <SiteEntity> <SiteACLRole> <SiteACLScopeEntity>
|
|
42961
42236
|
# gam [<UserTypeEntity>] delete siteacls <SiteEntity> <SiteACLScopeEntity>
|
|
42962
42237
|
# gam [<UserTypeEntity>] info siteacls <SiteEntity> <SiteACLScopeEntity>
|
|
42963
42238
|
# gam [<UserTypeEntity>] show siteacls <SiteEntity>
|
|
42964
42239
|
# gam [<UserTypeEntity>] print siteacls <SiteEntity> [todrive <ToDriveAttribute>*]
|
|
42965
|
-
def processUserSiteACLs(users):
|
|
42966
|
-
_processSiteACLs(users, Ent.USER)
|
|
42967
|
-
|
|
42968
|
-
def doProcessDomainSiteACLs():
|
|
42969
|
-
_processSiteACLs([GC.Values[GC.DOMAIN]], Ent.DOMAIN)
|
|
42970
|
-
|
|
42971
|
-
def _printSiteActivity(users, entityType):
|
|
42972
|
-
sitesManager = SitesManager()
|
|
42973
|
-
url_params = {}
|
|
42974
|
-
csvPF = CSVPrintFile([SITE_SITE, SITE_SUMMARY, SITE_UPDATED], 'sortall')
|
|
42975
|
-
sites = getEntityList(Cmd.OB_SITE_ENTITY)
|
|
42976
|
-
siteLists = sites if isinstance(sites, dict) else None
|
|
42977
|
-
while Cmd.ArgumentsRemaining():
|
|
42978
|
-
myarg = getArgument()
|
|
42979
|
-
if myarg == 'todrive':
|
|
42980
|
-
csvPF.GetTodriveParameters()
|
|
42981
|
-
elif myarg == 'maxresults':
|
|
42982
|
-
url_params['max-results'] = getInteger(minVal=1)
|
|
42983
|
-
elif myarg == 'startindex':
|
|
42984
|
-
url_params['start-index'] = getInteger(minVal=1)
|
|
42985
|
-
elif myarg == 'updatedmin':
|
|
42986
|
-
url_params['updated-min'] = getYYYYMMDD()
|
|
42987
|
-
elif myarg == 'updatedmax':
|
|
42988
|
-
url_params['updated-max'] = getYYYYMMDD()
|
|
42989
|
-
else:
|
|
42990
|
-
unknownArgumentExit()
|
|
42991
|
-
i, count, users = getEntityArgument(users)
|
|
42992
|
-
for user in users:
|
|
42993
|
-
i += 1
|
|
42994
|
-
if siteLists:
|
|
42995
|
-
sites = siteLists[user]
|
|
42996
|
-
user, sitesObject = getSitesObject(entityType, user, i, count)
|
|
42997
|
-
if not sitesObject:
|
|
42998
|
-
continue
|
|
42999
|
-
jcount = len(sites)
|
|
43000
|
-
if jcount == 0:
|
|
43001
|
-
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
43002
|
-
continue
|
|
43003
|
-
Ind.Increment()
|
|
43004
|
-
j = 0
|
|
43005
|
-
for site in sites:
|
|
43006
|
-
j += 1
|
|
43007
|
-
domain, site, domainSite = _validateSite(site, j, jcount)
|
|
43008
|
-
if not domainSite:
|
|
43009
|
-
continue
|
|
43010
|
-
printGettingAllEntityItemsForWhom(Ent.ACTIVITY, domainSite)
|
|
43011
|
-
try:
|
|
43012
|
-
activities = callGDataPages(sitesObject, 'GetActivityFeed',
|
|
43013
|
-
pageMessage=getPageMessageForWhom(),
|
|
43014
|
-
throwErrors=[GDATA.NOT_FOUND, GDATA.FORBIDDEN],
|
|
43015
|
-
retryErrors=[GDATA.INTERNAL_SERVER_ERROR],
|
|
43016
|
-
domain=domain, site=site, url_params=url_params)
|
|
43017
|
-
for activity in activities:
|
|
43018
|
-
fields = sitesManager.ActivityEntryToFields(activity)
|
|
43019
|
-
activityRow = {SITE_SITE: domainSite}
|
|
43020
|
-
for key, value in iter(fields.items()):
|
|
43021
|
-
if not isinstance(value, list):
|
|
43022
|
-
activityRow[key] = value
|
|
43023
|
-
else:
|
|
43024
|
-
activityRow[key] = ','.join(value)
|
|
43025
|
-
csvPF.WriteRowTitles(activityRow)
|
|
43026
|
-
except GDATA.notFound:
|
|
43027
|
-
entityUnknownWarning(Ent.SITE, domainSite, j, jcount)
|
|
43028
|
-
except GDATA.forbidden as e:
|
|
43029
|
-
entityActionFailedWarning([Ent.SITE, domainSite], str(e), j, jcount)
|
|
43030
|
-
csvPF.writeCSVfile('Site Activities')
|
|
43031
|
-
|
|
43032
42240
|
# gam [<UserTypeEntity>] print siteactivity <SiteEntity> [todrive <ToDriveAttribute>*]
|
|
43033
42241
|
# [startindex <Number>] [maxresults <Number>] [updated_min <Date>] [updated_max <Date>]
|
|
43034
|
-
def
|
|
43035
|
-
|
|
42242
|
+
def deprecatedUserSites(users):
|
|
42243
|
+
deprecatedCommandExit()
|
|
43036
42244
|
|
|
43037
|
-
def
|
|
43038
|
-
|
|
42245
|
+
def deprecatedDomainSites():
|
|
42246
|
+
deprecatedCommandExit()
|
|
43039
42247
|
|
|
43040
42248
|
# <CSVFileInput> [keyfield <FieldName>] [datafield <FieldName>]
|
|
43041
42249
|
def _getGroupOrgUnitMap():
|
|
@@ -75733,8 +74941,8 @@ MAIN_ADD_CREATE_FUNCTIONS = {
|
|
|
75733
74941
|
Cmd.ARG_SAKEY: doCreateSvcAcctKeys,
|
|
75734
74942
|
Cmd.ARG_SCHEMA: doCreateUpdateUserSchemas,
|
|
75735
74943
|
Cmd.ARG_SHAREDDRIVE: doCreateSharedDrive,
|
|
75736
|
-
Cmd.ARG_SITE:
|
|
75737
|
-
Cmd.ARG_SITEACL:
|
|
74944
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
74945
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75738
74946
|
Cmd.ARG_SVCACCT: doCreateSvcAcct,
|
|
75739
74947
|
Cmd.ARG_USER: doCreateUser,
|
|
75740
74948
|
Cmd.ARG_VAULTEXPORT: doCreateVaultExport,
|
|
@@ -75848,7 +75056,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75848
75056
|
Cmd.ARG_SAKEY: doDeleteSvcAcctKeys,
|
|
75849
75057
|
Cmd.ARG_SCHEMA: doDeleteUserSchemas,
|
|
75850
75058
|
Cmd.ARG_SHAREDDRIVE: doDeleteSharedDrive,
|
|
75851
|
-
Cmd.ARG_SITEACL:
|
|
75059
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75852
75060
|
Cmd.ARG_SVCACCT: doDeleteSvcAcct,
|
|
75853
75061
|
Cmd.ARG_USER: doDeleteUser,
|
|
75854
75062
|
Cmd.ARG_USERS: doDeleteUsers,
|
|
@@ -75937,8 +75145,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75937
75145
|
Cmd.ARG_RESOURCES: doInfoResourceCalendars,
|
|
75938
75146
|
Cmd.ARG_SCHEMA: doInfoUserSchemas,
|
|
75939
75147
|
Cmd.ARG_SHAREDDRIVE: doInfoSharedDrive,
|
|
75940
|
-
Cmd.ARG_SITE:
|
|
75941
|
-
Cmd.ARG_SITEACL:
|
|
75148
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75149
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75942
75150
|
Cmd.ARG_USER: doInfoUser,
|
|
75943
75151
|
Cmd.ARG_USERS: doInfoUsers,
|
|
75944
75152
|
Cmd.ARG_USERINVITATION: doInfoCIUserInvitations,
|
|
@@ -76040,9 +75248,9 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
76040
75248
|
Cmd.ARG_SCHEMA: doPrintShowUserSchemas,
|
|
76041
75249
|
Cmd.ARG_SHAREDDRIVE: doPrintShowSharedDrives,
|
|
76042
75250
|
Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
|
|
76043
|
-
Cmd.ARG_SITE:
|
|
76044
|
-
Cmd.ARG_SITEACL:
|
|
76045
|
-
Cmd.ARG_SITEACTIVITY:
|
|
75251
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75252
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
75253
|
+
Cmd.ARG_SITEACTIVITY: deprecatedDomainSites,
|
|
76046
75254
|
Cmd.ARG_SVCACCT: doPrintShowSvcAccts,
|
|
76047
75255
|
Cmd.ARG_TOKEN: doPrintShowTokens,
|
|
76048
75256
|
Cmd.ARG_TRANSFERAPPS: doShowTransferApps,
|
|
@@ -76158,8 +75366,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
76158
75366
|
Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
|
|
76159
75367
|
Cmd.ARG_SHAREDDRIVEINFO: doInfoSharedDrive,
|
|
76160
75368
|
Cmd.ARG_SHAREDDRIVETHEMES: doShowSharedDriveThemes,
|
|
76161
|
-
Cmd.ARG_SITE:
|
|
76162
|
-
Cmd.ARG_SITEACL:
|
|
75369
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75370
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
76163
75371
|
Cmd.ARG_SVCACCT: doPrintShowSvcAccts,
|
|
76164
75372
|
Cmd.ARG_TOKEN: doPrintShowTokens,
|
|
76165
75373
|
Cmd.ARG_TRANSFERAPPS: doShowTransferApps,
|
|
@@ -76224,8 +75432,8 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
76224
75432
|
Cmd.ARG_SAKEY: doUpdateSvcAcctKeys,
|
|
76225
75433
|
Cmd.ARG_SCHEMA: doCreateUpdateUserSchemas,
|
|
76226
75434
|
Cmd.ARG_SHAREDDRIVE: doUpdateSharedDrive,
|
|
76227
|
-
Cmd.ARG_SITE:
|
|
76228
|
-
Cmd.ARG_SITEACL:
|
|
75435
|
+
Cmd.ARG_SITE: deprecatedDomainSites,
|
|
75436
|
+
Cmd.ARG_SITEACL: deprecatedDomainSites,
|
|
76229
75437
|
Cmd.ARG_SVCACCT: doCheckUpdateSvcAcct,
|
|
76230
75438
|
Cmd.ARG_USER: doUpdateUser,
|
|
76231
75439
|
Cmd.ARG_USERS: doUpdateUsers,
|
|
@@ -76764,8 +75972,8 @@ USER_ADD_CREATE_FUNCTIONS = {
|
|
|
76764
75972
|
Cmd.ARG_SENDAS: createUpdateSendAs,
|
|
76765
75973
|
Cmd.ARG_SHAREDDRIVE: createSharedDrive,
|
|
76766
75974
|
Cmd.ARG_SHEET: createSheet,
|
|
76767
|
-
Cmd.ARG_SITE:
|
|
76768
|
-
Cmd.ARG_SITEACL:
|
|
75975
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
75976
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76769
75977
|
Cmd.ARG_SMIME: createSmime,
|
|
76770
75978
|
Cmd.ARG_TASK: processTasks,
|
|
76771
75979
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
@@ -76883,7 +76091,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76883
76091
|
Cmd.ARG_SENDAS: deleteInfoSendAs,
|
|
76884
76092
|
Cmd.ARG_SMIME: deleteSmime,
|
|
76885
76093
|
Cmd.ARG_SHAREDDRIVE: deleteSharedDrive,
|
|
76886
|
-
Cmd.ARG_SITEACL:
|
|
76094
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76887
76095
|
Cmd.ARG_TASK: processTasks,
|
|
76888
76096
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
76889
76097
|
Cmd.ARG_THREAD: processThreads,
|
|
@@ -76972,8 +76180,8 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76972
76180
|
Cmd.ARG_SENDAS: deleteInfoSendAs,
|
|
76973
76181
|
Cmd.ARG_SHAREDDRIVE: infoSharedDrive,
|
|
76974
76182
|
Cmd.ARG_SHEET: infoPrintShowSheets,
|
|
76975
|
-
Cmd.ARG_SITE:
|
|
76976
|
-
Cmd.ARG_SITEACL:
|
|
76183
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76184
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76977
76185
|
Cmd.ARG_TASK: processTasks,
|
|
76978
76186
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
76979
76187
|
Cmd.ARG_USER: infoUsers,
|
|
@@ -77085,9 +76293,9 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77085
76293
|
Cmd.ARG_SHEETRANGE: printShowSheetRanges,
|
|
77086
76294
|
Cmd.ARG_SIGNATURE: printShowSignature,
|
|
77087
76295
|
Cmd.ARG_SMIME: printShowSmimes,
|
|
77088
|
-
Cmd.ARG_SITE:
|
|
77089
|
-
Cmd.ARG_SITEACL:
|
|
77090
|
-
Cmd.ARG_SITEACTIVITY:
|
|
76296
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76297
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
76298
|
+
Cmd.ARG_SITEACTIVITY: deprecatedUserSites,
|
|
77091
76299
|
Cmd.ARG_TASK: printShowTasks,
|
|
77092
76300
|
Cmd.ARG_TASKLIST: printShowTasklists,
|
|
77093
76301
|
Cmd.ARG_THREAD: printShowThreads,
|
|
@@ -77191,8 +76399,8 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77191
76399
|
Cmd.ARG_SHEET: infoPrintShowSheets,
|
|
77192
76400
|
Cmd.ARG_SHEETRANGE: printShowSheetRanges,
|
|
77193
76401
|
Cmd.ARG_SIGNATURE: printShowSignature,
|
|
77194
|
-
Cmd.ARG_SITE:
|
|
77195
|
-
Cmd.ARG_SITEACL:
|
|
76402
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76403
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
77196
76404
|
Cmd.ARG_SMIME: printShowSmimes,
|
|
77197
76405
|
Cmd.ARG_TASK: printShowTasks,
|
|
77198
76406
|
Cmd.ARG_TASKLIST: printShowTasklists,
|
|
@@ -77295,8 +76503,8 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77295
76503
|
Cmd.ARG_SHEET: updateSheets,
|
|
77296
76504
|
Cmd.ARG_SHEETRANGE: updateSheetRanges,
|
|
77297
76505
|
Cmd.ARG_SMIME: updateSmime,
|
|
77298
|
-
Cmd.ARG_SITE:
|
|
77299
|
-
Cmd.ARG_SITEACL:
|
|
76506
|
+
Cmd.ARG_SITE: deprecatedUserSites,
|
|
76507
|
+
Cmd.ARG_SITEACL: deprecatedUserSites,
|
|
77300
76508
|
Cmd.ARG_TASK: processTasks,
|
|
77301
76509
|
Cmd.ARG_TASKLIST: processTasklists,
|
|
77302
76510
|
Cmd.ARG_USER: updateUsers,
|
gam/gamlib/glapi.py
CHANGED
|
@@ -89,7 +89,6 @@ SERVICEMANAGEMENT = 'servicemanagement'
|
|
|
89
89
|
SERVICEUSAGE = 'serviceusage'
|
|
90
90
|
SHEETS = 'sheets'
|
|
91
91
|
SHEETSTD = 'sheetstd'
|
|
92
|
-
SITES = 'sites'
|
|
93
92
|
SITEVERIFICATION = 'siteVerification'
|
|
94
93
|
STORAGE = 'storage'
|
|
95
94
|
STORAGEREAD = 'storageread'
|
|
@@ -266,7 +265,6 @@ _INFO = {
|
|
|
266
265
|
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
|
267
266
|
SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
|
|
268
267
|
SHEETSTD: {'name': 'Sheets API - todrive', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
269
|
-
SITES: {'name': 'Sites API', 'version': 'v1', 'v2discovery': False},
|
|
270
268
|
SITEVERIFICATION: {'name': 'Site Verification API', 'version': 'v1', 'v2discovery': True},
|
|
271
269
|
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
|
272
270
|
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
|
@@ -500,11 +498,6 @@ _CLIENT_SCOPES = [
|
|
|
500
498
|
'subscopes': [],
|
|
501
499
|
'offByDefault': True,
|
|
502
500
|
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
|
503
|
-
{'name': 'Sites API',
|
|
504
|
-
'api': SITES,
|
|
505
|
-
'subscopes': [],
|
|
506
|
-
'offByDefault': True,
|
|
507
|
-
'scope': 'https://sites.google.com/feeds'},
|
|
508
501
|
{'name': 'Vault API',
|
|
509
502
|
'api': VAULT,
|
|
510
503
|
'subscopes': READONLY,
|
|
@@ -694,10 +687,6 @@ _SVCACCT_SCOPES = [
|
|
|
694
687
|
'api': SHEETS,
|
|
695
688
|
'subscopes': READONLY,
|
|
696
689
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
|
697
|
-
{'name': 'Sites API',
|
|
698
|
-
'api': SITES,
|
|
699
|
-
'subscopes': [],
|
|
700
|
-
'scope': 'https://sites.google.com/feeds'},
|
|
701
690
|
{'name': 'Tasks API',
|
|
702
691
|
'api': TASKS,
|
|
703
692
|
'subscopes': READONLY,
|
gam/gamlib/glclargs.py
CHANGED
|
@@ -1150,6 +1150,10 @@ class GamCLArgs():
|
|
|
1150
1150
|
return f'Command: {self.QuotedArgumentList(self.argv[:self.argvI])} >>>{self.QuotedArgumentList([self.argv[self.argvI]])}<<< {self.QuotedArgumentList(self.argv[self.argvI+1:])}\n'
|
|
1151
1151
|
return f'Command: {self.QuotedArgumentList(self.argv)} >>><<<\n'
|
|
1152
1152
|
|
|
1153
|
+
# Deprecated command
|
|
1154
|
+
def CommandDeprecated(self):
|
|
1155
|
+
return f'{self.QuotedArgumentList(self.argv)}\n'
|
|
1156
|
+
|
|
1153
1157
|
# Peek to see if next argument is in choices
|
|
1154
1158
|
def PeekArgumentPresent(self, choices):
|
|
1155
1159
|
if self.ArgumentsRemaining():
|
gam/gamlib/glentity.py
CHANGED
|
@@ -342,8 +342,6 @@ class GamEntity():
|
|
|
342
342
|
SHEET = 'shet'
|
|
343
343
|
SHEET_ID = 'shti'
|
|
344
344
|
SIGNATURE = 'sign'
|
|
345
|
-
SITE = 'site'
|
|
346
|
-
SITE_ACL = 'sacl'
|
|
347
345
|
SIZE = 'size'
|
|
348
346
|
SKU = 'sku '
|
|
349
347
|
SMIME_ID = 'smid'
|
|
@@ -695,8 +693,6 @@ class GamEntity():
|
|
|
695
693
|
SHEET: ['Sheets', 'Sheet'],
|
|
696
694
|
SHEET_ID: ['Sheet IDs', 'Sheet ID'],
|
|
697
695
|
SIGNATURE: ['Signatures', 'Signature'],
|
|
698
|
-
SITE: ['Sites', 'Site'],
|
|
699
|
-
SITE_ACL: ['Site ACLs', 'Site ACL'],
|
|
700
696
|
SIZE: ['Sizes', 'Size'],
|
|
701
697
|
SKU: ['SKUs', 'SKU'],
|
|
702
698
|
SMIME_ID: ['S/MIME Certificate IDs', 'S/MIME Certificate ID'],
|
gam/gamlib/glmsgs.py
CHANGED
|
@@ -481,6 +481,7 @@ SERVICE_NOT_APPLICABLE = 'Service not applicable/Does not exist'
|
|
|
481
481
|
SERVICE_NOT_APPLICABLE_THIS_ADDRESS = 'Service not applicable for this address: {0}'
|
|
482
482
|
SERVICE_NOT_ENABLED = '{0} Service/App not enabled'
|
|
483
483
|
SHORTCUT_TARGET_CAPABILITY_IS_FALSE = '{0} capability {1} is False'
|
|
484
|
+
SITES_COMMAND_DEPRECATED = 'The Classic Sites API is deprecated, this command will not work:\n{0}'
|
|
484
485
|
SKU_HAS_NO_MATCHING_ARCHIVED_USER_SKU = 'SKU {0} has no matching Archived User SKU'
|
|
485
486
|
STARTING_THREAD = 'Starting thread'
|
|
486
487
|
STATISTICS_COPY_FILE = 'Total: {0}, Copied: {1}, Shortcut created {2}, Shortcut exists {3}, Duplicate: {4}, Copy Failed: {5}, Not copyable: {6}, In skipids: {7}, Permissions Failed: {8}, Protected Ranges Failed: {9}'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=siFL0HiLrLvg1EOrtiIs1nFbyYzyAPlsilNd4CGMpXc,3470144
|
|
2
2
|
gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
|
|
3
3
|
gam/cacerts.pem,sha256=nJuWha0xm5dHw_5ptGphwRoO-r36Ccpqiww9pCEDbSc,67484
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -22,15 +22,15 @@ gam/atom/token_store.py,sha256=7E6Ecvxa86WCvl1pJAhv78jg9OxQv8pMtIUcPhZCq04,3803
|
|
|
22
22
|
gam/atom/url.py,sha256=pxO1TlORxyKQTQ1bkBE1unFzjnv9c8LjJkm-UEORShY,4276
|
|
23
23
|
gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
|
|
24
24
|
gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
|
|
25
|
-
gam/gamlib/glapi.py,sha256=
|
|
25
|
+
gam/gamlib/glapi.py,sha256=AkZRK0ebSBn7iJApTZl2crRWY3-D0vNmwTI36ZEo34s,34171
|
|
26
26
|
gam/gamlib/glcfg.py,sha256=3ix3GFXP8riaD4z4ubt4qUCxznhmLU-bZHCw8TxLiz8,27484
|
|
27
|
-
gam/gamlib/glclargs.py,sha256=
|
|
28
|
-
gam/gamlib/glentity.py,sha256=
|
|
27
|
+
gam/gamlib/glclargs.py,sha256=ptSTGELZHQS6SfvGGJ3NrXRoHAToO108NTYsFQE-C4c,42200
|
|
28
|
+
gam/gamlib/glentity.py,sha256=ZLbyMl9NhN-MBf9Rxmho2dBYeS4SNLMctpeaKFZSbQ4,33801
|
|
29
29
|
gam/gamlib/glgapi.py,sha256=W1nFH0sY7P8pnb98_4uzMSCs8gre0rvG5pBRI6HJq0c,38274
|
|
30
30
|
gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
|
|
31
31
|
gam/gamlib/glglobals.py,sha256=B0kCz4K6PO1-n3eZI_lvdRG99Ane1-dH4zS4J4aymlI,9566
|
|
32
32
|
gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
|
|
33
|
-
gam/gamlib/glmsgs.py,sha256=
|
|
33
|
+
gam/gamlib/glmsgs.py,sha256=HzISx_btqbwOKjMm2rokV4-Y1BMDS04-bwu6fa92XCo,33202
|
|
34
34
|
gam/gamlib/glskus.py,sha256=S-OasG1SteZSV0cG8JM74L3wFp9sozoZd39fTXajQWc,14159
|
|
35
35
|
gam/gamlib/gluprop.py,sha256=IyPLCyvn7-NHTUenM71YPQPXRZXx6CB5q-GtJ-FYd1c,11461
|
|
36
36
|
gam/gamlib/glverlibs.py,sha256=XXYhmjOVti78JTy7NNr4ShIwiOX7LrfrmFSlqSWixrE,1077
|
|
@@ -66,8 +66,8 @@ gam/googleapiclient/discovery_cache/base.py,sha256=yCDPtxnbNN-p5_9fzBacC6P3wcUPl
|
|
|
66
66
|
gam/googleapiclient/discovery_cache/file_cache.py,sha256=sim3Mg4HgRYo3vX75jvcKy_aV568EvIrtBfvfbw-044,4774
|
|
67
67
|
gam/iso8601/__init__.py,sha256=Z2PsYbXgAH5a5xzUvgczCboPzqWpm65kRcIngCnhViU,1218
|
|
68
68
|
gam/iso8601/iso8601.py,sha256=Li2FHZ4sBTWuthuQhyCvmvj0j6At8JbGzkSv2fc2RHU,4384
|
|
69
|
-
gam7-7.
|
|
70
|
-
gam7-7.
|
|
71
|
-
gam7-7.
|
|
72
|
-
gam7-7.
|
|
73
|
-
gam7-7.
|
|
69
|
+
gam7-7.4.0.dist-info/METADATA,sha256=OkqtLXKZQjbP8QM5bYvqx65hXnReESoLPIye8I64V4A,2888
|
|
70
|
+
gam7-7.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
71
|
+
gam7-7.4.0.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
72
|
+
gam7-7.4.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
73
|
+
gam7-7.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|