gam7 7.5.18__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.18'
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
@@ -14517,7 +14517,13 @@ def _initTagReplacements():
14517
14517
  'fieldsSet': set(), 'fields': '',
14518
14518
  'schemasSet': set(), 'customFieldMask': None}
14519
14519
 
14520
- 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
14521
14527
  matchTag = getString(Cmd.OB_TAG)
14522
14528
  matchReplacement = getString(Cmd.OB_STRING, minLen=0)
14523
14529
  if matchReplacement.startswith('field:'):
@@ -14562,7 +14568,8 @@ def _getTagReplacement(tagReplacements, allowSubs):
14562
14568
  tagReplacements['fieldsSet'].add(field)
14563
14569
  tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
14564
14570
  tagReplacements['tags'][matchTag] = {'field': field, 'subfield': subfield,
14565
- 'matchfield': matchfield, 'matchvalue': matchvalue, 'value': ''}
14571
+ 'matchfield': matchfield, 'matchvalue': matchvalue, 'value': '',
14572
+ 'trregex': trregex}
14566
14573
  if field == 'locations' and subfield == 'buildingName':
14567
14574
  _makeBuildingIdNameMap()
14568
14575
  elif matchReplacement.startswith('schema:'):
@@ -14580,15 +14587,24 @@ def _getTagReplacement(tagReplacements, allowSubs):
14580
14587
  tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
14581
14588
  tagReplacements['schemasSet'].add(schemaName)
14582
14589
  tagReplacements['customFieldMask'] = ','.join(tagReplacements['schemasSet'])
14583
- tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': ''}
14590
+ tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': '',
14591
+ 'trregex': trregex}
14584
14592
  elif ((matchReplacement.find('#') >= 0) and
14585
14593
  (matchReplacement.find('#user#') >= 0) or (matchReplacement.find('#email#') >= 0) or (matchReplacement.find('#username#') >= 0)):
14586
14594
  if not allowSubs:
14587
14595
  usageErrorExit(Msg.USER_SUBS_NOT_ALLOWED_TAG_REPLACEMENT)
14588
14596
  tagReplacements['subs'] = True
14589
- tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': ''}
14597
+ tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': '',
14598
+ 'trregex': trregex}
14590
14599
  else:
14591
- 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
14592
14608
 
14593
14609
  def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None):
14594
14610
  if results is None:
@@ -14670,6 +14686,12 @@ def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None)
14670
14686
  tag['value'] = str(results.get('customSchemas', {}).get(tag['schema'], {}).get(tag['schemafield'], ''))
14671
14687
  elif tag.get('template'):
14672
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)))
14673
14695
 
14674
14696
  RTL_PATTERN = re.compile(r'(?s){RTL}.*?{/RTL}')
14675
14697
  RT_PATTERN = re.compile(r'(?s){RT}.*?{/RT}')
@@ -14922,7 +14944,9 @@ def getRecipients():
14922
14944
  # gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
14923
14945
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14924
14946
  # [subject <String>]
14925
- # [<MessageContent>] (replace <Tag> <String>)*
14947
+ # [<MessageContent>]
14948
+ # (replace <Tag> <String>)*
14949
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14926
14950
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14927
14951
  # (embedimage <FileName> <String>)*
14928
14952
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -14930,7 +14954,9 @@ def getRecipients():
14930
14954
  # gam <UserTypeEntity> sendemail recipient <RecipientEntity> [replyto <EmailAddress>]
14931
14955
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14932
14956
  # [subject <String>]
14933
- # [<MessageContent>] (replace <Tag> <String>)*
14957
+ # [<MessageContent>]
14958
+ # (replace <Tag> <String>)*
14959
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14934
14960
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14935
14961
  # (embedimage <FileName> <String>)*
14936
14962
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -14938,7 +14964,9 @@ def getRecipients():
14938
14964
  # gam <UserTypeEntity> sendemail from <EmailAddress> [replyto <EmailAddress>]
14939
14965
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14940
14966
  # [subject <String>]
14941
- # [<MessageContent>] (replace <Tag> <String>)*
14967
+ # [<MessageContent>]
14968
+ # (replace <Tag> <String>)*
14969
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14942
14970
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14943
14971
  # (embedimage <FileName> <String>)*
14944
14972
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -15001,8 +15029,8 @@ def doSendEmail(users=None):
15001
15029
  body['name']['familyName'] = getString(Cmd.OB_STRING, minLen=0, maxLen=60)
15002
15030
  elif myarg in {'password', 'notifypassword'}:
15003
15031
  body['password'] = notify['password'] = getString(Cmd.OB_PASSWORD, maxLen=100)
15004
- elif myarg == 'replace':
15005
- _getTagReplacement(tagReplacements, False)
15032
+ elif _getTagReplacement(myarg, tagReplacements, False):
15033
+ pass
15006
15034
  elif myarg == 'attach':
15007
15035
  attachments.append((getFilename(), getCharSet()))
15008
15036
  elif myarg == 'embedimage':
@@ -39081,7 +39109,10 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
39081
39109
  if 'description' in updateFieldList and 'description' in event:
39082
39110
  body['description'] = event['description']
39083
39111
  for replacement in parameters['replaceDescription']:
39084
- 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)))
39085
39116
  if 'attendees' in updateFieldList:
39086
39117
  if not parameters['clearAttendees']:
39087
39118
  if 'attendees' in event:
@@ -42835,8 +42866,8 @@ def getUserAttributes(cd, updateCmd, noUid=False):
42835
42866
  notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
42836
42867
  elif PwdOpts.ProcessArgument(myarg, notify, notFoundBody):
42837
42868
  pass
42838
- elif myarg == 'replace':
42839
- _getTagReplacement(tagReplacements, True)
42869
+ elif _getTagReplacement(myarg, tagReplacements, True):
42870
+ pass
42840
42871
  elif myarg == 'admin':
42841
42872
  value = getBoolean()
42842
42873
  if updateCmd or value:
@@ -43253,9 +43284,9 @@ def createUserAddAliases(cd, user, aliasList, i, count):
43253
43284
  # [from <EmailAaddress>]
43254
43285
  # [replyto <EmailAaddress>]
43255
43286
  # [<NotifyMessageContent>]
43256
- # (replace <Tag> <UserReplacement>)*]
43287
+ # (replace <Tag> <UserReplacement>)*
43288
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
43257
43289
  # [logpassword <FileName>] [ignorenullpassword]
43258
- # [verifynotinvitable]
43259
43290
  # [addnumericsuffixonduplicate <Number>]
43260
43291
  def doCreateUser():
43261
43292
  cd = buildGAPIObject(API.DIRECTORY)
@@ -43354,8 +43385,9 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
43354
43385
  # [notifypassword <String>]
43355
43386
  # [from <EmailAaddress>]
43356
43387
  # [replyto <EmailAaddress>]
43357
- # [<NotifyMessageContent>]
43358
- # (replace <Tag> <UserReplacement>)*]
43388
+ # [<NotifyMessageContent>
43389
+ # (replace <Tag> <UserReplacement>)*
43390
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
43359
43391
  # [notifyonupdate [<Boolean>]]
43360
43392
  # [logpassword <FileName>] [ignorenullpassword]
43361
43393
  def updateUsers(entityList):
@@ -57348,7 +57380,10 @@ def writeReturnIdLink(returnIdLink, mimeType, result):
57348
57380
 
57349
57381
  def processFilenameReplacements(name, replacements):
57350
57382
  for replacement in replacements:
57351
- 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)))
57352
57387
  return name
57353
57388
 
57354
57389
  def addTimestampToFilename(parameters, body):
@@ -69991,8 +70026,8 @@ def _draftImportInsertMessage(users, operation):
69991
70026
  internalDateSource = 'dateHeader'
69992
70027
  if checkArgumentPresent('emlutf8'):
69993
70028
  emlEncoding = UTF8
69994
- elif myarg == 'replace':
69995
- _getTagReplacement(tagReplacements, True)
70029
+ elif _getTagReplacement(myarg, tagReplacements, True):
70030
+ pass
69996
70031
  elif operation in IMPORT_INSERT and myarg == 'addlabel':
69997
70032
  addLabelNames.append(getString(Cmd.OB_LABEL_NAME, minLen=1))
69998
70033
  elif operation in IMPORT_INSERT and myarg == 'labels':
@@ -70127,7 +70162,9 @@ def _draftImportInsertMessage(users, operation):
70127
70162
  userGmailServiceNotEnabledWarning(user, i, count)
70128
70163
 
70129
70164
  # gam <UserTypeEntity> draft message
70130
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70165
+ # <MessageContent>
70166
+ # (replace <Tag> <UserReplacement>)*
70167
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70131
70168
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70132
70169
  # (attach <FileName> [charset <CharSet>])*
70133
70170
  # (embedimage <FileName> <String>)*
@@ -70135,7 +70172,9 @@ def draftMessage(users):
70135
70172
  _draftImportInsertMessage(users, 'draft')
70136
70173
 
70137
70174
  # gam <UserTypeEntity> import message
70138
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70175
+ # <MessageContent>
70176
+ # (replace <Tag> <UserReplacement>)*
70177
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70139
70178
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70140
70179
  # (addlabel <LabelName>)* [labels <LabelNameList>]
70141
70180
  # (attach <FileName> [charset <CharSet>])*
@@ -70145,7 +70184,9 @@ def importMessage(users):
70145
70184
  _draftImportInsertMessage(users, 'import')
70146
70185
 
70147
70186
  # gam <UserTypeEntity> insert message
70148
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70187
+ # <MessageContent>
70188
+ # (replace <Tag> <UserReplacement>)*
70189
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70149
70190
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70150
70191
  # (addlabel <LabelName>)* [labels <LabelNameList>]
70151
70192
  # (attach <FileName> [charset <CharSet>])*
@@ -72432,8 +72473,8 @@ def _processSendAs(user, i, count, entityType, emailAddress, j, jcount, gmail, f
72432
72473
  return userDefined
72433
72474
 
72434
72475
  def getSendAsAttributes(myarg, body, tagReplacements):
72435
- if myarg == 'replace':
72436
- _getTagReplacement(tagReplacements, True)
72476
+ if _getTagReplacement(myarg, tagReplacements, True):
72477
+ pass
72437
72478
  elif myarg == 'name':
72438
72479
  body['displayName'] = getString(Cmd.OB_NAME, minLen=0)
72439
72480
  elif myarg == 'replyto':
@@ -72452,13 +72493,17 @@ SMTPMSA_SECURITY_MODES = ['none', 'ssl', 'starttls']
72452
72493
  SMTPMSA_REQUIRED_FIELDS = ['host', 'port', 'username', 'password']
72453
72494
 
72454
72495
  # gam <UserTypeEntity> [create] sendas <EmailAddress> [name] <String>
72455
- # [<SendAsContent> (replace <Tag> <UserReplacement>)*]
72496
+ # [<SendAsContent>
72497
+ # (replace <Tag> <UserReplacement>)*
72498
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
72456
72499
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
72457
72500
  # [smtpmsa.host <SMTPHostName> smtpmsa.port 25|465|587
72458
72501
  # smtpmsa.username <UserName> smtpmsa.password <Password>
72459
72502
  # [smtpmsa.securitymode none|ssl|starttls]]
72460
72503
  # gam <UserTypeEntity> update sendas <EmailAddress> [name <String>]
72461
- # [<SendAsContent> (replace <Tag> <UserReplacement>)*]
72504
+ # [<SendAsContent>
72505
+ # (replace <Tag> <UserReplacement>)*
72506
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
72462
72507
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
72463
72508
  def createUpdateSendAs(users):
72464
72509
  updateCmd = Act.Get() == Act.UPDATE
@@ -73295,6 +73340,7 @@ def printShowCSEKeyPairs(users):
73295
73340
  # gam <UserTypeEntity> signature|sig
73296
73341
  # <SignatureContent>
73297
73342
  # (replace <Tag> <String>)*
73343
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
73298
73344
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
73299
73345
  # [name <String>]
73300
73346
  # [primary]
@@ -73388,7 +73434,9 @@ def _showVacation(user, i, count, result, showDisabled, sigReplyFormat):
73388
73434
  Ind.Decrement()
73389
73435
 
73390
73436
  # gam <UserTypeEntity> vacation [<Boolean>] [subject <String>]
73391
- # [<VacationMessageContent> (replace <Tag> <UserReplacement>)*]
73437
+ # [<VacationMessageContent>
73438
+ # (replace <Tag> <UserReplacement>)*
73439
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
73392
73440
  # [html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
73393
73441
  # [start|startdate <Date>|Started] [end|enddate <Date>|NotSpecified]
73394
73442
  def setVacation(users):
@@ -73406,8 +73454,8 @@ def setVacation(users):
73406
73454
  message, _, html = getStringOrFile(myarg)
73407
73455
  if html:
73408
73456
  responseBodyType = 'responseBodyHtml'
73409
- elif myarg == 'replace':
73410
- _getTagReplacement(tagReplacements, True)
73457
+ elif _getTagReplacement(myarg, tagReplacements, True):
73458
+ pass
73411
73459
  elif myarg == 'html':
73412
73460
  if getBoolean():
73413
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.18
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=8HIbFsnREVaZVPbM-7x4-BnzzGPjVsyMXa_KAGpcI04,3483042
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.18.dist-info/METADATA,sha256=eE2uVDi0Mi4uYJO1W3pgqk4eFw6IORpuQc2oo2TasnU,2889
69
- gam7-7.5.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- gam7-7.5.18.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
- gam7-7.5.18.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
- gam7-7.5.18.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