gam7 7.5.17__py3-none-any.whl → 7.5.19__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 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.05.17'
28
+ __version__ = '7.05.19'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -4088,13 +4088,8 @@ def SetGlobalVariables():
4088
4088
  GC.Values[GC.OUTPUT_DATEFORMAT] = GM.Globals[GM.OUTPUT_DATEFORMAT]
4089
4089
  if not GC.Values[GC.OUTPUT_TIMEFORMAT]:
4090
4090
  GC.Values[GC.OUTPUT_TIMEFORMAT] = GM.Globals[GM.OUTPUT_TIMEFORMAT]
4091
- # Create/set mode for oauth2.txt.lock
4092
- if not GM.Globals[GM.OAUTH2_TXT_LOCK]:
4093
- fileName = f'{GC.Values[GC.OAUTH2_TXT]}.lock'
4094
- if not os.path.isfile(fileName):
4095
- closeFile(openFile(fileName, mode=DEFAULT_FILE_APPEND_MODE))
4096
- os.chmod(fileName, 0o666)
4097
- GM.Globals[GM.OAUTH2_TXT_LOCK] = fileName
4091
+ # Define lockfile: oauth2.txt.lock
4092
+ GM.Globals[GM.OAUTH2_TXT_LOCK] = f'{GC.Values[GC.OAUTH2_TXT]}.lock'
4098
4093
  # Override httplib2 settings
4099
4094
  httplib2.debuglevel = GC.Values[GC.DEBUG_LEVEL]
4100
4095
  # Reset global variables if required
@@ -4113,7 +4108,7 @@ def SetGlobalVariables():
4113
4108
  if checkArgumentPresent(Cmd.MULTIPROCESSEXIT_CMD):
4114
4109
  _setMultiprocessExit()
4115
4110
  # redirect csv <FileName> [multiprocess] [append] [noheader] [charset <CharSet>]
4116
- # [columndelimiter <Character>] [noescapechar [<Boolean>]] [quotechar <Character>]]
4111
+ # [columndelimiter <Character>] [quotechar <Character>]] [noescapechar [<Boolean>]]
4117
4112
  # [sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
4118
4113
  # [todrive <ToDriveAttribute>*]
4119
4114
  # redirect stdout <FileName> [multiprocess] [append]
@@ -14522,7 +14517,13 @@ def _initTagReplacements():
14522
14517
  'fieldsSet': set(), 'fields': '',
14523
14518
  'schemasSet': set(), 'customFieldMask': None}
14524
14519
 
14525
- def _getTagReplacement(tagReplacements, allowSubs):
14520
+ def _getTagReplacement(myarg, tagReplacements, allowSubs):
14521
+ if myarg == 'replace':
14522
+ trregex = None
14523
+ elif myarg == 'replaceregex':
14524
+ trregex = (getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0))
14525
+ else:
14526
+ return False
14526
14527
  matchTag = getString(Cmd.OB_TAG)
14527
14528
  matchReplacement = getString(Cmd.OB_STRING, minLen=0)
14528
14529
  if matchReplacement.startswith('field:'):
@@ -14567,7 +14568,8 @@ def _getTagReplacement(tagReplacements, allowSubs):
14567
14568
  tagReplacements['fieldsSet'].add(field)
14568
14569
  tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
14569
14570
  tagReplacements['tags'][matchTag] = {'field': field, 'subfield': subfield,
14570
- 'matchfield': matchfield, 'matchvalue': matchvalue, 'value': ''}
14571
+ 'matchfield': matchfield, 'matchvalue': matchvalue, 'value': '',
14572
+ 'trregex': trregex}
14571
14573
  if field == 'locations' and subfield == 'buildingName':
14572
14574
  _makeBuildingIdNameMap()
14573
14575
  elif matchReplacement.startswith('schema:'):
@@ -14585,15 +14587,24 @@ def _getTagReplacement(tagReplacements, allowSubs):
14585
14587
  tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
14586
14588
  tagReplacements['schemasSet'].add(schemaName)
14587
14589
  tagReplacements['customFieldMask'] = ','.join(tagReplacements['schemasSet'])
14588
- tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': ''}
14590
+ tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': '',
14591
+ 'trregex': trregex}
14589
14592
  elif ((matchReplacement.find('#') >= 0) and
14590
14593
  (matchReplacement.find('#user#') >= 0) or (matchReplacement.find('#email#') >= 0) or (matchReplacement.find('#username#') >= 0)):
14591
14594
  if not allowSubs:
14592
14595
  usageErrorExit(Msg.USER_SUBS_NOT_ALLOWED_TAG_REPLACEMENT)
14593
14596
  tagReplacements['subs'] = True
14594
- tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': ''}
14597
+ tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': '',
14598
+ 'trregex': trregex}
14595
14599
  else:
14596
- tagReplacements['tags'][matchTag] = {'value': matchReplacement}
14600
+ if trregex is None:
14601
+ tagReplacements['tags'][matchTag] = {'value': matchReplacement}
14602
+ else:
14603
+ try:
14604
+ tagReplacements['tags'][matchTag] = {'value': re.sub(trregex[0], trregex[1], matchReplacement)}
14605
+ except re.error as e:
14606
+ systemErrorExit(ACTION_FAILED_RC, Msg.REGEX_REPLACEMENT_ERROR.format(trregex[1], str(e)))
14607
+ return True
14597
14608
 
14598
14609
  def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None):
14599
14610
  if results is None:
@@ -14675,6 +14686,12 @@ def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None)
14675
14686
  tag['value'] = str(results.get('customSchemas', {}).get(tag['schema'], {}).get(tag['schemafield'], ''))
14676
14687
  elif tag.get('template'):
14677
14688
  tag['value'] = _substituteForUser(tag['template'], user, userName)
14689
+ trregex = tag.get('trregex', None)
14690
+ if trregex is not None:
14691
+ try:
14692
+ tag['value'] = re.sub(trregex[0], trregex[1], tag['value'])
14693
+ except re.error as e:
14694
+ systemErrorExit(ACTION_FAILED_RC, Msg.REGEX_REPLACEMENT_ERROR.format(trregex[1], str(e)))
14678
14695
 
14679
14696
  RTL_PATTERN = re.compile(r'(?s){RTL}.*?{/RTL}')
14680
14697
  RT_PATTERN = re.compile(r'(?s){RT}.*?{/RT}')
@@ -14927,7 +14944,9 @@ def getRecipients():
14927
14944
  # gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
14928
14945
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14929
14946
  # [subject <String>]
14930
- # [<MessageContent>] (replace <Tag> <String>)*
14947
+ # [<MessageContent>]
14948
+ # (replace <Tag> <String>)*
14949
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14931
14950
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14932
14951
  # (embedimage <FileName> <String>)*
14933
14952
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -14935,7 +14954,9 @@ def getRecipients():
14935
14954
  # gam <UserTypeEntity> sendemail recipient <RecipientEntity> [replyto <EmailAddress>]
14936
14955
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14937
14956
  # [subject <String>]
14938
- # [<MessageContent>] (replace <Tag> <String>)*
14957
+ # [<MessageContent>]
14958
+ # (replace <Tag> <String>)*
14959
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14939
14960
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14940
14961
  # (embedimage <FileName> <String>)*
14941
14962
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -14943,7 +14964,9 @@ def getRecipients():
14943
14964
  # gam <UserTypeEntity> sendemail from <EmailAddress> [replyto <EmailAddress>]
14944
14965
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14945
14966
  # [subject <String>]
14946
- # [<MessageContent>] (replace <Tag> <String>)*
14967
+ # [<MessageContent>]
14968
+ # (replace <Tag> <String>)*
14969
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14947
14970
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14948
14971
  # (embedimage <FileName> <String>)*
14949
14972
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -15006,8 +15029,8 @@ def doSendEmail(users=None):
15006
15029
  body['name']['familyName'] = getString(Cmd.OB_STRING, minLen=0, maxLen=60)
15007
15030
  elif myarg in {'password', 'notifypassword'}:
15008
15031
  body['password'] = notify['password'] = getString(Cmd.OB_PASSWORD, maxLen=100)
15009
- elif myarg == 'replace':
15010
- _getTagReplacement(tagReplacements, False)
15032
+ elif _getTagReplacement(myarg, tagReplacements, False):
15033
+ pass
15011
15034
  elif myarg == 'attach':
15012
15035
  attachments.append((getFilename(), getCharSet()))
15013
15036
  elif myarg == 'embedimage':
@@ -39086,7 +39109,10 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
39086
39109
  if 'description' in updateFieldList and 'description' in event:
39087
39110
  body['description'] = event['description']
39088
39111
  for replacement in parameters['replaceDescription']:
39089
- body['description'] = re.sub(replacement[0], replacement[1], body['description'])
39112
+ try:
39113
+ body['description'] = re.sub(replacement[0], replacement[1], body['description'])
39114
+ except re.error as e:
39115
+ systemErrorExit(ACTION_FAILED_RC, Msg.REGEX_REPLACEMENT_ERROR.format(replacement[1], str(e)))
39090
39116
  if 'attendees' in updateFieldList:
39091
39117
  if not parameters['clearAttendees']:
39092
39118
  if 'attendees' in event:
@@ -39410,7 +39436,10 @@ def _showCalendarEvent(primaryEmail, calId, eventEntityType, event, k, kcount, F
39410
39436
  Ind.Increment()
39411
39437
  for field in EVENT_SHOW_ORDER:
39412
39438
  if field in event:
39413
- showJSON(field, event[field], skipObjects, EVENT_TIME_OBJECTS)
39439
+ if field != 'description':
39440
+ showJSON(field, event[field], skipObjects, EVENT_TIME_OBJECTS)
39441
+ else:
39442
+ printKeyValueWithCRsNLs(field, event[field])
39414
39443
  skipObjects.add(field)
39415
39444
  showJSON(None, event, skipObjects)
39416
39445
  Ind.Decrement()
@@ -42837,8 +42866,8 @@ def getUserAttributes(cd, updateCmd, noUid=False):
42837
42866
  notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
42838
42867
  elif PwdOpts.ProcessArgument(myarg, notify, notFoundBody):
42839
42868
  pass
42840
- elif myarg == 'replace':
42841
- _getTagReplacement(tagReplacements, True)
42869
+ elif _getTagReplacement(myarg, tagReplacements, True):
42870
+ pass
42842
42871
  elif myarg == 'admin':
42843
42872
  value = getBoolean()
42844
42873
  if updateCmd or value:
@@ -43255,9 +43284,9 @@ def createUserAddAliases(cd, user, aliasList, i, count):
43255
43284
  # [from <EmailAaddress>]
43256
43285
  # [replyto <EmailAaddress>]
43257
43286
  # [<NotifyMessageContent>]
43258
- # (replace <Tag> <UserReplacement>)*]
43287
+ # (replace <Tag> <UserReplacement>)*
43288
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
43259
43289
  # [logpassword <FileName>] [ignorenullpassword]
43260
- # [verifynotinvitable]
43261
43290
  # [addnumericsuffixonduplicate <Number>]
43262
43291
  def doCreateUser():
43263
43292
  cd = buildGAPIObject(API.DIRECTORY)
@@ -43356,8 +43385,9 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
43356
43385
  # [notifypassword <String>]
43357
43386
  # [from <EmailAaddress>]
43358
43387
  # [replyto <EmailAaddress>]
43359
- # [<NotifyMessageContent>]
43360
- # (replace <Tag> <UserReplacement>)*]
43388
+ # [<NotifyMessageContent>
43389
+ # (replace <Tag> <UserReplacement>)*
43390
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
43361
43391
  # [notifyonupdate [<Boolean>]]
43362
43392
  # [logpassword <FileName>] [ignorenullpassword]
43363
43393
  def updateUsers(entityList):
@@ -57350,7 +57380,10 @@ def writeReturnIdLink(returnIdLink, mimeType, result):
57350
57380
 
57351
57381
  def processFilenameReplacements(name, replacements):
57352
57382
  for replacement in replacements:
57353
- name = re.sub(replacement[0], replacement[1], name)
57383
+ try:
57384
+ name = re.sub(replacement[0], replacement[1], name)
57385
+ except re.error as e:
57386
+ systemErrorExit(ACTION_FAILED_RC, Msg.REGEX_REPLACEMENT_ERROR.format(replacement[1], str(e)))
57354
57387
  return name
57355
57388
 
57356
57389
  def addTimestampToFilename(parameters, body):
@@ -69993,8 +70026,8 @@ def _draftImportInsertMessage(users, operation):
69993
70026
  internalDateSource = 'dateHeader'
69994
70027
  if checkArgumentPresent('emlutf8'):
69995
70028
  emlEncoding = UTF8
69996
- elif myarg == 'replace':
69997
- _getTagReplacement(tagReplacements, True)
70029
+ elif _getTagReplacement(myarg, tagReplacements, True):
70030
+ pass
69998
70031
  elif operation in IMPORT_INSERT and myarg == 'addlabel':
69999
70032
  addLabelNames.append(getString(Cmd.OB_LABEL_NAME, minLen=1))
70000
70033
  elif operation in IMPORT_INSERT and myarg == 'labels':
@@ -70129,7 +70162,9 @@ def _draftImportInsertMessage(users, operation):
70129
70162
  userGmailServiceNotEnabledWarning(user, i, count)
70130
70163
 
70131
70164
  # gam <UserTypeEntity> draft message
70132
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70165
+ # <MessageContent>
70166
+ # (replace <Tag> <UserReplacement>)*
70167
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70133
70168
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70134
70169
  # (attach <FileName> [charset <CharSet>])*
70135
70170
  # (embedimage <FileName> <String>)*
@@ -70137,7 +70172,9 @@ def draftMessage(users):
70137
70172
  _draftImportInsertMessage(users, 'draft')
70138
70173
 
70139
70174
  # gam <UserTypeEntity> import message
70140
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70175
+ # <MessageContent>
70176
+ # (replace <Tag> <UserReplacement>)*
70177
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70141
70178
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70142
70179
  # (addlabel <LabelName>)* [labels <LabelNameList>]
70143
70180
  # (attach <FileName> [charset <CharSet>])*
@@ -70147,7 +70184,9 @@ def importMessage(users):
70147
70184
  _draftImportInsertMessage(users, 'import')
70148
70185
 
70149
70186
  # gam <UserTypeEntity> insert message
70150
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70187
+ # <MessageContent>
70188
+ # (replace <Tag> <UserReplacement>)*
70189
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70151
70190
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70152
70191
  # (addlabel <LabelName>)* [labels <LabelNameList>]
70153
70192
  # (attach <FileName> [charset <CharSet>])*
@@ -72434,8 +72473,8 @@ def _processSendAs(user, i, count, entityType, emailAddress, j, jcount, gmail, f
72434
72473
  return userDefined
72435
72474
 
72436
72475
  def getSendAsAttributes(myarg, body, tagReplacements):
72437
- if myarg == 'replace':
72438
- _getTagReplacement(tagReplacements, True)
72476
+ if _getTagReplacement(myarg, tagReplacements, True):
72477
+ pass
72439
72478
  elif myarg == 'name':
72440
72479
  body['displayName'] = getString(Cmd.OB_NAME, minLen=0)
72441
72480
  elif myarg == 'replyto':
@@ -72454,13 +72493,17 @@ SMTPMSA_SECURITY_MODES = ['none', 'ssl', 'starttls']
72454
72493
  SMTPMSA_REQUIRED_FIELDS = ['host', 'port', 'username', 'password']
72455
72494
 
72456
72495
  # gam <UserTypeEntity> [create] sendas <EmailAddress> [name] <String>
72457
- # [<SendAsContent> (replace <Tag> <UserReplacement>)*]
72496
+ # [<SendAsContent>
72497
+ # (replace <Tag> <UserReplacement>)*
72498
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
72458
72499
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
72459
72500
  # [smtpmsa.host <SMTPHostName> smtpmsa.port 25|465|587
72460
72501
  # smtpmsa.username <UserName> smtpmsa.password <Password>
72461
72502
  # [smtpmsa.securitymode none|ssl|starttls]]
72462
72503
  # gam <UserTypeEntity> update sendas <EmailAddress> [name <String>]
72463
- # [<SendAsContent> (replace <Tag> <UserReplacement>)*]
72504
+ # [<SendAsContent>
72505
+ # (replace <Tag> <UserReplacement>)*
72506
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
72464
72507
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
72465
72508
  def createUpdateSendAs(users):
72466
72509
  updateCmd = Act.Get() == Act.UPDATE
@@ -73297,6 +73340,7 @@ def printShowCSEKeyPairs(users):
73297
73340
  # gam <UserTypeEntity> signature|sig
73298
73341
  # <SignatureContent>
73299
73342
  # (replace <Tag> <String>)*
73343
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
73300
73344
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
73301
73345
  # [name <String>]
73302
73346
  # [primary]
@@ -73390,7 +73434,9 @@ def _showVacation(user, i, count, result, showDisabled, sigReplyFormat):
73390
73434
  Ind.Decrement()
73391
73435
 
73392
73436
  # gam <UserTypeEntity> vacation [<Boolean>] [subject <String>]
73393
- # [<VacationMessageContent> (replace <Tag> <UserReplacement>)*]
73437
+ # [<VacationMessageContent>
73438
+ # (replace <Tag> <UserReplacement>)*
73439
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
73394
73440
  # [html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
73395
73441
  # [start|startdate <Date>|Started] [end|enddate <Date>|NotSpecified]
73396
73442
  def setVacation(users):
@@ -73408,8 +73454,8 @@ def setVacation(users):
73408
73454
  message, _, html = getStringOrFile(myarg)
73409
73455
  if html:
73410
73456
  responseBodyType = 'responseBodyHtml'
73411
- elif myarg == 'replace':
73412
- _getTagReplacement(tagReplacements, True)
73457
+ elif _getTagReplacement(myarg, tagReplacements, True):
73458
+ pass
73413
73459
  elif myarg == 'html':
73414
73460
  if getBoolean():
73415
73461
  responseBodyType = 'responseBodyHtml'
gam/gamlib/glmsgs.py CHANGED
@@ -465,6 +465,7 @@ REASON_ONLY_VALID_WITH_CONTENTRESTRICTIONS_READONLY_TRUE = 'reason only valid wi
465
465
  REAUTHENTICATION_IS_NEEDED = 'Reauthentication is needed, please run\n\ngam oauth create'
466
466
  RECOMMEND_RUNNING_GAM_ROTATE_SAKEY = 'Recommend running "gam rotate sakey" to get a new key\n'
467
467
  REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because acknowledge_device_touch_requirement not specified.\nDeprovisioning a device means the device will have to be physically wiped and re-enrolled to be managed by your domain again.\nThis requires physical access to the device and is very time consuming to perform for each device.\nPlease add "acknowledge_device_touch_requirement" to the GAM command if you understand this and wish to proceed with the deprovision.\nPlease also be aware that deprovisioning can have an effect on your device license count.\nSee https://support.google.com/chrome/a/answer/3523633 for full details.'
468
+ REGEX_REPLACEMENT_ERROR = 'Regular expression replacement string "{0}" error: {1}'
468
469
  REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
469
470
  REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
470
471
  REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.5.17
3
+ Version: 7.5.19
4
4
  Summary: CLI tool to manage Google Workspace
5
5
  Project-URL: Homepage, https://github.com/GAM-team/GAM
6
6
  Project-URL: Issues, https://github.com/GAM-team/GAM/issues
@@ -1,4 +1,4 @@
1
- gam/__init__.py,sha256=tA4Z9D_gcIqT7nHkXHoNr4GdGye0q2-M4KoAqHwMI7g,3483148
1
+ gam/__init__.py,sha256=XuZ_5ceIxgqn-VYNSrK4KU2p5hIo4P7Mog_krW4HT2k,3485098
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
@@ -31,7 +31,7 @@ gam/gamlib/glgapi.py,sha256=49PPbxiW6EpPE4E8fAlLMx1mSMcQra1zwi-CSXPa7rk,38473
31
31
  gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
32
32
  gam/gamlib/glglobals.py,sha256=Y73xM1RNhIbtcqnMv1gcZF3wDWOeLWW-7SvoQyWw6tA,9659
33
33
  gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
34
- gam/gamlib/glmsgs.py,sha256=fUEwnzJsyThJDgrqslhXFLp7Ah_5e3VuyGNWAJKRi5o,33260
34
+ gam/gamlib/glmsgs.py,sha256=PSXjYGbGni2UyL7tK1e9U721UC-KKoK1lL1TNqIH8YY,33343
35
35
  gam/gamlib/glskus.py,sha256=Gi0jjrSGwhCD4SvtqQfuAXwtEiL2zU4c8qXdxO1yY9k,15058
36
36
  gam/gamlib/gluprop.py,sha256=IyPLCyvn7-NHTUenM71YPQPXRZXx6CB5q-GtJ-FYd1c,11461
37
37
  gam/gamlib/glverlibs.py,sha256=XXYhmjOVti78JTy7NNr4ShIwiOX7LrfrmFSlqSWixrE,1077
@@ -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.5.17.dist-info/METADATA,sha256=LFvbdN1WEH57N7LgJ6pniGv1a82HW893OR-CZoR-RkI,2889
69
- gam7-7.5.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- gam7-7.5.17.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
- gam7-7.5.17.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
- gam7-7.5.17.dist-info/RECORD,,
68
+ gam7-7.5.19.dist-info/METADATA,sha256=H_FrSYW592jWsjzAy0w16hDLsT8WWc6ttJJF0Vz6NX4,2889
69
+ gam7-7.5.19.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
+ gam7-7.5.19.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
+ gam7-7.5.19.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ gam7-7.5.19.dist-info/RECORD,,
File without changes