gam7 7.9.7__py3-none-any.whl → 7.10.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 +207 -9
- gam/gamlib/glapi.py +6 -0
- gam/gamlib/glclargs.py +5 -1
- gam/gamlib/glentity.py +2 -0
- gam/gamlib/glmsgs.py +1 -0
- {gam7-7.9.7.dist-info → gam7-7.10.0.dist-info}/METADATA +1 -1
- {gam7-7.9.7.dist-info → gam7-7.10.0.dist-info}/RECORD +10 -10
- {gam7-7.9.7.dist-info → gam7-7.10.0.dist-info}/WHEEL +0 -0
- {gam7-7.9.7.dist-info → gam7-7.10.0.dist-info}/entry_points.txt +0 -0
- {gam7-7.9.7.dist-info → gam7-7.10.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.10.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
|
|
@@ -22786,7 +22786,7 @@ def _processPeopleContactPhotos(users, function):
|
|
|
22786
22786
|
if function == 'GetContactPhoto' and not os.path.isdir(targetFolder):
|
|
22787
22787
|
os.makedirs(targetFolder)
|
|
22788
22788
|
elif myarg == 'filename':
|
|
22789
|
-
filenamePattern = getString(Cmd.
|
|
22789
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
22790
22790
|
else:
|
|
22791
22791
|
unknownArgumentExit()
|
|
22792
22792
|
subForContactId = filenamePattern.find('#contactid#') != -1
|
|
@@ -25990,6 +25990,8 @@ def _printChatItem(user, citem, parent, entityType, csvPF, FJQC, addCSVData=None
|
|
|
25990
25990
|
if entityType == Ent.CHAT_SPACE:
|
|
25991
25991
|
_cleanChatSpace(citem)
|
|
25992
25992
|
baserow = {'User': user} if user is not None else {}
|
|
25993
|
+
elif entityType == Ent.CHAT_EMOJI:
|
|
25994
|
+
baserow = {'User': user, 'name': citem['name'], 'emojiName': citem['emojiName']}
|
|
25993
25995
|
else:
|
|
25994
25996
|
if user is not None:
|
|
25995
25997
|
baserow = {'User': user, 'space.name': parent['name'], 'space.displayName': parent['displayName']}
|
|
@@ -26009,6 +26011,190 @@ def _printChatItem(user, citem, parent, entityType, csvPF, FJQC, addCSVData=None
|
|
|
26009
26011
|
'JSON': json.dumps(cleanJSON(citem, timeObjects=CHAT_TIME_OBJECTS), ensure_ascii=False, sort_keys=True)})
|
|
26010
26012
|
csvPF.WriteRowNoFilter(row)
|
|
26011
26013
|
|
|
26014
|
+
def _getValidateEmojiName():
|
|
26015
|
+
name = getString(Cmd.OB_CHAT_EMOJI_NAME)
|
|
26016
|
+
if re.match(r'^:[0-9a-z_-]+:$', name):
|
|
26017
|
+
return name
|
|
26018
|
+
Cmd.Backup()
|
|
26019
|
+
usageErrorExit(Msg.INVALID_EMOJI_NAME.format(name))
|
|
26020
|
+
|
|
26021
|
+
# gam <UserTypeEntity> create chatemoji <ChatEmojiName>
|
|
26022
|
+
# ([drivedir|(sourcefolder <FilePath>)] [filename <FileNamePattern>])
|
|
26023
|
+
# [formatjson]
|
|
26024
|
+
def createChatEmoji(users):
|
|
26025
|
+
FJQC = FormatJSONQuoteChar()
|
|
26026
|
+
name = _getValidateEmojiName()
|
|
26027
|
+
body = {'emojiName': name, 'payload': {'filename': '', 'fileContent': ''}}
|
|
26028
|
+
sourceFolder = os.getcwd()
|
|
26029
|
+
filenamePattern = '#email#.jpg'
|
|
26030
|
+
while Cmd.ArgumentsRemaining():
|
|
26031
|
+
myarg = getArgument()
|
|
26032
|
+
if myarg == 'drivedir':
|
|
26033
|
+
sourceFolder = GC.Values[GC.DRIVE_DIR]
|
|
26034
|
+
elif myarg == 'sourcefolder':
|
|
26035
|
+
sourceFolder = os.path.expanduser(getString(Cmd.OB_FILE_PATH))
|
|
26036
|
+
if not os.path.isdir(sourceFolder):
|
|
26037
|
+
entityDoesNotExistExit(Ent.DIRECTORY, sourceFolder)
|
|
26038
|
+
elif myarg == 'filename':
|
|
26039
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
26040
|
+
else:
|
|
26041
|
+
FJQC.GetFormatJSON(myarg)
|
|
26042
|
+
i, count, users = getEntityArgument(users)
|
|
26043
|
+
for user in users:
|
|
26044
|
+
i += 1
|
|
26045
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, name])
|
|
26046
|
+
if not chat:
|
|
26047
|
+
continue
|
|
26048
|
+
user, userName, _ = splitEmailAddressOrUID(user)
|
|
26049
|
+
filename = _substituteForUser(filenamePattern, user, userName)
|
|
26050
|
+
if sourceFolder is not None:
|
|
26051
|
+
filename = os.path.join(sourceFolder, filename)
|
|
26052
|
+
filename = os.path.expanduser(filename)
|
|
26053
|
+
try:
|
|
26054
|
+
with open(filename, 'rb') as f:
|
|
26055
|
+
image_data = f.read()
|
|
26056
|
+
except (OSError, IOError) as e:
|
|
26057
|
+
entityActionFailedWarning([Ent.USER, user, Ent.CHAT_EMOJI, filename], str(e), i, count)
|
|
26058
|
+
continue
|
|
26059
|
+
body['payload'] = {'filename': os.path.basename(filename),
|
|
26060
|
+
'fileContent':base64.urlsafe_b64encode(image_data).decode(UTF8)}
|
|
26061
|
+
try:
|
|
26062
|
+
emoji = callGAPI(chat.customEmojis(), 'create',
|
|
26063
|
+
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
|
26064
|
+
body=body)
|
|
26065
|
+
_showChatItem(emoji, Ent.CHAT_EMOJI, FJQC, i, count)
|
|
26066
|
+
except (GAPI.alreadyExists, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26067
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26068
|
+
except GAPI.failedPrecondition:
|
|
26069
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26070
|
+
|
|
26071
|
+
def getEmojiName(myarg):
|
|
26072
|
+
if myarg == 'emojiname':
|
|
26073
|
+
name = _getValidateEmojiName()
|
|
26074
|
+
return 'customEmojis/'+name
|
|
26075
|
+
_, chatEmoji = Cmd.Previous().split('/', 1)
|
|
26076
|
+
return 'customEmojis/'+chatEmoji
|
|
26077
|
+
|
|
26078
|
+
# gam <UserTypeEntity> delete chatemoji <ChatEmoji>
|
|
26079
|
+
def deleteChatEmoji(users):
|
|
26080
|
+
name = None
|
|
26081
|
+
while Cmd.ArgumentsRemaining():
|
|
26082
|
+
myarg = getArgument()
|
|
26083
|
+
if myarg == 'emojiname':
|
|
26084
|
+
name = getEmojiName(myarg)
|
|
26085
|
+
elif myarg.startswith('customemojis/'):
|
|
26086
|
+
name = getEmojiName(myarg)
|
|
26087
|
+
else:
|
|
26088
|
+
unknownArgumentExit()
|
|
26089
|
+
if not name:
|
|
26090
|
+
missingArgumentExit('ChatEmoji')
|
|
26091
|
+
i, count, users = getEntityArgument(users)
|
|
26092
|
+
for user in users:
|
|
26093
|
+
i += 1
|
|
26094
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, name])
|
|
26095
|
+
if not chat:
|
|
26096
|
+
continue
|
|
26097
|
+
try:
|
|
26098
|
+
callGAPI(chat.customEmojis(), 'delete',
|
|
26099
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
|
26100
|
+
name=name)
|
|
26101
|
+
entityActionPerformed(kvList, i, count)
|
|
26102
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26103
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26104
|
+
except GAPI.failedPrecondition:
|
|
26105
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26106
|
+
|
|
26107
|
+
# gam <UserTypeEntity> info chatemoji <ChatEmoji>
|
|
26108
|
+
# [formatjson]
|
|
26109
|
+
def infoChatEmoji(users):
|
|
26110
|
+
FJQC = FormatJSONQuoteChar()
|
|
26111
|
+
name = None
|
|
26112
|
+
while Cmd.ArgumentsRemaining():
|
|
26113
|
+
myarg = getArgument()
|
|
26114
|
+
if myarg == 'emojiname':
|
|
26115
|
+
name = getEmojiName(myarg)
|
|
26116
|
+
elif myarg.startswith('customemojis/'):
|
|
26117
|
+
name = getEmojiName(myarg)
|
|
26118
|
+
else:
|
|
26119
|
+
FJQC.GetFormatJSON(myarg)
|
|
26120
|
+
if not name:
|
|
26121
|
+
missingArgumentExit('ChatEmoji')
|
|
26122
|
+
i, count, users = getEntityArgument(users)
|
|
26123
|
+
for user in users:
|
|
26124
|
+
i += 1
|
|
26125
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, name])
|
|
26126
|
+
if not chat:
|
|
26127
|
+
continue
|
|
26128
|
+
try:
|
|
26129
|
+
emoji = callGAPI(chat.customEmojis(), 'get',
|
|
26130
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
|
26131
|
+
name=name)
|
|
26132
|
+
if not FJQC.formatJSON:
|
|
26133
|
+
entityPerformAction(kvList, i, count)
|
|
26134
|
+
_showChatItem(emoji, Ent.CHAT_EMOJI, FJQC, i, count)
|
|
26135
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26136
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26137
|
+
except GAPI.failedPrecondition:
|
|
26138
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26139
|
+
|
|
26140
|
+
CHAT_EMOJI_SHOW_CREATED_BY_CHOICE_MAP = {
|
|
26141
|
+
'any': None,
|
|
26142
|
+
'me': 'creator("users/me")',
|
|
26143
|
+
'others': 'NOT creator("users/me")'
|
|
26144
|
+
}
|
|
26145
|
+
|
|
26146
|
+
# gam <UserTypeEntity> show chatemojis
|
|
26147
|
+
# [showcreatedby any|me|others]
|
|
26148
|
+
# [formatjson]
|
|
26149
|
+
# gam <UserTypeEntity> print chatemojis [todrive <ToDriveAttribute>*]
|
|
26150
|
+
# [showcreatedby any|me|others]
|
|
26151
|
+
# [formatjson [quotechar <Character>]]
|
|
26152
|
+
def printShowChatEmojis(users):
|
|
26153
|
+
csvPF = CSVPrintFile(['User', 'name', 'emojiName']) if Act.csvFormat() else None
|
|
26154
|
+
FJQC = FormatJSONQuoteChar(csvPF)
|
|
26155
|
+
pfilter = CHAT_EMOJI_SHOW_CREATED_BY_CHOICE_MAP['me']
|
|
26156
|
+
while Cmd.ArgumentsRemaining():
|
|
26157
|
+
myarg = getArgument()
|
|
26158
|
+
if csvPF and myarg == 'todrive':
|
|
26159
|
+
csvPF.GetTodriveParameters()
|
|
26160
|
+
elif myarg =='showcreatedby':
|
|
26161
|
+
pfilter = getChoice(CHAT_EMOJI_SHOW_CREATED_BY_CHOICE_MAP, mapChoice=True)
|
|
26162
|
+
else:
|
|
26163
|
+
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
26164
|
+
i, count, users = getEntityArgument(users)
|
|
26165
|
+
for user in users:
|
|
26166
|
+
i += 1
|
|
26167
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, None])
|
|
26168
|
+
if not chat:
|
|
26169
|
+
continue
|
|
26170
|
+
try:
|
|
26171
|
+
emojis = callGAPIpages(chat.customEmojis(), 'list', 'customEmojis',
|
|
26172
|
+
pageMessage=_getChatPageMessage(Ent.CHAT_EMOJI, user, i, count, pfilter),
|
|
26173
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
26174
|
+
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
26175
|
+
pageSize=CHAT_PAGE_SIZE, filter=pfilter)
|
|
26176
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26177
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26178
|
+
continue
|
|
26179
|
+
except GAPI.failedPrecondition:
|
|
26180
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26181
|
+
break
|
|
26182
|
+
if not csvPF:
|
|
26183
|
+
jcount = len(emojis)
|
|
26184
|
+
if not FJQC.formatJSON:
|
|
26185
|
+
entityPerformActionNumItems(kvList, jcount, Ent.CHAT_EMOJI, i, count)
|
|
26186
|
+
Ind.Increment()
|
|
26187
|
+
j = 0
|
|
26188
|
+
for emoji in sorted(emojis, key=lambda k: k['emojiName']):
|
|
26189
|
+
j += 1
|
|
26190
|
+
_showChatItem(emoji, Ent.CHAT_EMOJI, FJQC, j, jcount)
|
|
26191
|
+
Ind.Decrement()
|
|
26192
|
+
else:
|
|
26193
|
+
for emoji in sorted(emojis, key=lambda k: k['emojiName']):
|
|
26194
|
+
_printChatItem(user, emoji, '', Ent.CHAT_EMOJI, csvPF, FJQC)
|
|
26195
|
+
if csvPF:
|
|
26196
|
+
csvPF.writeCSVfile('Chat Custom Emojis')
|
|
26197
|
+
|
|
26012
26198
|
# gam setup chat
|
|
26013
26199
|
def doSetupChat():
|
|
26014
26200
|
checkForExtraneousArguments()
|
|
@@ -26472,6 +26658,9 @@ def printShowChatSpaces(users):
|
|
|
26472
26658
|
substituteQueryTimes(queries, queryTimes)
|
|
26473
26659
|
pfilter = kwargsCS['query'] = queries[0]
|
|
26474
26660
|
kwargsCS['useAdminAccess'] = True
|
|
26661
|
+
sortName = 'displayName'
|
|
26662
|
+
else:
|
|
26663
|
+
sortName = 'name'
|
|
26475
26664
|
for user in users:
|
|
26476
26665
|
i += 1
|
|
26477
26666
|
user, chat, kvList = buildChatServiceObject(api, user, i, count, None, useAdminAccess)
|
|
@@ -26499,12 +26688,12 @@ def printShowChatSpaces(users):
|
|
|
26499
26688
|
entityPerformActionNumItems(kvList, jcount, Ent.CHAT_SPACE, i, count)
|
|
26500
26689
|
Ind.Increment()
|
|
26501
26690
|
j = 0
|
|
26502
|
-
for space in spaces:
|
|
26691
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
26503
26692
|
j += 1
|
|
26504
26693
|
_showChatItem(space, Ent.CHAT_SPACE, FJQC, j, jcount)
|
|
26505
26694
|
Ind.Decrement()
|
|
26506
26695
|
else:
|
|
26507
|
-
for space in spaces:
|
|
26696
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
26508
26697
|
_printChatItem(user, space, None, Ent.CHAT_SPACE, csvPF, FJQC)
|
|
26509
26698
|
if csvPF:
|
|
26510
26699
|
csvPF.writeCSVfile('Chat Spaces')
|
|
@@ -27139,6 +27328,9 @@ def printShowChatMembers(users):
|
|
|
27139
27328
|
i, count, users = getEntityArgument(users)
|
|
27140
27329
|
if useAdminAccess:
|
|
27141
27330
|
_chkChatAdminAccess(count)
|
|
27331
|
+
sortName = 'displayName'
|
|
27332
|
+
else:
|
|
27333
|
+
sortName = 'name'
|
|
27142
27334
|
for user in users:
|
|
27143
27335
|
i += 1
|
|
27144
27336
|
user, chat, kvList = buildChatServiceObject(api, user, i, count, [Ent.CHAT_SPACE, None], useAdminAccess)
|
|
@@ -27161,7 +27353,7 @@ def printShowChatMembers(users):
|
|
|
27161
27353
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
27162
27354
|
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
|
27163
27355
|
**kwargsCS)
|
|
27164
|
-
for space in spaces:
|
|
27356
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
27165
27357
|
if space['spaceType'] == 'SPACE' and 'membershipCount' in space:
|
|
27166
27358
|
parentList.append({'name': space['name'], 'displayName': space.get('displayName', 'None')})
|
|
27167
27359
|
except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError,
|
|
@@ -27178,7 +27370,7 @@ def printShowChatMembers(users):
|
|
|
27178
27370
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
27179
27371
|
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
|
27180
27372
|
**kwargsCS)
|
|
27181
|
-
for space in spaces:
|
|
27373
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
27182
27374
|
# if 'membershipCount' in space:
|
|
27183
27375
|
# parentList.append({'name': space['name'], 'displayName': space.get('displayName', 'None')})
|
|
27184
27376
|
parentList.append({'name': space['name'], 'displayName': space.get('displayName', 'None')})
|
|
@@ -67871,7 +68063,7 @@ def updatePhoto(users):
|
|
|
67871
68063
|
baseFileIdEntity = drive = owner = None
|
|
67872
68064
|
sourceFolder = os.getcwd()
|
|
67873
68065
|
if Cmd.NumArgumentsRemaining() == 1:
|
|
67874
|
-
filenamePattern = getString(Cmd.
|
|
68066
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67875
68067
|
else:
|
|
67876
68068
|
filenamePattern = '#email#.jpg'
|
|
67877
68069
|
while Cmd.ArgumentsRemaining():
|
|
@@ -67883,7 +68075,7 @@ def updatePhoto(users):
|
|
|
67883
68075
|
if not os.path.isdir(sourceFolder):
|
|
67884
68076
|
entityDoesNotExistExit(Ent.DIRECTORY, sourceFolder)
|
|
67885
68077
|
elif myarg == 'filename':
|
|
67886
|
-
filenamePattern = getString(Cmd.
|
|
68078
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67887
68079
|
elif myarg == 'gphoto':
|
|
67888
68080
|
owner, drive = buildGAPIServiceObject(API.DRIVE3, getEmailAddress())
|
|
67889
68081
|
if not drive:
|
|
@@ -67984,7 +68176,7 @@ def getPhoto(users, profileMode):
|
|
|
67984
68176
|
if not os.path.isdir(targetFolder):
|
|
67985
68177
|
os.makedirs(targetFolder)
|
|
67986
68178
|
elif myarg == 'filename':
|
|
67987
|
-
filenamePattern = getString(Cmd.
|
|
68179
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67988
68180
|
elif myarg == 'nofile':
|
|
67989
68181
|
writeFileData = False
|
|
67990
68182
|
elif myarg == 'noshow':
|
|
@@ -76983,6 +77175,7 @@ USER_ADD_CREATE_FUNCTIONS = {
|
|
|
76983
77175
|
Cmd.ARG_CALENDAR: addCreateCalendars,
|
|
76984
77176
|
Cmd.ARG_GROUP: addUserToGroups,
|
|
76985
77177
|
Cmd.ARG_CALENDARACL: createCalendarACLs,
|
|
77178
|
+
Cmd.ARG_CHATEMOJI: createChatEmoji,
|
|
76986
77179
|
Cmd.ARG_CHATMEMBER: createChatMember,
|
|
76987
77180
|
Cmd.ARG_CHATMESSAGE: createChatMessage,
|
|
76988
77181
|
Cmd.ARG_CHATSPACE: createChatSpace,
|
|
@@ -77099,6 +77292,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77099
77292
|
Cmd.ARG_BACKUPCODE: deleteBackupCodes,
|
|
77100
77293
|
Cmd.ARG_CALENDAR: deleteCalendars,
|
|
77101
77294
|
Cmd.ARG_CALENDARACL: deleteCalendarACLs,
|
|
77295
|
+
Cmd.ARG_CHATEMOJI: deleteChatEmoji,
|
|
77102
77296
|
Cmd.ARG_CHATMEMBER: deleteUpdateChatMember,
|
|
77103
77297
|
Cmd.ARG_CHATMESSAGE: deleteChatMessage,
|
|
77104
77298
|
Cmd.ARG_CHATSPACE: deleteChatSpace,
|
|
@@ -77203,6 +77397,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77203
77397
|
(Act.INFO,
|
|
77204
77398
|
{Cmd.ARG_CALENDAR: infoCalendars,
|
|
77205
77399
|
Cmd.ARG_CALENDARACL: infoCalendarACLs,
|
|
77400
|
+
Cmd.ARG_CHATEMOJI: infoChatEmoji,
|
|
77206
77401
|
Cmd.ARG_CHATEVENT: infoChatEvent,
|
|
77207
77402
|
Cmd.ARG_CHATMEMBER: infoChatMember,
|
|
77208
77403
|
Cmd.ARG_CHATMESSAGE: infoChatMessage,
|
|
@@ -77275,6 +77470,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77275
77470
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
77276
77471
|
Cmd.ARG_CALENDARACL: printShowCalendarACLs,
|
|
77277
77472
|
Cmd.ARG_CALSETTINGS: printShowCalSettings,
|
|
77473
|
+
Cmd.ARG_CHATEMOJI: printShowChatEmojis,
|
|
77278
77474
|
Cmd.ARG_CHATEVENT: printShowChatEvents,
|
|
77279
77475
|
Cmd.ARG_CHATMEMBER: printShowChatMembers,
|
|
77280
77476
|
Cmd.ARG_CHATMESSAGE: printShowChatMessages,
|
|
@@ -77382,6 +77578,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77382
77578
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
77383
77579
|
Cmd.ARG_CALENDARACL: printShowCalendarACLs,
|
|
77384
77580
|
Cmd.ARG_CALSETTINGS: printShowCalSettings,
|
|
77581
|
+
Cmd.ARG_CHATEMOJI: printShowChatEmojis,
|
|
77385
77582
|
Cmd.ARG_CHATEVENT: printShowChatEvents,
|
|
77386
77583
|
Cmd.ARG_CHATMEMBER: printShowChatMembers,
|
|
77387
77584
|
Cmd.ARG_CHATMESSAGE: printShowChatMessages,
|
|
@@ -77598,6 +77795,7 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
77598
77795
|
Cmd.ARG_CLASSIFICATIONLABELPERMISSION: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77599
77796
|
Cmd.ARG_CLASSIFICATIONLABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77600
77797
|
Cmd.ARG_CLASSROOMINVITATIONS: Cmd.ARG_CLASSROOMINVITATION,
|
|
77798
|
+
Cmd.ARG_CHATEMOJIS: Cmd.ARG_CHATEMOJI,
|
|
77601
77799
|
Cmd.ARG_CHATEVENTS: Cmd.ARG_CHATEVENT,
|
|
77602
77800
|
Cmd.ARG_CHATMEMBERS: Cmd.ARG_CHATMEMBER,
|
|
77603
77801
|
Cmd.ARG_CHATMESSAGES: Cmd.ARG_CHATMESSAGE,
|
gam/gamlib/glapi.py
CHANGED
|
@@ -26,6 +26,7 @@ ANALYTICS_ADMIN = 'analyticsadmin'
|
|
|
26
26
|
CALENDAR = 'calendar'
|
|
27
27
|
CBCM = 'cbcm'
|
|
28
28
|
CHAT = 'chat'
|
|
29
|
+
CHAT_CUSTOM_EMOJIS = 'chatcustomemojis'
|
|
29
30
|
CHAT_EVENTS = 'chatevents'
|
|
30
31
|
CHAT_MEMBERSHIPS = 'chatmemberships'
|
|
31
32
|
CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
|
|
@@ -210,6 +211,7 @@ _INFO = {
|
|
|
210
211
|
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
|
211
212
|
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
|
212
213
|
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True},
|
|
214
|
+
CHAT_CUSTOM_EMOJIS: {'name': 'Chat API - Custom Emojis', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
213
215
|
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
214
216
|
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
215
217
|
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
@@ -544,6 +546,10 @@ _SVCACCT_SCOPES = [
|
|
|
544
546
|
'api': CALENDAR,
|
|
545
547
|
'subscopes': READONLY,
|
|
546
548
|
'scope': 'https://www.googleapis.com/auth/calendar'},
|
|
549
|
+
{'name': 'Chat API - Custom Emojis',
|
|
550
|
+
'api': CHAT_CUSTOM_EMOJIS,
|
|
551
|
+
'subscopes': READONLY,
|
|
552
|
+
'scope': 'https://www.googleapis.com/auth/chat.customemojis'},
|
|
547
553
|
{'name': 'Chat API - Memberships',
|
|
548
554
|
'api': CHAT_MEMBERSHIPS,
|
|
549
555
|
'subscopes': READONLY,
|
gam/gamlib/glclargs.py
CHANGED
|
@@ -461,6 +461,8 @@ class GamCLArgs():
|
|
|
461
461
|
ARG_CHANNELSKU = 'channelsku'
|
|
462
462
|
ARG_CHANNELSKUS = 'channelskus'
|
|
463
463
|
ARG_CHAT = 'chat'
|
|
464
|
+
ARG_CHATEMOJI = 'chatemoji'
|
|
465
|
+
ARG_CHATEMOJIS = 'chatemojis'
|
|
464
466
|
ARG_CHATEVENT = 'chatevent'
|
|
465
467
|
ARG_CHATEVENTS = 'chatevents'
|
|
466
468
|
ARG_CHATMEMBER = 'chatmember'
|
|
@@ -843,6 +845,8 @@ class GamCLArgs():
|
|
|
843
845
|
OB_CHARACTER = 'Character'
|
|
844
846
|
OB_CHAR_SET = 'CharacterSet'
|
|
845
847
|
OG_CHAT_ATTACHMENT = 'ChatAttachment'
|
|
848
|
+
OB_CHAT_EMOJI = 'ChatEmoji'
|
|
849
|
+
OB_CHAT_EMOJI_NAME = 'ChatEmojiName'
|
|
846
850
|
OB_CHAT_EVENT = 'ChatEvent'
|
|
847
851
|
OB_CHAT_MEMBER = 'ChatMember'
|
|
848
852
|
OB_CHAT_MESSAGE = 'ChatMessage'
|
|
@@ -930,6 +934,7 @@ class GamCLArgs():
|
|
|
930
934
|
OB_FILE_NAME = 'FileName'
|
|
931
935
|
OB_FILE_NAME_FIELD_NAME = OB_FILE_NAME+'(:'+OB_FIELD_NAME+')+'
|
|
932
936
|
OB_FILE_NAME_OR_URL = 'FileName|URL'
|
|
937
|
+
OB_FILE_NAME_PATTERN = 'FileNamePattern'
|
|
933
938
|
OB_FILE_PATH = 'FilePath'
|
|
934
939
|
OB_FILTER_ID_ENTITY = 'FilterIDEntity'
|
|
935
940
|
OB_FORMAT_LIST = 'FormatList'
|
|
@@ -975,7 +980,6 @@ class GamCLArgs():
|
|
|
975
980
|
OB_PERMISSION_ID_LIST = 'PermissionIDList'
|
|
976
981
|
OB_PERMISSION_ROLE_LIST = 'PermissionRoleList'
|
|
977
982
|
OB_PERMISSION_TYPE_LIST = 'PermissionTypeList'
|
|
978
|
-
OB_PHOTO_FILENAME_PATTERN = 'FilenameNamePattern'
|
|
979
983
|
OB_PRINTER_ID = 'PrinterID'
|
|
980
984
|
OB_PRIVILEGE_LIST = 'PrivilegeList'
|
|
981
985
|
OB_PRODUCT_ID = 'ProductID'
|
gam/gamlib/glentity.py
CHANGED
|
@@ -86,6 +86,7 @@ class GamEntity():
|
|
|
86
86
|
CHANNEL_SKU = 'chsk'
|
|
87
87
|
CHAT_BOT = 'chbo'
|
|
88
88
|
CHAT_ADMIN = 'chad'
|
|
89
|
+
CHAT_EMOJI = 'chem'
|
|
89
90
|
CHAT_EVENT = 'chev'
|
|
90
91
|
CHAT_MANAGER_USER = 'chgu'
|
|
91
92
|
CHAT_MEMBER = 'chme'
|
|
@@ -436,6 +437,7 @@ class GamEntity():
|
|
|
436
437
|
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
|
437
438
|
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
|
438
439
|
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
|
440
|
+
CHAT_EMOJI: ['Chat Emojis', 'Chat Emoji'],
|
|
439
441
|
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
|
440
442
|
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
|
441
443
|
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
gam/gamlib/glmsgs.py
CHANGED
|
@@ -309,6 +309,7 @@ INVALID_ALIAS = 'Invalid Alias'
|
|
|
309
309
|
INVALID_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
|
310
310
|
INVALID_CHARSET = 'Invalid charset "{0}"'
|
|
311
311
|
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
|
312
|
+
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
|
312
313
|
INVALID_ENTITY = 'Invalid {0}, {1}'
|
|
313
314
|
INVALID_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
|
314
315
|
INVALID_FILE_SELECTION_WITH_ADMIN_ACCESS = 'Invalid file selection with adminaccess|asadmin'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=xABU_mlCIWoZhcS_Us3pYFdimJAoGjM80Ac7LWbRWHk,3530030
|
|
2
2
|
gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
|
|
3
3
|
gam/cacerts.pem,sha256=82Ak7btW_2XvocLUvAwPmpx8Chi0oqtZUG1gseLK_t4,50235
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -23,15 +23,15 @@ gam/atom/token_store.py,sha256=7E6Ecvxa86WCvl1pJAhv78jg9OxQv8pMtIUcPhZCq04,3803
|
|
|
23
23
|
gam/atom/url.py,sha256=pxO1TlORxyKQTQ1bkBE1unFzjnv9c8LjJkm-UEORShY,4276
|
|
24
24
|
gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
|
|
25
25
|
gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
|
|
26
|
-
gam/gamlib/glapi.py,sha256=
|
|
26
|
+
gam/gamlib/glapi.py,sha256=ZBoidjXurTtQAi9aSKpQ6UsJgPF7XVv9xJja-s1djfs,34571
|
|
27
27
|
gam/gamlib/glcfg.py,sha256=bNTckxzIM_HruxO2DfYsDbEgqOIz1RX6CbU6XOQQQyg,28296
|
|
28
|
-
gam/gamlib/glclargs.py,sha256=
|
|
29
|
-
gam/gamlib/glentity.py,sha256=
|
|
28
|
+
gam/gamlib/glclargs.py,sha256=Ohe746FOQqMlXlutH-XJ6E1unYNzf_EJhdubnPp3new,42472
|
|
29
|
+
gam/gamlib/glentity.py,sha256=c9-7MAp0HruXEUVq8Nwkllxc4KypFeZRUFkvVzPwrwk,33760
|
|
30
30
|
gam/gamlib/glgapi.py,sha256=cGtvFvvBU3XQJLgtLCjs_V5VBUem_k0b5uUrK21VmeA,39491
|
|
31
31
|
gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
|
|
32
32
|
gam/gamlib/glglobals.py,sha256=J0xcHggVrUBzHJ5GruenKV-qV1zPKcK2qWgAgN3i5Jw,9608
|
|
33
33
|
gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
|
|
34
|
-
gam/gamlib/glmsgs.py,sha256=
|
|
34
|
+
gam/gamlib/glmsgs.py,sha256=uSshtTyemMcJGCnYMy3hIilYHIh-IHFbCLlY2aAyTGM,33798
|
|
35
35
|
gam/gamlib/glskus.py,sha256=Q4UfVnZZxKXpyBc-iQy_uBgbNyIL519jMXHBotrMPio,15241
|
|
36
36
|
gam/gamlib/gluprop.py,sha256=IyPLCyvn7-NHTUenM71YPQPXRZXx6CB5q-GtJ-FYd1c,11461
|
|
37
37
|
gam/gamlib/glverlibs.py,sha256=xoQXiwcE_-HVYKv-VYA8O0mazRsc9mN-_ysj1dAlMyc,992
|
|
@@ -65,8 +65,8 @@ gam/googleapiclient/discovery_cache/base.py,sha256=yCDPtxnbNN-p5_9fzBacC6P3wcUPl
|
|
|
65
65
|
gam/googleapiclient/discovery_cache/file_cache.py,sha256=sim3Mg4HgRYo3vX75jvcKy_aV568EvIrtBfvfbw-044,4774
|
|
66
66
|
gam/iso8601/__init__.py,sha256=Z2PsYbXgAH5a5xzUvgczCboPzqWpm65kRcIngCnhViU,1218
|
|
67
67
|
gam/iso8601/iso8601.py,sha256=Li2FHZ4sBTWuthuQhyCvmvj0j6At8JbGzkSv2fc2RHU,4384
|
|
68
|
-
gam7-7.
|
|
69
|
-
gam7-7.
|
|
70
|
-
gam7-7.
|
|
71
|
-
gam7-7.
|
|
72
|
-
gam7-7.
|
|
68
|
+
gam7-7.10.0.dist-info/METADATA,sha256=PnmZonJYaIBlkz-1eXpMQxptu1HczzPGp0Axpv2_uGM,2978
|
|
69
|
+
gam7-7.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
70
|
+
gam7-7.10.0.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
71
|
+
gam7-7.10.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
72
|
+
gam7-7.10.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|