gam7 7.27.3__py3-none-any.whl → 7.27.5__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 +114 -43
- gam/gamlib/glapi.py +0 -6
- gam/gamlib/glmsgs.py +2 -0
- {gam7-7.27.3.dist-info → gam7-7.27.5.dist-info}/METADATA +1 -1
- {gam7-7.27.3.dist-info → gam7-7.27.5.dist-info}/RECORD +8 -8
- {gam7-7.27.3.dist-info → gam7-7.27.5.dist-info}/WHEEL +0 -0
- {gam7-7.27.3.dist-info → gam7-7.27.5.dist-info}/entry_points.txt +0 -0
- {gam7-7.27.3.dist-info → gam7-7.27.5.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.27.
|
|
28
|
+
__version__ = '7.27.05'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -35921,7 +35921,7 @@ def doPrintShowGroupTree():
|
|
|
35921
35921
|
# gam create cigroup <EmailAddress>
|
|
35922
35922
|
# [copyfrom <GroupItem>] <GroupAttribute>
|
|
35923
35923
|
# [makeowner] [alias|aliases <CIGroupAliasList>]
|
|
35924
|
-
# [security|makesecuritygroup]
|
|
35924
|
+
# [security|makesecuritygroup] [locked]
|
|
35925
35925
|
# [dynamic <QueryDynamicGroup>]
|
|
35926
35926
|
def doCreateCIGroup():
|
|
35927
35927
|
doCreateGroup(ciGroupsAPI=True)
|
|
@@ -36105,7 +36105,6 @@ def doUpdateCIGroups():
|
|
|
36105
36105
|
|
|
36106
36106
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
36107
36107
|
ci = buildGAPIObject(API.CLOUDIDENTITY_GROUPS)
|
|
36108
|
-
cib = None
|
|
36109
36108
|
entityType = Ent.CLOUD_IDENTITY_GROUP
|
|
36110
36109
|
csvPF = None
|
|
36111
36110
|
getBeforeUpdate = preview = False
|
|
@@ -36214,7 +36213,6 @@ def doUpdateCIGroups():
|
|
|
36214
36213
|
_, name, _ = convertGroupEmailToCloudID(ci, group, i, count)
|
|
36215
36214
|
if not name:
|
|
36216
36215
|
continue
|
|
36217
|
-
cipl = ci
|
|
36218
36216
|
twoUpdates = False
|
|
36219
36217
|
if 'labels' in ci_body or lockGroup is not None:
|
|
36220
36218
|
try:
|
|
@@ -36243,20 +36241,16 @@ def doUpdateCIGroups():
|
|
|
36243
36241
|
else:
|
|
36244
36242
|
if CIGROUP_LOCKED_LABEL in ci_body['labels']:
|
|
36245
36243
|
ci_body['labels'].pop(CIGROUP_LOCKED_LABEL)
|
|
36246
|
-
if CIGROUP_LOCKED_LABEL in ci_body['labels']:
|
|
36247
|
-
if cib is None:
|
|
36248
|
-
cib = buildGAPIObject(API.CLOUDIDENTITY_GROUPS_BETA)
|
|
36249
|
-
cipl = cib
|
|
36250
36244
|
if ci_body:
|
|
36251
36245
|
try:
|
|
36252
36246
|
if twoUpdates:
|
|
36253
36247
|
ci_body['labels'].pop(CIGROUP_LOCKED_LABEL)
|
|
36254
|
-
callGAPI(
|
|
36248
|
+
callGAPI(ci.groups(), 'patch',
|
|
36255
36249
|
throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS,
|
|
36256
36250
|
retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36257
36251
|
name=name, body=ci_body, updateMask=','.join(list(ci_body.keys())))
|
|
36258
36252
|
ci_body['labels'][CIGROUP_LOCKED_LABEL] = ''
|
|
36259
|
-
callGAPI(
|
|
36253
|
+
callGAPI(ci.groups(), 'patch',
|
|
36260
36254
|
throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS,
|
|
36261
36255
|
retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36262
36256
|
name=name, body=ci_body, updateMask=','.join(list(ci_body.keys())))
|
|
@@ -37240,20 +37234,17 @@ def doPrintCIGroups():
|
|
|
37240
37234
|
else:
|
|
37241
37235
|
getFullFieldsList = list(CIGROUP_FULL_FIELDS)
|
|
37242
37236
|
getFullFields = ','.join(getFullFieldsList)#
|
|
37243
|
-
cipl = ci
|
|
37244
37237
|
if query:
|
|
37245
37238
|
method = 'search'
|
|
37246
37239
|
if 'parent' not in query:
|
|
37247
37240
|
query += f" && parent == '{parent}'"
|
|
37248
37241
|
kwargs = {'query': query}
|
|
37249
|
-
if CIGROUP_LOCKED_LABEL in query:
|
|
37250
|
-
cipl = buildGAPIObject(API.CLOUDIDENTITY_GROUPS_BETA)
|
|
37251
37242
|
else:
|
|
37252
37243
|
method = 'list'
|
|
37253
37244
|
kwargs = {'parent': parent}
|
|
37254
37245
|
printGettingAllAccountEntities(Ent.CLOUD_IDENTITY_GROUP, query)
|
|
37255
37246
|
try:
|
|
37256
|
-
entityList = callGAPIpages(
|
|
37247
|
+
entityList = callGAPIpages(ci.groups(), method, 'groups',
|
|
37257
37248
|
pageMessage=getPageMessage(showFirstLastItems=True), messageAttribute=['groupKey', 'id'],
|
|
37258
37249
|
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
37259
37250
|
view='FULL', fields=fieldsnp, pageSize=pageSize, **kwargs)
|
|
@@ -44236,6 +44227,28 @@ USER_JSON_SKIP_FIELDS = ['agreedToTerms', 'aliases', 'creationTime', 'customerId
|
|
|
44236
44227
|
|
|
44237
44228
|
ALLOW_EMPTY_CUSTOM_TYPE = 'allowEmptyCustomType'
|
|
44238
44229
|
|
|
44230
|
+
def getNotifyArguments(myarg, notify, userNotification):
|
|
44231
|
+
if myarg == 'notify':
|
|
44232
|
+
if userNotification:
|
|
44233
|
+
notify['recipients'].extend(getNormalizedEmailAddressEntity(shlexSplit=True, noLower=True))
|
|
44234
|
+
else: #delegateNotificatiomn
|
|
44235
|
+
notify['notify'] = getBoolean()
|
|
44236
|
+
elif myarg == 'subject':
|
|
44237
|
+
notify['subject'] = getString(Cmd.OB_STRING)
|
|
44238
|
+
elif myarg in SORF_MSG_FILE_ARGUMENTS:
|
|
44239
|
+
notify['message'], notify['charset'], notify['html'] = getStringOrFile(myarg)
|
|
44240
|
+
elif myarg == 'html':
|
|
44241
|
+
notify['html'] = getBoolean()
|
|
44242
|
+
elif myarg == 'from':
|
|
44243
|
+
notify['from'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44244
|
+
elif myarg == 'mailbox':
|
|
44245
|
+
notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44246
|
+
elif myarg == 'replyto':
|
|
44247
|
+
notify['replyto'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44248
|
+
else:
|
|
44249
|
+
return False
|
|
44250
|
+
return True
|
|
44251
|
+
|
|
44239
44252
|
def getUserAttributes(cd, updateCmd, noUid=False):
|
|
44240
44253
|
def getKeywordAttribute(keywords, attrdict, **opts):
|
|
44241
44254
|
if Cmd.ArgumentsRemaining():
|
|
@@ -44351,22 +44364,10 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
|
|
44351
44364
|
resolveConflictAccount = True
|
|
44352
44365
|
while Cmd.ArgumentsRemaining():
|
|
44353
44366
|
myarg = getArgument()
|
|
44354
|
-
if myarg
|
|
44355
|
-
|
|
44367
|
+
if getNotifyArguments(myarg, notify, True):
|
|
44368
|
+
pass
|
|
44356
44369
|
elif myarg == 'notifyrecoveryemail':
|
|
44357
44370
|
parameters['notifyRecoveryEmail'] = True
|
|
44358
|
-
elif myarg == 'subject':
|
|
44359
|
-
notify['subject'] = getString(Cmd.OB_STRING)
|
|
44360
|
-
elif myarg in SORF_MSG_FILE_ARGUMENTS:
|
|
44361
|
-
notify['message'], notify['charset'], notify['html'] = getStringOrFile(myarg)
|
|
44362
|
-
elif myarg == 'html':
|
|
44363
|
-
notify['html'] = getBoolean()
|
|
44364
|
-
elif myarg == 'from':
|
|
44365
|
-
notify['from'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44366
|
-
elif myarg == 'replyto':
|
|
44367
|
-
notify['replyto'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44368
|
-
elif myarg == 'mailbox':
|
|
44369
|
-
notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44370
44371
|
elif PwdOpts.ProcessArgument(myarg, notify, notFoundBody):
|
|
44371
44372
|
pass
|
|
44372
44373
|
elif _getTagReplacement(myarg, tagReplacements, True):
|
|
@@ -44772,12 +44773,12 @@ def createUserAddAliases(cd, user, aliasList, i, count):
|
|
|
44772
44773
|
# [license <SKUID> [product|productid <ProductID>]]
|
|
44773
44774
|
# [[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
44774
44775
|
# [subject <String>]
|
|
44775
|
-
# [
|
|
44776
|
-
# [from <EmailAaddress>]
|
|
44776
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
44777
44777
|
# [replyto <EmailAaddress>]
|
|
44778
|
-
# [<
|
|
44779
|
-
#
|
|
44780
|
-
#
|
|
44778
|
+
# [notifypassword <String>]
|
|
44779
|
+
# [<NotifyMessageContent>] [html [<Boolean>]]
|
|
44780
|
+
# (replace <Tag> <UserReplacement>)*
|
|
44781
|
+
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
44781
44782
|
# [logpassword <FileName>] [ignorenullpassword]
|
|
44782
44783
|
# [addnumericsuffixonduplicate <Number>]
|
|
44783
44784
|
def doCreateUser():
|
|
@@ -44876,12 +44877,12 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
|
|
|
44876
44877
|
# [alias|aliases <EmailAddressList>]
|
|
44877
44878
|
# [[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
44878
44879
|
# [subject <String>]
|
|
44879
|
-
# [
|
|
44880
|
-
# [from <EmailAaddress>]
|
|
44880
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
44881
44881
|
# [replyto <EmailAaddress>]
|
|
44882
|
-
# [<NotifyMessageContent>
|
|
44882
|
+
# [<NotifyMessageContent> [html [<Boolean>]]
|
|
44883
44883
|
# (replace <Tag> <UserReplacement>)*
|
|
44884
44884
|
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
44885
|
+
# [notifypassword <String>]]
|
|
44885
44886
|
# [notifyonupdate [<Boolean>]]
|
|
44886
44887
|
# [logpassword <FileName>] [ignorenullpassword]
|
|
44887
44888
|
def updateUsers(entityList):
|
|
@@ -49156,6 +49157,7 @@ def _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties, getO
|
|
|
49156
49157
|
# [show none|all|students|teachers] [countsonly]
|
|
49157
49158
|
# [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
|
49158
49159
|
# [timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
|
49160
|
+
# (addcsvdata <FieldName> <String>)*
|
|
49159
49161
|
# [showitemcountonly] [formatjson [quotechar <Character>]]
|
|
49160
49162
|
def doPrintCourses():
|
|
49161
49163
|
def _saveParticipants(course, participants, role, rtitles):
|
|
@@ -49199,6 +49201,7 @@ def doPrintCourses():
|
|
|
49199
49201
|
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
|
49200
49202
|
showItemCountOnly = False
|
|
49201
49203
|
useOwnerAccess = GC.Values[GC.USE_COURSE_OWNER_ACCESS]
|
|
49204
|
+
addCSVData = {}
|
|
49202
49205
|
while Cmd.ArgumentsRemaining():
|
|
49203
49206
|
myarg = getArgument()
|
|
49204
49207
|
if myarg == 'todrive':
|
|
@@ -49213,6 +49216,9 @@ def doPrintCourses():
|
|
|
49213
49216
|
pass
|
|
49214
49217
|
elif myarg == 'showitemcountonly':
|
|
49215
49218
|
showItemCountOnly = True
|
|
49219
|
+
elif myarg == 'addcsvdata':
|
|
49220
|
+
k = getString(Cmd.OB_STRING)
|
|
49221
|
+
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
49216
49222
|
else:
|
|
49217
49223
|
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
49218
49224
|
applyCourseItemFilter = _setApplyCourseItemFilter(courseItemFilter, None)
|
|
@@ -49224,6 +49230,11 @@ def doPrintCourses():
|
|
|
49224
49230
|
if showItemCountOnly:
|
|
49225
49231
|
writeStdout('0\n')
|
|
49226
49232
|
return
|
|
49233
|
+
if addCSVData:
|
|
49234
|
+
csvPF.AddTitles(sorted(addCSVData.keys()))
|
|
49235
|
+
if FJQC.formatJSON:
|
|
49236
|
+
csvPF.AddJSONTitles(sorted(addCSVData.keys()))
|
|
49237
|
+
csvPF.MoveJSONTitlesToEnd(['JSON'])
|
|
49227
49238
|
if courseShowProperties['aliases']:
|
|
49228
49239
|
if FJQC.formatJSON:
|
|
49229
49240
|
csvPF.AddJSONTitles('JSON-aliases')
|
|
@@ -49281,11 +49292,15 @@ def doPrintCourses():
|
|
|
49281
49292
|
if courseShowProperties['members'] != 'teachers':
|
|
49282
49293
|
_saveParticipants(course, students, 'students', stitles)
|
|
49283
49294
|
row = flattenJSON(course, timeObjects=COURSE_TIME_OBJECTS, noLenObjects=COURSE_NOLEN_OBJECTS)
|
|
49295
|
+
if addCSVData:
|
|
49296
|
+
row.update(addCSVData)
|
|
49284
49297
|
if not FJQC.formatJSON:
|
|
49285
49298
|
csvPF.WriteRowTitles(row)
|
|
49286
49299
|
elif csvPF.CheckRowTitles(row):
|
|
49287
49300
|
row = {'id': courseId, 'JSON': json.dumps(cleanJSON(course, timeObjects=COURSE_TIME_OBJECTS),
|
|
49288
49301
|
ensure_ascii=False, sort_keys=True)}
|
|
49302
|
+
if addCSVData:
|
|
49303
|
+
row.update(addCSVData)
|
|
49289
49304
|
if courseShowProperties['aliases']:
|
|
49290
49305
|
row['JSON-aliases'] = json.dumps(list(aliases))
|
|
49291
49306
|
if courseShowProperties['members'] != 'none':
|
|
@@ -73923,14 +73938,58 @@ def printShowMessages(users):
|
|
|
73923
73938
|
def printShowThreads(users):
|
|
73924
73939
|
printShowMessagesThreads(users, Ent.THREAD)
|
|
73925
73940
|
|
|
73941
|
+
def sendCreateDelegateNotification(user, delegate, basenotify, i=0, count=0, msgFrom=None):
|
|
73942
|
+
# Substitute for #user#, #delegate#
|
|
73943
|
+
def _substituteForPattern(field, pattern, value):
|
|
73944
|
+
if field.find('#') == -1:
|
|
73945
|
+
return field
|
|
73946
|
+
return field.replace(pattern, value)
|
|
73947
|
+
|
|
73948
|
+
def _makeSubstitutions(field):
|
|
73949
|
+
notify[field] = _substituteForPattern(notify[field], '#user#', user)
|
|
73950
|
+
notify[field] = _substituteForPattern(notify[field], '#delegate#', delegate)
|
|
73951
|
+
|
|
73952
|
+
notify = basenotify.copy()
|
|
73953
|
+
if not notify['subject']:
|
|
73954
|
+
notify['subject'] = Msg.CREATE_DELEGATE_NOTIFY_SUBJECT
|
|
73955
|
+
_makeSubstitutions('subject')
|
|
73956
|
+
if not notify['message']:
|
|
73957
|
+
notify['message'] = Msg.CREATE_DELEGATE_NOTIFY_MESSAGE
|
|
73958
|
+
elif notify['html']:
|
|
73959
|
+
notify['message'] = notify['message'].replace('\r', '').replace('\\n', '<br/>')
|
|
73960
|
+
else:
|
|
73961
|
+
notify['message'] = notify['message'].replace('\r', '').replace('\\n', '\n')
|
|
73962
|
+
_makeSubstitutions('message')
|
|
73963
|
+
if 'from' in notify:
|
|
73964
|
+
msgFrom = notify['from']
|
|
73965
|
+
msgReplyTo = notify.get('replyto', None)
|
|
73966
|
+
mailBox = notify.get('mailbox', None)
|
|
73967
|
+
send_email(notify['subject'], notify['message'], delegate, i, count,
|
|
73968
|
+
msgFrom=msgFrom, msgReplyTo=msgReplyTo, html=notify['html'], charset=notify['charset'], mailBox=mailBox)
|
|
73969
|
+
|
|
73926
73970
|
# gam <UserTypeEntity> create delegate|delegates [convertalias] <UserEntity>
|
|
73971
|
+
# [notify [<Boolean>]
|
|
73972
|
+
# [subject <String>]
|
|
73973
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
73974
|
+
# [replyto <EmailAaddress>]
|
|
73975
|
+
# [<NotifyMessageContent>] [html [<Boolean>]]
|
|
73976
|
+
# ]
|
|
73927
73977
|
# gam <UserTypeEntity> delete delegate|delegates [convertalias] <UserEntity>
|
|
73928
73978
|
def processDelegates(users):
|
|
73929
73979
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
73930
|
-
|
|
73980
|
+
createCmd = Act.Get() != Act.DELETE
|
|
73931
73981
|
aliasAllowed = not checkArgumentPresent(['convertalias'])
|
|
73932
73982
|
delegateEntity = getUserObjectEntity(Cmd.OB_USER_ENTITY, Ent.DELEGATE)
|
|
73933
|
-
|
|
73983
|
+
notify = {'notify': False, 'subject': '', 'message': '', 'html': False, 'charset': UTF8}
|
|
73984
|
+
if createCmd:
|
|
73985
|
+
while Cmd.ArgumentsRemaining():
|
|
73986
|
+
myarg = getArgument()
|
|
73987
|
+
if getNotifyArguments(myarg, notify, False):
|
|
73988
|
+
pass
|
|
73989
|
+
else:
|
|
73990
|
+
unknownArgumentExit()
|
|
73991
|
+
else:
|
|
73992
|
+
checkForExtraneousArguments()
|
|
73934
73993
|
i, count, users = getEntityArgument(users)
|
|
73935
73994
|
for user in users:
|
|
73936
73995
|
i += 1
|
|
@@ -73942,25 +74001,37 @@ def processDelegates(users):
|
|
|
73942
74001
|
for delegate in delegates:
|
|
73943
74002
|
j += 1
|
|
73944
74003
|
delegateEmail = convertUIDtoEmailAddress(delegate, cd=cd, emailTypes=['user', 'group'], aliasAllowed=aliasAllowed)
|
|
74004
|
+
kvList = [Ent.USER, user, Ent.DELEGATE, delegateEmail]
|
|
73945
74005
|
try:
|
|
73946
|
-
if
|
|
73947
|
-
callGAPI(gmail.users().settings().delegates(),
|
|
74006
|
+
if createCmd:
|
|
74007
|
+
callGAPI(gmail.users().settings().delegates(), 'create',
|
|
73948
74008
|
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.ALREADY_EXISTS, GAPI.FAILED_PRECONDITION, GAPI.INVALID,
|
|
73949
74009
|
GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
73950
74010
|
userId='me', body={'delegateEmail': delegateEmail})
|
|
74011
|
+
entityActionPerformed(kvList, j, jcount)
|
|
74012
|
+
if notify['notify']:
|
|
74013
|
+
Ind.Increment()
|
|
74014
|
+
sendCreateDelegateNotification(user, delegateEmail, notify, j, jcount)
|
|
74015
|
+
Ind.Decrement()
|
|
73951
74016
|
else:
|
|
73952
|
-
callGAPI(gmail.users().settings().delegates(),
|
|
74017
|
+
callGAPI(gmail.users().settings().delegates(), 'delete',
|
|
73953
74018
|
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.INVALID_INPUT, GAPI.PERMISSION_DENIED],
|
|
73954
74019
|
userId='me', delegateEmail=delegateEmail)
|
|
73955
|
-
|
|
74020
|
+
entityActionPerformed(kvList, j, jcount)
|
|
73956
74021
|
except (GAPI.alreadyExists, GAPI.failedPrecondition, GAPI.invalid,
|
|
73957
74022
|
GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
73958
|
-
entityActionFailedWarning(
|
|
74023
|
+
entityActionFailedWarning(kvList, str(e), j, jcount)
|
|
73959
74024
|
except GAPI.serviceNotAvailable:
|
|
73960
74025
|
userGmailServiceNotEnabledWarning(user, i, count)
|
|
73961
74026
|
Ind.Decrement()
|
|
73962
74027
|
|
|
73963
74028
|
# gam <UserTypeEntity> delegate to [convertalias] <UserEntity>
|
|
74029
|
+
# [notify [<Boolean>]
|
|
74030
|
+
# [subject <String>]
|
|
74031
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
74032
|
+
# [replyto <EmailAaddress>]
|
|
74033
|
+
# [<NotifyMessageContent>] [html [<Boolean>]]
|
|
74034
|
+
# ]
|
|
73964
74035
|
def delegateTo(users):
|
|
73965
74036
|
checkArgumentPresent('to', required=True)
|
|
73966
74037
|
processDelegates(users)
|
gam/gamlib/glapi.py
CHANGED
|
@@ -46,7 +46,6 @@ CLASSROOM = 'classroom'
|
|
|
46
46
|
CLOUDCHANNEL = 'cloudchannel'
|
|
47
47
|
CLOUDIDENTITY_DEVICES = 'cloudidentitydevices'
|
|
48
48
|
CLOUDIDENTITY_GROUPS = 'cloudidentitygroups'
|
|
49
|
-
CLOUDIDENTITY_GROUPS_BETA = 'cloudidentitygroupsbeta'
|
|
50
49
|
CLOUDIDENTITY_INBOUND_SSO = 'cloudidentityinboundsso'
|
|
51
50
|
CLOUDIDENTITY_ORGUNITS = 'cloudidentityorgunits'
|
|
52
51
|
CLOUDIDENTITY_ORGUNITS_BETA = 'cloudidentityorgunitsbeta'
|
|
@@ -242,7 +241,6 @@ _INFO = {
|
|
|
242
241
|
CLOUDCHANNEL: {'name': 'Cloud Channel API', 'version': 'v1', 'v2discovery': True},
|
|
243
242
|
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity API - Devices', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
244
243
|
CLOUDIDENTITY_GROUPS: {'name': 'Cloud Identity API - Groups', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
245
|
-
CLOUDIDENTITY_GROUPS_BETA: {'name': 'Cloud Identity API - Groups Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
246
244
|
CLOUDIDENTITY_INBOUND_SSO: {'name': 'Cloud Identity API - Inbound SSO Settings', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
247
245
|
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity API - OrgUnits', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
248
246
|
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
@@ -387,10 +385,6 @@ _CLIENT_SCOPES = [
|
|
|
387
385
|
'api': CLOUDIDENTITY_GROUPS,
|
|
388
386
|
'subscopes': READONLY,
|
|
389
387
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
|
390
|
-
{'name': 'Cloud Identity API - Groups Beta (Enables group locking/unlocking)',
|
|
391
|
-
'api': CLOUDIDENTITY_GROUPS_BETA,
|
|
392
|
-
'subscopes': [],
|
|
393
|
-
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
|
394
388
|
{'name': 'Cloud Identity API - Inbound SSO Settings',
|
|
395
389
|
'api': CLOUDIDENTITY_INBOUND_SSO,
|
|
396
390
|
'subscopes': READONLY,
|
gam/gamlib/glmsgs.py
CHANGED
|
@@ -224,6 +224,8 @@ COUNT_N_EXCEEDS_MAX_TO_PROCESS_M = 'Count {0} exceeds maximum to {1} {2}'
|
|
|
224
224
|
CORRUPT_FILE = 'Corrupt file'
|
|
225
225
|
COULD_NOT_FIND_ANY_YUBIKEY = 'Could not find any YubiKey\n'
|
|
226
226
|
COULD_NOT_FIND_YUBIKEY_WITH_SERIAL = 'Could not find YubiKey with serial number {0}\n'
|
|
227
|
+
CREATE_DELEGATE_NOTIFY_MESSAGE = '#user# has granted you #delegate# access to read, delete and send mail on their behalf.'
|
|
228
|
+
CREATE_DELEGATE_NOTIFY_SUBJECT = '#user# mail delegation to #delegate#'
|
|
227
229
|
CREATE_USER_NOTIFY_MESSAGE = 'Hello #givenname# #familyname#,\n\nYou have a new account at #domain#\nAccount details:\nUsername: #user#\nPassword: #password#\nStart using your new account by signing in at\nhttps://www.google.com/accounts/AccountChooser?Email=#user#&continue=https://workspace.google.com/dashboard\n'
|
|
228
230
|
CREATE_USER_NOTIFY_SUBJECT = 'Welcome to #domain#'
|
|
229
231
|
CSV_DATA_ALREADY_SAVED = 'CSV data already saved'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=6PDXteFqxSWOxe1OFvcP0KN88cuEkZPVH6JmPM95r9M,3629732
|
|
2
2
|
gam/__main__.py,sha256=VwEYS7a9vYQPbT6iLduMOoVUJ6p4R-HZgerZQmM1NpE,1307
|
|
3
3
|
gam/cacerts.pem,sha256=DUsVo2XlFYwfkhe3gnxa-Km4Z4noz74hSApXwTT-nQE,44344
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -22,7 +22,7 @@ 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=t2ivDXJg4kH0SbdUJNdJH7IZG0uGEUz9gFuU3ri8CpQ,36638
|
|
26
26
|
gam/gamlib/glcfg.py,sha256=do_FR9m9m7Bmh2SgjLPk2pysU-wPHt7PlqPPjX90tpw,28684
|
|
27
27
|
gam/gamlib/glclargs.py,sha256=LlTtwJJHqU48l7SQT4bcZCWlw3Y46g42Bn1ACGW8gIk,53307
|
|
28
28
|
gam/gamlib/glentity.py,sha256=KWFomkoNE6lLE83zVqVIlJ2rkzfLkhEasW1M0TWGieA,35373
|
|
@@ -30,7 +30,7 @@ gam/gamlib/glgapi.py,sha256=pdBbwNtnCwFWxJGaP-_3hdTjSNoOCJF2yo76WdQOi1k,40426
|
|
|
30
30
|
gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
|
|
31
31
|
gam/gamlib/glglobals.py,sha256=U1eCXHOkWAtwVXG8-0HL4ZzQP0YcbeFlhJxbOa_x1QI,9804
|
|
32
32
|
gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
|
|
33
|
-
gam/gamlib/glmsgs.py,sha256=
|
|
33
|
+
gam/gamlib/glmsgs.py,sha256=TkLg6p8o9elVIbe_4Kq0hac6qSM-qoIMuQvXoEn4Q_c,34254
|
|
34
34
|
gam/gamlib/glskus.py,sha256=29vlBLBJCL4u9GawCt3eNeZq9HQG3hGFZk9-EainNng,15384
|
|
35
35
|
gam/gamlib/gluprop.py,sha256=IyPLCyvn7-NHTUenM71YPQPXRZXx6CB5q-GtJ-FYd1c,11461
|
|
36
36
|
gam/gamlib/glverlibs.py,sha256=mDphdXVN_dJlGUVGuLqOEA3yHBNBeqRV4DRoTX7Wl7A,982
|
|
@@ -47,8 +47,8 @@ gam/gdata/apps/audit/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrK
|
|
|
47
47
|
gam/gdata/apps/audit/service.py,sha256=Z1eueThcNeVUMWP1DRWc_DGHrJCiJI8W_xj6L-cqu-Q,9658
|
|
48
48
|
gam/gdata/apps/contacts/__init__.py,sha256=Um6zgIkiahZns7yAEuC3pxHSMD8iciZ_EoynSLoYPfU,30463
|
|
49
49
|
gam/gdata/apps/contacts/service.py,sha256=5lNb-Ii1Gyek6ePFji3kyoYtCBc8CuJTwagx2BL2o14,15684
|
|
50
|
-
gam7-7.27.
|
|
51
|
-
gam7-7.27.
|
|
52
|
-
gam7-7.27.
|
|
53
|
-
gam7-7.27.
|
|
54
|
-
gam7-7.27.
|
|
50
|
+
gam7-7.27.5.dist-info/METADATA,sha256=iZoJeKU1yqmMJyPCY7_mGJ1B_5C-usNASAEvyqRS4d0,3093
|
|
51
|
+
gam7-7.27.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
52
|
+
gam7-7.27.5.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
53
|
+
gam7-7.27.5.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
54
|
+
gam7-7.27.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|