gam7 7.20.3__tar.gz → 7.20.4__tar.gz

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.

Files changed (324) hide show
  1. {gam7-7.20.3 → gam7-7.20.4}/.github/workflows/build.yml +2 -3
  2. {gam7-7.20.3 → gam7-7.20.4}/.github/workflows/get-cacerts.yml +1 -1
  3. {gam7-7.20.3 → gam7-7.20.4}/PKG-INFO +1 -1
  4. {gam7-7.20.3 → gam7-7.20.4}/src/GamUpdate.txt +4 -0
  5. {gam7-7.20.3 → gam7-7.20.4}/src/gam/__init__.py +33 -37
  6. gam7-7.20.3/src/gam/iso8601/iso8601.py → gam7-7.20.4/src/gam/gamlib/gliso8601.py +7 -8
  7. {gam7-7.20.3 → gam7-7.20.4}/src/gam.spec +2 -2
  8. gam7-7.20.4/src/tools/hooks/hook-googleapiclient.model.py +21 -0
  9. gam7-7.20.4/src/tools/hooks/hook-httplib2.py +19 -0
  10. {gam7-7.20.3 → gam7-7.20.4}/wiki/Authorization.md +1 -1
  11. {gam7-7.20.3 → gam7-7.20.4}/wiki/Licenses.md +1 -1
  12. {gam7-7.20.3 → gam7-7.20.4}/wiki/Reports.md +103 -101
  13. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Chat.md +1 -0
  14. gam7-7.20.3/.pre-commit-config.yaml +0 -32
  15. gam7-7.20.3/src/gam/cacerts.pem +0 -747
  16. gam7-7.20.3/src/gam/googleapiclient/__init__.py +0 -27
  17. gam7-7.20.3/src/gam/googleapiclient/_auth.py +0 -167
  18. gam7-7.20.3/src/gam/googleapiclient/_helpers.py +0 -207
  19. gam7-7.20.3/src/gam/googleapiclient/channel.py +0 -315
  20. gam7-7.20.3/src/gam/googleapiclient/discovery.py +0 -1662
  21. gam7-7.20.3/src/gam/googleapiclient/discovery_cache/__init__.py +0 -78
  22. gam7-7.20.3/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -55
  23. gam7-7.20.3/src/gam/googleapiclient/discovery_cache/base.py +0 -46
  24. gam7-7.20.3/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -145
  25. gam7-7.20.3/src/gam/googleapiclient/errors.py +0 -197
  26. gam7-7.20.3/src/gam/googleapiclient/http.py +0 -1962
  27. gam7-7.20.3/src/gam/googleapiclient/mimeparse.py +0 -183
  28. gam7-7.20.3/src/gam/googleapiclient/model.py +0 -429
  29. gam7-7.20.3/src/gam/googleapiclient/schema.py +0 -317
  30. gam7-7.20.3/src/gam/googleapiclient/version.py +0 -15
  31. gam7-7.20.3/src/gam/iso8601/__init__.py +0 -28
  32. gam7-7.20.3/src/gam/six.py +0 -982
  33. gam7-7.20.3/src/requirements-dev.txt +0 -7
  34. {gam7-7.20.3 → gam7-7.20.4}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  35. {gam7-7.20.3 → gam7-7.20.4}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  36. {gam7-7.20.3 → gam7-7.20.4}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  37. {gam7-7.20.3 → gam7-7.20.4}/.github/ISSUE_TEMPLATE.txt +0 -0
  38. {gam7-7.20.3 → gam7-7.20.4}/.github/actions/decrypt.sh +0 -0
  39. {gam7-7.20.3 → gam7-7.20.4}/.github/actions/entitlements.plist +0 -0
  40. {gam7-7.20.3 → gam7-7.20.4}/.github/actions/package_exclusions.txt +0 -0
  41. {gam7-7.20.3 → gam7-7.20.4}/.github/stale.yml +0 -0
  42. {gam7-7.20.3 → gam7-7.20.4}/.github/workflows/codeql-analysis.yml +0 -0
  43. {gam7-7.20.3 → gam7-7.20.4}/.github/workflows/pushwiki.yml +0 -0
  44. {gam7-7.20.3 → gam7-7.20.4}/.github/workflows/pypi.yml +0 -0
  45. {gam7-7.20.3 → gam7-7.20.4}/LICENSE +0 -0
  46. {gam7-7.20.3 → gam7-7.20.4}/README.md +0 -0
  47. {gam7-7.20.3 → gam7-7.20.4}/pyproject.toml +0 -0
  48. {gam7-7.20.3 → gam7-7.20.4}/src/.gitignore +0 -0
  49. {gam7-7.20.3 → gam7-7.20.4}/src/GamCommands.txt +0 -0
  50. {gam7-7.20.3 → gam7-7.20.4}/src/LICENSE +0 -0
  51. {gam7-7.20.3 → gam7-7.20.4}/src/README.md +0 -0
  52. {gam7-7.20.3 → gam7-7.20.4}/src/callgam.py +0 -0
  53. {gam7-7.20.3 → gam7-7.20.4}/src/gam/__main__.py +0 -0
  54. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/__init__.py +0 -0
  55. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/auth.py +0 -0
  56. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/client.py +0 -0
  57. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/core.py +0 -0
  58. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/data.py +0 -0
  59. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/http.py +0 -0
  60. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/http_core.py +0 -0
  61. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/http_interface.py +0 -0
  62. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/mock_http.py +0 -0
  63. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/mock_http_core.py +0 -0
  64. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/mock_service.py +0 -0
  65. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/service.py +0 -0
  66. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/token_store.py +0 -0
  67. {gam7-7.20.3 → gam7-7.20.4}/src/gam/atom/url.py +0 -0
  68. {gam7-7.20.3/src → gam7-7.20.4/src/gam}/cacerts.pem +0 -0
  69. {gam7-7.20.3 → gam7-7.20.4}/src/gam/cbcm-v1.1beta1.json +0 -0
  70. {gam7-7.20.3 → gam7-7.20.4}/src/gam/contactdelegation-v1.json +0 -0
  71. {gam7-7.20.3 → gam7-7.20.4}/src/gam/datastudio-v1.json +0 -0
  72. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/__init__.py +0 -0
  73. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glaction.py +0 -0
  74. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glapi.py +0 -0
  75. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glcfg.py +0 -0
  76. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glclargs.py +0 -0
  77. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glentity.py +0 -0
  78. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glgapi.py +0 -0
  79. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glgdata.py +0 -0
  80. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glglobals.py +0 -0
  81. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glindent.py +0 -0
  82. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glmsgs.py +0 -0
  83. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glskus.py +0 -0
  84. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/gluprop.py +0 -0
  85. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/glverlibs.py +0 -0
  86. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gamlib/yubikey.py +0 -0
  87. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/__init__.py +0 -0
  88. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/alt/__init__.py +0 -0
  89. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/alt/app_engine.py +0 -0
  90. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/alt/appengine.py +0 -0
  91. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/apps/__init__.py +0 -0
  92. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/apps/audit/__init__.py +0 -0
  93. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/apps/audit/service.py +0 -0
  94. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  95. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/apps/contacts/service.py +0 -0
  96. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/apps/service.py +0 -0
  97. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/service.py +0 -0
  98. {gam7-7.20.3 → gam7-7.20.4}/src/gam/gdata/urlfetch.py +0 -0
  99. {gam7-7.20.3 → gam7-7.20.4}/src/gam/meet-v2beta.json +0 -0
  100. {gam7-7.20.3 → gam7-7.20.4}/src/gam/serviceaccountlookup-v1.json +0 -0
  101. {gam7-7.20.3 → gam7-7.20.4}/src/gam-install.sh +0 -0
  102. {gam7-7.20.3 → gam7-7.20.4}/src/gam-setup.bat +0 -0
  103. {gam7-7.20.3 → gam7-7.20.4}/src/gam.exe.manifest +0 -0
  104. {gam7-7.20.3 → gam7-7.20.4}/src/gam.py +0 -0
  105. {gam7-7.20.3 → gam7-7.20.4}/src/gam.wxs +0 -0
  106. {gam7-7.20.3 → gam7-7.20.4}/src/license.rtf +0 -0
  107. {gam7-7.20.3 → gam7-7.20.4}/src/tools/a_atleast_b.py +0 -0
  108. {gam7-7.20.3 → gam7-7.20.4}/src/tools/gen-wix-xml-filelist.py +0 -0
  109. {gam7-7.20.3 → gam7-7.20.4}/src/tools/mkGamRef.py +0 -0
  110. {gam7-7.20.3 → gam7-7.20.4}/src/tools/openssl.props +0 -0
  111. {gam7-7.20.3 → gam7-7.20.4}/src/tools/ssd.mjs +0 -0
  112. {gam7-7.20.3 → gam7-7.20.4}/src/version_info.txt.in +0 -0
  113. {gam7-7.20.3 → gam7-7.20.4}/wiki/00scratch.md +0 -0
  114. {gam7-7.20.3 → gam7-7.20.4}/wiki/Addresses.md +0 -0
  115. {gam7-7.20.3 → gam7-7.20.4}/wiki/Administrators.md +0 -0
  116. {gam7-7.20.3 → gam7-7.20.4}/wiki/Alert-Center.md +0 -0
  117. {gam7-7.20.3 → gam7-7.20.4}/wiki/Aliases.md +0 -0
  118. {gam7-7.20.3 → gam7-7.20.4}/wiki/BNF-Syntax.md +0 -0
  119. {gam7-7.20.3 → gam7-7.20.4}/wiki/Basic-Items.md +0 -0
  120. {gam7-7.20.3 → gam7-7.20.4}/wiki/Bulk-Processing.md +0 -0
  121. {gam7-7.20.3 → gam7-7.20.4}/wiki/Business-Account-Management.md +0 -0
  122. {gam7-7.20.3 → gam7-7.20.4}/wiki/CSV-Input-Filtering.md +0 -0
  123. {gam7-7.20.3 → gam7-7.20.4}/wiki/CSV-Output-Filtering.md +0 -0
  124. {gam7-7.20.3 → gam7-7.20.4}/wiki/CSV-Special-Characters.md +0 -0
  125. {gam7-7.20.3 → gam7-7.20.4}/wiki/Calendars-Access.md +0 -0
  126. {gam7-7.20.3 → gam7-7.20.4}/wiki/Calendars-Events.md +0 -0
  127. {gam7-7.20.3 → gam7-7.20.4}/wiki/Calendars.md +0 -0
  128. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chat-Bot-Setup-Use.md +0 -0
  129. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-AUE-Counts.md +0 -0
  130. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  131. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Installed-Apps.md +0 -0
  132. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  133. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Policies.md +0 -0
  134. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Printers.md +0 -0
  135. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Profile-Management.md +0 -0
  136. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Version-Counts.md +0 -0
  137. {gam7-7.20.3 → gam7-7.20.4}/wiki/Chrome-Version-History.md +0 -0
  138. {gam7-7.20.3 → gam7-7.20.4}/wiki/ChromeOS-Devices.md +0 -0
  139. {gam7-7.20.3 → gam7-7.20.4}/wiki/Classroom-Courses.md +0 -0
  140. {gam7-7.20.3 → gam7-7.20.4}/wiki/Classroom-Guardians.md +0 -0
  141. {gam7-7.20.3 → gam7-7.20.4}/wiki/Classroom-Invitations.md +0 -0
  142. {gam7-7.20.3 → gam7-7.20.4}/wiki/Classroom-Membership.md +0 -0
  143. {gam7-7.20.3 → gam7-7.20.4}/wiki/Classroom-StudentGroups.md +0 -0
  144. {gam7-7.20.3 → gam7-7.20.4}/wiki/Cloud-Channel.md +0 -0
  145. {gam7-7.20.3 → gam7-7.20.4}/wiki/Cloud-Identity-Devices.md +0 -0
  146. {gam7-7.20.3 → gam7-7.20.4}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  147. {gam7-7.20.3 → gam7-7.20.4}/wiki/Cloud-Identity-Groups.md +0 -0
  148. {gam7-7.20.3 → gam7-7.20.4}/wiki/Cloud-Identity-Policies.md +0 -0
  149. {gam7-7.20.3 → gam7-7.20.4}/wiki/Cloud-Storage.md +0 -0
  150. {gam7-7.20.3 → gam7-7.20.4}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  151. {gam7-7.20.3 → gam7-7.20.4}/wiki/Collections-of-Items.md +0 -0
  152. {gam7-7.20.3 → gam7-7.20.4}/wiki/Collections-of-Users.md +0 -0
  153. {gam7-7.20.3 → gam7-7.20.4}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  154. {gam7-7.20.3 → gam7-7.20.4}/wiki/Command-Line-Parsing.md +0 -0
  155. {gam7-7.20.3 → gam7-7.20.4}/wiki/Command-Logging-Progress.md +0 -0
  156. {gam7-7.20.3 → gam7-7.20.4}/wiki/Context-Aware-Access-Levels.md +0 -0
  157. {gam7-7.20.3 → gam7-7.20.4}/wiki/Customer.md +0 -0
  158. {gam7-7.20.3 → gam7-7.20.4}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  159. {gam7-7.20.3 → gam7-7.20.4}/wiki/Domain-SharedContacts.md +0 -0
  160. {gam7-7.20.3 → gam7-7.20.4}/wiki/Domains-Verification.md +0 -0
  161. {gam7-7.20.3 → gam7-7.20.4}/wiki/Domains.md +0 -0
  162. {gam7-7.20.3 → gam7-7.20.4}/wiki/Downloads-Installs.md +0 -0
  163. {gam7-7.20.3 → gam7-7.20.4}/wiki/Drive-File-Selection.md +0 -0
  164. {gam7-7.20.3 → gam7-7.20.4}/wiki/Drive-Items.md +0 -0
  165. {gam7-7.20.3 → gam7-7.20.4}/wiki/Drive-REST-API-v3.md +0 -0
  166. {gam7-7.20.3 → gam7-7.20.4}/wiki/Email-Audit-Monitor.md +0 -0
  167. {gam7-7.20.3 → gam7-7.20.4}/wiki/Find-File-Owner.md +0 -0
  168. {gam7-7.20.3 → gam7-7.20.4}/wiki/GAM-Public-Chat-Room.md +0 -0
  169. {gam7-7.20.3 → gam7-7.20.4}/wiki/GAM-Return-Codes.md +0 -0
  170. {gam7-7.20.3 → gam7-7.20.4}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  171. {gam7-7.20.3 → gam7-7.20.4}/wiki/GAM7-on-Android-Devices.md +0 -0
  172. {gam7-7.20.3 → gam7-7.20.4}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  173. {gam7-7.20.3 → gam7-7.20.4}/wiki/GamUpdates.md +0 -0
  174. {gam7-7.20.3 → gam7-7.20.4}/wiki/Global-Address-List.md +0 -0
  175. {gam7-7.20.3 → gam7-7.20.4}/wiki/Google-Data-Transfers.md +0 -0
  176. {gam7-7.20.3 → gam7-7.20.4}/wiki/Google-Network-Addresses.md +0 -0
  177. {gam7-7.20.3 → gam7-7.20.4}/wiki/Groups-Membership.md +0 -0
  178. {gam7-7.20.3 → gam7-7.20.4}/wiki/Groups.md +0 -0
  179. {gam7-7.20.3 → gam7-7.20.4}/wiki/HTTPS-Proxy.md +0 -0
  180. {gam7-7.20.3 → gam7-7.20.4}/wiki/Home.md +0 -0
  181. {gam7-7.20.3 → gam7-7.20.4}/wiki/How-to-Install-GAM7.md +0 -0
  182. {gam7-7.20.3 → gam7-7.20.4}/wiki/How-to-Uninstall-GAM7.md +0 -0
  183. {gam7-7.20.3 → gam7-7.20.4}/wiki/How-to-Update-GAM7.md +0 -0
  184. {gam7-7.20.3 → gam7-7.20.4}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  185. {gam7-7.20.3 → gam7-7.20.4}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +0 -0
  186. {gam7-7.20.3 → gam7-7.20.4}/wiki/Inbound-SSO.md +0 -0
  187. {gam7-7.20.3 → gam7-7.20.4}/wiki/Install-GAM-as-Python-Library.md +0 -0
  188. {gam7-7.20.3 → gam7-7.20.4}/wiki/List-Items.md +0 -0
  189. {gam7-7.20.3 → gam7-7.20.4}/wiki/List.md +0 -0
  190. {gam7-7.20.3 → gam7-7.20.4}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  191. {gam7-7.20.3 → gam7-7.20.4}/wiki/Mobile-Devices.md +0 -0
  192. {gam7-7.20.3 → gam7-7.20.4}/wiki/Organizational-Units.md +0 -0
  193. {gam7-7.20.3 → gam7-7.20.4}/wiki/Other-Resources.md +0 -0
  194. {gam7-7.20.3 → gam7-7.20.4}/wiki/Permission-Matches.md +0 -0
  195. {gam7-7.20.3 → gam7-7.20.4}/wiki/Python-Regular-Expressions.md +0 -0
  196. {gam7-7.20.3 → gam7-7.20.4}/wiki/README.md +0 -0
  197. {gam7-7.20.3 → gam7-7.20.4}/wiki/Rclone.md +0 -0
  198. {gam7-7.20.3 → gam7-7.20.4}/wiki/Reseller.md +0 -0
  199. {gam7-7.20.3 → gam7-7.20.4}/wiki/Resources.md +0 -0
  200. {gam7-7.20.3 → gam7-7.20.4}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  201. {gam7-7.20.3 → gam7-7.20.4}/wiki/SSL-Root-CA-Certificates.md +0 -0
  202. {gam7-7.20.3 → gam7-7.20.4}/wiki/Schemas.md +0 -0
  203. {gam7-7.20.3 → gam7-7.20.4}/wiki/Scripts.md +0 -0
  204. {gam7-7.20.3 → gam7-7.20.4}/wiki/Send-Email.md +0 -0
  205. {gam7-7.20.3 → gam7-7.20.4}/wiki/Shared-Drives.md +0 -0
  206. {gam7-7.20.3 → gam7-7.20.4}/wiki/Sites.md +0 -0
  207. {gam7-7.20.3 → gam7-7.20.4}/wiki/Tag-Replace.md +0 -0
  208. {gam7-7.20.3 → gam7-7.20.4}/wiki/Todrive.md +0 -0
  209. {gam7-7.20.3 → gam7-7.20.4}/wiki/Unmanaged-Accounts.md +0 -0
  210. {gam7-7.20.3 → gam7-7.20.4}/wiki/Upgrade-Benefits.md +0 -0
  211. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Analytics-Admin.md +0 -0
  212. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Application-Specific-Passwords.md +0 -0
  213. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Backup-Verification-Codes.md +0 -0
  214. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Calendars-Access.md +0 -0
  215. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Calendars-Events.md +0 -0
  216. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Calendars.md +0 -0
  217. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Classification-Labels.md +0 -0
  218. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Classroom-Profile.md +0 -0
  219. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Contacts-Delegates.md +0 -0
  220. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Contacts.md +0 -0
  221. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Deprovision.md +0 -0
  222. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Activity-Settings.md +0 -0
  223. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Cleanup.md +0 -0
  224. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Comments.md +0 -0
  225. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Copy-Move.md +0 -0
  226. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Files-Display.md +0 -0
  227. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Files-Manage.md +0 -0
  228. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Orphans.md +0 -0
  229. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Ownership.md +0 -0
  230. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Permissions.md +0 -0
  231. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Query.md +0 -0
  232. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Revisions.md +0 -0
  233. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Shortcuts.md +0 -0
  234. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Drive-Transfer.md +0 -0
  235. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Forms.md +0 -0
  236. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-CSE.md +0 -0
  237. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Delegates.md +0 -0
  238. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Filters.md +0 -0
  239. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Forwarding.md +0 -0
  240. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Labels.md +0 -0
  241. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  242. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Profile.md +0 -0
  243. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-S-MIME.md +0 -0
  244. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  245. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Gmail-Settings.md +0 -0
  246. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Group-Membership.md +0 -0
  247. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Keep-Notes.md +0 -0
  248. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Looker-Studio.md +0 -0
  249. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Meet.md +0 -0
  250. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-People-Contacts-Profiles.md +0 -0
  251. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Photo.md +0 -0
  252. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Profile-Photo.md +0 -0
  253. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Profile-Sharing.md +0 -0
  254. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Shared-Drives.md +0 -0
  255. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  256. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Spreadsheets.md +0 -0
  257. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Tag-Manager.md +0 -0
  258. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Tasks.md +0 -0
  259. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Tokens.md +0 -0
  260. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  261. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users-YouTube.md +0 -0
  262. {gam7-7.20.3 → gam7-7.20.4}/wiki/Users.md +0 -0
  263. {gam7-7.20.3 → gam7-7.20.4}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  264. {gam7-7.20.3 → gam7-7.20.4}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  265. {gam7-7.20.3 → gam7-7.20.4}/wiki/Vault-Takeout.md +0 -0
  266. {gam7-7.20.3 → gam7-7.20.4}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  267. {gam7-7.20.3 → gam7-7.20.4}/wiki/Version-and-Help.md +0 -0
  268. {gam7-7.20.3 → gam7-7.20.4}/wiki/_Sidebar.md +0 -0
  269. {gam7-7.20.3 → gam7-7.20.4}/wiki/gam.cfg.md +0 -0
  270. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-AdminSettingsExamples.md +0 -0
  271. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Android-Installation.md +0 -0
  272. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-BulkOperations.md +0 -0
  273. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-CalendarExamples.md +0 -0
  274. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Chat-Bot.md +0 -0
  275. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Chrome-Browser-Management.md +0 -0
  276. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Chrome-OS-Installation.md +0 -0
  277. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Chrome-Policy-Settings.md +0 -0
  278. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Cloud-Identity-Groups.md +0 -0
  279. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  280. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Calendars.md +0 -0
  281. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Definitions.md +0 -0
  282. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Drive.md +0 -0
  283. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Email.md +0 -0
  284. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  285. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Groups.md +0 -0
  286. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Command-Reference-Users.md +0 -0
  287. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  288. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  289. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-CreatingClientSecretsFile.md +0 -0
  290. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Custom-Schemas.md +0 -0
  291. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Data-Transfers.md +0 -0
  292. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-DomainVerification.md +0 -0
  293. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-ExamplesAccountAuditing.md +0 -0
  294. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-ExamplesCSV.md +0 -0
  295. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-ExamplesEmailSettings.md +0 -0
  296. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-ExamplesOrganizations.md +0 -0
  297. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM-Discussion-Group.md +0 -0
  298. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  299. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM-options-files.md +0 -0
  300. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  301. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM3CSVListings.md +0 -0
  302. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM3DirectoryCommands.md +0 -0
  303. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM3GroupSettings.md +0 -0
  304. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GAM7-FAQ.md +0 -0
  305. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  306. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-GoogleDriveManagement.md +0 -0
  307. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  308. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Home.md +0 -0
  309. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  310. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Inbound-SSO-Settings.md +0 -0
  311. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-LicenseExamples.md +0 -0
  312. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Managing-Admins.md +0 -0
  313. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  314. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Managing-Devices.md +0 -0
  315. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Managing-Google-Classroom.md +0 -0
  316. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-OAuthKeyManagement.md +0 -0
  317. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Printers.md +0 -0
  318. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-ResellerCommands.md +0 -0
  319. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  320. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-SecurityExamples.md +0 -0
  321. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-UnmanagedUsersExamples.md +0 -0
  322. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Use-a-Yubikey.md +0 -0
  323. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  324. {gam7-7.20.3 → gam7-7.20.4}/wiki/l-_Footer.md +0 -0
@@ -188,7 +188,7 @@ jobs:
188
188
  export PYTHON=$(which python3)
189
189
  export PIP=$(which pip3)
190
190
  export gam="${PYTHON} -m gam"
191
- export gampath="$(readlink -e .)"
191
+ export gampath="$(readlink -e .)/gam"
192
192
  echo -e "PYTHON: ${PYTHON}\nPIP: ${PIP}\gam: ${gam}\ngampath: ${gampath}"
193
193
  echo "PYTHON=${PYTHON}" >> $GITHUB_ENV
194
194
  echo "PIP=${PIP}" >> $GITHUB_ENV
@@ -538,7 +538,7 @@ jobs:
538
538
  - name: Copy extra package files
539
539
  if: matrix.goal == 'build'
540
540
  run: |
541
- cp -v cacerts.pem "$gampath"
541
+ cp -v gam/cacerts.pem "$gampath"
542
542
  cp -v LICENSE "$gampath"
543
543
  cp -v GamCommands.txt "$gampath"
544
544
  cp -v GamUpdate.txt "$gampath"
@@ -588,7 +588,6 @@ jobs:
588
588
  - name: Basic Tests all jobs
589
589
  id: basictests
590
590
  run: |
591
- $PYTHON -m unittest discover --start-directory ./ --pattern "*_test.py" --buffer || if [ $? != 5 ]; then exit $?; fi # exit 5 is no tests
592
591
  $gam version extended nooffseterror
593
592
  export GAMVERSION=$($gam version simple)
594
593
  echo "GAM Version ${GAMVERSION}"
@@ -13,7 +13,7 @@ on:
13
13
  defaults:
14
14
  run:
15
15
  shell: bash
16
- working-directory: src
16
+ working-directory: src/gam
17
17
 
18
18
  jobs:
19
19
  check-certs:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.20.3
3
+ Version: 7.20.4
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,3 +1,7 @@
1
+ 7.20.04
2
+
3
+ Cleaned up Python library imports: googleapiclient, iso8601.
4
+
1
5
  7.20.03
2
6
 
3
7
  Rebranded license SKU `1010470004` from `Gemini Education` to `Google AI Pro for Education`.
@@ -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.20.03'
28
+ __version__ = '7.20.04'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -120,6 +120,10 @@ from google.auth.jwt import Credentials as JWTCredentials
120
120
  import google.oauth2.service_account
121
121
  import google_auth_oauthlib.flow
122
122
  import google_auth_httplib2
123
+ import googleapiclient
124
+ import googleapiclient.discovery
125
+ import googleapiclient.errors
126
+ import googleapiclient.http
123
127
  import httplib2
124
128
 
125
129
  httplib2.RETRIES = 5
@@ -139,6 +143,7 @@ from gamlib import glgapi as GAPI
139
143
  from gamlib import glgdata as GDATA
140
144
  from gamlib import glglobals as GM
141
145
  from gamlib import glindent
146
+ from gamlib import gliso8601 as iso8601
142
147
  from gamlib import glmsgs as Msg
143
148
  from gamlib import glskus as SKU
144
149
  from gamlib import gluprop as UProp
@@ -149,12 +154,6 @@ import gdata.apps.audit
149
154
  import gdata.apps.audit.service
150
155
  import gdata.apps.contacts
151
156
  import gdata.apps.contacts.service
152
- # Import local library, does not include discovery documents
153
- import googleapiclient
154
- import googleapiclient.discovery
155
- import googleapiclient.errors
156
- import googleapiclient.http
157
- from iso8601 import iso8601
158
157
 
159
158
  IS08601_TIME_FORMAT = '%Y-%m-%dT%H:%M:%S%:z'
160
159
  RFC2822_TIME_FORMAT = '%a, %d %b %Y %H:%M:%S %z'
@@ -2013,11 +2012,11 @@ def getTimeOrDeltaFromNow(returnDateTime=False):
2013
2012
  except OverflowError:
2014
2013
  pass
2015
2014
  try:
2016
- fullDateTime, tz = iso8601.parse_date(argstr)
2015
+ fullDateTime = iso8601.parse_date(argstr)
2017
2016
  Cmd.Advance()
2018
2017
  if not returnDateTime:
2019
2018
  return argstr.replace(' ', 'T')
2020
- return (fullDateTime, tz, argstr.replace(' ', 'T'))
2019
+ return (fullDateTime, fullDateTime.tzinfo, argstr.replace(' ', 'T'))
2021
2020
  except (iso8601.ParseError, OverflowError):
2022
2021
  pass
2023
2022
  invalidArgumentExit(YYYYMMDDTHHMMSS_FORMAT_REQUIRED)
@@ -2335,7 +2334,7 @@ def formatLocalTime(dateTimeStr):
2335
2334
  if dateTimeStr in {NEVER_TIME, NEVER_TIME_NOMS}:
2336
2335
  return GC.Values[GC.NEVER_TIME]
2337
2336
  try:
2338
- timestamp, _ = iso8601.parse_date(dateTimeStr)
2337
+ timestamp = iso8601.parse_date(dateTimeStr)
2339
2338
  if not GC.Values[GC.OUTPUT_TIMEFORMAT]:
2340
2339
  if GM.Globals[GM.CONVERT_TO_LOCAL_TIME]:
2341
2340
  return ISOformatTimeStamp(timestamp.astimezone(GC.Values[GC.TIMEZONE]))
@@ -3736,10 +3735,7 @@ def SetGlobalVariables():
3736
3735
  if value and not os.path.isabs(value):
3737
3736
  value = os.path.expanduser(os.path.join(_getCfgDirectory(sectionName, GC.CONFIG_DIR), value))
3738
3737
  elif not value and itemName == GC.CACERTS_PEM:
3739
- if hasattr(sys, '_MEIPASS'):
3740
- value = os.path.join(sys._MEIPASS, GC.FN_CACERTS_PEM) #pylint: disable=no-member
3741
- else:
3742
- value = os.path.join(GM.Globals[GM.GAM_PATH], GC.FN_CACERTS_PEM)
3738
+ value = os.path.join(GM.Globals[GM.GAM_PATH], GC.FN_CACERTS_PEM)
3743
3739
  return value
3744
3740
 
3745
3741
  def _readGamCfgFile(config, fileName):
@@ -7436,7 +7432,7 @@ def RowFilterMatch(row, titlesList, rowFilter, rowFilterModeAll, rowDropFilter,
7436
7432
  return None
7437
7433
  else:
7438
7434
  try:
7439
- rowTime, _ = iso8601.parse_date(rowDate)
7435
+ rowTime = iso8601.parse_date(rowDate)
7440
7436
  except (iso8601.ParseError, OverflowError):
7441
7437
  return None
7442
7438
  return ISOformatTimeStamp(datetime.datetime(rowTime.year, rowTime.month, rowTime.day, tzinfo=iso8601.UTC))
@@ -7501,7 +7497,7 @@ def RowFilterMatch(row, titlesList, rowFilter, rowFilterModeAll, rowDropFilter,
7501
7497
  if YYYYMMDD_PATTERN.match(rowDate):
7502
7498
  return None
7503
7499
  try:
7504
- rowTime, _ = iso8601.parse_date(rowDate)
7500
+ rowTime = iso8601.parse_date(rowDate)
7505
7501
  except (iso8601.ParseError, OverflowError):
7506
7502
  return None
7507
7503
  return f'{rowTime.hour:02d}:{rowTime.minute:02d}'
@@ -12413,7 +12409,7 @@ def checkServiceAccount(users):
12413
12409
  throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND,
12414
12410
  GAPI.PERMISSION_DENIED, GAPI.SERVICE_NOT_AVAILABLE],
12415
12411
  name=name, fields='validAfterTime')
12416
- key_created, _ = iso8601.parse_date(key['validAfterTime'])
12412
+ key_created = iso8601.parse_date(key['validAfterTime'])
12417
12413
  key_age = todaysTime()-key_created
12418
12414
  printPassFail(Msg.SERVICE_ACCOUNT_PRIVATE_KEY_AGE.format(key_age.days), testWarn if key_age.days > 30 else testPass)
12419
12415
  except GAPI.permissionDenied:
@@ -14368,7 +14364,7 @@ def doReport():
14368
14364
  eventTime = activity.get('id', {}).get('time', UNKNOWN)
14369
14365
  if eventTime != UNKNOWN:
14370
14366
  try:
14371
- eventTime, _ = iso8601.parse_date(eventTime)
14367
+ eventTime = iso8601.parse_date(eventTime)
14372
14368
  except (iso8601.ParseError, OverflowError):
14373
14369
  eventTime = UNKNOWN
14374
14370
  if eventTime != UNKNOWN:
@@ -23867,7 +23863,7 @@ def _filterDeviceFiles(cros, selected, listLimit, startTime, endTime):
23867
23863
  filteredItems = []
23868
23864
  i = 0
23869
23865
  for item in cros.get('deviceFiles', []):
23870
- timeValue, _ = iso8601.parse_date(item['createTime'])
23866
+ timeValue = iso8601.parse_date(item['createTime'])
23871
23867
  if ((startTime is None) or (timeValue >= startTime)) and ((endTime is None) or (timeValue <= endTime)):
23872
23868
  item['createTime'] = formatLocalTime(item['createTime'])
23873
23869
  filteredItems.append(item)
@@ -23884,7 +23880,7 @@ def _filterCPUStatusReports(cros, selected, listLimit, startTime, endTime):
23884
23880
  filteredItems = []
23885
23881
  i = 0
23886
23882
  for item in cros.get('cpuStatusReports', []):
23887
- timeValue, _ = iso8601.parse_date(item['reportTime'])
23883
+ timeValue = iso8601.parse_date(item['reportTime'])
23888
23884
  if ((startTime is None) or (timeValue >= startTime)) and ((endTime is None) or (timeValue <= endTime)):
23889
23885
  item['reportTime'] = formatLocalTime(item['reportTime'])
23890
23886
  for tempInfo in item.get('cpuTemperatureInfo', []):
@@ -23905,7 +23901,7 @@ def _filterSystemRamFreeReports(cros, selected, listLimit, startTime, endTime):
23905
23901
  filteredItems = []
23906
23902
  i = 0
23907
23903
  for item in cros.get('systemRamFreeReports', []):
23908
- timeValue, _ = iso8601.parse_date(item['reportTime'])
23904
+ timeValue = iso8601.parse_date(item['reportTime'])
23909
23905
  if ((startTime is None) or (timeValue >= startTime)) and ((endTime is None) or (timeValue <= endTime)):
23910
23906
  item['reportTime'] = formatLocalTime(item['reportTime'])
23911
23907
  item['systemRamFreeInfo'] = ','.join([str(x) for x in item['systemRamFreeInfo']])
@@ -23938,7 +23934,7 @@ def _filterScreenshotFiles(cros, selected, listLimit, startTime, endTime):
23938
23934
  filteredItems = []
23939
23935
  i = 0
23940
23936
  for item in cros.get('screenshotFiles', []):
23941
- timeValue, _ = iso8601.parse_date(item['createTime'])
23937
+ timeValue = iso8601.parse_date(item['createTime'])
23942
23938
  if ((startTime is None) or (timeValue >= startTime)) and ((endTime is None) or (timeValue <= endTime)):
23943
23939
  item['createTime'] = formatLocalTime(item['createTime'])
23944
23940
  filteredItems.append(item)
@@ -24386,7 +24382,7 @@ def getDeviceFilesEntity():
24386
24382
  else:
24387
24383
  for timeItem in myarg.split(','):
24388
24384
  try:
24389
- timestamp, _ = iso8601.parse_date(timeItem)
24385
+ timestamp = iso8601.parse_date(timeItem)
24390
24386
  deviceFilesEntity['list'].append(ISOformatTimeStamp(timestamp.astimezone(GC.Values[GC.TIMEZONE])))
24391
24387
  except (iso8601.ParseError, OverflowError):
24392
24388
  Cmd.Backup()
@@ -24415,14 +24411,14 @@ def _selectDeviceFiles(deviceId, deviceFiles, deviceFilesEntity):
24415
24411
  count = 0
24416
24412
  if deviceFilesEntity['time'][0] == 'before':
24417
24413
  for deviceFile in deviceFiles:
24418
- createTime, _ = iso8601.parse_date(deviceFile['createTime'])
24414
+ createTime = iso8601.parse_date(deviceFile['createTime'])
24419
24415
  if createTime >= dateTime:
24420
24416
  break
24421
24417
  count += 1
24422
24418
  return deviceFiles[:count]
24423
24419
  # if deviceFilesEntity['time'][0] == 'after':
24424
24420
  for deviceFile in deviceFiles:
24425
- createTime, _ = iso8601.parse_date(deviceFile['createTime'])
24421
+ createTime = iso8601.parse_date(deviceFile['createTime'])
24426
24422
  if createTime >= dateTime:
24427
24423
  break
24428
24424
  count += 1
@@ -24431,14 +24427,14 @@ def _selectDeviceFiles(deviceId, deviceFiles, deviceFilesEntity):
24431
24427
  dateTime = deviceFilesEntity['range'][1]
24432
24428
  spos = 0
24433
24429
  for deviceFile in deviceFiles:
24434
- createTime, _ = iso8601.parse_date(deviceFile['createTime'])
24430
+ createTime = iso8601.parse_date(deviceFile['createTime'])
24435
24431
  if createTime >= dateTime:
24436
24432
  break
24437
24433
  spos += 1
24438
24434
  dateTime = deviceFilesEntity['range'][2]
24439
24435
  epos = spos
24440
24436
  for deviceFile in deviceFiles[spos:]:
24441
- createTime, _ = iso8601.parse_date(deviceFile['createTime'])
24437
+ createTime = iso8601.parse_date(deviceFile['createTime'])
24442
24438
  if createTime >= dateTime:
24443
24439
  break
24444
24440
  epos += 1
@@ -25221,7 +25217,7 @@ def doInfoPrintShowCrOSTelemetry():
25221
25217
  i = 0
25222
25218
  for item in listItems:
25223
25219
  if 'reportTime' in item:
25224
- timeValue, _ = iso8601.parse_date(item['reportTime'])
25220
+ timeValue = iso8601.parse_date(item['reportTime'])
25225
25221
  else:
25226
25222
  timeValue = None
25227
25223
  if (timeValue is None) or (((startTime is None) or (timeValue >= startTime)) and ((endTime is None) or (timeValue <= endTime))):
@@ -40068,7 +40064,7 @@ def _getEventDaysOfWeek(event):
40068
40064
  pass
40069
40065
  elif 'dateTime' in event[attr]:
40070
40066
  try:
40071
- dateTime, _ = iso8601.parse_date(event[attr]['dateTime'])
40067
+ dateTime = iso8601.parse_date(event[attr]['dateTime'])
40072
40068
  event[attr]['dayOfWeek'] = calendarlib.day_abbr[dateTime.weekday()]
40073
40069
  except (iso8601.ParseError, OverflowError):
40074
40070
  pass
@@ -48699,7 +48695,7 @@ def _courseItemPassesFilter(item, courseItemFilter):
48699
48695
  return False
48700
48696
  startTime = courseItemFilter['startTime']
48701
48697
  endTime = courseItemFilter['endTime']
48702
- timeValue, _ = iso8601.parse_date(timeStr)
48698
+ timeValue = iso8601.parse_date(timeStr)
48703
48699
  return ((startTime is None) or (timeValue >= startTime)) and ((endTime is None) or (timeValue <= endTime))
48704
48700
 
48705
48701
  def _gettingCoursesQuery(courseSelectionParameters):
@@ -56258,7 +56254,7 @@ def _selectRevisionIds(drive, fileId, origUser, user, i, count, j, jcount, revis
56258
56254
  count = 0
56259
56255
  if revisionsEntity['time'][0] == 'before':
56260
56256
  for revision in results:
56261
- modifiedDateTime, _ = iso8601.parse_date(revision['modifiedTime'])
56257
+ modifiedDateTime = iso8601.parse_date(revision['modifiedTime'])
56262
56258
  if modifiedDateTime >= dateTime:
56263
56259
  break
56264
56260
  revisionIds.append(revision['id'])
@@ -56268,7 +56264,7 @@ def _selectRevisionIds(drive, fileId, origUser, user, i, count, j, jcount, revis
56268
56264
  return revisionIds
56269
56265
  # time: after
56270
56266
  for revision in results:
56271
- modifiedDateTime, _ = iso8601.parse_date(revision['modifiedTime'])
56267
+ modifiedDateTime = iso8601.parse_date(revision['modifiedTime'])
56272
56268
  if modifiedDateTime >= dateTime:
56273
56269
  revisionIds.append(revision['id'])
56274
56270
  count += 1
@@ -56280,7 +56276,7 @@ def _selectRevisionIds(drive, fileId, origUser, user, i, count, j, jcount, revis
56280
56276
  endDateTime = revisionsEntity['range'][2]
56281
56277
  count = 0
56282
56278
  for revision in results:
56283
- modifiedDateTime, _ = iso8601.parse_date(revision['modifiedTime'])
56279
+ modifiedDateTime = iso8601.parse_date(revision['modifiedTime'])
56284
56280
  if modifiedDateTime >= startDateTime:
56285
56281
  if modifiedDateTime >= endDateTime:
56286
56282
  break
@@ -56490,7 +56486,7 @@ def _selectRevisionResults(results, fileId, origUser, revisionsEntity, previewDe
56490
56486
  count = 0
56491
56487
  if revisionsEntity['time'][0] == 'before':
56492
56488
  for revision in results:
56493
- modifiedDateTime, _ = iso8601.parse_date(revision['modifiedTime'])
56489
+ modifiedDateTime = iso8601.parse_date(revision['modifiedTime'])
56494
56490
  if modifiedDateTime >= dateTime:
56495
56491
  break
56496
56492
  count += 1
@@ -56501,7 +56497,7 @@ def _selectRevisionResults(results, fileId, origUser, revisionsEntity, previewDe
56501
56497
  return results[:count]
56502
56498
  # time: after
56503
56499
  for revision in results:
56504
- modifiedDateTime, _ = iso8601.parse_date(revision['modifiedTime'])
56500
+ modifiedDateTime = iso8601.parse_date(revision['modifiedTime'])
56505
56501
  if modifiedDateTime >= dateTime:
56506
56502
  break
56507
56503
  count += 1
@@ -56518,7 +56514,7 @@ def _selectRevisionResults(results, fileId, origUser, revisionsEntity, previewDe
56518
56514
  count = 0
56519
56515
  selectedResults = []
56520
56516
  for revision in results:
56521
- modifiedDateTime, _ = iso8601.parse_date(revision['modifiedTime'])
56517
+ modifiedDateTime = iso8601.parse_date(revision['modifiedTime'])
56522
56518
  if modifiedDateTime >= startDateTime:
56523
56519
  if modifiedDateTime >= endDateTime:
56524
56520
  break
@@ -57056,7 +57052,7 @@ class PermissionMatch():
57056
57052
  break
57057
57053
  elif field in {'expirationstart', 'expirationend'}:
57058
57054
  if 'expirationTime' in permission:
57059
- expirationDateTime, _ = iso8601.parse_date(permission['expirationTime'])
57055
+ expirationDateTime = iso8601.parse_date(permission['expirationTime'])
57060
57056
  if field == 'expirationstart':
57061
57057
  if expirationDateTime < value:
57062
57058
  break
@@ -148,13 +148,12 @@ def parse_date(datestring):
148
148
  groups = m.groupdict()
149
149
  tz = parse_timezone(groups)
150
150
  try:
151
- return (datetime(year=int(groups['year']),
152
- month=int(groups['month']),
153
- day=int(groups['day']),
154
- hour=int(groups['hour']),
155
- minute=int(groups['minute']),
156
- second=int(groups['second']),
157
- tzinfo=tz),
158
- tz)
151
+ return datetime(year=int(groups['year']),
152
+ month=int(groups['month']),
153
+ day=int(groups['day']),
154
+ hour=int(groups['hour']),
155
+ minute=int(groups['minute']),
156
+ second=int(groups['second']),
157
+ tzinfo=tz)
159
158
  except Exception as e:
160
159
  raise ParseError(e)
@@ -33,7 +33,7 @@ datas += [('gam/contactdelegation-v1.json', '.')]
33
33
  datas += [('gam/datastudio-v1.json', '.')]
34
34
  datas += [('gam/meet-v2beta.json', '.')]
35
35
  datas += [('gam/serviceaccountlookup-v1.json', '.')]
36
- datas += [('cacerts.pem', '.')]
36
+ #datas += [('cacerts.pem', '.')]
37
37
  hiddenimports = [
38
38
  'gam.gamlib.yubikey',
39
39
  ]
@@ -49,7 +49,7 @@ a = Analysis(
49
49
  binaries=[],
50
50
  datas=datas,
51
51
  hiddenimports=hiddenimports,
52
- hookspath=[],
52
+ hookspath=['tools/hooks'],
53
53
  hooksconfig={},
54
54
  runtime_hooks=runtime_hooks,
55
55
  excludes=excludes,
@@ -0,0 +1,21 @@
1
+ # ------------------------------------------------------------------
2
+ # Copyright (c) 2021 PyInstaller Development Team.
3
+ #
4
+ # This file is distributed under the terms of the GNU General Public
5
+ # License (version 2.0 or later).
6
+ #
7
+ # The full license is available in LICENSE, distributed with
8
+ # this software.
9
+ #
10
+ # SPDX-License-Identifier: GPL-2.0-or-later
11
+ # ------------------------------------------------------------------
12
+
13
+ from PyInstaller.utils.hooks import copy_metadata
14
+ from PyInstaller.utils.hooks import collect_data_files
15
+
16
+ # googleapiclient.model queries the library version via
17
+ # pkg_resources.get_distribution("google-api-python-client").version,
18
+ # so we need to collect that package's metadata
19
+ datas = copy_metadata('google_api_python_client')
20
+ # we don't want these cached discovery files and they make the binary HUUUGEEEE
21
+ #datas += collect_data_files('googleapiclient.discovery_cache', excludes=['*.txt', '**/__pycache__'])
@@ -0,0 +1,19 @@
1
+ # ------------------------------------------------------------------
2
+ # Copyright (c) 2020 PyInstaller Development Team.
3
+ #
4
+ # This file is distributed under the terms of the GNU General Public
5
+ # License (version 2.0 or later).
6
+ #
7
+ # The full license is available in LICENSE, distributed with
8
+ # this software.
9
+ #
10
+ # SPDX-License-Identifier: GPL-2.0-or-later
11
+ # ------------------------------------------------------------------
12
+
13
+ # This is needed to bundle cacerts.txt that comes with httplib2 module
14
+
15
+ # WE DON'T NEED httplib2/cacerts.txt since we get our own
16
+
17
+ #from PyInstaller.utils.hooks import collect_data_files
18
+
19
+ #datas = collect_data_files('httplib2')
@@ -326,7 +326,7 @@ Use an existing project to create and download two files: `client_secrets.json`
326
326
  Use an existing uninitialized/uncredentialed project and configure it to be a GAM project; this typically used when
327
327
  the GCP administrators have created a basic project because project creation is not available for most users.
328
328
 
329
- See Jay's notes about how to do this: https://github.com/GAM-team/GAM/wiki/GAM-with--minimal-GCP-rights
329
+ See Jay's notes about how to do this: https://github.com/GAM-team/GAM/wiki/GAM-with-minimal-GCP-rights
330
330
 
331
331
  ```
332
332
  gam use project [<EmailAddress>] [project <ProjectID>]
@@ -63,7 +63,7 @@
63
63
  | Gemini Education Premium | 1010470005 | geminiedupremium |
64
64
  | Gemini Enterprise | 1010470001 | geminient | duetai |
65
65
  | Google AI Pro for Education | 1010470004 | gaiproedu |
66
- | Google AI Ultra for Business | 1010470008 | geminiultra }
66
+ | Google AI Ultra for Business | 1010470008 | geminiultra |
67
67
  | Google Apps Message Security | Google-Apps-For-Postini | postini |
68
68
  | Google Chrome Device Management | Google-Chrome-Device-Management | cdm |
69
69
  | Google Drive Storage 16TB | Google-Drive-storage-16TB | 16tb |