gam7 7.23.4__tar.gz → 7.23.5__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 (303) hide show
  1. {gam7-7.23.4 → gam7-7.23.5}/.github/workflows/build.yml +5 -4
  2. {gam7-7.23.4 → gam7-7.23.5}/.github/workflows/pypi.yml +1 -1
  3. {gam7-7.23.4 → gam7-7.23.5}/PKG-INFO +1 -1
  4. {gam7-7.23.4 → gam7-7.23.5}/src/GamCommands.txt +4 -3
  5. {gam7-7.23.4 → gam7-7.23.5}/src/GamUpdate.txt +5 -0
  6. {gam7-7.23.4 → gam7-7.23.5}/src/gam/__init__.py +69 -28
  7. {gam7-7.23.4 → gam7-7.23.5}/wiki/Calendars-Events.md +7 -3
  8. {gam7-7.23.4 → gam7-7.23.5}/wiki/GamUpdates.md +12 -0
  9. {gam7-7.23.4 → gam7-7.23.5}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +1 -1
  10. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Calendars-Events.md +6 -3
  11. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-People-Contacts-Profiles.md +8 -8
  12. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Tasks.md +3 -3
  13. {gam7-7.23.4 → gam7-7.23.5}/wiki/Version-and-Help.md +3 -3
  14. {gam7-7.23.4 → gam7-7.23.5}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  15. {gam7-7.23.4 → gam7-7.23.5}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  16. {gam7-7.23.4 → gam7-7.23.5}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  17. {gam7-7.23.4 → gam7-7.23.5}/.github/ISSUE_TEMPLATE.txt +0 -0
  18. {gam7-7.23.4 → gam7-7.23.5}/.github/actions/decrypt.sh +0 -0
  19. {gam7-7.23.4 → gam7-7.23.5}/.github/actions/entitlements.plist +0 -0
  20. {gam7-7.23.4 → gam7-7.23.5}/.github/actions/package_exclusions.txt +0 -0
  21. {gam7-7.23.4 → gam7-7.23.5}/.github/stale.yml +0 -0
  22. {gam7-7.23.4 → gam7-7.23.5}/.github/workflows/codeql-analysis.yml +0 -0
  23. {gam7-7.23.4 → gam7-7.23.5}/.github/workflows/get-cacerts.yml +0 -0
  24. {gam7-7.23.4 → gam7-7.23.5}/.github/workflows/pushwiki.yml +0 -0
  25. {gam7-7.23.4 → gam7-7.23.5}/LICENSE +0 -0
  26. {gam7-7.23.4 → gam7-7.23.5}/README.md +0 -0
  27. {gam7-7.23.4 → gam7-7.23.5}/pyproject.toml +0 -0
  28. {gam7-7.23.4 → gam7-7.23.5}/src/.gitignore +0 -0
  29. {gam7-7.23.4 → gam7-7.23.5}/src/LICENSE +0 -0
  30. {gam7-7.23.4 → gam7-7.23.5}/src/README.md +0 -0
  31. {gam7-7.23.4 → gam7-7.23.5}/src/callgam.py +0 -0
  32. {gam7-7.23.4 → gam7-7.23.5}/src/gam/__main__.py +0 -0
  33. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/__init__.py +0 -0
  34. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/auth.py +0 -0
  35. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/client.py +0 -0
  36. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/core.py +0 -0
  37. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/data.py +0 -0
  38. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/http.py +0 -0
  39. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/http_core.py +0 -0
  40. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/http_interface.py +0 -0
  41. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/mock_http.py +0 -0
  42. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/mock_http_core.py +0 -0
  43. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/mock_service.py +0 -0
  44. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/service.py +0 -0
  45. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/token_store.py +0 -0
  46. {gam7-7.23.4 → gam7-7.23.5}/src/gam/atom/url.py +0 -0
  47. {gam7-7.23.4 → gam7-7.23.5}/src/gam/cacerts.pem +0 -0
  48. {gam7-7.23.4 → gam7-7.23.5}/src/gam/cbcm-v1.1beta1.json +0 -0
  49. {gam7-7.23.4 → gam7-7.23.5}/src/gam/contactdelegation-v1.json +0 -0
  50. {gam7-7.23.4 → gam7-7.23.5}/src/gam/datastudio-v1.json +0 -0
  51. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/__init__.py +0 -0
  52. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glaction.py +0 -0
  53. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glapi.py +0 -0
  54. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glcfg.py +0 -0
  55. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glclargs.py +0 -0
  56. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glentity.py +0 -0
  57. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glgapi.py +0 -0
  58. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glgdata.py +0 -0
  59. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glglobals.py +0 -0
  60. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glindent.py +0 -0
  61. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glmsgs.py +0 -0
  62. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glskus.py +0 -0
  63. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/gluprop.py +0 -0
  64. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/glverlibs.py +0 -0
  65. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gamlib/yubikey.py +0 -0
  66. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/__init__.py +0 -0
  67. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/alt/__init__.py +0 -0
  68. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/alt/app_engine.py +0 -0
  69. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/alt/appengine.py +0 -0
  70. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/apps/__init__.py +0 -0
  71. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/apps/audit/__init__.py +0 -0
  72. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/apps/audit/service.py +0 -0
  73. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  74. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/apps/contacts/service.py +0 -0
  75. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/apps/service.py +0 -0
  76. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/service.py +0 -0
  77. {gam7-7.23.4 → gam7-7.23.5}/src/gam/gdata/urlfetch.py +0 -0
  78. {gam7-7.23.4 → gam7-7.23.5}/src/gam/meet-v2beta.json +0 -0
  79. {gam7-7.23.4 → gam7-7.23.5}/src/gam/serviceaccountlookup-v1.json +0 -0
  80. {gam7-7.23.4 → gam7-7.23.5}/src/gam-install.sh +0 -0
  81. {gam7-7.23.4 → gam7-7.23.5}/src/gam-setup.bat +0 -0
  82. {gam7-7.23.4 → gam7-7.23.5}/src/gam.exe.manifest +0 -0
  83. {gam7-7.23.4 → gam7-7.23.5}/src/gam.py +0 -0
  84. {gam7-7.23.4 → gam7-7.23.5}/src/gam.spec +0 -0
  85. {gam7-7.23.4 → gam7-7.23.5}/src/gam.wxs +0 -0
  86. {gam7-7.23.4 → gam7-7.23.5}/src/license.rtf +0 -0
  87. {gam7-7.23.4 → gam7-7.23.5}/src/tools/a_atleast_b.py +0 -0
  88. {gam7-7.23.4 → gam7-7.23.5}/src/tools/gen-wix-xml-filelist.py +0 -0
  89. {gam7-7.23.4 → gam7-7.23.5}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
  90. {gam7-7.23.4 → gam7-7.23.5}/src/tools/hooks/hook-httplib2.py +0 -0
  91. {gam7-7.23.4 → gam7-7.23.5}/src/tools/mkGamRef.py +0 -0
  92. {gam7-7.23.4 → gam7-7.23.5}/src/tools/openssl.props +0 -0
  93. {gam7-7.23.4 → gam7-7.23.5}/src/tools/ssd.mjs +0 -0
  94. {gam7-7.23.4 → gam7-7.23.5}/src/version_info.txt.in +0 -0
  95. {gam7-7.23.4 → gam7-7.23.5}/wiki/00scratch.md +0 -0
  96. {gam7-7.23.4 → gam7-7.23.5}/wiki/Addresses.md +0 -0
  97. {gam7-7.23.4 → gam7-7.23.5}/wiki/Administrators.md +0 -0
  98. {gam7-7.23.4 → gam7-7.23.5}/wiki/Alert-Center.md +0 -0
  99. {gam7-7.23.4 → gam7-7.23.5}/wiki/Aliases.md +0 -0
  100. {gam7-7.23.4 → gam7-7.23.5}/wiki/Authorization.md +0 -0
  101. {gam7-7.23.4 → gam7-7.23.5}/wiki/BNF-Syntax.md +0 -0
  102. {gam7-7.23.4 → gam7-7.23.5}/wiki/Basic-Items.md +0 -0
  103. {gam7-7.23.4 → gam7-7.23.5}/wiki/Bulk-Processing.md +0 -0
  104. {gam7-7.23.4 → gam7-7.23.5}/wiki/Business-Account-Management.md +0 -0
  105. {gam7-7.23.4 → gam7-7.23.5}/wiki/CSV-Input-Filtering.md +0 -0
  106. {gam7-7.23.4 → gam7-7.23.5}/wiki/CSV-Output-Filtering.md +0 -0
  107. {gam7-7.23.4 → gam7-7.23.5}/wiki/CSV-Special-Characters.md +0 -0
  108. {gam7-7.23.4 → gam7-7.23.5}/wiki/Calendars-Access.md +0 -0
  109. {gam7-7.23.4 → gam7-7.23.5}/wiki/Calendars.md +0 -0
  110. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chat-Bot-Setup-Use.md +0 -0
  111. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-AUE-Counts.md +0 -0
  112. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  113. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Installed-Apps.md +0 -0
  114. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  115. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Policies.md +0 -0
  116. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Printers.md +0 -0
  117. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Profile-Management.md +0 -0
  118. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Version-Counts.md +0 -0
  119. {gam7-7.23.4 → gam7-7.23.5}/wiki/Chrome-Version-History.md +0 -0
  120. {gam7-7.23.4 → gam7-7.23.5}/wiki/ChromeOS-Devices.md +0 -0
  121. {gam7-7.23.4 → gam7-7.23.5}/wiki/Classroom-Courses.md +0 -0
  122. {gam7-7.23.4 → gam7-7.23.5}/wiki/Classroom-Guardians.md +0 -0
  123. {gam7-7.23.4 → gam7-7.23.5}/wiki/Classroom-Invitations.md +0 -0
  124. {gam7-7.23.4 → gam7-7.23.5}/wiki/Classroom-Membership.md +0 -0
  125. {gam7-7.23.4 → gam7-7.23.5}/wiki/Classroom-StudentGroups.md +0 -0
  126. {gam7-7.23.4 → gam7-7.23.5}/wiki/Cloud-Channel.md +0 -0
  127. {gam7-7.23.4 → gam7-7.23.5}/wiki/Cloud-Identity-Devices.md +0 -0
  128. {gam7-7.23.4 → gam7-7.23.5}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  129. {gam7-7.23.4 → gam7-7.23.5}/wiki/Cloud-Identity-Groups.md +0 -0
  130. {gam7-7.23.4 → gam7-7.23.5}/wiki/Cloud-Identity-Policies.md +0 -0
  131. {gam7-7.23.4 → gam7-7.23.5}/wiki/Cloud-Storage.md +0 -0
  132. {gam7-7.23.4 → gam7-7.23.5}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  133. {gam7-7.23.4 → gam7-7.23.5}/wiki/Collections-of-Items.md +0 -0
  134. {gam7-7.23.4 → gam7-7.23.5}/wiki/Collections-of-Users.md +0 -0
  135. {gam7-7.23.4 → gam7-7.23.5}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  136. {gam7-7.23.4 → gam7-7.23.5}/wiki/Command-Line-Parsing.md +0 -0
  137. {gam7-7.23.4 → gam7-7.23.5}/wiki/Command-Logging-Progress.md +0 -0
  138. {gam7-7.23.4 → gam7-7.23.5}/wiki/Context-Aware-Access-Levels.md +0 -0
  139. {gam7-7.23.4 → gam7-7.23.5}/wiki/Customer.md +0 -0
  140. {gam7-7.23.4 → gam7-7.23.5}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  141. {gam7-7.23.4 → gam7-7.23.5}/wiki/Domain-SharedContacts.md +0 -0
  142. {gam7-7.23.4 → gam7-7.23.5}/wiki/Domains-Verification.md +0 -0
  143. {gam7-7.23.4 → gam7-7.23.5}/wiki/Domains.md +0 -0
  144. {gam7-7.23.4 → gam7-7.23.5}/wiki/Downloads-Installs.md +0 -0
  145. {gam7-7.23.4 → gam7-7.23.5}/wiki/Drive-File-Selection.md +0 -0
  146. {gam7-7.23.4 → gam7-7.23.5}/wiki/Drive-Items.md +0 -0
  147. {gam7-7.23.4 → gam7-7.23.5}/wiki/Drive-REST-API-v3.md +0 -0
  148. {gam7-7.23.4 → gam7-7.23.5}/wiki/Email-Audit-Monitor.md +0 -0
  149. {gam7-7.23.4 → gam7-7.23.5}/wiki/Find-File-Owner.md +0 -0
  150. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM-Public-Chat-Room.md +0 -0
  151. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM-Release-Process.md +0 -0
  152. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM-Return-Codes.md +0 -0
  153. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  154. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM7-FAQ.md +0 -0
  155. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM7-on-Android-Devices.md +0 -0
  156. {gam7-7.23.4 → gam7-7.23.5}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  157. {gam7-7.23.4 → gam7-7.23.5}/wiki/Global-Address-List.md +0 -0
  158. {gam7-7.23.4 → gam7-7.23.5}/wiki/Google-Data-Transfers.md +0 -0
  159. {gam7-7.23.4 → gam7-7.23.5}/wiki/Google-Network-Addresses.md +0 -0
  160. {gam7-7.23.4 → gam7-7.23.5}/wiki/Groups-Membership.md +0 -0
  161. {gam7-7.23.4 → gam7-7.23.5}/wiki/Groups.md +0 -0
  162. {gam7-7.23.4 → gam7-7.23.5}/wiki/HTTPS-Proxy.md +0 -0
  163. {gam7-7.23.4 → gam7-7.23.5}/wiki/Home.md +0 -0
  164. {gam7-7.23.4 → gam7-7.23.5}/wiki/How-to-Install-GAM7.md +0 -0
  165. {gam7-7.23.4 → gam7-7.23.5}/wiki/How-to-Uninstall-GAM7.md +0 -0
  166. {gam7-7.23.4 → gam7-7.23.5}/wiki/How-to-Update-GAM7.md +0 -0
  167. {gam7-7.23.4 → gam7-7.23.5}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  168. {gam7-7.23.4 → gam7-7.23.5}/wiki/Inbound-SSO.md +0 -0
  169. {gam7-7.23.4 → gam7-7.23.5}/wiki/Install-GAM-as-Python-Library.md +0 -0
  170. {gam7-7.23.4 → gam7-7.23.5}/wiki/Licenses.md +0 -0
  171. {gam7-7.23.4 → gam7-7.23.5}/wiki/List-Items.md +0 -0
  172. {gam7-7.23.4 → gam7-7.23.5}/wiki/List.md +0 -0
  173. {gam7-7.23.4 → gam7-7.23.5}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  174. {gam7-7.23.4 → gam7-7.23.5}/wiki/Mobile-Devices.md +0 -0
  175. {gam7-7.23.4 → gam7-7.23.5}/wiki/Organizational-Units.md +0 -0
  176. {gam7-7.23.4 → gam7-7.23.5}/wiki/Other-Resources.md +0 -0
  177. {gam7-7.23.4 → gam7-7.23.5}/wiki/Permission-Matches.md +0 -0
  178. {gam7-7.23.4 → gam7-7.23.5}/wiki/Python-Regular-Expressions.md +0 -0
  179. {gam7-7.23.4 → gam7-7.23.5}/wiki/README.md +0 -0
  180. {gam7-7.23.4 → gam7-7.23.5}/wiki/Rclone.md +0 -0
  181. {gam7-7.23.4 → gam7-7.23.5}/wiki/Reports.md +0 -0
  182. {gam7-7.23.4 → gam7-7.23.5}/wiki/Reseller.md +0 -0
  183. {gam7-7.23.4 → gam7-7.23.5}/wiki/Resources.md +0 -0
  184. {gam7-7.23.4 → gam7-7.23.5}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  185. {gam7-7.23.4 → gam7-7.23.5}/wiki/SSL-Root-CA-Certificates.md +0 -0
  186. {gam7-7.23.4 → gam7-7.23.5}/wiki/Schemas.md +0 -0
  187. {gam7-7.23.4 → gam7-7.23.5}/wiki/Scripts.md +0 -0
  188. {gam7-7.23.4 → gam7-7.23.5}/wiki/Send-Email.md +0 -0
  189. {gam7-7.23.4 → gam7-7.23.5}/wiki/Shared-Drives.md +0 -0
  190. {gam7-7.23.4 → gam7-7.23.5}/wiki/Sites.md +0 -0
  191. {gam7-7.23.4 → gam7-7.23.5}/wiki/Tag-Replace.md +0 -0
  192. {gam7-7.23.4 → gam7-7.23.5}/wiki/Todrive.md +0 -0
  193. {gam7-7.23.4 → gam7-7.23.5}/wiki/Unmanaged-Accounts.md +0 -0
  194. {gam7-7.23.4 → gam7-7.23.5}/wiki/Upgrade-Benefits.md +0 -0
  195. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Analytics-Admin.md +0 -0
  196. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Application-Specific-Passwords.md +0 -0
  197. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Backup-Verification-Codes.md +0 -0
  198. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Calendars-Access.md +0 -0
  199. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Calendars.md +0 -0
  200. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Chat.md +0 -0
  201. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Classification-Labels.md +0 -0
  202. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Classroom-Profile.md +0 -0
  203. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Contacts-Delegates.md +0 -0
  204. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Contacts.md +0 -0
  205. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Deprovision.md +0 -0
  206. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Activity-Settings.md +0 -0
  207. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Cleanup.md +0 -0
  208. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Comments.md +0 -0
  209. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Copy-Move.md +0 -0
  210. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Files-Display.md +0 -0
  211. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Files-Manage.md +0 -0
  212. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Orphans.md +0 -0
  213. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Ownership.md +0 -0
  214. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Permissions.md +0 -0
  215. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Query.md +0 -0
  216. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Revisions.md +0 -0
  217. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Shortcuts.md +0 -0
  218. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Drive-Transfer.md +0 -0
  219. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Forms.md +0 -0
  220. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-CSE.md +0 -0
  221. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Delegates.md +0 -0
  222. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Filters.md +0 -0
  223. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Forwarding.md +0 -0
  224. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Labels.md +0 -0
  225. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  226. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Profile.md +0 -0
  227. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-S-MIME.md +0 -0
  228. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  229. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Gmail-Settings.md +0 -0
  230. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Group-Membership.md +0 -0
  231. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Keep-Notes.md +0 -0
  232. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Looker-Studio.md +0 -0
  233. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Meet.md +0 -0
  234. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Photo.md +0 -0
  235. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Profile-Photo.md +0 -0
  236. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Profile-Sharing.md +0 -0
  237. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Shared-Drives.md +0 -0
  238. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  239. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Spreadsheets.md +0 -0
  240. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Tag-Manager.md +0 -0
  241. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Tokens.md +0 -0
  242. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  243. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users-YouTube.md +0 -0
  244. {gam7-7.23.4 → gam7-7.23.5}/wiki/Users.md +0 -0
  245. {gam7-7.23.4 → gam7-7.23.5}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  246. {gam7-7.23.4 → gam7-7.23.5}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  247. {gam7-7.23.4 → gam7-7.23.5}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
  248. {gam7-7.23.4 → gam7-7.23.5}/wiki/Vault-Takeout.md +0 -0
  249. {gam7-7.23.4 → gam7-7.23.5}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  250. {gam7-7.23.4 → gam7-7.23.5}/wiki/_Sidebar.md +0 -0
  251. {gam7-7.23.4 → gam7-7.23.5}/wiki/gam.cfg.md +0 -0
  252. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
  253. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Android-Installation.md +0 -0
  254. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-BulkOperations.md +0 -0
  255. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-CalendarExamples.md +0 -0
  256. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Chat-Bot.md +0 -0
  257. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
  258. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
  259. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
  260. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
  261. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
  262. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
  263. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
  264. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
  265. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Email.md +0 -0
  266. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
  267. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
  268. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Command-Reference-Users.md +0 -0
  269. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
  270. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  271. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
  272. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Custom-Schemas.md +0 -0
  273. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Data-Transfers.md +0 -0
  274. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-DomainVerification.md +0 -0
  275. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
  276. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-ExamplesCSV.md +0 -0
  277. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
  278. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
  279. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
  280. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  281. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM-options-files.md +0 -0
  282. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
  283. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM3CSVListings.md +0 -0
  284. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
  285. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
  286. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
  287. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
  288. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
  289. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Home.md +0 -0
  290. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  291. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
  292. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-LicenseExamples.md +0 -0
  293. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Managing-Admins.md +0 -0
  294. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
  295. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Managing-Devices.md +0 -0
  296. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
  297. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
  298. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Printers.md +0 -0
  299. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-ResellerCommands.md +0 -0
  300. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-SecurityExamples.md +0 -0
  301. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
  302. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  303. {gam7-7.23.4 → gam7-7.23.5}/wiki/legacy/l-_Footer.md +0 -0
@@ -158,7 +158,7 @@ jobs:
158
158
  with:
159
159
  path: |
160
160
  cache.tar.xz
161
- key: gam-${{ matrix.jid }}-20251001
161
+ key: gam-${{ matrix.jid }}-20251002
162
162
 
163
163
  - name: Untar Cache archive
164
164
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
@@ -168,7 +168,7 @@ jobs:
168
168
 
169
169
  - name: Use pre-compiled Python for testing
170
170
  if: matrix.python != ''
171
- uses: actions/setup-python@3d1e2d2ca0a067f27da6fec484fce7f5256def85 # v5.6.0
171
+ uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
172
172
  with:
173
173
  python-version: ${{ matrix.python }}
174
174
  allow-prereleases: true
@@ -1027,7 +1027,8 @@ jobs:
1027
1027
  else
1028
1028
  tar_folders="bin/"
1029
1029
  fi
1030
- tar cJvvf cache.tar.xz $tar_folders
1030
+ echo '.git*' > ./excludes.txt
1031
+ tar cJvvf cache.tar.xz --exclude-from=excludes.txt $tar_folders
1031
1032
 
1032
1033
  merge:
1033
1034
  if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
@@ -1077,7 +1078,7 @@ jobs:
1077
1078
  echo "dateversion=${dateversion}" >> $GITHUB_OUTPUT
1078
1079
 
1079
1080
  - name: Publish draft release
1080
- uses: softprops/action-gh-release@fbadcc90e88ecface60a0a0d123795b784ceb239 # v2.3.2
1081
+ uses: softprops/action-gh-release@6cbd405e2c4e67a21c47fa9e383d020e4e28b836 # v2.3.3
1081
1082
  with:
1082
1083
  draft: true
1083
1084
  prerelease: false
@@ -30,6 +30,6 @@ jobs:
30
30
  python -m build
31
31
 
32
32
  - name: Publish package distributions to PyPI
33
- uses: pypa/gh-action-pypi-publish@release/v1
33
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
34
34
  with:
35
35
  attestation: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.23.4
3
+ Version: 7.23.5
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
@@ -1552,10 +1552,11 @@ gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <Or
1552
1552
  gam delete admin <RoleAssignmentId>
1553
1553
 
1554
1554
  gam print admins [todrive <ToDriveAttribute>*]
1555
- [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition]
1556
- [privileges] [oneitemperrow]
1555
+ [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
1556
+ [recursive] [condition] [privileges] [oneitemperrow]
1557
1557
  gam show admins
1558
- [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition] [privileges]
1558
+ [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
1559
+ [recursive] [condition] [privileges]
1559
1560
 
1560
1561
  # Alert Center
1561
1562
 
@@ -1,3 +1,8 @@
1
+ 7.23.05
2
+
3
+ Added option `recursive` to `gam print|show admins` that will display assignments to the members
4
+ of security groups assigned to roles; the security group membershop is recursively expanded.
5
+
1
6
  7.23.04
2
7
 
3
8
  Added option `addcsvdata <FieldName> <String>` to `gam <UserTypeEntity> print events`
@@ -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.23.04'
28
+ __version__ = '7.23.05'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -16995,16 +16995,17 @@ ASSIGNEE_EMAILTYPE_TOFIELD_MAP = {
16995
16995
  'group': 'assignedToGroup',
16996
16996
  'serviceaccount': 'assignedToServiceAccount',
16997
16997
  }
16998
- PRINT_ADMIN_FIELDS = ['roleAssignmentId', 'roleId', 'assignedTo', 'scopeType', 'orgUnitId']
16998
+ PRINT_ADMIN_FIELDS = ['roleAssignmentId', 'roleId', 'assignedTo', 'scopeType', 'orgUnitId', 'assigneeType']
16999
16999
  PRINT_ADMIN_TITLES = ['roleAssignmentId', 'roleId', 'role',
17000
17000
  'assignedTo', 'assignedToUser', 'assignedToGroup', 'assignedToServiceAccount', 'assignedToUnknown',
17001
17001
  'scopeType', 'orgUnitId', 'orgUnit']
17002
17002
 
17003
17003
  # gam print admins [todrive <ToDriveAttribute>*]
17004
- # [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition]
17005
- # [privileges] [oneitemperrow]
17004
+ # [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
17005
+ # [recursive] [condition] [privileges] [oneitemperrow]
17006
17006
  # gam show admins
17007
- # [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition] [privileges]
17007
+ # [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
17008
+ # [recursive] [condition] [privileges]
17008
17009
  def doPrintShowAdmins():
17009
17010
  def _getPrivileges(admin):
17010
17011
  if showPrivileges:
@@ -17031,15 +17032,12 @@ def doPrintShowAdmins():
17031
17032
  def _setNamesFromIds(admin, privileges):
17032
17033
  admin['role'] = role_from_roleid(admin['roleId'])
17033
17034
  assignedTo = admin['assignedTo']
17034
- admin['assignedToUnknown'] = False
17035
17035
  if assignedTo not in assignedToIdEmailMap:
17036
- assigneeType = admin.get('assigneeType')
17037
- assignedToField = ASSIGNEE_EMAILTYPE_TOFIELD_MAP.get(assigneeType, None)
17038
17036
  assigneeEmail, assigneeType = convertUIDtoEmailAddressWithType(f'uid:{assignedTo}', cd, sal,
17039
- emailTypes=list(ASSIGNEE_EMAILTYPE_TOFIELD_MAP.keys()))
17040
- if not assignedToField and assigneeType in ASSIGNEE_EMAILTYPE_TOFIELD_MAP:
17037
+ emailTypes=allAssigneeTypes if admin.get('assigneeType') != 'group' else ['group'])
17038
+ if assigneeType in ASSIGNEE_EMAILTYPE_TOFIELD_MAP:
17041
17039
  assignedToField = ASSIGNEE_EMAILTYPE_TOFIELD_MAP[assigneeType]
17042
- if assigneeType == 'unknown':
17040
+ else:
17043
17041
  assignedToField = 'assignedToUnknown'
17044
17042
  assigneeEmail = True
17045
17043
  assignedToIdEmailMap[assignedTo] = {'assignedToField': assignedToField, 'assigneeEmail': assigneeEmail}
@@ -17059,11 +17057,12 @@ def doPrintShowAdmins():
17059
17057
  csvPF = CSVPrintFile(PRINT_ADMIN_TITLES) if Act.csvFormat() else None
17060
17058
  roleId = None
17061
17059
  userKey = None
17062
- oneItemPerRow = showPrivileges = False
17060
+ oneItemPerRow = recursive = showPrivileges = False
17063
17061
  kwargs = {}
17064
17062
  rolePrivileges = {}
17065
17063
  fieldsList = PRINT_ADMIN_FIELDS
17066
17064
  assignedToIdEmailMap = {}
17065
+ allAssigneeTypes = list(ASSIGNEE_EMAILTYPE_TOFIELD_MAP.keys())
17067
17066
  while Cmd.ArgumentsRemaining():
17068
17067
  myarg = getArgument()
17069
17068
  if csvPF and myarg == 'todrive':
@@ -17072,6 +17071,15 @@ def doPrintShowAdmins():
17072
17071
  userKey = kwargs['userKey'] = getEmailAddress()
17073
17072
  elif myarg == 'role':
17074
17073
  _, roleId = getRoleId()
17074
+ elif myarg == 'recursive':
17075
+ recursive = True
17076
+ allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
17077
+ memberOptions = initMemberOptions()
17078
+ memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP] = True
17079
+ memberOptions[MEMBEROPTION_DISPLAYMATCH] = False
17080
+ memberDisplayOptions = initIPSGMGroupMemberDisplayOptions()
17081
+ for role in [Ent.ROLE_MEMBER, Ent.ROLE_MANAGER, Ent.ROLE_OWNER]:
17082
+ memberDisplayOptions[role]['show'] = True
17075
17083
  elif myarg == 'condition':
17076
17084
  fieldsList.append('condition')
17077
17085
  if csvPF:
@@ -17091,7 +17099,7 @@ def doPrintShowAdmins():
17091
17099
  admins = callGAPIpages(cd.roleAssignments(), 'list', 'items',
17092
17100
  pageMessage=getPageMessage(),
17093
17101
  throwReasons=[GAPI.INVALID, GAPI.USER_NOT_FOUND,
17094
- GAPI.FORBIDDEN, GAPI.SERVICE_NOT_AVAILABLE,
17102
+ GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.SERVICE_NOT_AVAILABLE,
17095
17103
  GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
17096
17104
  GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
17097
17105
  retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
@@ -17099,39 +17107,72 @@ def doPrintShowAdmins():
17099
17107
  except (GAPI.invalid, GAPI.userNotFound):
17100
17108
  entityUnknownWarning(Ent.ADMINISTRATOR, userKey)
17101
17109
  return
17102
- except (GAPI.serviceNotAvailable) as e:
17103
- entityActionFailedExit([Ent.ADMINISTRATOR, userKey, Ent.ADMIN_ROLE, roleId], str(e))
17110
+ except GAPI.notFound as e:
17111
+ entityActionFailedExit([Ent.ADMIN_ROLE, kwargs['roleId']], str(e))
17112
+ except (GAPI.forbidden, GAPI.serviceNotAvailable) as e:
17113
+ entityActionFailedExit([Ent.ADMINISTRATOR, userKey], str(e))
17104
17114
  except (GAPI.badRequest, GAPI.customerNotFound):
17105
17115
  accessErrorExit(cd)
17106
17116
  except (GAPI.forbidden, GAPI.permissionDenied) as e:
17107
17117
  ClientAPIAccessDeniedExit(str(e))
17118
+ count = len(admins)
17119
+ groupMembers = {}
17120
+ expandedAdmins = []
17121
+ i = 0
17122
+ for admin in admins:
17123
+ i += 1
17124
+ if roleId and roleId != admin['roleId']:
17125
+ continue
17126
+ if admin['assigneeType'] != 'group' or not recursive:
17127
+ _setNamesFromIds(admin, _getPrivileges(admin))
17128
+ expandedAdmins.append(admin)
17129
+ continue
17130
+ assignedTo = admin['assignedTo']
17131
+ if assignedTo not in groupMembers:
17132
+ membersList = []
17133
+ membersSet = set()
17134
+ level = 0
17135
+ getGroupMembers(cd, assignedTo, allGroupRoles, membersList, membersSet, i, count,
17136
+ memberOptions, memberDisplayOptions, level, {Ent.TYPE_USER})
17137
+ groupMembers[assignedTo] = membersList[:]
17138
+ _setNamesFromIds(admin, _getPrivileges(admin))
17139
+ if not groupMembers[assignedTo]:
17140
+ expandedAdmins.append(admin)
17141
+ continue
17142
+ admin['assigneeType'] = 'user'
17143
+ admin['assignedToGroup'] = assignedToIdEmailMap[assignedTo]['assigneeEmail']
17144
+ for member in groupMembers[assignedTo]:
17145
+ userAdmin = admin.copy()
17146
+ userAdmin['assignedTo'] = member['id']
17147
+ _setNamesFromIds(userAdmin, _getPrivileges(admin))
17148
+ expandedAdmins.append(userAdmin)
17149
+ admins = expandedAdmins
17150
+ count = len(expandedAdmins)
17108
17151
  if not csvPF:
17109
- count = len(admins)
17110
17152
  performActionNumItems(count, Ent.ADMIN_ROLE_ASSIGNMENT)
17111
17153
  Ind.Increment()
17112
17154
  i = 0
17113
- for admin in admins:
17155
+ for admin in expandedAdmins:
17114
17156
  i += 1
17115
- if roleId and roleId != admin['roleId']:
17116
- continue
17117
- _setNamesFromIds(admin, _getPrivileges(admin))
17118
17157
  printEntity([Ent.ADMIN_ROLE_ASSIGNMENT, admin['roleAssignmentId']], i, count)
17119
17158
  Ind.Increment()
17120
17159
  for field in PRINT_ADMIN_TITLES:
17121
17160
  if field in admin:
17122
17161
  if field == 'roleAssignmentId':
17123
17162
  continue
17124
- if field != 'rolePrivileges':
17125
- printKeyValueList([field, admin[field]])
17126
- else:
17127
- showJSON(None, admin[field])
17163
+ printKeyValueList([field, admin[field]])
17164
+ if showPrivileges:
17165
+ rolePrivileges = admin.get('rolePrivileges', [])
17166
+ jcount = len(rolePrivileges)
17167
+ if jcount > 0:
17168
+ printKeyValueList(['rolePrivileges', jcount])
17169
+ Ind.Increment()
17170
+ showJSON(None, rolePrivileges)
17171
+ Ind.Decrement()
17128
17172
  Ind.Decrement()
17129
17173
  Ind.Decrement()
17130
17174
  else:
17131
- for admin in admins:
17132
- if roleId and roleId != admin['roleId']:
17133
- continue
17134
- _setNamesFromIds(admin, _getPrivileges(admin))
17175
+ for admin in expandedAdmins:
17135
17176
  if not oneItemPerRow or 'rolePrivileges' not in admin:
17136
17177
  csvPF.WriteRowTitles(flattenJSON(admin))
17137
17178
  else:
@@ -567,7 +567,7 @@ By default, Gam displays the information as an indented list of keys and values.
567
567
  ```
568
568
  gam calendar <CalendarEntity> show events [<EventEntity>] <EventDisplayProperty>*
569
569
  [fields <EventFieldNameList>] [showdayofweek]
570
- [countsly] [formatjson]
570
+ [countsly|formatjson]
571
571
  ```
572
572
  In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
573
573
 
@@ -586,8 +586,9 @@ By default, Gam displays event details, use `countsonly` to display only the num
586
586
  ```
587
587
  gam calendar <CalendarEntity> print events [<EventEntity>] <EventDisplayProperty>*
588
588
  [fields <EventFieldNameList>] [showdayofweek]
589
- [countsonly [eventrowfilter]]
590
- [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
589
+ (addcsvdata <FieldName> <String>)*
590
+ [eventrowfilter]
591
+ [countsonly|(formatjson [quotechar <Character>])] [todrive <ToDriveAttribute>*]
591
592
  ```
592
593
  In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
593
594
 
@@ -598,6 +599,9 @@ option `singleevents` to display all instances of a recurring event.
598
599
 
599
600
  `showdayofweek` displays columns `start.dayOfWeek` and `end.dayOfWeek` when event start and end times are displayed.
600
601
 
602
+ Add additional columns of data from the command line to the output after the calendarId.
603
+ * `addcsvdata <FieldName> <String>`
604
+
601
605
  By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
602
606
  * `formatjson` - Display the fields in JSON format.
603
607
 
@@ -10,6 +10,18 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
10
10
 
11
11
  See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
12
12
 
13
+ ### 7.23.04
14
+
15
+ Added option `addcsvdata <FieldName> <String>` to `gam <UserTypeEntity> print events`
16
+ and `gam calendars <CalendarEntity> print events` that adds additional columns of data to the CSV file output.
17
+ An example would be to get the calendar name in addition to the calendar ID when printing events.
18
+ ```
19
+ gam redirect csv ./Resources.csv print resources fields email,name
20
+ gam redirect csv ./ResourceEventCounts.csv multiprocess redirect stderr - multiprocess csv Resources.csv gam calendar "~resourceEmail" print events starttime -1y countsonly addcsvdata calendarName "~resourceName"
21
+ ```
22
+
23
+ Upgraded to OpenSSL 3.6.0.
24
+
13
25
  ### 7.23.03
14
26
 
15
27
  Upgraded to OpenSSL 3.5.4.
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
252
252
  admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
253
253
  admin@server:/Users/admin$ gam version
254
254
  WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
255
- GAM 7.23.03 - https://github.com/GAM-team/GAM - pyinstaller
255
+ GAM 7.23.04 - https://github.com/GAM-team/GAM - pyinstaller
256
256
  GAM Team <google-apps-manager@googlegroups.com>
257
257
  Python 3.13.7 64-bit final
258
258
  macOS Tahoe 26.0.1 x86_64
@@ -653,7 +653,7 @@ By default, Gam displays the information as an indented list of keys and values.
653
653
  ```
654
654
  gam <UserTypeEntity> show events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
655
655
  [fields <EventFieldNameList>] [showdayofweek]
656
- [countsonly] [formatjson]
656
+ [countsonly|formatjson]
657
657
  ```
658
658
  In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
659
659
 
@@ -672,8 +672,8 @@ By default, Gam displays event details, use `countsonly` to display only the num
672
672
  ```
673
673
  gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
674
674
  [fields <EventFieldNameList>] [showdayofweek]
675
- [countsonly]
676
- [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
675
+ (addcsvdata <FieldName> <String>)*
676
+ [eventrowfilter] [countsonly|(formatjson [quotechar <Character>])] [todrive <ToDriveAttribute>*]
677
677
  ```
678
678
  In `<EventEntity>`, any `<EventSelectProperty>` options must precede all other options.
679
679
 
@@ -684,6 +684,9 @@ option `singleevents` to display all instances of a recurring event.
684
684
 
685
685
  `showdayofweek` displays columns `start.dayOfWeek` and `end.dayOfWeek` when event start and end times are displayed.
686
686
 
687
+ Add additional columns of data from the command line to the output after the calendarId.
688
+ * `addcsvdata <FieldName> <String>`
689
+
687
690
  By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
688
691
  * `formatjson` - Display the fields in JSON format.
689
692
 
@@ -398,8 +398,8 @@ By default, Gam displays the information as an indented list of keys and values.
398
398
  gam <UserTypeEntity> show contacts
399
399
  <PeoplePrintShowUserContactSelection>
400
400
  [orderby firstname|lastname|(lastmodified ascending)|(lastnodified descending)
401
- [countsonly|allfields|(fields <PeopleFieldNameList>)] [showgroups] [showmetadata]
402
- [formatjson]
401
+ [allfields|(fields <PeopleFieldNameList>)] [showgroups] [showmetadata]
402
+ [countsonly|formatjson]
403
403
  ```
404
404
  By default, Gam displays all of a user's people contacts.
405
405
  * `query <String>` - Display contacts based on the data in their fields
@@ -416,8 +416,8 @@ By default, Gam displays the information as an indented list of keys and values.
416
416
  gam <UserTypeEntity> print contacts [todrive <ToDriveAttribute>*]
417
417
  <PeoplePrintShowUserContactSelection>
418
418
  [orderby firstname|lastname|(lastmodified ascending)|(lastnodified descending)
419
- [countsonly|allfields|(fields <PeopleFieldNameList>)] [showgroups] [showmetadata]
420
- [formatjson [quotechar <Character>]]
419
+ [allfields|(fields <PeopleFieldNameList>)] [showgroups] [showmetadata]
420
+ [countsonly|(formatjson [quotechar <Character>])]
421
421
  ```
422
422
  By default, Gam displays all of a user's people contacts.
423
423
  * `query <String>` - Display contacts based on the data in their fields
@@ -547,8 +547,8 @@ User: user@domain.com, Delete maximum of 15 Other Contacts
547
547
  ```
548
548
  gam <UserTypeEntity> show othercontacts
549
549
  [<OtherContactsSelection>]
550
- [countsonly|allfields|(fields <OtherContactsFieldNameList>)] [showmetadata]
551
- [formatjson]
550
+ [allfields|(fields <OtherContactsFieldNameList>)] [showmetadata]
551
+ [countsonly|formatjson]
552
552
  ```
553
553
  By default, Gam displays all of a user's Other Contacts; use
554
554
  `<OtherContactsSelection>` to display a selection of Other Contacts.
@@ -563,8 +563,8 @@ By default, Gam displays the information as an indented list of keys and values.
563
563
  ```
564
564
  gam <UserTypeEntity> print othercontacts [todrive <ToDriveAttribute>*]
565
565
  [<OtherContactsSelection>]
566
- [countsonly|allfields|(fields <OtherContactsFieldNameList>)] [showmetadata]
567
- [formatjson [quotechar <Character>]]
566
+ [allfields|(fields <OtherContactsFieldNameList>)] [showmetadata]
567
+ [countsonly|(formatjson [quotechar <Character>])]
568
568
  ```
569
569
  By default, Gam displays all of a user's Other Contacts; use
570
570
  `<OtherContactsSelection>` to display a selection of Other Contacts.
@@ -122,7 +122,7 @@ gam <UserTypeEntity> show tasks [tasklists <TasklistEntity>]
122
122
  [updatedmin <Time>]
123
123
  [showcompleted [<Boolean>]] [showdeleted [<Boolean>]] [showhidden [<Boolean>]] [showall]
124
124
  [orderby completed|due|updated]
125
- [countsonly|compact|formatjson]
125
+ [compact|countsonly|formatjson]
126
126
  ```
127
127
  The API only supports dates in `duemin` and `duemax' but you must supply a null time:
128
128
  * `duemin YYYY-MM-DDT00:00:00Z` - Specify the starting due date
@@ -152,7 +152,7 @@ gam <UserTypeEntity> print tasks [tasklists <TasklistEntity>] [todrive <ToDriveA
152
152
  [updatedmin <Time>]
153
153
  [showcompleted [<Boolean>]] [showdeleted [<Boolean>]] [showhidden [<Boolean>]] [showall]
154
154
  [orderby completed|due|updated]
155
- [countsonly | (formatjson [quotechar <Character>])]
155
+ [countsonly|(formatjson [quotechar <Character>])]
156
156
  ```
157
157
  The API only supports dates in `duemin` and `duemax' but you must supply a null time:
158
158
  * `duemin YYYY-MM-DDT00:00:00Z` - Specify the starting due date
@@ -230,7 +230,7 @@ By default, Gam displays the task lists as an indented list of keys and values.
230
230
 
231
231
  ```
232
232
  gam <UserTypeEntity> print tasklists [todrive <ToDriveAttribute>*]
233
- [countsonly | (formatjson [quotechar <Character>])]
233
+ [countsonly|(formatjson [quotechar <Character>])]
234
234
  ```
235
235
  By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
236
236
  * `formatjson` - Display the fields in JSON format.
@@ -3,7 +3,7 @@
3
3
  Print the current version of Gam with details
4
4
  ```
5
5
  gam version
6
- GAM 7.23.03 - https://github.com/GAM-team/GAM - pyinstaller
6
+ GAM 7.23.04 - https://github.com/GAM-team/GAM - pyinstaller
7
7
  GAM Team <google-apps-manager@googlegroups.com>
8
8
  Python 3.13.7 64-bit final
9
9
  macOS Tahoe 26.0.1 x86_64
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
15
15
  Print the current version of Gam with details and time offset information
16
16
  ```
17
17
  gam version timeoffset
18
- GAM 7.23.03 - https://github.com/GAM-team/GAM - pyinstaller
18
+ GAM 7.23.04 - https://github.com/GAM-team/GAM - pyinstaller
19
19
  GAM Team <google-apps-manager@googlegroups.com>
20
20
  Python 3.13.7 64-bit final
21
21
  macOS Tahoe 26.0.1 x86_64
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
27
27
  Print the current version of Gam with extended details and SSL information
28
28
  ```
29
29
  gam version extended
30
- GAM 7.23.03 - https://github.com/GAM-team/GAM - pyinstaller
30
+ GAM 7.23.04 - https://github.com/GAM-team/GAM - pyinstaller
31
31
  GAM Team <google-apps-manager@googlegroups.com>
32
32
  Python 3.13.7 64-bit final
33
33
  macOS Tahoe 26.0.1 x86_64
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes