gam7 7.5.18__py3-none-any.whl → 7.5.20__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.20'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -1723,6 +1723,16 @@ def getREPattern(flags=0):
1723
1723
  return validateREPattern(patstr, flags)
1724
1724
  missingArgumentExit(Cmd.OB_RE_PATTERN)
1725
1725
 
1726
+ def getREPatternReplacement(flags=0):
1727
+ pattern = getREPattern(flags)
1728
+ replacement = getString(Cmd.OB_STRING, minLen=0)
1729
+ try:
1730
+ re.sub(pattern, replacement, '')
1731
+ return (pattern, replacement)
1732
+ except re.error as e:
1733
+ Cmd.Backup()
1734
+ usageErrorExit(f'{Cmd.OB_RE_REPLACEMENT} {Msg.ERROR}: {e}')
1735
+
1726
1736
  def getSheetEntity(allowBlankSheet):
1727
1737
  if Cmd.ArgumentsRemaining():
1728
1738
  sheet = Cmd.Current()
@@ -14517,7 +14527,13 @@ def _initTagReplacements():
14517
14527
  'fieldsSet': set(), 'fields': '',
14518
14528
  'schemasSet': set(), 'customFieldMask': None}
14519
14529
 
14520
- def _getTagReplacement(tagReplacements, allowSubs):
14530
+ def _getTagReplacement(myarg, tagReplacements, allowSubs):
14531
+ if myarg == 'replace':
14532
+ trregex = None
14533
+ elif myarg == 'replaceregex':
14534
+ trregex = getREPatternReplacement(re.IGNORECASE)
14535
+ else:
14536
+ return False
14521
14537
  matchTag = getString(Cmd.OB_TAG)
14522
14538
  matchReplacement = getString(Cmd.OB_STRING, minLen=0)
14523
14539
  if matchReplacement.startswith('field:'):
@@ -14562,7 +14578,8 @@ def _getTagReplacement(tagReplacements, allowSubs):
14562
14578
  tagReplacements['fieldsSet'].add(field)
14563
14579
  tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
14564
14580
  tagReplacements['tags'][matchTag] = {'field': field, 'subfield': subfield,
14565
- 'matchfield': matchfield, 'matchvalue': matchvalue, 'value': ''}
14581
+ 'matchfield': matchfield, 'matchvalue': matchvalue, 'value': '',
14582
+ 'trregex': trregex}
14566
14583
  if field == 'locations' and subfield == 'buildingName':
14567
14584
  _makeBuildingIdNameMap()
14568
14585
  elif matchReplacement.startswith('schema:'):
@@ -14580,15 +14597,21 @@ def _getTagReplacement(tagReplacements, allowSubs):
14580
14597
  tagReplacements['fields'] = ','.join(tagReplacements['fieldsSet'])
14581
14598
  tagReplacements['schemasSet'].add(schemaName)
14582
14599
  tagReplacements['customFieldMask'] = ','.join(tagReplacements['schemasSet'])
14583
- tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': ''}
14600
+ tagReplacements['tags'][matchTag] = {'schema': schemaName, 'schemafield': schemaField, 'value': '',
14601
+ 'trregex': trregex}
14584
14602
  elif ((matchReplacement.find('#') >= 0) and
14585
14603
  (matchReplacement.find('#user#') >= 0) or (matchReplacement.find('#email#') >= 0) or (matchReplacement.find('#username#') >= 0)):
14586
14604
  if not allowSubs:
14587
14605
  usageErrorExit(Msg.USER_SUBS_NOT_ALLOWED_TAG_REPLACEMENT)
14588
14606
  tagReplacements['subs'] = True
14589
- tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': ''}
14607
+ tagReplacements['tags'][matchTag] = {'template': matchReplacement, 'value': '',
14608
+ 'trregex': trregex}
14590
14609
  else:
14591
- tagReplacements['tags'][matchTag] = {'value': matchReplacement}
14610
+ if trregex is None:
14611
+ tagReplacements['tags'][matchTag] = {'value': matchReplacement}
14612
+ else:
14613
+ tagReplacements['tags'][matchTag] = {'value': re.sub(trregex[0], trregex[1], matchReplacement)}
14614
+ return True
14592
14615
 
14593
14616
  def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None):
14594
14617
  if results is None:
@@ -14670,6 +14693,9 @@ def _getTagReplacementFieldValues(user, i, count, tagReplacements, results=None)
14670
14693
  tag['value'] = str(results.get('customSchemas', {}).get(tag['schema'], {}).get(tag['schemafield'], ''))
14671
14694
  elif tag.get('template'):
14672
14695
  tag['value'] = _substituteForUser(tag['template'], user, userName)
14696
+ trregex = tag.get('trregex', None)
14697
+ if trregex is not None:
14698
+ tag['value'] = re.sub(trregex[0], trregex[1], tag['value'])
14673
14699
 
14674
14700
  RTL_PATTERN = re.compile(r'(?s){RTL}.*?{/RTL}')
14675
14701
  RT_PATTERN = re.compile(r'(?s){RT}.*?{/RT}')
@@ -14922,7 +14948,9 @@ def getRecipients():
14922
14948
  # gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
14923
14949
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14924
14950
  # [subject <String>]
14925
- # [<MessageContent>] (replace <Tag> <String>)*
14951
+ # [<MessageContent>]
14952
+ # (replace <Tag> <String>)*
14953
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14926
14954
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14927
14955
  # (embedimage <FileName> <String>)*
14928
14956
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -14930,7 +14958,9 @@ def getRecipients():
14930
14958
  # gam <UserTypeEntity> sendemail recipient <RecipientEntity> [replyto <EmailAddress>]
14931
14959
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14932
14960
  # [subject <String>]
14933
- # [<MessageContent>] (replace <Tag> <String>)*
14961
+ # [<MessageContent>]
14962
+ # (replace <Tag> <String>)*
14963
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14934
14964
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14935
14965
  # (embedimage <FileName> <String>)*
14936
14966
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -14938,7 +14968,9 @@ def getRecipients():
14938
14968
  # gam <UserTypeEntity> sendemail from <EmailAddress> [replyto <EmailAddress>]
14939
14969
  # [cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
14940
14970
  # [subject <String>]
14941
- # [<MessageContent>] (replace <Tag> <String>)*
14971
+ # [<MessageContent>]
14972
+ # (replace <Tag> <String>)*
14973
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
14942
14974
  # [html [<Boolean>]] (attach <FileName> [charset <CharSet>])*
14943
14975
  # (embedimage <FileName> <String>)*
14944
14976
  # [newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
@@ -15001,8 +15033,8 @@ def doSendEmail(users=None):
15001
15033
  body['name']['familyName'] = getString(Cmd.OB_STRING, minLen=0, maxLen=60)
15002
15034
  elif myarg in {'password', 'notifypassword'}:
15003
15035
  body['password'] = notify['password'] = getString(Cmd.OB_PASSWORD, maxLen=100)
15004
- elif myarg == 'replace':
15005
- _getTagReplacement(tagReplacements, False)
15036
+ elif _getTagReplacement(myarg, tagReplacements, False):
15037
+ pass
15006
15038
  elif myarg == 'attach':
15007
15039
  attachments.append((getFilename(), getCharSet()))
15008
15040
  elif myarg == 'embedimage':
@@ -38532,7 +38564,7 @@ def _getCalendarEventAttribute(myarg, body, parameters, function):
38532
38564
  elif myarg == 'description':
38533
38565
  body['description'] = getStringWithCRsNLs()
38534
38566
  elif function == 'update' and myarg == 'replacedescription':
38535
- parameters['replaceDescription'].append((getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0)))
38567
+ parameters['replaceDescription'].append(getREPatternReplacement(re.IGNORECASE))
38536
38568
  elif myarg == 'location':
38537
38569
  body['location'] = getString(Cmd.OB_STRING, minLen=0)
38538
38570
  elif myarg == 'source':
@@ -42835,8 +42867,8 @@ def getUserAttributes(cd, updateCmd, noUid=False):
42835
42867
  notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
42836
42868
  elif PwdOpts.ProcessArgument(myarg, notify, notFoundBody):
42837
42869
  pass
42838
- elif myarg == 'replace':
42839
- _getTagReplacement(tagReplacements, True)
42870
+ elif _getTagReplacement(myarg, tagReplacements, True):
42871
+ pass
42840
42872
  elif myarg == 'admin':
42841
42873
  value = getBoolean()
42842
42874
  if updateCmd or value:
@@ -43253,9 +43285,9 @@ def createUserAddAliases(cd, user, aliasList, i, count):
43253
43285
  # [from <EmailAaddress>]
43254
43286
  # [replyto <EmailAaddress>]
43255
43287
  # [<NotifyMessageContent>]
43256
- # (replace <Tag> <UserReplacement>)*]
43288
+ # (replace <Tag> <UserReplacement>)*
43289
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
43257
43290
  # [logpassword <FileName>] [ignorenullpassword]
43258
- # [verifynotinvitable]
43259
43291
  # [addnumericsuffixonduplicate <Number>]
43260
43292
  def doCreateUser():
43261
43293
  cd = buildGAPIObject(API.DIRECTORY)
@@ -43354,8 +43386,9 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
43354
43386
  # [notifypassword <String>]
43355
43387
  # [from <EmailAaddress>]
43356
43388
  # [replyto <EmailAaddress>]
43357
- # [<NotifyMessageContent>]
43358
- # (replace <Tag> <UserReplacement>)*]
43389
+ # [<NotifyMessageContent>
43390
+ # (replace <Tag> <UserReplacement>)*
43391
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
43359
43392
  # [notifyonupdate [<Boolean>]]
43360
43393
  # [logpassword <FileName>] [ignorenullpassword]
43361
43394
  def updateUsers(entityList):
@@ -52803,7 +52836,7 @@ def getDriveFileAttribute(myarg, body, parameters, updateCmd):
52803
52836
  elif myarg =='stripnameprefix':
52804
52837
  parameters[DFA_STRIPNAMEPREFIX] = getString(Cmd.OB_STRING, minLen=0)
52805
52838
  elif myarg == 'replacefilename':
52806
- parameters[DFA_REPLACEFILENAME].append((getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0)))
52839
+ parameters[DFA_REPLACEFILENAME].append(getREPatternReplacement(re.IGNORECASE))
52807
52840
  elif myarg in {'convert', 'ocr'}:
52808
52841
  deprecatedArgument(myarg)
52809
52842
  stderrWarningMsg(Msg.USE_MIMETYPE_TO_SPECIFY_GOOGLE_FORMAT)
@@ -58360,7 +58393,7 @@ def getCopyMoveOptions(myarg, copyMoveOptions):
58360
58393
  elif myarg =='stripnameprefix':
58361
58394
  copyMoveOptions['stripNamePrefix'] = getString(Cmd.OB_STRING, minLen=0)
58362
58395
  elif myarg == 'replacefilename':
58363
- copyMoveOptions['replaceFilename'].append((getREPattern(re.IGNORECASE), getString(Cmd.OB_STRING, minLen=0)))
58396
+ copyMoveOptions['replaceFilename'].append(getREPatternReplacement(re.IGNORECASE))
58364
58397
  elif myarg == 'showpermissionmessages':
58365
58398
  copyMoveOptions['showPermissionMessages'] = getBoolean()
58366
58399
  elif myarg == 'sendemailifrequired':
@@ -69991,8 +70024,8 @@ def _draftImportInsertMessage(users, operation):
69991
70024
  internalDateSource = 'dateHeader'
69992
70025
  if checkArgumentPresent('emlutf8'):
69993
70026
  emlEncoding = UTF8
69994
- elif myarg == 'replace':
69995
- _getTagReplacement(tagReplacements, True)
70027
+ elif _getTagReplacement(myarg, tagReplacements, True):
70028
+ pass
69996
70029
  elif operation in IMPORT_INSERT and myarg == 'addlabel':
69997
70030
  addLabelNames.append(getString(Cmd.OB_LABEL_NAME, minLen=1))
69998
70031
  elif operation in IMPORT_INSERT and myarg == 'labels':
@@ -70127,7 +70160,9 @@ def _draftImportInsertMessage(users, operation):
70127
70160
  userGmailServiceNotEnabledWarning(user, i, count)
70128
70161
 
70129
70162
  # gam <UserTypeEntity> draft message
70130
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70163
+ # <MessageContent>
70164
+ # (replace <Tag> <UserReplacement>)*
70165
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70131
70166
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70132
70167
  # (attach <FileName> [charset <CharSet>])*
70133
70168
  # (embedimage <FileName> <String>)*
@@ -70135,7 +70170,9 @@ def draftMessage(users):
70135
70170
  _draftImportInsertMessage(users, 'draft')
70136
70171
 
70137
70172
  # gam <UserTypeEntity> import message
70138
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70173
+ # <MessageContent>
70174
+ # (replace <Tag> <UserReplacement>)*
70175
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70139
70176
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70140
70177
  # (addlabel <LabelName>)* [labels <LabelNameList>]
70141
70178
  # (attach <FileName> [charset <CharSet>])*
@@ -70145,7 +70182,9 @@ def importMessage(users):
70145
70182
  _draftImportInsertMessage(users, 'import')
70146
70183
 
70147
70184
  # gam <UserTypeEntity> insert message
70148
- # <MessageContent> (replace <Tag> <UserReplacement>)*
70185
+ # <MessageContent>
70186
+ # (replace <Tag> <UserReplacement>)*
70187
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*
70149
70188
  # (<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
70150
70189
  # (addlabel <LabelName>)* [labels <LabelNameList>]
70151
70190
  # (attach <FileName> [charset <CharSet>])*
@@ -72432,8 +72471,8 @@ def _processSendAs(user, i, count, entityType, emailAddress, j, jcount, gmail, f
72432
72471
  return userDefined
72433
72472
 
72434
72473
  def getSendAsAttributes(myarg, body, tagReplacements):
72435
- if myarg == 'replace':
72436
- _getTagReplacement(tagReplacements, True)
72474
+ if _getTagReplacement(myarg, tagReplacements, True):
72475
+ pass
72437
72476
  elif myarg == 'name':
72438
72477
  body['displayName'] = getString(Cmd.OB_NAME, minLen=0)
72439
72478
  elif myarg == 'replyto':
@@ -72452,13 +72491,17 @@ SMTPMSA_SECURITY_MODES = ['none', 'ssl', 'starttls']
72452
72491
  SMTPMSA_REQUIRED_FIELDS = ['host', 'port', 'username', 'password']
72453
72492
 
72454
72493
  # gam <UserTypeEntity> [create] sendas <EmailAddress> [name] <String>
72455
- # [<SendAsContent> (replace <Tag> <UserReplacement>)*]
72494
+ # [<SendAsContent>
72495
+ # (replace <Tag> <UserReplacement>)*
72496
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
72456
72497
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
72457
72498
  # [smtpmsa.host <SMTPHostName> smtpmsa.port 25|465|587
72458
72499
  # smtpmsa.username <UserName> smtpmsa.password <Password>
72459
72500
  # [smtpmsa.securitymode none|ssl|starttls]]
72460
72501
  # gam <UserTypeEntity> update sendas <EmailAddress> [name <String>]
72461
- # [<SendAsContent> (replace <Tag> <UserReplacement>)*]
72502
+ # [<SendAsContent>
72503
+ # (replace <Tag> <UserReplacement>)*
72504
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
72462
72505
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
72463
72506
  def createUpdateSendAs(users):
72464
72507
  updateCmd = Act.Get() == Act.UPDATE
@@ -73295,6 +73338,7 @@ def printShowCSEKeyPairs(users):
73295
73338
  # gam <UserTypeEntity> signature|sig
73296
73339
  # <SignatureContent>
73297
73340
  # (replace <Tag> <String>)*
73341
+ # (replaceregex <RegularExpression> <String> <Tag> <String>)*
73298
73342
  # [html [<Boolean>]] [replyto <EmailAddress>] [default] [treatasalias <Boolean>]
73299
73343
  # [name <String>]
73300
73344
  # [primary]
@@ -73388,7 +73432,9 @@ def _showVacation(user, i, count, result, showDisabled, sigReplyFormat):
73388
73432
  Ind.Decrement()
73389
73433
 
73390
73434
  # gam <UserTypeEntity> vacation [<Boolean>] [subject <String>]
73391
- # [<VacationMessageContent> (replace <Tag> <UserReplacement>)*]
73435
+ # [<VacationMessageContent>
73436
+ # (replace <Tag> <UserReplacement>)*
73437
+ # (replaceregex <RegularExpression> <String> <Tag> <UserReplacement>)*]
73392
73438
  # [html [<Boolean>]] [contactsonly [<Boolean>]] [domainonly [<Boolean>]]
73393
73439
  # [start|startdate <Date>|Started] [end|enddate <Date>|NotSpecified]
73394
73440
  def setVacation(users):
@@ -73406,8 +73452,8 @@ def setVacation(users):
73406
73452
  message, _, html = getStringOrFile(myarg)
73407
73453
  if html:
73408
73454
  responseBodyType = 'responseBodyHtml'
73409
- elif myarg == 'replace':
73410
- _getTagReplacement(tagReplacements, True)
73455
+ elif _getTagReplacement(myarg, tagReplacements, True):
73456
+ pass
73411
73457
  elif myarg == 'html':
73412
73458
  if getBoolean():
73413
73459
  responseBodyType = 'responseBodyHtml'
gam/gamlib/glclargs.py CHANGED
@@ -991,6 +991,7 @@ class GamCLArgs():
991
991
  OB_RESOURCE_ENTITY = 'ResourceEntity'
992
992
  OB_RESOURCE_ID = 'ResourceID'
993
993
  OB_RE_PATTERN = 'REPattern'
994
+ OB_RE_REPLACEMENT = 'REReplacement'
994
995
  OB_ROLE_ASSIGNMENT_ID = 'RoleAssignmentID'
995
996
  OB_ROLE_ITEM = 'RoleItem'
996
997
  OB_ROLE_LIST = 'RoleList'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.5.18
3
+ Version: 7.5.20
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=NbIk_4F9WWuSc0_BEPwF0E8ULPbmv5kaSeSSx093gAg,3484715
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
@@ -25,7 +25,7 @@ gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
25
25
  gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
26
26
  gam/gamlib/glapi.py,sha256=EAQXkaM13t6jjh9vL4eHJqIZRI5kmzeneiFs5xcWXfg,34304
27
27
  gam/gamlib/glcfg.py,sha256=cV011FpIWge4oi5_dJrdof66vUqX6UCvTGWWTNVmYEg,28055
28
- gam/gamlib/glclargs.py,sha256=ptSTGELZHQS6SfvGGJ3NrXRoHAToO108NTYsFQE-C4c,42200
28
+ gam/gamlib/glclargs.py,sha256=Dg7xs3Hca8uK_UimbYtp7eVQJcBZwoE1HD7aJr0lEk8,42238
29
29
  gam/gamlib/glentity.py,sha256=ZLbyMl9NhN-MBf9Rxmho2dBYeS4SNLMctpeaKFZSbQ4,33801
30
30
  gam/gamlib/glgapi.py,sha256=49PPbxiW6EpPE4E8fAlLMx1mSMcQra1zwi-CSXPa7rk,38473
31
31
  gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
@@ -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.20.dist-info/METADATA,sha256=fk08OrftIsKQs3iBss-u12mACP2-Wc7M4IQ76sq3jfA,2889
69
+ gam7-7.5.20.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
+ gam7-7.5.20.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
+ gam7-7.5.20.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ gam7-7.5.20.dist-info/RECORD,,
File without changes