gam7 7.9.6__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 +210 -11
- 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.6.dist-info → gam7-7.10.0.dist-info}/METADATA +1 -1
- {gam7-7.9.6.dist-info → gam7-7.10.0.dist-info}/RECORD +10 -10
- {gam7-7.9.6.dist-info → gam7-7.10.0.dist-info}/WHEEL +0 -0
- {gam7-7.9.6.dist-info → gam7-7.10.0.dist-info}/entry_points.txt +0 -0
- {gam7-7.9.6.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')})
|
|
@@ -57618,9 +57810,10 @@ FILETREE_FIELDS_CHOICE_MAP = {
|
|
|
57618
57810
|
'parents': 'parents',
|
|
57619
57811
|
'size': 'size',
|
|
57620
57812
|
'trashed': 'trashed',
|
|
57813
|
+
'webviewlink': 'webViewLink',
|
|
57621
57814
|
}
|
|
57622
57815
|
|
|
57623
|
-
FILETREE_FIELDS_PRINT_ORDER = ['id', 'parents', 'owners', 'mimeType', 'size', 'explicitlyTrashed', 'trashed']
|
|
57816
|
+
FILETREE_FIELDS_PRINT_ORDER = ['id', 'parents', 'owners', 'mimeType', 'size', 'explicitlyTrashed', 'trashed', 'webViewLink']
|
|
57624
57817
|
|
|
57625
57818
|
# gam <UserTypeEntity> print filetree [todrive <ToDriveAttribute>*]
|
|
57626
57819
|
# [select <DriveFileEntity> [selectsubquery <QueryDriveFile>] [depth <Number>]]
|
|
@@ -57785,7 +57978,7 @@ def printShowFileTree(users):
|
|
|
57785
57978
|
else:
|
|
57786
57979
|
unknownArgumentExit()
|
|
57787
57980
|
fieldsList = ['driveId', 'id', 'name', 'parents', 'mimeType', 'ownedByMe', 'owners(emailAddress)',
|
|
57788
|
-
'shared', sizeField, 'explicitlyTrashed', 'trashed']
|
|
57981
|
+
'shared', sizeField, 'explicitlyTrashed', 'trashed', 'webViewLink']
|
|
57789
57982
|
if csvPF:
|
|
57790
57983
|
if not GC.Values[GC.DRIVE_V3_NATIVE_NAMES]:
|
|
57791
57984
|
fileNameTitle = 'title'
|
|
@@ -67870,7 +68063,7 @@ def updatePhoto(users):
|
|
|
67870
68063
|
baseFileIdEntity = drive = owner = None
|
|
67871
68064
|
sourceFolder = os.getcwd()
|
|
67872
68065
|
if Cmd.NumArgumentsRemaining() == 1:
|
|
67873
|
-
filenamePattern = getString(Cmd.
|
|
68066
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67874
68067
|
else:
|
|
67875
68068
|
filenamePattern = '#email#.jpg'
|
|
67876
68069
|
while Cmd.ArgumentsRemaining():
|
|
@@ -67882,7 +68075,7 @@ def updatePhoto(users):
|
|
|
67882
68075
|
if not os.path.isdir(sourceFolder):
|
|
67883
68076
|
entityDoesNotExistExit(Ent.DIRECTORY, sourceFolder)
|
|
67884
68077
|
elif myarg == 'filename':
|
|
67885
|
-
filenamePattern = getString(Cmd.
|
|
68078
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67886
68079
|
elif myarg == 'gphoto':
|
|
67887
68080
|
owner, drive = buildGAPIServiceObject(API.DRIVE3, getEmailAddress())
|
|
67888
68081
|
if not drive:
|
|
@@ -67983,7 +68176,7 @@ def getPhoto(users, profileMode):
|
|
|
67983
68176
|
if not os.path.isdir(targetFolder):
|
|
67984
68177
|
os.makedirs(targetFolder)
|
|
67985
68178
|
elif myarg == 'filename':
|
|
67986
|
-
filenamePattern = getString(Cmd.
|
|
68179
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67987
68180
|
elif myarg == 'nofile':
|
|
67988
68181
|
writeFileData = False
|
|
67989
68182
|
elif myarg == 'noshow':
|
|
@@ -76982,6 +77175,7 @@ USER_ADD_CREATE_FUNCTIONS = {
|
|
|
76982
77175
|
Cmd.ARG_CALENDAR: addCreateCalendars,
|
|
76983
77176
|
Cmd.ARG_GROUP: addUserToGroups,
|
|
76984
77177
|
Cmd.ARG_CALENDARACL: createCalendarACLs,
|
|
77178
|
+
Cmd.ARG_CHATEMOJI: createChatEmoji,
|
|
76985
77179
|
Cmd.ARG_CHATMEMBER: createChatMember,
|
|
76986
77180
|
Cmd.ARG_CHATMESSAGE: createChatMessage,
|
|
76987
77181
|
Cmd.ARG_CHATSPACE: createChatSpace,
|
|
@@ -77098,6 +77292,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77098
77292
|
Cmd.ARG_BACKUPCODE: deleteBackupCodes,
|
|
77099
77293
|
Cmd.ARG_CALENDAR: deleteCalendars,
|
|
77100
77294
|
Cmd.ARG_CALENDARACL: deleteCalendarACLs,
|
|
77295
|
+
Cmd.ARG_CHATEMOJI: deleteChatEmoji,
|
|
77101
77296
|
Cmd.ARG_CHATMEMBER: deleteUpdateChatMember,
|
|
77102
77297
|
Cmd.ARG_CHATMESSAGE: deleteChatMessage,
|
|
77103
77298
|
Cmd.ARG_CHATSPACE: deleteChatSpace,
|
|
@@ -77202,6 +77397,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77202
77397
|
(Act.INFO,
|
|
77203
77398
|
{Cmd.ARG_CALENDAR: infoCalendars,
|
|
77204
77399
|
Cmd.ARG_CALENDARACL: infoCalendarACLs,
|
|
77400
|
+
Cmd.ARG_CHATEMOJI: infoChatEmoji,
|
|
77205
77401
|
Cmd.ARG_CHATEVENT: infoChatEvent,
|
|
77206
77402
|
Cmd.ARG_CHATMEMBER: infoChatMember,
|
|
77207
77403
|
Cmd.ARG_CHATMESSAGE: infoChatMessage,
|
|
@@ -77274,6 +77470,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77274
77470
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
77275
77471
|
Cmd.ARG_CALENDARACL: printShowCalendarACLs,
|
|
77276
77472
|
Cmd.ARG_CALSETTINGS: printShowCalSettings,
|
|
77473
|
+
Cmd.ARG_CHATEMOJI: printShowChatEmojis,
|
|
77277
77474
|
Cmd.ARG_CHATEVENT: printShowChatEvents,
|
|
77278
77475
|
Cmd.ARG_CHATMEMBER: printShowChatMembers,
|
|
77279
77476
|
Cmd.ARG_CHATMESSAGE: printShowChatMessages,
|
|
@@ -77381,6 +77578,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77381
77578
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
77382
77579
|
Cmd.ARG_CALENDARACL: printShowCalendarACLs,
|
|
77383
77580
|
Cmd.ARG_CALSETTINGS: printShowCalSettings,
|
|
77581
|
+
Cmd.ARG_CHATEMOJI: printShowChatEmojis,
|
|
77384
77582
|
Cmd.ARG_CHATEVENT: printShowChatEvents,
|
|
77385
77583
|
Cmd.ARG_CHATMEMBER: printShowChatMembers,
|
|
77386
77584
|
Cmd.ARG_CHATMESSAGE: printShowChatMessages,
|
|
@@ -77597,6 +77795,7 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
77597
77795
|
Cmd.ARG_CLASSIFICATIONLABELPERMISSION: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77598
77796
|
Cmd.ARG_CLASSIFICATIONLABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77599
77797
|
Cmd.ARG_CLASSROOMINVITATIONS: Cmd.ARG_CLASSROOMINVITATION,
|
|
77798
|
+
Cmd.ARG_CHATEMOJIS: Cmd.ARG_CHATEMOJI,
|
|
77600
77799
|
Cmd.ARG_CHATEVENTS: Cmd.ARG_CHATEVENT,
|
|
77601
77800
|
Cmd.ARG_CHATMEMBERS: Cmd.ARG_CHATMEMBER,
|
|
77602
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
|