gam7 7.23.3__tar.gz → 7.23.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 (303) hide show
  1. {gam7-7.23.3 → gam7-7.23.4}/.github/workflows/build.yml +8 -8
  2. {gam7-7.23.3 → gam7-7.23.4}/PKG-INFO +1 -1
  3. {gam7-7.23.3 → gam7-7.23.4}/src/GamCommands.txt +16 -21
  4. {gam7-7.23.3 → gam7-7.23.4}/src/GamUpdate.txt +12 -0
  5. {gam7-7.23.3 → gam7-7.23.4}/src/gam/__init__.py +90 -50
  6. {gam7-7.23.3 → gam7-7.23.4}/wiki/Domain-SharedContacts.md +1 -1
  7. {gam7-7.23.3 → gam7-7.23.4}/wiki/GamUpdates.md +4 -0
  8. {gam7-7.23.3 → gam7-7.23.4}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +1 -1
  9. {gam7-7.23.3 → gam7-7.23.4}/wiki/Version-and-Help.md +3 -3
  10. {gam7-7.23.3 → gam7-7.23.4}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  11. {gam7-7.23.3 → gam7-7.23.4}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  12. {gam7-7.23.3 → gam7-7.23.4}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  13. {gam7-7.23.3 → gam7-7.23.4}/.github/ISSUE_TEMPLATE.txt +0 -0
  14. {gam7-7.23.3 → gam7-7.23.4}/.github/actions/decrypt.sh +0 -0
  15. {gam7-7.23.3 → gam7-7.23.4}/.github/actions/entitlements.plist +0 -0
  16. {gam7-7.23.3 → gam7-7.23.4}/.github/actions/package_exclusions.txt +0 -0
  17. {gam7-7.23.3 → gam7-7.23.4}/.github/stale.yml +0 -0
  18. {gam7-7.23.3 → gam7-7.23.4}/.github/workflows/codeql-analysis.yml +0 -0
  19. {gam7-7.23.3 → gam7-7.23.4}/.github/workflows/get-cacerts.yml +0 -0
  20. {gam7-7.23.3 → gam7-7.23.4}/.github/workflows/pushwiki.yml +0 -0
  21. {gam7-7.23.3 → gam7-7.23.4}/.github/workflows/pypi.yml +0 -0
  22. {gam7-7.23.3 → gam7-7.23.4}/LICENSE +0 -0
  23. {gam7-7.23.3 → gam7-7.23.4}/README.md +0 -0
  24. {gam7-7.23.3 → gam7-7.23.4}/pyproject.toml +0 -0
  25. {gam7-7.23.3 → gam7-7.23.4}/src/.gitignore +0 -0
  26. {gam7-7.23.3 → gam7-7.23.4}/src/LICENSE +0 -0
  27. {gam7-7.23.3 → gam7-7.23.4}/src/README.md +0 -0
  28. {gam7-7.23.3 → gam7-7.23.4}/src/callgam.py +0 -0
  29. {gam7-7.23.3 → gam7-7.23.4}/src/gam/__main__.py +0 -0
  30. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/__init__.py +0 -0
  31. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/auth.py +0 -0
  32. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/client.py +0 -0
  33. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/core.py +0 -0
  34. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/data.py +0 -0
  35. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/http.py +0 -0
  36. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/http_core.py +0 -0
  37. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/http_interface.py +0 -0
  38. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/mock_http.py +0 -0
  39. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/mock_http_core.py +0 -0
  40. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/mock_service.py +0 -0
  41. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/service.py +0 -0
  42. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/token_store.py +0 -0
  43. {gam7-7.23.3 → gam7-7.23.4}/src/gam/atom/url.py +0 -0
  44. {gam7-7.23.3 → gam7-7.23.4}/src/gam/cacerts.pem +0 -0
  45. {gam7-7.23.3 → gam7-7.23.4}/src/gam/cbcm-v1.1beta1.json +0 -0
  46. {gam7-7.23.3 → gam7-7.23.4}/src/gam/contactdelegation-v1.json +0 -0
  47. {gam7-7.23.3 → gam7-7.23.4}/src/gam/datastudio-v1.json +0 -0
  48. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/__init__.py +0 -0
  49. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glaction.py +0 -0
  50. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glapi.py +0 -0
  51. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glcfg.py +0 -0
  52. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glclargs.py +0 -0
  53. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glentity.py +0 -0
  54. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glgapi.py +0 -0
  55. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glgdata.py +0 -0
  56. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glglobals.py +0 -0
  57. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glindent.py +0 -0
  58. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glmsgs.py +0 -0
  59. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glskus.py +0 -0
  60. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/gluprop.py +0 -0
  61. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/glverlibs.py +0 -0
  62. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gamlib/yubikey.py +0 -0
  63. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/__init__.py +0 -0
  64. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/alt/__init__.py +0 -0
  65. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/alt/app_engine.py +0 -0
  66. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/alt/appengine.py +0 -0
  67. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/apps/__init__.py +0 -0
  68. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/apps/audit/__init__.py +0 -0
  69. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/apps/audit/service.py +0 -0
  70. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  71. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/apps/contacts/service.py +0 -0
  72. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/apps/service.py +0 -0
  73. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/service.py +0 -0
  74. {gam7-7.23.3 → gam7-7.23.4}/src/gam/gdata/urlfetch.py +0 -0
  75. {gam7-7.23.3 → gam7-7.23.4}/src/gam/meet-v2beta.json +0 -0
  76. {gam7-7.23.3 → gam7-7.23.4}/src/gam/serviceaccountlookup-v1.json +0 -0
  77. {gam7-7.23.3 → gam7-7.23.4}/src/gam-install.sh +0 -0
  78. {gam7-7.23.3 → gam7-7.23.4}/src/gam-setup.bat +0 -0
  79. {gam7-7.23.3 → gam7-7.23.4}/src/gam.exe.manifest +0 -0
  80. {gam7-7.23.3 → gam7-7.23.4}/src/gam.py +0 -0
  81. {gam7-7.23.3 → gam7-7.23.4}/src/gam.spec +0 -0
  82. {gam7-7.23.3 → gam7-7.23.4}/src/gam.wxs +0 -0
  83. {gam7-7.23.3 → gam7-7.23.4}/src/license.rtf +0 -0
  84. {gam7-7.23.3 → gam7-7.23.4}/src/tools/a_atleast_b.py +0 -0
  85. {gam7-7.23.3 → gam7-7.23.4}/src/tools/gen-wix-xml-filelist.py +0 -0
  86. {gam7-7.23.3 → gam7-7.23.4}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
  87. {gam7-7.23.3 → gam7-7.23.4}/src/tools/hooks/hook-httplib2.py +0 -0
  88. {gam7-7.23.3 → gam7-7.23.4}/src/tools/mkGamRef.py +0 -0
  89. {gam7-7.23.3 → gam7-7.23.4}/src/tools/openssl.props +0 -0
  90. {gam7-7.23.3 → gam7-7.23.4}/src/tools/ssd.mjs +0 -0
  91. {gam7-7.23.3 → gam7-7.23.4}/src/version_info.txt.in +0 -0
  92. {gam7-7.23.3 → gam7-7.23.4}/wiki/00scratch.md +0 -0
  93. {gam7-7.23.3 → gam7-7.23.4}/wiki/Addresses.md +0 -0
  94. {gam7-7.23.3 → gam7-7.23.4}/wiki/Administrators.md +0 -0
  95. {gam7-7.23.3 → gam7-7.23.4}/wiki/Alert-Center.md +0 -0
  96. {gam7-7.23.3 → gam7-7.23.4}/wiki/Aliases.md +0 -0
  97. {gam7-7.23.3 → gam7-7.23.4}/wiki/Authorization.md +0 -0
  98. {gam7-7.23.3 → gam7-7.23.4}/wiki/BNF-Syntax.md +0 -0
  99. {gam7-7.23.3 → gam7-7.23.4}/wiki/Basic-Items.md +0 -0
  100. {gam7-7.23.3 → gam7-7.23.4}/wiki/Bulk-Processing.md +0 -0
  101. {gam7-7.23.3 → gam7-7.23.4}/wiki/Business-Account-Management.md +0 -0
  102. {gam7-7.23.3 → gam7-7.23.4}/wiki/CSV-Input-Filtering.md +0 -0
  103. {gam7-7.23.3 → gam7-7.23.4}/wiki/CSV-Output-Filtering.md +0 -0
  104. {gam7-7.23.3 → gam7-7.23.4}/wiki/CSV-Special-Characters.md +0 -0
  105. {gam7-7.23.3 → gam7-7.23.4}/wiki/Calendars-Access.md +0 -0
  106. {gam7-7.23.3 → gam7-7.23.4}/wiki/Calendars-Events.md +0 -0
  107. {gam7-7.23.3 → gam7-7.23.4}/wiki/Calendars.md +0 -0
  108. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chat-Bot-Setup-Use.md +0 -0
  109. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-AUE-Counts.md +0 -0
  110. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  111. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Installed-Apps.md +0 -0
  112. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  113. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Policies.md +0 -0
  114. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Printers.md +0 -0
  115. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Profile-Management.md +0 -0
  116. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Version-Counts.md +0 -0
  117. {gam7-7.23.3 → gam7-7.23.4}/wiki/Chrome-Version-History.md +0 -0
  118. {gam7-7.23.3 → gam7-7.23.4}/wiki/ChromeOS-Devices.md +0 -0
  119. {gam7-7.23.3 → gam7-7.23.4}/wiki/Classroom-Courses.md +0 -0
  120. {gam7-7.23.3 → gam7-7.23.4}/wiki/Classroom-Guardians.md +0 -0
  121. {gam7-7.23.3 → gam7-7.23.4}/wiki/Classroom-Invitations.md +0 -0
  122. {gam7-7.23.3 → gam7-7.23.4}/wiki/Classroom-Membership.md +0 -0
  123. {gam7-7.23.3 → gam7-7.23.4}/wiki/Classroom-StudentGroups.md +0 -0
  124. {gam7-7.23.3 → gam7-7.23.4}/wiki/Cloud-Channel.md +0 -0
  125. {gam7-7.23.3 → gam7-7.23.4}/wiki/Cloud-Identity-Devices.md +0 -0
  126. {gam7-7.23.3 → gam7-7.23.4}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  127. {gam7-7.23.3 → gam7-7.23.4}/wiki/Cloud-Identity-Groups.md +0 -0
  128. {gam7-7.23.3 → gam7-7.23.4}/wiki/Cloud-Identity-Policies.md +0 -0
  129. {gam7-7.23.3 → gam7-7.23.4}/wiki/Cloud-Storage.md +0 -0
  130. {gam7-7.23.3 → gam7-7.23.4}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  131. {gam7-7.23.3 → gam7-7.23.4}/wiki/Collections-of-Items.md +0 -0
  132. {gam7-7.23.3 → gam7-7.23.4}/wiki/Collections-of-Users.md +0 -0
  133. {gam7-7.23.3 → gam7-7.23.4}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  134. {gam7-7.23.3 → gam7-7.23.4}/wiki/Command-Line-Parsing.md +0 -0
  135. {gam7-7.23.3 → gam7-7.23.4}/wiki/Command-Logging-Progress.md +0 -0
  136. {gam7-7.23.3 → gam7-7.23.4}/wiki/Context-Aware-Access-Levels.md +0 -0
  137. {gam7-7.23.3 → gam7-7.23.4}/wiki/Customer.md +0 -0
  138. {gam7-7.23.3 → gam7-7.23.4}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  139. {gam7-7.23.3 → gam7-7.23.4}/wiki/Domains-Verification.md +0 -0
  140. {gam7-7.23.3 → gam7-7.23.4}/wiki/Domains.md +0 -0
  141. {gam7-7.23.3 → gam7-7.23.4}/wiki/Downloads-Installs.md +0 -0
  142. {gam7-7.23.3 → gam7-7.23.4}/wiki/Drive-File-Selection.md +0 -0
  143. {gam7-7.23.3 → gam7-7.23.4}/wiki/Drive-Items.md +0 -0
  144. {gam7-7.23.3 → gam7-7.23.4}/wiki/Drive-REST-API-v3.md +0 -0
  145. {gam7-7.23.3 → gam7-7.23.4}/wiki/Email-Audit-Monitor.md +0 -0
  146. {gam7-7.23.3 → gam7-7.23.4}/wiki/Find-File-Owner.md +0 -0
  147. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM-Public-Chat-Room.md +0 -0
  148. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM-Release-Process.md +0 -0
  149. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM-Return-Codes.md +0 -0
  150. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  151. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM7-FAQ.md +0 -0
  152. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM7-on-Android-Devices.md +0 -0
  153. {gam7-7.23.3 → gam7-7.23.4}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  154. {gam7-7.23.3 → gam7-7.23.4}/wiki/Global-Address-List.md +0 -0
  155. {gam7-7.23.3 → gam7-7.23.4}/wiki/Google-Data-Transfers.md +0 -0
  156. {gam7-7.23.3 → gam7-7.23.4}/wiki/Google-Network-Addresses.md +0 -0
  157. {gam7-7.23.3 → gam7-7.23.4}/wiki/Groups-Membership.md +0 -0
  158. {gam7-7.23.3 → gam7-7.23.4}/wiki/Groups.md +0 -0
  159. {gam7-7.23.3 → gam7-7.23.4}/wiki/HTTPS-Proxy.md +0 -0
  160. {gam7-7.23.3 → gam7-7.23.4}/wiki/Home.md +0 -0
  161. {gam7-7.23.3 → gam7-7.23.4}/wiki/How-to-Install-GAM7.md +0 -0
  162. {gam7-7.23.3 → gam7-7.23.4}/wiki/How-to-Uninstall-GAM7.md +0 -0
  163. {gam7-7.23.3 → gam7-7.23.4}/wiki/How-to-Update-GAM7.md +0 -0
  164. {gam7-7.23.3 → gam7-7.23.4}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  165. {gam7-7.23.3 → gam7-7.23.4}/wiki/Inbound-SSO.md +0 -0
  166. {gam7-7.23.3 → gam7-7.23.4}/wiki/Install-GAM-as-Python-Library.md +0 -0
  167. {gam7-7.23.3 → gam7-7.23.4}/wiki/Licenses.md +0 -0
  168. {gam7-7.23.3 → gam7-7.23.4}/wiki/List-Items.md +0 -0
  169. {gam7-7.23.3 → gam7-7.23.4}/wiki/List.md +0 -0
  170. {gam7-7.23.3 → gam7-7.23.4}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  171. {gam7-7.23.3 → gam7-7.23.4}/wiki/Mobile-Devices.md +0 -0
  172. {gam7-7.23.3 → gam7-7.23.4}/wiki/Organizational-Units.md +0 -0
  173. {gam7-7.23.3 → gam7-7.23.4}/wiki/Other-Resources.md +0 -0
  174. {gam7-7.23.3 → gam7-7.23.4}/wiki/Permission-Matches.md +0 -0
  175. {gam7-7.23.3 → gam7-7.23.4}/wiki/Python-Regular-Expressions.md +0 -0
  176. {gam7-7.23.3 → gam7-7.23.4}/wiki/README.md +0 -0
  177. {gam7-7.23.3 → gam7-7.23.4}/wiki/Rclone.md +0 -0
  178. {gam7-7.23.3 → gam7-7.23.4}/wiki/Reports.md +0 -0
  179. {gam7-7.23.3 → gam7-7.23.4}/wiki/Reseller.md +0 -0
  180. {gam7-7.23.3 → gam7-7.23.4}/wiki/Resources.md +0 -0
  181. {gam7-7.23.3 → gam7-7.23.4}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  182. {gam7-7.23.3 → gam7-7.23.4}/wiki/SSL-Root-CA-Certificates.md +0 -0
  183. {gam7-7.23.3 → gam7-7.23.4}/wiki/Schemas.md +0 -0
  184. {gam7-7.23.3 → gam7-7.23.4}/wiki/Scripts.md +0 -0
  185. {gam7-7.23.3 → gam7-7.23.4}/wiki/Send-Email.md +0 -0
  186. {gam7-7.23.3 → gam7-7.23.4}/wiki/Shared-Drives.md +0 -0
  187. {gam7-7.23.3 → gam7-7.23.4}/wiki/Sites.md +0 -0
  188. {gam7-7.23.3 → gam7-7.23.4}/wiki/Tag-Replace.md +0 -0
  189. {gam7-7.23.3 → gam7-7.23.4}/wiki/Todrive.md +0 -0
  190. {gam7-7.23.3 → gam7-7.23.4}/wiki/Unmanaged-Accounts.md +0 -0
  191. {gam7-7.23.3 → gam7-7.23.4}/wiki/Upgrade-Benefits.md +0 -0
  192. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Analytics-Admin.md +0 -0
  193. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Application-Specific-Passwords.md +0 -0
  194. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Backup-Verification-Codes.md +0 -0
  195. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Calendars-Access.md +0 -0
  196. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Calendars-Events.md +0 -0
  197. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Calendars.md +0 -0
  198. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Chat.md +0 -0
  199. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Classification-Labels.md +0 -0
  200. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Classroom-Profile.md +0 -0
  201. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Contacts-Delegates.md +0 -0
  202. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Contacts.md +0 -0
  203. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Deprovision.md +0 -0
  204. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Activity-Settings.md +0 -0
  205. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Cleanup.md +0 -0
  206. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Comments.md +0 -0
  207. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Copy-Move.md +0 -0
  208. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Files-Display.md +0 -0
  209. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Files-Manage.md +0 -0
  210. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Orphans.md +0 -0
  211. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Ownership.md +0 -0
  212. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Permissions.md +0 -0
  213. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Query.md +0 -0
  214. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Revisions.md +0 -0
  215. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Shortcuts.md +0 -0
  216. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Drive-Transfer.md +0 -0
  217. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Forms.md +0 -0
  218. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-CSE.md +0 -0
  219. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Delegates.md +0 -0
  220. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Filters.md +0 -0
  221. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Forwarding.md +0 -0
  222. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Labels.md +0 -0
  223. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  224. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Profile.md +0 -0
  225. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-S-MIME.md +0 -0
  226. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  227. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Gmail-Settings.md +0 -0
  228. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Group-Membership.md +0 -0
  229. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Keep-Notes.md +0 -0
  230. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Looker-Studio.md +0 -0
  231. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Meet.md +0 -0
  232. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-People-Contacts-Profiles.md +0 -0
  233. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Photo.md +0 -0
  234. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Profile-Photo.md +0 -0
  235. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Profile-Sharing.md +0 -0
  236. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Shared-Drives.md +0 -0
  237. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  238. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Spreadsheets.md +0 -0
  239. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Tag-Manager.md +0 -0
  240. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Tasks.md +0 -0
  241. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Tokens.md +0 -0
  242. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  243. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users-YouTube.md +0 -0
  244. {gam7-7.23.3 → gam7-7.23.4}/wiki/Users.md +0 -0
  245. {gam7-7.23.3 → gam7-7.23.4}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  246. {gam7-7.23.3 → gam7-7.23.4}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  247. {gam7-7.23.3 → gam7-7.23.4}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
  248. {gam7-7.23.3 → gam7-7.23.4}/wiki/Vault-Takeout.md +0 -0
  249. {gam7-7.23.3 → gam7-7.23.4}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  250. {gam7-7.23.3 → gam7-7.23.4}/wiki/_Sidebar.md +0 -0
  251. {gam7-7.23.3 → gam7-7.23.4}/wiki/gam.cfg.md +0 -0
  252. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
  253. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Android-Installation.md +0 -0
  254. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-BulkOperations.md +0 -0
  255. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-CalendarExamples.md +0 -0
  256. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Chat-Bot.md +0 -0
  257. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
  258. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
  259. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
  260. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
  261. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
  262. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
  263. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
  264. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
  265. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Email.md +0 -0
  266. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
  267. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
  268. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Command-Reference-Users.md +0 -0
  269. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
  270. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  271. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
  272. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Custom-Schemas.md +0 -0
  273. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Data-Transfers.md +0 -0
  274. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-DomainVerification.md +0 -0
  275. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
  276. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-ExamplesCSV.md +0 -0
  277. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
  278. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
  279. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
  280. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  281. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM-options-files.md +0 -0
  282. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
  283. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM3CSVListings.md +0 -0
  284. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
  285. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
  286. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
  287. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
  288. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
  289. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Home.md +0 -0
  290. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  291. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
  292. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-LicenseExamples.md +0 -0
  293. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Managing-Admins.md +0 -0
  294. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
  295. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Managing-Devices.md +0 -0
  296. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
  297. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
  298. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Printers.md +0 -0
  299. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-ResellerCommands.md +0 -0
  300. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-SecurityExamples.md +0 -0
  301. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
  302. {gam7-7.23.3 → gam7-7.23.4}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  303. {gam7-7.23.3 → gam7-7.23.4}/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 }}-20250930
161
+ key: gam-${{ matrix.jid }}-20251001
162
162
 
163
163
  - name: Untar Cache archive
164
164
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
@@ -335,11 +335,11 @@ jobs:
335
335
  # --libdir=lib is needed so Python can find OpenSSL libraries
336
336
  "${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
337
337
 
338
- # - name: Rename GNU link on Windows
339
- # if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
340
- # shell: bash
341
- # run: |
342
- # mv -v /usr/bin/link /usr/bin/gnulink
338
+ - name: Rename GNU link on Windows
339
+ if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
340
+ shell: bash
341
+ run: |
342
+ mv -v /usr/bin/link /usr/bin/gnulink
343
343
 
344
344
  - name: Make OpenSSL
345
345
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
@@ -943,11 +943,11 @@ jobs:
943
943
  $gam calendar $gam_user printevents after -0d
944
944
  $gam config enable_dasa false save
945
945
  matterid=uid:$($gam create vaultmatter name "GHA matter $newbase" description "test matter" returnidonly)
946
- $gam create vaulthold matter $matterid name "GHA hold $newbase" corpus mail accounts $newuser
946
+ $gam create vaulthold matter $matterid name "GHA hold ${newbase}" corpus mail ou "$newou"
947
947
  $gam print vaultmatters matterstate open
948
948
  $gam print vaultholds matter $matterid
949
949
  $gam print vaultcount matter $matterid corpus mail everyone todrive tdnobrowser
950
- $gam create vaultexport matter $matterid name "GHA export $newbase" corpus mail accounts $newuser
950
+ $gam create vaultexport matter $matterid name "GHA export $newbase" corpus mail ou "$newou"
951
951
  $gam print exports matter $matterid | $gam csv - gam info export $matterid id:~~id~~
952
952
  $gam config enable_dasa true save
953
953
  $gam csv sample.csv gam user ~email add calendar id:$newresource
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.23.3
3
+ Version: 7.23.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
@@ -1932,12 +1932,12 @@ gam calendar|calendars <CalendarEntity> info events [<EventEntity>] [maxinstance
1932
1932
  [formatjson]
1933
1933
  gam calendar|calendars <CalendarEntity> show events [<EventEntity>] <EventDisplayProperty>*
1934
1934
  [fields <EventFieldNameList>] [showdayofweek]
1935
- [countsonly]
1936
- [formatjson]
1935
+ [countsonly|formatjson]
1937
1936
  gam calendar|calendars <CalendarEntity> print events [<EventEntity>] <EventDisplayProperty>*
1938
1937
  [fields <EventFieldNameList>] [showdayofweek]
1939
- [countsonly [eventrowfilter]]
1940
- [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
1938
+ (addcsvdata <FieldName> <String>)*
1939
+ [eventrowfilter]
1940
+ [countsonly|(formatjson [quotechar <Character>])] [todrive <ToDriveAttribute>*]
1941
1941
 
1942
1942
  gam calendar <CalendarEntity> addevent <EventAttribute>+ [<EventNotificationAttribute>]
1943
1943
  [showdayofweek]
@@ -3745,16 +3745,14 @@ gam print domaincontacts|peoplecontacts [todrive <ToDriveAttribute>*]
3745
3745
  [sources <PeopleSourceName>]
3746
3746
  [query <String>]
3747
3747
  [mergesources <PeopleMergeSourceName>]
3748
- [coountsonly]
3749
3748
  [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
3750
- [formatjson [quotechar <Character>]]
3749
+ [coountsonly|(formatjson [quotechar <Character>])]
3751
3750
  gam show domaincontacts|peoplecontacts
3752
3751
  [sources <PeopleSourceName>]
3753
3752
  [query <String>]
3754
3753
  [mergesources <PeopleMergeSourceName>]
3755
- [coountsonly]
3756
3754
  [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
3757
- [formatjson]
3755
+ [coountsonly|formatjson]
3758
3756
 
3759
3757
  gam info people|peopleprofile <PeopleResourceNameEntity>
3760
3758
  [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
@@ -3762,15 +3760,13 @@ gam info people|peopleprofile <PeopleResourceNameEntity>
3762
3760
  gam print people|peopleprofile [todrive <ToDriveAttribute>*]
3763
3761
  [query <String>]
3764
3762
  [mergesources <PeopleMergeSourceName>]
3765
- [coountsonly]
3766
3763
  [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
3767
- [formatjson [quotechar <Character>]]
3764
+ [coountsonly|(formatjson [quotechar <Character>])]
3768
3765
  gam show people|peopleprofile
3769
3766
  [query <String>]
3770
3767
  [mergesources <PeopleMergeSourceName>]
3771
- [coountsonly]
3772
3768
  [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
3773
- [formatjson]
3769
+ [coountsonly|formatjson]
3774
3770
 
3775
3771
  # Email Audit Monitor
3776
3772
 
@@ -6315,12 +6311,11 @@ gam <UserTypeEntity> info events <UserCalendarEntity> [<EventEntity>] [maxinstan
6315
6311
  [formatjson]
6316
6312
  gam <UserTypeEntity> show events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
6317
6313
  [fields <EventFieldNameList>] [showdayofweek]
6318
- [countsonly]
6319
- [formatjson]
6314
+ [countsonly|formatjson]
6320
6315
  gam <UserTypeEntity> print events <UserCalendarEntity> [<EventEntity>] <EventDisplayProperty>*
6321
6316
  [fields <EventFieldNameList>] [showdayofweek]
6322
- [countsonly [eventrowfilter]]
6323
- [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
6317
+ [eventrowfilter]]
6318
+ [countsonly|(formatjson [quotechar <Character>])] [todrive <ToDriveAttribute>*]
6324
6319
 
6325
6320
  gam <UserTypeEntity> update calattendees <UserCalendarEntity> <EventEntity> [anyorganizer]
6326
6321
  [<EventNotificationAttribute>] [splitupdate] [dryrun|doit]
@@ -8344,13 +8339,13 @@ gam <UserTypeEntity> info contacts
8344
8339
  gam <UserTypeEntity> show contacts
8345
8340
  <PeoplePrintShowUserContactSelection>
8346
8341
  [orderby firstname|lastname|(lastmodified ascending)|(lastnodified descending)
8347
- [countsonly|allfields|(fields <PeopleFieldNameList>)] [showgroups] [showmetadata]
8348
- [formatjson]
8342
+ [allfields|(fields <PeopleFieldNameList>)] [showgroups] [showmetadata]
8343
+ [countsonly|formatjson]
8349
8344
  gam <UserTypeEntity> print contacts [todrive <ToDriveAttribute>*]
8350
8345
  <PeoplePrintShowUserContactSelection>
8351
8346
  [orderby firstname|lastname|(lastmodified ascending)|(lastnodified descending)
8352
- [countsonly|allfields|(fields <PeopleFieldNameList>)] [[showgroups|showgroupnameslist] showmetadata]
8353
- [formatjson [quotechar <Character>]]
8347
+ [allfields|(fields <PeopleFieldNameList>)] [[showgroups|showgroupnameslist] showmetadata]
8348
+ [countsonly|(formatjson [quotechar <Character>])]
8354
8349
 
8355
8350
  <OtherContactsFieldName> ::=
8356
8351
  emailaddresses|
@@ -8584,7 +8579,7 @@ gam <UserTypeEntity> info tasklist <TasklistEntity>
8584
8579
  gam <UserTypeEntity> show tasklists
8585
8580
  [countsonly|formatjson]
8586
8581
  gam <UserTypeEntity> print tasklists [todrive <ToDriveAttribute>*]
8587
- [countsonly | (formatjson [quotechar <Character>])]
8582
+ [countsonly|(formatjson [quotechar <Character>])]
8588
8583
 
8589
8584
  # Users - Shared Drives
8590
8585
 
@@ -1,3 +1,15 @@
1
+ 7.23.04
2
+
3
+ Added option `addcsvdata <FieldName> <String>` to `gam <UserTypeEntity> print events`
4
+ and `gam calendars <CalendarEntity> print events` that adds additional columns of data to the CSV file output.
5
+ An example would be to get the calendar name in addition to the calendar ID when printing events.
6
+ ```
7
+ gam redirect csv ./Resources.csv print resources fields email,name
8
+ gam redirect csv ./ResourceEventCounts.csv multiprocess redirect stderr - multiprocess csv Resources.csv gam calendar "~resourceEmail" print events starttime -1y countsonly addcsvdata calendarName "~resourceName"
9
+ ```
10
+
11
+ Upgraded to OpenSSL 3.6.0.
12
+
1
13
  7.23.03
2
14
 
3
15
  Upgraded to OpenSSL 3.5.4.
@@ -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.03'
28
+ __version__ = '7.23.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
@@ -7868,6 +7868,13 @@ class CSVPrintFile():
7868
7868
  if title not in self.titlesSet:
7869
7869
  self.AddTitle(title)
7870
7870
 
7871
+ def InsertTitles(self, position, titles):
7872
+ for title in titles if isinstance(titles, list) else [titles]:
7873
+ if title not in self.titlesSet:
7874
+ self.titlesSet.add(title)
7875
+ self.titlesList.insert(position, title)
7876
+ position += 1
7877
+
7871
7878
  def SetTitles(self, titles):
7872
7879
  self.titlesSet = set()
7873
7880
  self.titlesList = []
@@ -22429,12 +22436,12 @@ def infoUserPeopleContacts(users):
22429
22436
 
22430
22437
  # gam <UserTypeEntity> print contacts [todrive <ToDriveAttribute>*] <PeoplePrintShowUserContactSelection>
22431
22438
  # [showgroups|showgroupnameslist] [orderby firstname|lastname|(lastmodified ascending)|(lastnodified descending)
22432
- # [countsonly|allfields|fields <PeopleFieldNameList>] [showmetadata]
22433
- # [formatjson [quotechar <Character>]]
22439
+ # [allfields|fields <PeopleFieldNameList>] [showmetadata]
22440
+ # [countsonly|(formatjson [quotechar <Character>])]
22434
22441
  # gam <UserTypeEntity> show contacts <PeoplePrintShowUserContactSelection>
22435
22442
  # [showgroups] [orderby firstname|lastname|(lastmodified ascending)|(lastnodified descending)
22436
- # [countsonly|allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22437
- # [formatjson]
22443
+ # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22444
+ # [countsonly|formatjson]
22438
22445
  def printShowUserPeopleContacts(users):
22439
22446
  entityType = Ent.USER
22440
22447
  entityTypeName = Ent.Singular(entityType)
@@ -22473,6 +22480,8 @@ def printShowUserPeopleContacts(users):
22473
22480
  else:
22474
22481
  FJQC.GetFormatJSONQuoteChar(myarg, True)
22475
22482
  if countsOnly:
22483
+ if csvPF:
22484
+ csvPF.SetFormatJSON(False)
22476
22485
  fieldsList = ['emailAddresses']
22477
22486
  if contactQuery['mainContacts']:
22478
22487
  fields = _getPersonFields(PEOPLE_FIELDS_CHOICE_MAP, PEOPLE_CONTACTS_DEFAULT_FIELDS, fieldsList, parameters)
@@ -22710,11 +22719,11 @@ def processUserPeopleOtherContacts(users):
22710
22719
  Ind.Decrement()
22711
22720
 
22712
22721
  # gam <UserTypeEntity> print othercontacts [todrive <ToDriveAttribute>*] <OtherContactSelection>
22713
- # [countsonly|allfields|(fields <OtherContactFieldNameList>)] [showmetadata]
22714
- # [formatjson [quotechar <Character>]]
22722
+ # [allfields|(fields <OtherContactFieldNameList>)] [showmetadata]
22723
+ # [countsonly|(formatjson [quotechar <Character>])]
22715
22724
  # gam <UserTypeEntity> show othercontacts <OtherContactSelection>
22716
- # [countsonly|allfields|(fields <OtherContactFieldNameList>)] [showmetadata]
22717
- # [formatjson]
22725
+ # [allfields|(fields <OtherContactFieldNameList>)] [showmetadata]
22726
+ # [countsonly|formatjson]
22718
22727
  def printShowUserPeopleOtherContacts(users):
22719
22728
  entityType = Ent.USER
22720
22729
  entityTypeName = Ent.Singular(entityType)
@@ -22744,6 +22753,8 @@ def printShowUserPeopleOtherContacts(users):
22744
22753
  else:
22745
22754
  FJQC.GetFormatJSONQuoteChar(myarg, True)
22746
22755
  if countsOnly:
22756
+ if csvPF:
22757
+ csvPF.SetFormatJSON(False)
22747
22758
  fieldsList = ['emailAddresses']
22748
22759
  fields = _getPersonFields(PEOPLE_OTHER_CONTACTS_FIELDS_CHOICE_MAP, PEOPLE_CONTACTS_DEFAULT_FIELDS, fieldsList, parameters)
22749
22760
  i, count, users = getEntityArgument(users)
@@ -22813,6 +22824,8 @@ def _printShowPeople(source):
22813
22824
  function = 'searchDirectoryPeople'
22814
22825
  else:
22815
22826
  FJQC.GetFormatJSONQuoteChar(myarg, True)
22827
+ if countsOnly and csvPF:
22828
+ csvPF.SetFormatJSON(False)
22816
22829
  fields = _getPersonFields(PEOPLE_FIELDS_CHOICE_MAP, PEOPLE_CONTACTS_DEFAULT_FIELDS, fieldsList, parameters)
22817
22830
  printGettingAllEntityItemsForWhom(peopleEntityType, GC.Values[GC.DOMAIN], query=kwargs.get('query'))
22818
22831
  try:
@@ -22850,29 +22863,24 @@ def doInfoDomainPeopleContacts():
22850
22863
  # gam print people|peopleprofile [todrive <ToDriveAttribute>*]
22851
22864
  # [query <String>]
22852
22865
  # [mergesources <PeopleMergeSourceName>]
22853
- # [countsonly]
22854
22866
  # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22855
- # [formatjson [quotechar <Character>]]
22867
+ # [countsonly|(formatjson [quotechar <Character>])]
22856
22868
  # gam show people|peopleprofile
22857
22869
  # [query <String>]
22858
22870
  # [mergesources <PeopleMergeSourceName>]
22859
- # [countsonly]
22860
22871
  # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22861
- # [formatjson]
22872
+ # [countsonlyformatjson]
22862
22873
  # gam print domaincontacts|peoplecontacts [todrive <ToDriveAttribute>*]
22863
22874
  # [sources <PeopleSourceName>]
22864
22875
  # [query <String>]
22865
22876
  # [mergesources <PeopleMergeSourceName>]
22866
- # [countsonly]
22867
22877
  # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22868
- # [formatjson [quotechar <Character>]]
22878
+ # [countsonly|(formatjson [quotechar <Character>])]
22869
22879
  # gam show domaincontacts|peoplecontacts
22870
22880
  # [sources <PeopleSourceName>]
22871
22881
  # [query <String>]
22872
22882
  # [mergesources <PeopleMergeSourceName>]
22873
- # [countsonly]
22874
- # [allfields|(fields <PeopleFieldNameList>)] [showmetadata]
22875
- # [formatjson]
22883
+ # [countsonlyformatjson]
22876
22884
  def doPrintShowDomainPeopleProfiles():
22877
22885
  _printShowPeople('profile')
22878
22886
 
@@ -40125,7 +40133,7 @@ def _createCalendarEvents(user, origCal, function, calIds, count, body, paramete
40125
40133
  else:
40126
40134
  if parameters['showDayOfWeek']:
40127
40135
  _getEventDaysOfWeek(event)
40128
- _printCalendarEvent(user, calId, event, parameters['csvPF'], parameters['FJQC'])
40136
+ _printCalendarEvent(user, calId, event, parameters['csvPF'], parameters['FJQC'], {})
40129
40137
  except (GAPI.invalid, GAPI.required, GAPI.timeRangeEmpty, GAPI.eventDurationExceedsLimit,
40130
40138
  GAPI.requiredAccessLevel, GAPI.participantIsNeitherOrganizerNorAttendee,
40131
40139
  GAPI.malformedWorkingLocationEvent, GAPI.badRequest) as e:
@@ -40229,7 +40237,7 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
40229
40237
  else:
40230
40238
  if parameters['showDayOfWeek']:
40231
40239
  _getEventDaysOfWeek(event)
40232
- _printCalendarEvent(user, calId, event, parameters['csvPF'], parameters['FJQC'])
40240
+ _printCalendarEvent(user, calId, event, parameters['csvPF'], parameters['FJQC'], {})
40233
40241
  except (GAPI.notFound, GAPI.deleted) as e:
40234
40242
  if not checkCalendarExists(cal, calId, j, jcount):
40235
40243
  entityUnknownWarning(Ent.CALENDAR, calId, j, jcount)
@@ -40526,10 +40534,12 @@ def _showCalendarEvent(primaryEmail, calId, eventEntityType, event, k, kcount, F
40526
40534
  showJSON(None, event, skipObjects)
40527
40535
  Ind.Decrement()
40528
40536
 
40529
- def _printCalendarEvent(user, calId, event, csvPF, FJQC):
40537
+ def _printCalendarEvent(user, calId, event, csvPF, FJQC, addCSVData):
40530
40538
  row = {'calendarId': calId, 'id': event['id']}
40531
40539
  if user:
40532
40540
  row['primaryEmail'] = user
40541
+ if addCSVData:
40542
+ row.update(addCSVData)
40533
40543
  flattenJSON(event, flattened=row, timeObjects=EVENT_TIME_OBJECTS)
40534
40544
  if not FJQC.formatJSON:
40535
40545
  csvPF.WriteRowTitles(row)
@@ -40542,7 +40552,7 @@ def _printCalendarEvent(user, calId, event, csvPF, FJQC):
40542
40552
  csvPF.WriteRowNoFilter(row)
40543
40553
 
40544
40554
  def _printShowCalendarEvents(origUser, user, origCal, calIds, count, calendarEventEntity,
40545
- csvPF, FJQC, fieldsList):
40555
+ csvPF, FJQC, fieldsList, addCSVData):
40546
40556
  i = 0
40547
40557
  for calId in calIds:
40548
40558
  i += 1
@@ -40568,7 +40578,7 @@ def _printShowCalendarEvents(origUser, user, origCal, calIds, count, calendarEve
40568
40578
  for event in events:
40569
40579
  if calendarEventEntity['showDayOfWeek']:
40570
40580
  _getEventDaysOfWeek(event)
40571
- _printCalendarEvent(user, calId, event, csvPF, FJQC)
40581
+ _printCalendarEvent(user, calId, event, csvPF, FJQC, addCSVData)
40572
40582
  elif GC.Values[GC.CSV_OUTPUT_USERS_AUDIT] and user:
40573
40583
  csvPF.WriteRowNoFilter({'calendarId': calId, 'primaryEmail': user, 'id': ''})
40574
40584
  else:
@@ -40586,6 +40596,8 @@ def _printShowCalendarEvents(origUser, user, origCal, calIds, count, calendarEve
40586
40596
  row = {'calendarId': calId}
40587
40597
  if user:
40588
40598
  row['primaryEmail'] = user
40599
+ if addCSVData:
40600
+ row.update(addCSVData)
40589
40601
  row['events'] = jcount
40590
40602
  if not calendarEventEntity['eventRowFilter']:
40591
40603
  csvPF.WriteRow(row)
@@ -40816,6 +40828,8 @@ def _getCalendarPrintShowEventOptions(calendarEventEntity, entityType):
40816
40828
  csvPF = CSVPrintFile(['primaryEmail', 'calendarId', 'id'] if entityType == Ent.USER else ['calendarId', 'id'], 'sortall', indexedTitles=EVENT_INDEXED_TITLES) if Act.csvFormat() else None
40817
40829
  FJQC = FormatJSONQuoteChar(csvPF)
40818
40830
  fieldsList = []
40831
+ addCSVData = {}
40832
+ addCSVDataLoc = 2 if entityType == Ent.USER else 1
40819
40833
  while Cmd.ArgumentsRemaining():
40820
40834
  myarg = getArgument()
40821
40835
  if csvPF and myarg == 'todrive':
@@ -40824,6 +40838,9 @@ def _getCalendarPrintShowEventOptions(calendarEventEntity, entityType):
40824
40838
  pass
40825
40839
  elif myarg == 'fields':
40826
40840
  _getEventFields(fieldsList)
40841
+ elif csvPF and myarg == 'addcsvdata':
40842
+ k = getString(Cmd.OB_STRING)
40843
+ addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
40827
40844
  elif myarg == 'countsonly':
40828
40845
  calendarEventEntity['countsOnly'] = True
40829
40846
  elif myarg == 'showdayofweek':
@@ -40836,27 +40853,35 @@ def _getCalendarPrintShowEventOptions(calendarEventEntity, entityType):
40836
40853
  fieldsList = ['id']
40837
40854
  if csvPF:
40838
40855
  if calendarEventEntity['countsOnly']:
40856
+ csvPF.SetFormatJSON(False)
40839
40857
  csvPF.RemoveTitles(['id'])
40858
+ if addCSVData:
40859
+ csvPF.InsertTitles(addCSVDataLoc, sorted(addCSVData.keys()))
40840
40860
  csvPF.AddTitles(['events'])
40861
+ csvPF.SetSortAllTitles()
40841
40862
  calendarEventEntity['countsOnlyTitles'] = csvPF.titlesList[:]
40842
- elif not FJQC.formatJSON and not fieldsList:
40843
- csvPF.AddSortTitles(EVENT_PRINT_ORDER)
40863
+ else:
40864
+ if addCSVData:
40865
+ csvPF.InsertTitles(addCSVDataLoc, sorted(addCSVData.keys()))
40866
+ if not FJQC.formatJSON and not fieldsList:
40867
+ csvPF.AddTitles(EVENT_PRINT_ORDER)
40868
+ csvPF.SetSortAllTitles()
40844
40869
  _addEventEntitySelectFields(calendarEventEntity, fieldsList)
40845
- return (csvPF, FJQC, fieldsList)
40870
+ return (csvPF, FJQC, fieldsList, addCSVData)
40846
40871
 
40847
40872
  # gam calendars <CalendarEntity> print events <EventEntity> <EventDisplayProperties>*
40848
40873
  # [fields <EventFieldNameList>] [showdayofweek]
40849
- # [countsonly [eventrowfilter]]
40850
- # [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
40874
+ # (addcsvdata <FieldName> <String>)*
40875
+ # [eventrowfilter]
40876
+ # [countsonly|(formatjson [quotechar <Character>])] [todrive <ToDriveAttribute>*]
40851
40877
  # gam calendars <CalendarEntity> show events <EventEntity> <EventDisplayProperties>*
40852
40878
  # [fields <EventFieldNameList>] [showdayofweek]
40853
- # [countsonly]
40854
- # [formatjson]
40879
+ # [countsonly|formatjson]
40855
40880
  def doCalendarsPrintShowEvents(calIds):
40856
40881
  calendarEventEntity = getCalendarEventEntity()
40857
- csvPF, FJQC, fieldsList = _getCalendarPrintShowEventOptions(calendarEventEntity, Ent.CALENDAR)
40882
+ csvPF, FJQC, fieldsList, addCSVData = _getCalendarPrintShowEventOptions(calendarEventEntity, Ent.CALENDAR)
40858
40883
  _printShowCalendarEvents(None, None, None, calIds, len(calIds), calendarEventEntity,
40859
- csvPF, FJQC, fieldsList)
40884
+ csvPF, FJQC, fieldsList, addCSVData)
40860
40885
  if csvPF:
40861
40886
  if calendarEventEntity['countsOnly'] and calendarEventEntity['eventRowFilter']:
40862
40887
  csvPF.SetTitles(calendarEventEntity['countsOnlyTitles'])
@@ -48863,13 +48888,15 @@ def _doInfoCourses(courseIdList):
48863
48888
 
48864
48889
  # gam info courses <CourseEntity> [owneraccess]
48865
48890
  # [owneremail] [alias|aliases] [show none|all|students|teachers] [countsonly]
48866
- # [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson]
48891
+ # [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
48892
+ # [formatjson]
48867
48893
  def doInfoCourses():
48868
48894
  _doInfoCourses(getEntityList(Cmd.OB_COURSE_ENTITY, shlexSplit=True))
48869
48895
 
48870
48896
  # gam info course <CourseID> [owneraccess]
48871
48897
  # [owneremail] [alias|aliases] [show none|all|students|teachers] [countsonly]
48872
- # [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson]
48898
+ # [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
48899
+ # [formatjson]
48873
48900
  def doInfoCourse():
48874
48901
  _doInfoCourses(getStringReturnInList(Cmd.OB_COURSE_ID))
48875
48902
 
@@ -49187,7 +49214,7 @@ COURSE_ANNOUNCEMENTS_INDEXED_TITLES = ['materials']
49187
49214
  # (orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
49188
49215
  # [showcreatoremails|creatoremail] [fields <CourseAnnouncementFieldNameList>]
49189
49216
  # [timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
49190
- # [countsonly] [formatjson [quotechar <Character>]]
49217
+ # [countsonly|(formatjson [quotechar <Character>])]
49191
49218
  def doPrintCourseAnnouncements():
49192
49219
  def _printCourseAnnouncement(course, courseAnnouncement, i, count):
49193
49220
  if applyCourseItemFilter and not _courseItemPassesFilter(courseAnnouncement, courseItemFilter):
@@ -49243,6 +49270,8 @@ def doPrintCourseAnnouncements():
49243
49270
  coursesInfo = _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties)
49244
49271
  if coursesInfo is None:
49245
49272
  return
49273
+ if countsOnly:
49274
+ csvPF.SetFormatJSON(False)
49246
49275
  applyCourseItemFilter = _setApplyCourseItemFilter(courseItemFilter, fieldsList)
49247
49276
  if showCreatorEmail and fieldsList:
49248
49277
  fieldsList.append('creatorUserId')
@@ -49299,7 +49328,7 @@ COURSE_TOPICS_SORT_TITLES = ['courseId', 'courseName', 'topicId', 'name', 'updat
49299
49328
  # (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
49300
49329
  # [topicids <CourseTopicIDEntity>]
49301
49330
  # [timefilter updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
49302
- # [countsonly] [formatjson [quotechar <Character>]]
49331
+ # [countsonly|(formatjson [quotechar <Character>])]
49303
49332
  def doPrintCourseTopics():
49304
49333
  def _printCourseTopic(course, courseTopic):
49305
49334
  if applyCourseItemFilter and not _courseItemPassesFilter(courseTopic, courseItemFilter):
@@ -49340,6 +49369,8 @@ def doPrintCourseTopics():
49340
49369
  coursesInfo = _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties)
49341
49370
  if coursesInfo is None:
49342
49371
  return
49372
+ if countsOnly:
49373
+ csvPF.SetFormatJSON(False)
49343
49374
  applyCourseItemFilter = _setApplyCourseItemFilter(courseItemFilter, fieldsList)
49344
49375
  courseTopicIdsLists = courseTopicIds if isinstance(courseTopicIds, dict) else None
49345
49376
  i = 0
@@ -49584,6 +49615,8 @@ def doPrintCourseWM(entityIDType, entityStateType):
49584
49615
  coursesInfo = _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties)
49585
49616
  if coursesInfo is None:
49586
49617
  return
49618
+ if countsOnly:
49619
+ csvPF.SetFormatJSON(False)
49587
49620
  applyCourseItemFilter = _setApplyCourseItemFilter(courseItemFilter, fieldsList)
49588
49621
  courseWMIds = courseWMSelectionParameters['courseWMIds']
49589
49622
  courseWMIdsLists = courseWMIds if isinstance(courseWMIds, dict) else {}
@@ -49639,7 +49672,7 @@ def doPrintCourseWM(entityIDType, entityStateType):
49639
49672
  # [showcreatoremails|creatoremail] [showtopicnames] [fields <CourseMaterialFieldNameList>]
49640
49673
  # [timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
49641
49674
  # [oneitemperrow]
49642
- # [countsonly] [formatjson [quotechar <Character>]]
49675
+ # [countsonly|(formatjson [quotechar <Character>])]
49643
49676
  def doPrintCourseMaterials():
49644
49677
  doPrintCourseWM(Ent.COURSE_MATERIAL_ID, Ent.COURSE_MATERIAL_STATE)
49645
49678
 
@@ -49651,7 +49684,7 @@ def doPrintCourseMaterials():
49651
49684
  # [showstudentsaslist [<Boolean>]] [delimiter <Character>]
49652
49685
  # [timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
49653
49686
  # [oneitemperrow]
49654
- # [countsonly] [formatjson [quotechar <Character>]]
49687
+ # [countsonly|(formatjson [quotechar <Character>])]
49655
49688
  def doPrintCourseWork():
49656
49689
  doPrintCourseWM(Ent.COURSE_WORK_ID, Ent.COURSE_WORK_STATE)
49657
49690
 
@@ -49695,7 +49728,7 @@ def _gettingCourseSubmissionQuery(courseSubmissionStates, late, userId):
49695
49728
  # (submissionids <CourseSubmissionIDEntity>)|((submissionstates <CourseSubmissionStateList>)*) [late|notlate]
49696
49729
  # [fields <CourseSubmissionFieldNameList>] [showuserprofile]
49697
49730
  # [timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
49698
- # [countsonly] [formatjson [quotechar <Character>]]
49731
+ # [countsonly|(formatjson [quotechar <Character>])]
49699
49732
  def doPrintCourseSubmissions():
49700
49733
  def _printCourseSubmission(course, courseSubmission):
49701
49734
  if applyCourseItemFilter and not _courseItemPassesFilter(courseSubmission, courseItemFilter):
@@ -49777,6 +49810,8 @@ def doPrintCourseSubmissions():
49777
49810
  coursesInfo = _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties, getOwnerId=True)
49778
49811
  if coursesInfo is None:
49779
49812
  return
49813
+ if countsOnly:
49814
+ csvPF.SetFormatJSON(False)
49780
49815
  applyCourseItemFilter = _setApplyCourseItemFilter(courseItemFilter, fieldsList)
49781
49816
  courseWorkIds = courseWMSelectionParameters['courseWMIds']
49782
49817
  courseWorkIdsLists = courseWorkIds if isinstance(courseWorkIds, dict) else {}
@@ -53523,16 +53558,16 @@ def infoCalendarEvents(users):
53523
53558
 
53524
53559
  # gam <UserTypeEntity> print events <UserCalendarEntity> <EventEntity> <EventDisplayProperties>*
53525
53560
  # [fields <EventFieldNameList>] [showdayofweek]
53526
- # [countsonly [eventrowfilter]]
53527
- # [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
53561
+ # (addcsvdata <FieldName> <String>)*
53562
+ # [eventrowfilter]
53563
+ # [countsonly|(formatjson [quotechar <Character>])] [todrive <ToDriveAttribute>*]
53528
53564
  # gam <UserTypeEntity> show events <UserCalendarEntity> <EventEntity> <EventDisplayProperties>*
53529
53565
  # [fields <EventFieldNameList>] [showdayofweek]
53530
- # [countsonly]]
53531
- # [formatjson]
53566
+ # ~[countsonly|formatjson]
53532
53567
  def printShowCalendarEvents(users):
53533
53568
  calendarEntity = getUserCalendarEntity()
53534
53569
  calendarEventEntity = getCalendarEventEntity()
53535
- csvPF, FJQC, fieldsList = _getCalendarPrintShowEventOptions(calendarEventEntity, Ent.USER)
53570
+ csvPF, FJQC, fieldsList, addCSVData = _getCalendarPrintShowEventOptions(calendarEventEntity, Ent.USER)
53536
53571
  i, count, users = getEntityArgument(users)
53537
53572
  for user in users:
53538
53573
  i += 1
@@ -53543,7 +53578,7 @@ def printShowCalendarEvents(users):
53543
53578
  continue
53544
53579
  Ind.Increment()
53545
53580
  _printShowCalendarEvents(origUser, user, cal, calIds, jcount, calendarEventEntity,
53546
- csvPF, FJQC, fieldsList)
53581
+ csvPF, FJQC, fieldsList, addCSVData)
53547
53582
  Ind.Decrement()
53548
53583
  if csvPF:
53549
53584
  if calendarEventEntity['countsOnly'] and calendarEventEntity['eventRowFilter']:
@@ -53987,7 +54022,7 @@ def printShowStatusEvent(users, eventType):
53987
54022
  for event in events:
53988
54023
  if showDayOfWeek:
53989
54024
  _getEventDaysOfWeek(event)
53990
- _printCalendarEvent(user, calId, event, csvPF, FJQC)
54025
+ _printCalendarEvent(user, calId, event, csvPF, FJQC, {})
53991
54026
  if 'pdelta' in wlDate:
53992
54027
  first = first.shift(**wlDate['pdelta'])
53993
54028
  last = last.shift(**wlDate['pdelta'])
@@ -77238,7 +77273,7 @@ TASK_QUERY_STATE_MAP = {
77238
77273
  # [updatedmin <Time>]
77239
77274
  # [showcompleted [<Boolean>]] [showdeleted [<Boolean>]] [showhidden [<Boolean>]] [showall]
77240
77275
  # [orderby completed|due|updated]
77241
- # [countsonly | (formatjson [quotechar <Character>])]
77276
+ # [countsonly|(formatjson [quotechar <Character>])]
77242
77277
  def printShowTasks(users):
77243
77278
  def _showTaskAndChildren(tasklist, taskId, k, compact):
77244
77279
  if taskId in taskParentsProcessed:
@@ -77305,8 +77340,11 @@ def printShowTasks(users):
77305
77340
  csvPF.SetTitles(['User', CSVTitle])
77306
77341
  else:
77307
77342
  FJQC.GetFormatJSONQuoteChar(myarg, False)
77308
- if csvPF and FJQC.formatJSON:
77309
- csvPF.SetJSONTitles(['User', 'tasklistId', 'id', 'taskId', 'title', 'JSON'])
77343
+ if csvPF:
77344
+ if countsOnly:
77345
+ csvPF.SetFormatJSON(False)
77346
+ elif FJQC.formatJSON:
77347
+ csvPF.SetJSONTitles(['User', 'tasklistId', 'id', 'taskId', 'title', 'JSON'])
77310
77348
  i, count, users = getEntityArgument(users)
77311
77349
  for user in users:
77312
77350
  i += 1
@@ -77505,7 +77543,7 @@ def processTasklists(users):
77505
77543
  # gam <UserTypeEntity> show tasklists
77506
77544
  # [countsonly|formatjson]
77507
77545
  # gam <UserTypeEntity> print tasklists [todrive <ToDriveAttribute>*]
77508
- # [countsonly | (formatjson [quotechar <Character>])]
77546
+ # [countsonly|(formatjson [quotechar <Character>])]
77509
77547
  def printShowTasklists(users):
77510
77548
  csvPF = CSVPrintFile(['User', 'id', 'title']) if Act.csvFormat() else None
77511
77549
  if csvPF:
@@ -77523,6 +77561,8 @@ def printShowTasklists(users):
77523
77561
  csvPF.SetTitles(['User', CSVTitle])
77524
77562
  else:
77525
77563
  FJQC.GetFormatJSONQuoteChar(myarg, True)
77564
+ if countsOnly and csvPF:
77565
+ csvPF.SetFormatJSON(False)
77526
77566
  i, count, users = getEntityArgument(users)
77527
77567
  for user in users:
77528
77568
  i += 1
@@ -10,7 +10,7 @@
10
10
  - [Delete duplicate email addresses from contacts](#delete-duplicate-email-addresses-from-contacts)
11
11
  - [Manage domain contact photos](#manage-domain-contact-photos)
12
12
  - [Display domain shared contacts](#display-domain-shared-contacts)
13
- - [Display global address list](#display-global-address-list)
13
+ - [Display global address list](#Global-Address-List)
14
14
 
15
15
  ## API documentation
16
16
  * [Domain Shared Contacts API](https://developers.google.com/admin-sdk/domain-shared-contacts)
@@ -10,6 +10,10 @@ 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.03
14
+
15
+ Upgraded to OpenSSL 3.5.4.
16
+
13
17
  ### 7.23.02
14
18
 
15
19
  Added option `oneitemperrow` to 'gam print course-materials|course-work` to have each of a
@@ -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.02 - https://github.com/GAM-team/GAM - pyinstaller
255
+ GAM 7.23.03 - 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
@@ -3,7 +3,7 @@
3
3
  Print the current version of Gam with details
4
4
  ```
5
5
  gam version
6
- GAM 7.23.02 - https://github.com/GAM-team/GAM - pyinstaller
6
+ GAM 7.23.03 - 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.02 - https://github.com/GAM-team/GAM - pyinstaller
18
+ GAM 7.23.03 - 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.02 - https://github.com/GAM-team/GAM - pyinstaller
30
+ GAM 7.23.03 - 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