gam7 7.7.16__py3-none-any.whl → 7.8.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 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.07.16'
28
+ __version__ = '7.08.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
@@ -17102,11 +17102,11 @@ DATA_TRANSFER_SORT_TITLES = ['id', 'requestTime', 'oldOwnerUserEmail', 'newOwner
17102
17102
 
17103
17103
  # gam print datatransfers|transfers [todrive <ToDriveAttribute>*]
17104
17104
  # [olduser|oldowner <UserItem>] [newuser|newowner <UserItem>]
17105
- # [status <String>] [delimiter <Character>]]
17105
+ # [status <String>] [delimiter <Character>]
17106
17106
  # (addcsvdata <FieldName> <String>)*
17107
17107
  # gam show datatransfers|transfers
17108
17108
  # [olduser|oldowner <UserItem>] [newuser|newowner <UserItem>]
17109
- # [status <String>] [delimiter <Character>]]
17109
+ # [status <String>] [delimiter <Character>]
17110
17110
  def doPrintShowDataTransfers():
17111
17111
  dt = buildGAPIObject(API.DATATRANSFER)
17112
17112
  apps = getTransferApplications(dt)
@@ -29587,7 +29587,7 @@ DEVICE_ORDERBY_CHOICE_MAP = {
29587
29587
  # <DeviceFieldName>* [fields <DeviceFieldNameList>] [userfields <DeviceUserFieldNameList>]
29588
29588
  # [orderby <DeviceOrderByFieldName> [ascending|descending]]
29589
29589
  # [all|company|personal|nocompanydevices|nopersonaldevices]
29590
- # [nodeviceusers]
29590
+ # [nodeviceusers|oneuserperrow]
29591
29591
  # [formatjson [quotechar <Character>]]
29592
29592
  # [showitemcountonly]
29593
29593
  def doPrintCIDevices():
@@ -29603,7 +29603,7 @@ def doPrintCIDevices():
29603
29603
  queries = [None]
29604
29604
  view, entityType = DEVICE_VIEW_CHOICE_MAP['all']
29605
29605
  getDeviceUsers = True
29606
- showItemCountOnly = False
29606
+ oneUserPerRow = showItemCountOnly = False
29607
29607
  while Cmd.ArgumentsRemaining():
29608
29608
  myarg = getArgument()
29609
29609
  if csvPF and myarg == 'todrive':
@@ -29618,6 +29618,8 @@ def doPrintCIDevices():
29618
29618
  view, entityType = DEVICE_VIEW_CHOICE_MAP[myarg]
29619
29619
  elif myarg == 'nodeviceusers':
29620
29620
  getDeviceUsers = False
29621
+ elif myarg in {'oneuserperrow', 'oneitemperrow'}:
29622
+ getDeviceUsers = oneUserPerRow = True
29621
29623
  elif getFieldsList(myarg, DEVICE_FIELDS_CHOICE_MAP, fieldsList, initialField='name'):
29622
29624
  pass
29623
29625
  elif getFieldsList(myarg, DEVICEUSER_FIELDS_CHOICE_MAP, userFieldsList, initialField='name', fieldsArg='userfields'):
@@ -29631,6 +29633,8 @@ def doPrintCIDevices():
29631
29633
  fields = getItemFieldsFromFieldsList('devices', fieldsList)
29632
29634
  userFields = getItemFieldsFromFieldsList('deviceUsers', userFieldsList)
29633
29635
  substituteQueryTimes(queries, queryTimes)
29636
+ if FJQC.formatJSON and oneUserPerRow:
29637
+ csvPF.SetJSONTitles(['name', 'user.name', 'JSON'])
29634
29638
  itemCount = 0
29635
29639
  for query in queries:
29636
29640
  printGettingAllAccountEntities(entityType, query)
@@ -29672,13 +29676,26 @@ def doPrintCIDevices():
29672
29676
  except (GAPI.invalid, GAPI.invalidArgument, GAPI.permissionDenied) as e:
29673
29677
  entityActionFailedWarning([entityType, None], str(e))
29674
29678
  for device in devices:
29675
- row = flattenJSON(device, timeObjects=DEVICE_TIME_OBJECTS)
29676
- if not FJQC.formatJSON:
29677
- csvPF.WriteRowTitles(row)
29678
- elif csvPF.CheckRowTitles(row):
29679
- csvPF.WriteRowNoFilter({'name': device['name'],
29680
- 'JSON': json.dumps(cleanJSON(device, timeObjects=DEVICE_TIME_OBJECTS),
29681
- ensure_ascii=False, sort_keys=True)})
29679
+ if not oneUserPerRow or 'users' not in device:
29680
+ row = flattenJSON(device, timeObjects=DEVICE_TIME_OBJECTS)
29681
+ if not FJQC.formatJSON:
29682
+ csvPF.WriteRowTitles(row)
29683
+ elif csvPF.CheckRowTitles(row):
29684
+ csvPF.WriteRowNoFilter({'name': device['name'],
29685
+ 'JSON': json.dumps(cleanJSON(device, timeObjects=DEVICE_TIME_OBJECTS),
29686
+ ensure_ascii=False, sort_keys=True)})
29687
+ else:
29688
+ deviceUsers = device.pop('users')
29689
+ baserow = flattenJSON(device, timeObjects=DEVICE_TIME_OBJECTS)
29690
+ for deviceUser in deviceUsers:
29691
+ row = flattenJSON({'user': deviceUser}, flattened=baserow.copy(), timeObjects=DEVICE_TIME_OBJECTS)
29692
+ if not FJQC.formatJSON:
29693
+ csvPF.WriteRowTitles(row)
29694
+ elif csvPF.CheckRowTitles(row):
29695
+ device['user'] = deviceUser
29696
+ csvPF.WriteRowNoFilter({'name': device['name'], 'user.name': deviceUser['name'],
29697
+ 'JSON': json.dumps(cleanJSON(device, timeObjects=DEVICE_TIME_OBJECTS),
29698
+ ensure_ascii=False, sort_keys=True)})
29682
29699
  if showItemCountOnly:
29683
29700
  writeStdout(f'{itemCount}\n')
29684
29701
  return
@@ -66033,6 +66050,159 @@ def printShowSharedDriveACLs(users, useDomainAdminAccess=False):
66033
66050
  def doPrintShowSharedDriveACLs():
66034
66051
  printShowSharedDriveACLs([_getAdminEmail()], True)
66035
66052
 
66053
+ PRINT_ORGANIZER_TYPES = {'group', 'user'}
66054
+
66055
+ # gam [<UserTypeEntity>] print shareddriveorganizers [todrive <ToDriveAttribute>*]
66056
+ # [adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
66057
+ # [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
66058
+ # [domainlist <DomainList>]
66059
+ # [includetypes user|group]
66060
+ # [oneorganizer [<Boolean>]]
66061
+ # [shownorganizerdrives false|true|only]
66062
+ # [includefileorganizers [<Boolean>]]
66063
+ # [delimiter <Character>]
66064
+ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66065
+ csvPF = CSVPrintFile(['id', 'name', 'organizers', 'createdTime'], 'sortall')
66066
+ delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
66067
+ roles = set(['organizer'])
66068
+ includeTypes = set()
66069
+ showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
66070
+ fieldsList = ['role', 'type', 'emailAddress']
66071
+ cd = orgUnitId = query = matchPattern = None
66072
+ domainList = []
66073
+ oneOrganizer = False
66074
+ while Cmd.ArgumentsRemaining():
66075
+ myarg = getArgument()
66076
+ if csvPF and myarg == 'todrive':
66077
+ csvPF.GetTodriveParameters()
66078
+ elif myarg == 'delimiter':
66079
+ delimiter = getCharacter()
66080
+ elif myarg in {'teamdriveadminquery', 'shareddriveadminquery', 'query'}:
66081
+ queryLocation = Cmd.Location()
66082
+ query = getString(Cmd.OB_QUERY, minLen=0) or None
66083
+ if query:
66084
+ query = mapQueryRelativeTimes(query, ['createdTime'])
66085
+ elif myarg == 'matchname':
66086
+ matchPattern = getREPattern(re.IGNORECASE)
66087
+ elif myarg in {'ou', 'org', 'orgunit'}:
66088
+ orgLocation = Cmd.Location()
66089
+ if cd is None:
66090
+ cd = buildGAPIObject(API.DIRECTORY)
66091
+ orgUnitPath, orgUnitId = getOrgUnitId(cd)
66092
+ orgUnitId = orgUnitId[3:]
66093
+ orgUnitInfo = {'orgUnit': orgUnitPath, 'orgUnitId': orgUnitId}
66094
+ elif myarg in ADMIN_ACCESS_OPTIONS:
66095
+ useDomainAdminAccess = True
66096
+ elif myarg == 'domainlist':
66097
+ domainList = set(getString(Cmd.OB_DOMAIN_NAME_LIST).replace(',', ' ').lower().split())
66098
+ elif myarg == 'includetypes':
66099
+ for itype in getString(Cmd.OB_ORGANIZER_TYPE_LIST).lower().replace(',', ' ').split():
66100
+ if itype in PRINT_ORGANIZER_TYPES:
66101
+ includeTypes.add(itype)
66102
+ else:
66103
+ invalidChoiceExit(itype, PRINT_ORGANIZER_TYPES, True)
66104
+ elif myarg == 'oneorganizer':
66105
+ oneOrganizer = getBoolean()
66106
+ elif myarg == 'shownoorganizerdrives':
66107
+ showNoOrganizerDrives = getChoice(SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP, defaultChoice=1, mapChoice=True)
66108
+ elif myarg in {'includefileorganizers', 'includecontentmanagers'}:
66109
+ if getBoolean():
66110
+ roles.add('fileOrganizer')
66111
+ else:
66112
+ unknownArgumentExit()
66113
+ if query and not useDomainAdminAccess:
66114
+ Cmd.SetLocation(queryLocation-1)
66115
+ usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_PERFORM_SHARED_DRIVE_QUERIES)
66116
+ if orgUnitId is not None:
66117
+ if not useDomainAdminAccess:
66118
+ Cmd.SetLocation(orgLocation-1)
66119
+ usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_SPECIFY_SHARED_DRIVE_ORGUNIT)
66120
+ csvPF.AddTitles(['orgUnit', 'orgUnitId'])
66121
+ if not includeTypes:
66122
+ includeTypes = PRINT_ORGANIZER_TYPES
66123
+ fields = getItemFieldsFromFieldsList('permissions', fieldsList, True)
66124
+ i, count, users = getEntityArgument(users)
66125
+ for user in users:
66126
+ i += 1
66127
+ user, drive = buildGAPIServiceObject(API.DRIVE3, user, i, count)
66128
+ if not drive:
66129
+ continue
66130
+ if useDomainAdminAccess:
66131
+ printGettingAllAccountEntities(Ent.SHAREDDRIVE, query)
66132
+ pageMessage = getPageMessage()
66133
+ else:
66134
+ printGettingAllEntityItemsForWhom(Ent.SHAREDDRIVE, user, i, count, query)
66135
+ pageMessage = getPageMessageForWhom()
66136
+ try:
66137
+ feed = callGAPIpages(drive.drives(), 'list', 'drives',
66138
+ pageMessage=pageMessage,
66139
+ throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.INVALID_QUERY, GAPI.INVALID,
66140
+ GAPI.QUERY_REQUIRES_ADMIN_CREDENTIALS,
66141
+ GAPI.NO_LIST_TEAMDRIVES_ADMINISTRATOR_PRIVILEGE,
66142
+ GAPI.FILE_NOT_FOUND],
66143
+ q=query, useDomainAdminAccess=useDomainAdminAccess,
66144
+ fields='nextPageToken,drives(id,name,createdTime,orgUnitId)', pageSize=100)
66145
+ except (GAPI.invalidQuery, GAPI.invalid, GAPI.queryRequiresAdminCredentials,
66146
+ GAPI.noListTeamDrivesAdministratorPrivilege, GAPI.fileNotFound) as e:
66147
+ entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE, None], str(e), i, count)
66148
+ continue
66149
+ except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
66150
+ userDriveServiceNotEnabledWarning(user, str(e), i, count)
66151
+ continue
66152
+ matchFeed = []
66153
+ jcount = len(feed)
66154
+ j = 0
66155
+ for shareddrive in feed:
66156
+ j += 1
66157
+ if ((matchPattern is not None and matchPattern.match(shareddrive['name']) is None) or
66158
+ (orgUnitId is not None and orgUnitId != shareddrive.get('orgUnitId'))):
66159
+ continue
66160
+ printGettingAllEntityItemsForWhom(Ent.PERMISSION, shareddrive['name'], j, jcount)
66161
+ shareddrive['createdTime'] = formatLocalTime(shareddrive['createdTime'])
66162
+ shareddrive['organizers'] = []
66163
+ try:
66164
+ permissions = callGAPIpages(drive.permissions(), 'list', 'permissions',
66165
+ pageMessage=getPageMessageForWhom(),
66166
+ throwReasons=GAPI.DRIVE3_GET_ACL_REASONS,
66167
+ retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
66168
+ useDomainAdminAccess=useDomainAdminAccess,
66169
+ fileId=shareddrive['id'], fields=fields, supportsAllDrives=True)
66170
+ for permission in permissions:
66171
+ if permission['type'] in includeTypes and permission['role'] in roles:
66172
+ if domainList:
66173
+ _, domain = permission['emailAddress'].lower().split('@', 1)
66174
+ if domain not in domainList:
66175
+ continue
66176
+ shareddrive['organizers'].append(permission['emailAddress'])
66177
+ if oneOrganizer:
66178
+ break
66179
+ if not shareddrive['organizers']:
66180
+ if showNoOrganizerDrives == 0: # no organizers and showNoOrganizerDrives False - ignore
66181
+ continue
66182
+ matchFeed.append(shareddrive) # no organizers and showNoOrganizerDrives Only/True - keep
66183
+ continue
66184
+ if showNoOrganizerDrives < 0: # organizers and showNoOrganizerDrives Only/True - ignore
66185
+ continue
66186
+ matchFeed.append(shareddrive)
66187
+ except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
66188
+ GAPI.insufficientAdministratorPrivileges, GAPI.insufficientFilePermissions,
66189
+ GAPI.unknownError, GAPI.invalid):
66190
+ pass
66191
+ if len(matchFeed) == 0:
66192
+ setSysExitRC(NO_ENTITIES_FOUND_RC)
66193
+ for shareddrive in matchFeed:
66194
+ row = {'id': shareddrive['id'], 'name': shareddrive['name'],
66195
+ 'organizers': delimiter.join(shareddrive['organizers']),
66196
+ 'createdTime': shareddrive['createdTime']}
66197
+ if orgUnitId:
66198
+ row.update(orgUnitInfo)
66199
+ csvPF.WriteRowTitles(row)
66200
+ if csvPF:
66201
+ csvPF.writeCSVfile('SharedDrive Organizers')
66202
+
66203
+ def doPrintSharedDriveOrganizers():
66204
+ printSharedDriveOrganizers([_getAdminEmail()], True)
66205
+
66036
66206
  LOOKERSTUDIO_ASSETTYPE_CHOICE_MAP = {
66037
66207
  'report': ['REPORT'],
66038
66208
  'datasource': ['DATA_SOURCE'],
@@ -75919,6 +76089,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
75919
76089
  Cmd.ARG_SCHEMA: doPrintShowUserSchemas,
75920
76090
  Cmd.ARG_SHAREDDRIVE: doPrintShowSharedDrives,
75921
76091
  Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
76092
+ Cmd.ARG_SHAREDDRIVEORGANIZERS: doPrintSharedDriveOrganizers,
75922
76093
  Cmd.ARG_SITE: deprecatedDomainSites,
75923
76094
  Cmd.ARG_SITEACL: deprecatedDomainSites,
75924
76095
  Cmd.ARG_SITEACTIVITY: deprecatedDomainSites,
@@ -76267,6 +76438,7 @@ MAIN_COMMANDS_OBJ_ALIASES = {
76267
76438
  Cmd.ARG_TEAMDRIVES: Cmd.ARG_SHAREDDRIVE,
76268
76439
  Cmd.ARG_TEAMDRIVEACLS: Cmd.ARG_SHAREDDRIVEACLS,
76269
76440
  Cmd.ARG_TEAMDRIVEINFO: Cmd.ARG_SHAREDDRIVEINFO,
76441
+ Cmd.ARG_TEAMDRIVEORGANIZERS: Cmd.ARG_SHAREDDRIVEORGANIZERS,
76270
76442
  Cmd.ARG_TEAMDRIVETHEMES: Cmd.ARG_SHAREDDRIVETHEMES,
76271
76443
  Cmd.ARG_TOKENS: Cmd.ARG_TOKEN,
76272
76444
  Cmd.ARG_TRANSFER: Cmd.ARG_DATATRANSFER,
@@ -76959,6 +77131,7 @@ USER_COMMANDS_WITH_OBJECTS = {
76959
77131
  Cmd.ARG_SENDAS: printShowSendAs,
76960
77132
  Cmd.ARG_SHAREDDRIVE: printShowSharedDrives,
76961
77133
  Cmd.ARG_SHAREDDRIVEACLS: printShowSharedDriveACLs,
77134
+ Cmd.ARG_SHAREDDRIVEORGANIZERS: printSharedDriveOrganizers,
76962
77135
  Cmd.ARG_SHEET: infoPrintShowSheets,
76963
77136
  Cmd.ARG_SHEETRANGE: printShowSheetRanges,
76964
77137
  Cmd.ARG_SIGNATURE: printShowSignature,
@@ -77316,6 +77489,7 @@ USER_COMMANDS_OBJ_ALIASES = {
77316
77489
  Cmd.ARG_TEAMDRIVES: Cmd.ARG_SHAREDDRIVE,
77317
77490
  Cmd.ARG_TEAMDRIVEACLS: Cmd.ARG_SHAREDDRIVEACLS,
77318
77491
  Cmd.ARG_TEAMDRIVEINFO: Cmd.ARG_SHAREDDRIVEINFO,
77492
+ Cmd.ARG_TEAMDRIVEORGANIZERS: Cmd.ARG_SHAREDDRIVEORGANIZERS,
77319
77493
  Cmd.ARG_TEAMDRIVETHEMES: Cmd.ARG_SHAREDDRIVETHEMES,
77320
77494
  Cmd.ARG_THREADS: Cmd.ARG_THREAD,
77321
77495
  Cmd.ARG_TOKENS: Cmd.ARG_TOKEN,
gam/gamlib/glclargs.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (C) 2024 Ross Scroggs All Rights Reserved.
3
+ # Copyright (C) 2025 Ross Scroggs All Rights Reserved.
4
4
  #
5
5
  # All Rights Reserved.
6
6
  #
@@ -755,6 +755,7 @@ class GamCLArgs():
755
755
  ARG_SHAREDDRIVES = 'shareddrives'
756
756
  ARG_SHAREDDRIVEACLS = 'shareddriveacls'
757
757
  ARG_SHAREDDRIVEINFO = 'shareddriveinfo'
758
+ ARG_SHAREDDRIVEORGANIZERS = 'shareddriveorganizers'
758
759
  ARG_SHAREDDRIVETHEMES = 'shareddrivethemes'
759
760
  ARG_SHEET = 'sheet'
760
761
  ARG_SHEETS = 'sheets'
@@ -784,6 +785,7 @@ class GamCLArgs():
784
785
  ARG_TEAMDRIVES = 'teamdrives'
785
786
  ARG_TEAMDRIVEACLS = 'teamdriveacls'
786
787
  ARG_TEAMDRIVEINFO = 'teamdriveinfo'
788
+ ARG_TEAMDRIVEORGANIZERS = 'teamdriveorganizers'
787
789
  ARG_TEAMDRIVETHEMES = 'teamdrivethemes'
788
790
  ARG_THREAD = 'thread'
789
791
  ARG_THREADS = 'threads'
@@ -964,6 +966,7 @@ class GamCLArgs():
964
966
  OB_MOBILE_ENTITY = 'MobileEntity'
965
967
  OB_NETWORK_ID = 'networkID'
966
968
  OB_NAME = 'Name'
969
+ OB_ORGANIZER_TYPE_LIST = 'OrganizerTypeList'
967
970
  OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
968
971
  OB_ORGUNIT_ITEM = 'OrgUnitItem'
969
972
  OB_ORGUNIT_PATH = 'OrgUnitPath'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.7.16
3
+ Version: 7.8.0
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=THa9dsPBeDzlTd4NAOjnk32YQw7UDNFmZX816g44-k0,3503730
1
+ gam/__init__.py,sha256=SdaM0sI4IUxepULX1otTVVcG88zMq-P9crfuFa9te-4,3512307
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
@@ -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=85YwZ5LhBoVd9kU3m-gwLRq8FwTWCaRIwARuQvH8Mjc,34022
27
27
  gam/gamlib/glcfg.py,sha256=eJCVb_OJ6cIsPuv-0IfIjHaTh5lM9juh4HOMLDblJmE,28055
28
- gam/gamlib/glclargs.py,sha256=2pb0bdmWbTM5WrNVlMP-d-pe8f5oY3XuF50m02v8ynk,42199
28
+ gam/gamlib/glclargs.py,sha256=zB6GMmDR_y5IRj7LuoM6-Bk_ETfNQ6sTqCNB6RdPfyg,42350
29
29
  gam/gamlib/glentity.py,sha256=fqWUlxQqPKlfFrkuPjCK2lZhhFBIZboCuO0qCxuEwqA,33691
30
30
  gam/gamlib/glgapi.py,sha256=cGtvFvvBU3XQJLgtLCjs_V5VBUem_k0b5uUrK21VmeA,39491
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.7.16.dist-info/METADATA,sha256=71wZ8L5ImENEUm6skHEouWsRDfSBuaQCXG-myyyw_f0,2978
69
- gam7-7.7.16.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- gam7-7.7.16.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
- gam7-7.7.16.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
- gam7-7.7.16.dist-info/RECORD,,
68
+ gam7-7.8.0.dist-info/METADATA,sha256=FKc83O6Jgh-XAK2AfQacRZJ-uKLmzdWYcKmLkC26aNc,2977
69
+ gam7-7.8.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
+ gam7-7.8.0.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
+ gam7-7.8.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ gam7-7.8.0.dist-info/RECORD,,
File without changes