gam7 7.20.0__tar.gz → 7.20.2__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 (322) hide show
  1. {gam7-7.20.0 → gam7-7.20.2}/PKG-INFO +1 -1
  2. {gam7-7.20.0 → gam7-7.20.2}/src/GamCommands.txt +9 -7
  3. {gam7-7.20.0 → gam7-7.20.2}/src/GamUpdate.txt +13 -0
  4. {gam7-7.20.0 → gam7-7.20.2}/src/gam/__init__.py +59 -31
  5. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glclargs.py +1 -0
  6. {gam7-7.20.0 → gam7-7.20.2}/wiki/Classroom-StudentGroups.md +61 -3
  7. {gam7-7.20.0 → gam7-7.20.2}/wiki/GamUpdates.md +12 -0
  8. {gam7-7.20.0 → gam7-7.20.2}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
  9. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Chat.md +22 -5
  10. {gam7-7.20.0 → gam7-7.20.2}/wiki/Version-and-Help.md +6 -6
  11. {gam7-7.20.0 → gam7-7.20.2}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  12. {gam7-7.20.0 → gam7-7.20.2}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  13. {gam7-7.20.0 → gam7-7.20.2}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  14. {gam7-7.20.0 → gam7-7.20.2}/.github/ISSUE_TEMPLATE.txt +0 -0
  15. {gam7-7.20.0 → gam7-7.20.2}/.github/actions/decrypt.sh +0 -0
  16. {gam7-7.20.0 → gam7-7.20.2}/.github/actions/entitlements.plist +0 -0
  17. {gam7-7.20.0 → gam7-7.20.2}/.github/actions/package_exclusions.txt +0 -0
  18. {gam7-7.20.0 → gam7-7.20.2}/.github/stale.yml +0 -0
  19. {gam7-7.20.0 → gam7-7.20.2}/.github/workflows/build.yml +0 -0
  20. {gam7-7.20.0 → gam7-7.20.2}/.github/workflows/codeql-analysis.yml +0 -0
  21. {gam7-7.20.0 → gam7-7.20.2}/.github/workflows/get-cacerts.yml +0 -0
  22. {gam7-7.20.0 → gam7-7.20.2}/.github/workflows/pushwiki.yml +0 -0
  23. {gam7-7.20.0 → gam7-7.20.2}/.github/workflows/pypi.yml +0 -0
  24. {gam7-7.20.0 → gam7-7.20.2}/.pre-commit-config.yaml +0 -0
  25. {gam7-7.20.0 → gam7-7.20.2}/LICENSE +0 -0
  26. {gam7-7.20.0 → gam7-7.20.2}/README.md +0 -0
  27. {gam7-7.20.0 → gam7-7.20.2}/pyproject.toml +0 -0
  28. {gam7-7.20.0 → gam7-7.20.2}/src/.gitignore +0 -0
  29. {gam7-7.20.0 → gam7-7.20.2}/src/LICENSE +0 -0
  30. {gam7-7.20.0 → gam7-7.20.2}/src/README.md +0 -0
  31. {gam7-7.20.0 → gam7-7.20.2}/src/cacerts.pem +0 -0
  32. {gam7-7.20.0 → gam7-7.20.2}/src/callgam.py +0 -0
  33. {gam7-7.20.0 → gam7-7.20.2}/src/gam/__main__.py +0 -0
  34. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/__init__.py +0 -0
  35. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/auth.py +0 -0
  36. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/client.py +0 -0
  37. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/core.py +0 -0
  38. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/data.py +0 -0
  39. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/http.py +0 -0
  40. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/http_core.py +0 -0
  41. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/http_interface.py +0 -0
  42. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/mock_http.py +0 -0
  43. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/mock_http_core.py +0 -0
  44. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/mock_service.py +0 -0
  45. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/service.py +0 -0
  46. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/token_store.py +0 -0
  47. {gam7-7.20.0 → gam7-7.20.2}/src/gam/atom/url.py +0 -0
  48. {gam7-7.20.0 → gam7-7.20.2}/src/gam/cacerts.pem +0 -0
  49. {gam7-7.20.0 → gam7-7.20.2}/src/gam/cbcm-v1.1beta1.json +0 -0
  50. {gam7-7.20.0 → gam7-7.20.2}/src/gam/contactdelegation-v1.json +0 -0
  51. {gam7-7.20.0 → gam7-7.20.2}/src/gam/datastudio-v1.json +0 -0
  52. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/__init__.py +0 -0
  53. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glaction.py +0 -0
  54. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glapi.py +0 -0
  55. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glcfg.py +0 -0
  56. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glentity.py +0 -0
  57. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glgapi.py +0 -0
  58. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glgdata.py +0 -0
  59. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glglobals.py +0 -0
  60. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glindent.py +0 -0
  61. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glmsgs.py +0 -0
  62. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glskus.py +0 -0
  63. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/gluprop.py +0 -0
  64. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/glverlibs.py +0 -0
  65. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gamlib/yubikey.py +0 -0
  66. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/__init__.py +0 -0
  67. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/alt/__init__.py +0 -0
  68. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/alt/app_engine.py +0 -0
  69. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/alt/appengine.py +0 -0
  70. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/apps/__init__.py +0 -0
  71. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/apps/audit/__init__.py +0 -0
  72. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/apps/audit/service.py +0 -0
  73. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  74. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/apps/contacts/service.py +0 -0
  75. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/apps/service.py +0 -0
  76. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/service.py +0 -0
  77. {gam7-7.20.0 → gam7-7.20.2}/src/gam/gdata/urlfetch.py +0 -0
  78. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/__init__.py +0 -0
  79. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/_auth.py +0 -0
  80. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/_helpers.py +0 -0
  81. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/channel.py +0 -0
  82. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/discovery.py +0 -0
  83. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
  84. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
  85. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
  86. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
  87. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/errors.py +0 -0
  88. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/http.py +0 -0
  89. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/mimeparse.py +0 -0
  90. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/model.py +0 -0
  91. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/schema.py +0 -0
  92. {gam7-7.20.0 → gam7-7.20.2}/src/gam/googleapiclient/version.py +0 -0
  93. {gam7-7.20.0 → gam7-7.20.2}/src/gam/iso8601/__init__.py +0 -0
  94. {gam7-7.20.0 → gam7-7.20.2}/src/gam/iso8601/iso8601.py +0 -0
  95. {gam7-7.20.0 → gam7-7.20.2}/src/gam/meet-v2beta.json +0 -0
  96. {gam7-7.20.0 → gam7-7.20.2}/src/gam/serviceaccountlookup-v1.json +0 -0
  97. {gam7-7.20.0 → gam7-7.20.2}/src/gam/six.py +0 -0
  98. {gam7-7.20.0 → gam7-7.20.2}/src/gam-install.sh +0 -0
  99. {gam7-7.20.0 → gam7-7.20.2}/src/gam-setup.bat +0 -0
  100. {gam7-7.20.0 → gam7-7.20.2}/src/gam.exe.manifest +0 -0
  101. {gam7-7.20.0 → gam7-7.20.2}/src/gam.py +0 -0
  102. {gam7-7.20.0 → gam7-7.20.2}/src/gam.spec +0 -0
  103. {gam7-7.20.0 → gam7-7.20.2}/src/gam.wxs +0 -0
  104. {gam7-7.20.0 → gam7-7.20.2}/src/license.rtf +0 -0
  105. {gam7-7.20.0 → gam7-7.20.2}/src/requirements-dev.txt +0 -0
  106. {gam7-7.20.0 → gam7-7.20.2}/src/tools/a_atleast_b.py +0 -0
  107. {gam7-7.20.0 → gam7-7.20.2}/src/tools/gen-wix-xml-filelist.py +0 -0
  108. {gam7-7.20.0 → gam7-7.20.2}/src/tools/mkGamRef.py +0 -0
  109. {gam7-7.20.0 → gam7-7.20.2}/src/tools/openssl.props +0 -0
  110. {gam7-7.20.0 → gam7-7.20.2}/src/tools/ssd.mjs +0 -0
  111. {gam7-7.20.0 → gam7-7.20.2}/src/version_info.txt.in +0 -0
  112. {gam7-7.20.0 → gam7-7.20.2}/wiki/00scratch.md +0 -0
  113. {gam7-7.20.0 → gam7-7.20.2}/wiki/Addresses.md +0 -0
  114. {gam7-7.20.0 → gam7-7.20.2}/wiki/Administrators.md +0 -0
  115. {gam7-7.20.0 → gam7-7.20.2}/wiki/Alert-Center.md +0 -0
  116. {gam7-7.20.0 → gam7-7.20.2}/wiki/Aliases.md +0 -0
  117. {gam7-7.20.0 → gam7-7.20.2}/wiki/Authorization.md +0 -0
  118. {gam7-7.20.0 → gam7-7.20.2}/wiki/BNF-Syntax.md +0 -0
  119. {gam7-7.20.0 → gam7-7.20.2}/wiki/Basic-Items.md +0 -0
  120. {gam7-7.20.0 → gam7-7.20.2}/wiki/Bulk-Processing.md +0 -0
  121. {gam7-7.20.0 → gam7-7.20.2}/wiki/Business-Account-Management.md +0 -0
  122. {gam7-7.20.0 → gam7-7.20.2}/wiki/CSV-Input-Filtering.md +0 -0
  123. {gam7-7.20.0 → gam7-7.20.2}/wiki/CSV-Output-Filtering.md +0 -0
  124. {gam7-7.20.0 → gam7-7.20.2}/wiki/CSV-Special-Characters.md +0 -0
  125. {gam7-7.20.0 → gam7-7.20.2}/wiki/Calendars-Access.md +0 -0
  126. {gam7-7.20.0 → gam7-7.20.2}/wiki/Calendars-Events.md +0 -0
  127. {gam7-7.20.0 → gam7-7.20.2}/wiki/Calendars.md +0 -0
  128. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chat-Bot-Setup-Use.md +0 -0
  129. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-AUE-Counts.md +0 -0
  130. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  131. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Installed-Apps.md +0 -0
  132. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  133. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Policies.md +0 -0
  134. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Printers.md +0 -0
  135. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Profile-Management.md +0 -0
  136. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Version-Counts.md +0 -0
  137. {gam7-7.20.0 → gam7-7.20.2}/wiki/Chrome-Version-History.md +0 -0
  138. {gam7-7.20.0 → gam7-7.20.2}/wiki/ChromeOS-Devices.md +0 -0
  139. {gam7-7.20.0 → gam7-7.20.2}/wiki/Classroom-Courses.md +0 -0
  140. {gam7-7.20.0 → gam7-7.20.2}/wiki/Classroom-Guardians.md +0 -0
  141. {gam7-7.20.0 → gam7-7.20.2}/wiki/Classroom-Invitations.md +0 -0
  142. {gam7-7.20.0 → gam7-7.20.2}/wiki/Classroom-Membership.md +0 -0
  143. {gam7-7.20.0 → gam7-7.20.2}/wiki/Cloud-Channel.md +0 -0
  144. {gam7-7.20.0 → gam7-7.20.2}/wiki/Cloud-Identity-Devices.md +0 -0
  145. {gam7-7.20.0 → gam7-7.20.2}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  146. {gam7-7.20.0 → gam7-7.20.2}/wiki/Cloud-Identity-Groups.md +0 -0
  147. {gam7-7.20.0 → gam7-7.20.2}/wiki/Cloud-Identity-Policies.md +0 -0
  148. {gam7-7.20.0 → gam7-7.20.2}/wiki/Cloud-Storage.md +0 -0
  149. {gam7-7.20.0 → gam7-7.20.2}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  150. {gam7-7.20.0 → gam7-7.20.2}/wiki/Collections-of-Items.md +0 -0
  151. {gam7-7.20.0 → gam7-7.20.2}/wiki/Collections-of-Users.md +0 -0
  152. {gam7-7.20.0 → gam7-7.20.2}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  153. {gam7-7.20.0 → gam7-7.20.2}/wiki/Command-Line-Parsing.md +0 -0
  154. {gam7-7.20.0 → gam7-7.20.2}/wiki/Command-Logging-Progress.md +0 -0
  155. {gam7-7.20.0 → gam7-7.20.2}/wiki/Context-Aware-Access-Levels.md +0 -0
  156. {gam7-7.20.0 → gam7-7.20.2}/wiki/Customer.md +0 -0
  157. {gam7-7.20.0 → gam7-7.20.2}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  158. {gam7-7.20.0 → gam7-7.20.2}/wiki/Domain-SharedContacts.md +0 -0
  159. {gam7-7.20.0 → gam7-7.20.2}/wiki/Domains-Verification.md +0 -0
  160. {gam7-7.20.0 → gam7-7.20.2}/wiki/Domains.md +0 -0
  161. {gam7-7.20.0 → gam7-7.20.2}/wiki/Downloads-Installs.md +0 -0
  162. {gam7-7.20.0 → gam7-7.20.2}/wiki/Drive-File-Selection.md +0 -0
  163. {gam7-7.20.0 → gam7-7.20.2}/wiki/Drive-Items.md +0 -0
  164. {gam7-7.20.0 → gam7-7.20.2}/wiki/Drive-REST-API-v3.md +0 -0
  165. {gam7-7.20.0 → gam7-7.20.2}/wiki/Email-Audit-Monitor.md +0 -0
  166. {gam7-7.20.0 → gam7-7.20.2}/wiki/Find-File-Owner.md +0 -0
  167. {gam7-7.20.0 → gam7-7.20.2}/wiki/GAM-Public-Chat-Room.md +0 -0
  168. {gam7-7.20.0 → gam7-7.20.2}/wiki/GAM-Return-Codes.md +0 -0
  169. {gam7-7.20.0 → gam7-7.20.2}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  170. {gam7-7.20.0 → gam7-7.20.2}/wiki/GAM7-on-Android-Devices.md +0 -0
  171. {gam7-7.20.0 → gam7-7.20.2}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  172. {gam7-7.20.0 → gam7-7.20.2}/wiki/Global-Address-List.md +0 -0
  173. {gam7-7.20.0 → gam7-7.20.2}/wiki/Google-Data-Transfers.md +0 -0
  174. {gam7-7.20.0 → gam7-7.20.2}/wiki/Google-Network-Addresses.md +0 -0
  175. {gam7-7.20.0 → gam7-7.20.2}/wiki/Groups-Membership.md +0 -0
  176. {gam7-7.20.0 → gam7-7.20.2}/wiki/Groups.md +0 -0
  177. {gam7-7.20.0 → gam7-7.20.2}/wiki/HTTPS-Proxy.md +0 -0
  178. {gam7-7.20.0 → gam7-7.20.2}/wiki/Home.md +0 -0
  179. {gam7-7.20.0 → gam7-7.20.2}/wiki/How-to-Install-GAM7.md +0 -0
  180. {gam7-7.20.0 → gam7-7.20.2}/wiki/How-to-Uninstall-GAM7.md +0 -0
  181. {gam7-7.20.0 → gam7-7.20.2}/wiki/How-to-Update-GAM7.md +0 -0
  182. {gam7-7.20.0 → gam7-7.20.2}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  183. {gam7-7.20.0 → gam7-7.20.2}/wiki/Inbound-SSO.md +0 -0
  184. {gam7-7.20.0 → gam7-7.20.2}/wiki/Install-GAM-as-Python-Library.md +0 -0
  185. {gam7-7.20.0 → gam7-7.20.2}/wiki/Licenses.md +0 -0
  186. {gam7-7.20.0 → gam7-7.20.2}/wiki/List-Items.md +0 -0
  187. {gam7-7.20.0 → gam7-7.20.2}/wiki/List.md +0 -0
  188. {gam7-7.20.0 → gam7-7.20.2}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  189. {gam7-7.20.0 → gam7-7.20.2}/wiki/Mobile-Devices.md +0 -0
  190. {gam7-7.20.0 → gam7-7.20.2}/wiki/Organizational-Units.md +0 -0
  191. {gam7-7.20.0 → gam7-7.20.2}/wiki/Other-Resources.md +0 -0
  192. {gam7-7.20.0 → gam7-7.20.2}/wiki/Permission-Matches.md +0 -0
  193. {gam7-7.20.0 → gam7-7.20.2}/wiki/Python-Regular-Expressions.md +0 -0
  194. {gam7-7.20.0 → gam7-7.20.2}/wiki/README.md +0 -0
  195. {gam7-7.20.0 → gam7-7.20.2}/wiki/Rclone.md +0 -0
  196. {gam7-7.20.0 → gam7-7.20.2}/wiki/Reports.md +0 -0
  197. {gam7-7.20.0 → gam7-7.20.2}/wiki/Reseller.md +0 -0
  198. {gam7-7.20.0 → gam7-7.20.2}/wiki/Resources.md +0 -0
  199. {gam7-7.20.0 → gam7-7.20.2}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  200. {gam7-7.20.0 → gam7-7.20.2}/wiki/SSL-Root-CA-Certificates.md +0 -0
  201. {gam7-7.20.0 → gam7-7.20.2}/wiki/Schemas.md +0 -0
  202. {gam7-7.20.0 → gam7-7.20.2}/wiki/Scripts.md +0 -0
  203. {gam7-7.20.0 → gam7-7.20.2}/wiki/Send-Email.md +0 -0
  204. {gam7-7.20.0 → gam7-7.20.2}/wiki/Shared-Drives.md +0 -0
  205. {gam7-7.20.0 → gam7-7.20.2}/wiki/Sites.md +0 -0
  206. {gam7-7.20.0 → gam7-7.20.2}/wiki/Tag-Replace.md +0 -0
  207. {gam7-7.20.0 → gam7-7.20.2}/wiki/Todrive.md +0 -0
  208. {gam7-7.20.0 → gam7-7.20.2}/wiki/Unmanaged-Accounts.md +0 -0
  209. {gam7-7.20.0 → gam7-7.20.2}/wiki/Upgrade-Benefits.md +0 -0
  210. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Analytics-Admin.md +0 -0
  211. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Application-Specific-Passwords.md +0 -0
  212. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Backup-Verification-Codes.md +0 -0
  213. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Calendars-Access.md +0 -0
  214. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Calendars-Events.md +0 -0
  215. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Calendars.md +0 -0
  216. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Classification-Labels.md +0 -0
  217. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Classroom-Profile.md +0 -0
  218. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Contacts-Delegates.md +0 -0
  219. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Contacts.md +0 -0
  220. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Deprovision.md +0 -0
  221. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Activity-Settings.md +0 -0
  222. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Cleanup.md +0 -0
  223. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Comments.md +0 -0
  224. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Copy-Move.md +0 -0
  225. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Files-Display.md +0 -0
  226. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Files-Manage.md +0 -0
  227. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Orphans.md +0 -0
  228. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Ownership.md +0 -0
  229. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Permissions.md +0 -0
  230. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Query.md +0 -0
  231. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Revisions.md +0 -0
  232. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Shortcuts.md +0 -0
  233. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Drive-Transfer.md +0 -0
  234. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Forms.md +0 -0
  235. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-CSE.md +0 -0
  236. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Delegates.md +0 -0
  237. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Filters.md +0 -0
  238. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Forwarding.md +0 -0
  239. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Labels.md +0 -0
  240. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  241. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Profile.md +0 -0
  242. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-S-MIME.md +0 -0
  243. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  244. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Gmail-Settings.md +0 -0
  245. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Group-Membership.md +0 -0
  246. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Keep-Notes.md +0 -0
  247. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Looker-Studio.md +0 -0
  248. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Meet.md +0 -0
  249. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-People-Contacts-Profiles.md +0 -0
  250. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Photo.md +0 -0
  251. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Profile-Photo.md +0 -0
  252. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Profile-Sharing.md +0 -0
  253. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Shared-Drives.md +0 -0
  254. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  255. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Spreadsheets.md +0 -0
  256. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Tag-Manager.md +0 -0
  257. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Tasks.md +0 -0
  258. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Tokens.md +0 -0
  259. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  260. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users-YouTube.md +0 -0
  261. {gam7-7.20.0 → gam7-7.20.2}/wiki/Users.md +0 -0
  262. {gam7-7.20.0 → gam7-7.20.2}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  263. {gam7-7.20.0 → gam7-7.20.2}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  264. {gam7-7.20.0 → gam7-7.20.2}/wiki/Vault-Takeout.md +0 -0
  265. {gam7-7.20.0 → gam7-7.20.2}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  266. {gam7-7.20.0 → gam7-7.20.2}/wiki/_Sidebar.md +0 -0
  267. {gam7-7.20.0 → gam7-7.20.2}/wiki/gam.cfg.md +0 -0
  268. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-AdminSettingsExamples.md +0 -0
  269. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Android-Installation.md +0 -0
  270. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-BulkOperations.md +0 -0
  271. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-CalendarExamples.md +0 -0
  272. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Chat-Bot.md +0 -0
  273. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Chrome-Browser-Management.md +0 -0
  274. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Chrome-OS-Installation.md +0 -0
  275. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Chrome-Policy-Settings.md +0 -0
  276. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Cloud-Identity-Groups.md +0 -0
  277. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  278. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Calendars.md +0 -0
  279. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Definitions.md +0 -0
  280. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Drive.md +0 -0
  281. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Email.md +0 -0
  282. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  283. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Groups.md +0 -0
  284. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Command-Reference-Users.md +0 -0
  285. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  286. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  287. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-CreatingClientSecretsFile.md +0 -0
  288. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Custom-Schemas.md +0 -0
  289. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Data-Transfers.md +0 -0
  290. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-DomainVerification.md +0 -0
  291. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-ExamplesAccountAuditing.md +0 -0
  292. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-ExamplesCSV.md +0 -0
  293. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-ExamplesEmailSettings.md +0 -0
  294. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-ExamplesOrganizations.md +0 -0
  295. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM-Discussion-Group.md +0 -0
  296. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  297. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM-options-files.md +0 -0
  298. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  299. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM3CSVListings.md +0 -0
  300. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM3DirectoryCommands.md +0 -0
  301. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM3GroupSettings.md +0 -0
  302. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GAM7-FAQ.md +0 -0
  303. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  304. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-GoogleDriveManagement.md +0 -0
  305. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  306. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Home.md +0 -0
  307. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  308. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Inbound-SSO-Settings.md +0 -0
  309. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-LicenseExamples.md +0 -0
  310. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Managing-Admins.md +0 -0
  311. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  312. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Managing-Devices.md +0 -0
  313. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Managing-Google-Classroom.md +0 -0
  314. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-OAuthKeyManagement.md +0 -0
  315. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Printers.md +0 -0
  316. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-ResellerCommands.md +0 -0
  317. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  318. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-SecurityExamples.md +0 -0
  319. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-UnmanagedUsersExamples.md +0 -0
  320. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Use-a-Yubikey.md +0 -0
  321. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  322. {gam7-7.20.0 → gam7-7.20.2}/wiki/l-_Footer.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.20.0
3
+ Version: 7.20.2
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
@@ -1246,6 +1246,8 @@ Specify a collection of items by directly specifying them; the item type is dete
1246
1246
  <SiteACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
1247
1247
  <SiteEntity> ::=
1248
1248
  <SiteList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
1249
+ <StringEntity> ::=
1250
+ <StringList> | <FileSelector> | <CSVFileSelector>
1249
1251
  <StudentGroupEntity> ::=
1250
1252
  <StudentGroupIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector>
1251
1253
  <TagManagerAccountPathEntity> ::=
@@ -2000,10 +2002,10 @@ gam info chatspace <ChatSpace>
2000
2002
  [fields <ChatSpaceFieldNameList>]
2001
2003
  [formatjson]
2002
2004
  gam show chatspaces
2003
- [fields <ChatSpaceFieldNameList>]
2005
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
2004
2006
  [formatjson]
2005
2007
  gam print chatspaces [todrive <ToDriveAttribute>*]
2006
- [fields <ChatSpaceFieldNameList>]
2008
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
2007
2009
  [formatjson [quotechar <Character>]]
2008
2010
 
2009
2011
  <ChatMemberFieldName> ::=
@@ -3396,7 +3398,7 @@ gam print course-works [todrive <ToDriveAttribute>*]
3396
3398
 
3397
3399
  gam create course-studentgroups
3398
3400
  (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
3399
- title <String>
3401
+ ((title <String>)|(select <StringEntity))+
3400
3402
  [csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]
3401
3403
  gam update course-studentgroups <CourseID> <StudentGroupID> title <String>
3402
3404
  gam delete course-studentgroups <CourseID> <StudentGroupIDEntity>
@@ -6409,11 +6411,11 @@ gam <UserTypeEntity> info chatspacedm <UserItem>
6409
6411
  [formatjson]
6410
6412
  gam <UserTypeEntity> show chatspaces
6411
6413
  [types <ChatSpaceTypeList>]
6412
- [fields <ChatSpaceFieldNameList>]
6414
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
6413
6415
  [formatjson]
6414
6416
  gam <UserTypeEntity> print chatspaces [todrive <ToDriveAttribute>*]
6415
6417
  [types <ChatSpaceTypeList>]
6416
- [fields <ChatSpaceFieldNameList>]
6418
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
6417
6419
  [formatjson [quotechar <Character>]]
6418
6420
 
6419
6421
  gam <UserItem> info chatspace asadmin <ChatSpace>
@@ -6422,12 +6424,12 @@ gam <UserItem> info chatspace asadmin <ChatSpace>
6422
6424
  gam <UserItem> show chatspaces asadmin
6423
6425
  [query <String>] [querytime<String> <Time>]
6424
6426
  [orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
6425
- [fields <ChatSpaceFieldNameList>]
6427
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
6426
6428
  [formatjson]
6427
6429
  gam <UserItem> print chatspaces asadmin [todrive <ToDriveAttribute>*]
6428
6430
  [query <String>] [querytime<String> <Time>]
6429
6431
  [orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
6430
- [fields <ChatSpaceFieldNameList>]
6432
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
6431
6433
  [formatjson [quotechar <Character>]]
6432
6434
 
6433
6435
  gam <UserTypeEntity> create chatmember <ChatSpace>
@@ -1,3 +1,16 @@
1
+ 7.20.02
2
+
3
+ Upgraded `gam create course-studentgroups` to allow specification of multiple student group titles;
4
+ multiple student groups can be created in a single command.
5
+ * `((title <String>)|(select <StringEntity))+`
6
+
7
+ 7.20.01
8
+
9
+ Added option `showaccesssettings` to `gam [<UserTypeEntity>] print|show chatspaces`. When listing
10
+ Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this field,
11
+ add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
12
+ to get the `accessSettings` field.
13
+
1
14
  7.20.00
2
15
 
3
16
  Added initial support for student groups in Google Classroom. This is a work in progress and requires Developer Preview membership.
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
25
25
  """
26
26
 
27
27
  __author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
28
- __version__ = '7.20.00'
28
+ __version__ = '7.20.02'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -27004,31 +27004,33 @@ CHAT_SPACES_ADMIN_ORDERBY_CHOICE_MAP = {
27004
27004
 
27005
27005
  # gam [<UserTypeEntity>] show chatspaces
27006
27006
  # [types <ChatSpaceTypeList>]
27007
- # [fields <ChatSpaceFieldNameList>]
27007
+ # [fields <ChatSpaceFieldNameList>] [showaccesssettings]
27008
27008
  # [formatjson]
27009
27009
  # gam [<UserTypeEntity>] print chatspaces [todrive <ToDriveAttribute>*]
27010
27010
  # [types <ChatSpaceTypeList>]
27011
- # [fields <ChatSpaceFieldNameList>]
27011
+ # [fields <ChatSpaceFieldNameList>] [showaccesssettings]
27012
27012
  # [formatjson [quotechar <Character>]]
27013
27013
  # gam <UserItem> show chatspaces asadmin
27014
27014
  # [query <String>] [querytime<String> <Time>]
27015
27015
  # [orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
27016
- # [fields <ChatSpaceFieldNameList>]
27016
+ # [fields <ChatSpaceFieldNameList>] [showaccesssettings]
27017
27017
  # [formatjson]
27018
27018
  # gam <UserItem> print chatspaces asadmin [todrive <ToDriveAttribute>*]
27019
27019
  # [query <String>] [querytime<String> <Time>]
27020
27020
  # [orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
27021
- # [fields <ChatSpaceFieldNameList>]
27021
+ # [fields <ChatSpaceFieldNameList>] [showaccesssettings]
27022
27022
  # [formatjson [quotechar <Character>]]
27023
27023
  def printShowChatSpaces(users):
27024
27024
  csvPF = CSVPrintFile(['User', 'name'] if not isinstance(users, list) else ['name']) if Act.csvFormat() else None
27025
27025
  FJQC = FormatJSONQuoteChar(csvPF)
27026
27026
  OBY = OrderBy(CHAT_SPACES_ADMIN_ORDERBY_CHOICE_MAP)
27027
27027
  useAdminAccess, api, kwargsCS = _getChatAdminAccess(API.CHAT_SPACES_ADMIN, API.CHAT_SPACES)
27028
+ kwargsSAS = {'useAdminAccess': useAdminAccess}
27028
27029
  fieldsList = []
27029
27030
  queries = []
27030
27031
  queryTimes = {}
27031
27032
  pfilter = ''
27033
+ showAccessSettings = False
27032
27034
  if useAdminAccess:
27033
27035
  function = 'search'
27034
27036
  queries = ['customer = "customers/my_customer" AND spaceType = "SPACE"']
@@ -27044,8 +27046,12 @@ def printShowChatSpaces(users):
27044
27046
  pass
27045
27047
  elif useAdminAccess and _getChatSpaceSearchParms(myarg, queries, queryTimes, OBY):
27046
27048
  pass
27049
+ elif myarg == 'showaccesssettings':
27050
+ showAccessSettings = True
27047
27051
  else:
27048
27052
  FJQC.GetFormatJSONQuoteChar(myarg, True)
27053
+ if showAccessSettings and fieldsList:
27054
+ fieldsList.extend(['name', 'spaceType'])
27049
27055
  fields = getItemFieldsFromFieldsList('spaces', fieldsList)
27050
27056
  i, count, users = getEntityArgument(users)
27051
27057
  if useAdminAccess:
@@ -27070,6 +27076,17 @@ def printShowChatSpaces(users):
27070
27076
  GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
27071
27077
  retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
27072
27078
  fields=fields, pageSize=CHAT_PAGE_SIZE, **kwargsCS)
27079
+ if showAccessSettings:
27080
+ for space in spaces:
27081
+ if space['spaceType'] == 'SPACE':
27082
+ try:
27083
+ result = callGAPI(chat.spaces(), 'get',
27084
+ throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
27085
+ GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
27086
+ name=space['name'], fields='accessSettings', **kwargsSAS)
27087
+ space.update(result)
27088
+ except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError, GAPI.permissionDenied, GAPI.failedPrecondition):
27089
+ pass
27073
27090
  except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError, GAPI.permissionDenied) as e:
27074
27091
  exitIfChatNotConfigured(chat, kvList, str(e), i, count)
27075
27092
  continue
@@ -51216,7 +51233,7 @@ def printShowClassroomProfile(users):
51216
51233
 
51217
51234
  # gam create course-studentgroups
51218
51235
  # (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
51219
- # title <String>
51236
+ # ((title <String>)|(select <StringEntity))+
51220
51237
  # [csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]
51221
51238
  def doCreateCourseStudentGroups():
51222
51239
  croom = buildGAPIObject(API.CLASSROOM)
@@ -51226,10 +51243,13 @@ def doCreateCourseStudentGroups():
51226
51243
  courseShowProperties = _initCourseShowProperties(['name'])
51227
51244
  useOwnerAccess = GC.Values[GC.USE_COURSE_OWNER_ACCESS]
51228
51245
  kwargs = {'courseId': None, 'body': {}}
51246
+ titles = []
51229
51247
  while Cmd.ArgumentsRemaining():
51230
51248
  myarg = getArgument()
51231
51249
  if myarg == 'title':
51232
- kwargs['body']['title'] = getString(Cmd.OB_STRING)
51250
+ titles.append(getString(Cmd.OB_STRING))
51251
+ elif myarg == 'select':
51252
+ titles.extend(getEntityList(Cmd.OB_STRING_ENTITY, shlexSplit=True))
51233
51253
  elif _getCourseSelectionParameters(myarg, courseSelectionParameters):
51234
51254
  pass
51235
51255
  elif myarg == 'csv':
@@ -51239,8 +51259,9 @@ def doCreateCourseStudentGroups():
51239
51259
  csvPF.GetTodriveParameters()
51240
51260
  else:
51241
51261
  FJQC.GetFormatJSONQuoteChar(myarg, True)
51242
- if 'title' not in kwargs['body']:
51262
+ if not titles:
51243
51263
  missingArgumentExit('title')
51264
+ jcount = len(titles)
51244
51265
  if csvPF and FJQC.formatJSON:
51245
51266
  csvPF.SetJSONTitles(['courseId', 'courseName', 'JSON'])
51246
51267
  coursesInfo = _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties, useOwnerAccess)
@@ -51255,29 +51276,36 @@ def doCreateCourseStudentGroups():
51255
51276
  if not ocroom:
51256
51277
  continue
51257
51278
  kwargs['courseId'] = courseId
51258
- kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, None]
51259
- try:
51260
- studentGroup = callGAPI(ocroom.courses().studentGroups(), 'create',
51261
- throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
51262
- GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
51263
- retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
51264
- previewVersion='V1_20250630_PREVIEW',
51265
- **kwargs)
51266
- kvList[-1] = f"{studentGroup['title']}({studentGroup['id']})"
51267
- if not csvPF:
51268
- entityActionPerformed(kvList, i, count)
51269
- elif not FJQC.formatJSON:
51270
- csvPF.WriteRow({'courseId': courseId, 'courseName': course['name'],
51271
- 'studentGroupId': studentGroup['id'], 'studentGroupTitle': studentGroup['title']})
51272
- else:
51273
- csvPF.WriteRowNoFilter({'courseId': courseId, 'courseName': course['name'],
51274
- 'JSON': json.dumps(cleanJSON(studentGroup), ensure_ascii=False, sort_keys=True)})
51275
- except GAPI.notFound as e:
51276
- entityActionFailedWarning(kvList, str(e), i, count)
51277
- except (GAPI.serviceNotAvailable, GAPI.notImplemented) as e:
51278
- entityActionFailedExit([Ent.COURSE, courseId], str(e), i, count)
51279
- except (GAPI.forbidden, GAPI.permissionDenied) as e:
51280
- ClientAPIAccessDeniedExit(str(e))
51279
+ entityPerformActionNumItems([Ent.COURSE, courseId], jcount, Ent.COURSE_STUDENTGROUP, i, count)
51280
+ Ind.Increment()
51281
+ j = 0
51282
+ for title in titles:
51283
+ j += 1
51284
+ kwargs['body']['title'] = title
51285
+ kvList = [Ent.COURSE, courseId, Ent.COURSE_STUDENTGROUP, None]
51286
+ try:
51287
+ studentGroup = callGAPI(ocroom.courses().studentGroups(), 'create',
51288
+ throwReasons=[GAPI.NOT_FOUND, GAPI.SERVICE_NOT_AVAILABLE, GAPI.NOT_IMPLEMENTED,
51289
+ GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
51290
+ retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
51291
+ previewVersion='V1_20250630_PREVIEW',
51292
+ **kwargs)
51293
+ kvList[-1] = f"{studentGroup['title']}({studentGroup['id']})"
51294
+ if not csvPF:
51295
+ entityActionPerformed(kvList, j, jcount)
51296
+ elif not FJQC.formatJSON:
51297
+ csvPF.WriteRow({'courseId': courseId, 'courseName': course['name'],
51298
+ 'studentGroupId': studentGroup['id'], 'studentGroupTitle': studentGroup['title']})
51299
+ else:
51300
+ csvPF.WriteRowNoFilter({'courseId': courseId, 'courseName': course['name'],
51301
+ 'JSON': json.dumps(cleanJSON(studentGroup), ensure_ascii=False, sort_keys=True)})
51302
+ except GAPI.notFound as e:
51303
+ entityActionFailedWarning(kvList, str(e), j, jcount)
51304
+ except (GAPI.serviceNotAvailable, GAPI.notImplemented) as e:
51305
+ entityActionFailedExit([Ent.COURSE, courseId], str(e), j, jcount)
51306
+ except (GAPI.forbidden, GAPI.permissionDenied) as e:
51307
+ ClientAPIAccessDeniedExit(str(e))
51308
+ Ind.Decrement()
51281
51309
  if csvPF:
51282
51310
  csvPF.writeCSVfile('Course Student Groups')
51283
51311
 
@@ -1057,6 +1057,7 @@ class GamCLArgs():
1057
1057
  OB_SPREADSHEET_RANGE_LIST = 'SpreadsheetRangeList'
1058
1058
  OB_STATE_NAME_LIST = "StateNameList"
1059
1059
  OB_STRING = 'String'
1060
+ OB_STRING_ENTITY = 'StringEntity'
1060
1061
  OB_STRING_LIST = 'StringList'
1061
1062
  OB_STUDENTGROUP_ID = 'StudentGroupID'
1062
1063
  OB_STUDENTGROUP_ID_ENTITY = 'StudentGroupIDEntity'
@@ -3,6 +3,7 @@
3
3
  - [API documentation](#api-documentation)
4
4
  - [Definitions](#definitions)
5
5
  - [Special quoting for course aliases](#special-quoting-for-course-aliases)
6
+ - [Special quoting for lists of titles](#special-quoting-for-lists-of-titles)
6
7
  - [Manage student groups](#manage-student-groups)
7
8
  - [Display student groups](#display-student-groups)
8
9
  - [Display student group counts](#display-student-group-counts)
@@ -12,6 +13,7 @@
12
13
 
13
14
  ## Notes
14
15
  These commands wera added in version 7.20.00.
16
+
15
17
  To use these commands your project must be enrolled the Developer Preview program.
16
18
  * https://developers.google.com/workspace/preview
17
19
 
@@ -36,7 +38,7 @@ You will need an API key
36
38
  Issue the following GAM command:
37
39
  `gam config developer_preview_api_key <API Key Value> save`
38
40
 
39
- Once you get an email from Google that your project has been registered you can use these commands.
41
+ Once you get an email from Google saying that your project has been registered you can use these commands.
40
42
 
41
43
  ## API documentation
42
44
  * [Google Classroom API](https://developers.google.com/classroom/reference/rest)
@@ -59,6 +61,11 @@ Once you get an email from Google that your project has been registered you can
59
61
  <CourseState> ::= active|archived|provisioned|declined|suspended
60
62
  <CourseStateList> ::= all|"<CourseState>(,<CourseState>)*"
61
63
 
64
+ <StringList> ::= "<String>(,<String>)*"
65
+ <StringEntity> ::=
66
+ <StringList> | <FileSelector> | <CSVFileSelector>
67
+ See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
68
+
62
69
  <StudentGroupID> ::= <Number>
63
70
  <StudentGroupIDList> ::= "<StudentGroupID>(,<StudentGroupID>)*"
64
71
  <StudentGroupEntity> ::=
@@ -81,15 +88,33 @@ The shell strips the `"` leaving a single argument `'d:Math Class'`; as gam is e
81
88
 
82
89
  For multiple aliases you must enter: `gam info courses "'d:Math Class','d:Science Class'"`
83
90
 
91
+ ## Special quoting for lists of titles
92
+ As student group titles can contain spaces, some care must be used when entering `selevct <StringList>`.
93
+
94
+ Suppose you want to create a student group `Advanced Students`. `gam create course-studentgroups course <CourseID> title "Advanced Students"`
95
+
96
+ The shell strips the `"` leaving a single argument `Advanced Math`; gam correctly processes the argument as it is expecting a single title.
97
+
98
+ Suppose you enter the command: `gam create course-studentgroups course <CourseID> select "Advanced Students"`
99
+
100
+ The shell strips the `"` leaving a single argument `Advanced Students`; as gam is expecting a list, it splits the argument on space leaving two items and then tries to process `Advanced` and `Students`, not what you want.
101
+
102
+ You must enter: `gam create course-studentgroups course <CourseID> select "'Advanced Students'"`
103
+
104
+ The shell strips the `"` leaving a single argument `'Advanced Students'`; as gam is expecting a list, it splits the argument on space while honoring the `'` leaving one item `Advanced Students` and correctly processes the item.
105
+
106
+ For multiple titles you can enter either of the following:
107
+ * `gam create course-studentgroups course <CourseID> select "'Advanced Students','Beginner Students'"`
108
+ * `gam create course-studentgroups course <CourseID> title"Advanced Students" title "Beginner Students"`
109
+
84
110
  See: [Lists and Collections](Lists-and-Collections)
85
111
 
86
112
  ## Manage student groups
87
113
 
88
- These commands can process multiple courses and `add` and `delete` can process multiple students/teachers.
89
114
  ```
90
115
  gam create course-studentgroups
91
116
  (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
92
- title <String>
117
+ ((title <String>)|(select <StringEntity))+
93
118
  [csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]]
94
119
  gam update course-studentgroups <CourseID> <StudentGroupID> title <String>
95
120
  gam delete course-studentgroups <CourseID> <StudentGroupIDEntity>
@@ -97,6 +122,11 @@ gam clear course-studentgroups
97
122
  (course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
98
123
  ```
99
124
 
125
+ When creating student groups, the API does not check for duplicate titles; you can have multiple student grpups
126
+ with the same title; they will have unique `<StudentGroupID>s`.
127
+
128
+ The `update|delete course-studentgroups` commands manage a specific course.
129
+
100
130
  By default, the `create|clear course-studentgroups` commands manage student group information about all courses.
101
131
 
102
132
  To manage student group information for a specific set of courses, use the following option; it can be repeated to select multiple courses.
@@ -110,6 +140,34 @@ To manage student group information for courses based on their state, use the fo
110
140
  By default, all course states are selected.
111
141
  * `states <CourseStateList>` - Display courses with any of the specified states.
112
142
 
143
+ By default, when a student group is created, you will get output like this:
144
+ ```
145
+ Course: <CourseID>, Course Student Group: <Title>(<StudentGroupId>), Added
146
+ ```
147
+ If you use the `csv` option, you will get output like this:
148
+ ```
149
+ courseId,courseName,studentGroupId,studentGroupTitle
150
+ <CourseID>,<CourseName>,<StudentGroupID>,<Title>
151
+ ```
152
+ This gives you a record the the student group IDs.
153
+
154
+ ### Example
155
+ ```
156
+ $ more titles.csv
157
+ title
158
+ Advanced Students
159
+ Middle Students
160
+ Beginner Students
161
+
162
+ $ gam redirect csv ./StudentGroups.csv add coursestudentgroups course <CourseID> select csvfile titles.csv:title csv
163
+
164
+ $ more StudentGroups.csv
165
+ courseId,courseName,studentGroupId,studentGroupTitle
166
+ <CourseID>,<CourseName>,796177544247,Advanced Students
167
+ <CourseID>,<CourseName>,796177718666,Middle Students
168
+ <CourseID>,<CourseName>,796177727901,Beginner Students
169
+ ```
170
+
113
171
  ## Display student groups
114
172
  ```
115
173
  gam print course-studentgroups [todrive <ToDriveAttribute>*]
@@ -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.20.01
14
+
15
+ Added option `showaccesssettings` to `gam [<UserTypeEntity>] print|show chatspaces`. When listing
16
+ Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this field,
17
+ add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
18
+ to get the `accessSettings` field.
19
+
20
+ ### 7.20.00
21
+
22
+ Added initial support for student groups in Google Classroom. This is a work in progress and requires Developer Preview membership.
23
+ * See: https://github.com/GAM-team/GAM/wiki/Classroom-StudentGroups#notes
24
+
13
25
  ### 7.19.03
14
26
 
15
27
  Fixed bug where specifying a `<UserItem>` as `id:1234567890` could lead to errors like this:
@@ -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.19.03 - https://github.com/GAM-team/GAM - pyinstaller
255
+ GAM 7.20.01 - 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 Sequoia 15.6.1 x86_64
@@ -990,7 +990,7 @@ writes the credentials into the file oauth2.txt.
990
990
  C:\>del C:\GAMConfig\oauth2.txt
991
991
  C:\>gam version
992
992
  WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
993
- GAM 7.19.03 - https://github.com/GAM-team/GAM - pythonsource
993
+ GAM 7.20.01 - https://github.com/GAM-team/GAM - pythonsource
994
994
  GAM Team <google-apps-manager@googlegroups.com>
995
995
  Python 3.13.7 64-bit final
996
996
  Windows-10-10.0.17134 AMD64
@@ -320,24 +320,32 @@ By default, Gam displays the information as an indented list of keys and values.
320
320
  ```
321
321
  gam <UserTypeEntity> show chatspaces
322
322
  [types <ChatSpaceTypeList>]
323
- [fields <ChatSpaceFieldNameList>]
323
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
324
324
  [formatjson]
325
325
  ```
326
326
  By default, chat spaces of all types are displayed.
327
327
  * `types <ChatSpaceTypeList>` - Display specific types of spaces.
328
328
 
329
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
330
+ add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
331
+ to get the `accessSettings` field.
332
+
329
333
  By default, Gam displays the information as an indented list of keys and values.
330
334
  * `formatjson` - Display the fields in JSON format.
331
335
 
332
336
  ```
333
337
  gam <UserTypeEntity> print chatspaces [todrive <ToDriveAttribute>*]
334
338
  [types <ChatSpaceTypeList>]
335
- [fields <ChatSpaceFieldNameList>]
339
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
336
340
  [formatjson [quotechar <Character>]]
337
341
  ```
338
342
  By default, chat spaces of all types are displayed.
339
343
  * `types <ChatSpaceTypeList>` - Display specific types of spaces.
340
344
 
345
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
346
+ add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
347
+ to get the `accessSettings` field.
348
+
341
349
  By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
342
350
  * `formatjson` - Display the fields in JSON format.
343
351
 
@@ -385,13 +393,17 @@ Only spaces of `<ChatSpaceType>` `space` are displayed; spaces of `<ChatSpaceTyp
385
393
  gam <UserItem> show chatspaces asadmin
386
394
  [query <String>] [querytime<String> <Time>]
387
395
  [orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
388
- [fields <ChatSpaceFieldNameList>]
396
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
389
397
  [formatjson]
390
398
  ```
391
399
  By default, all chat spaces of type SPACE are displayed.
392
400
  * `query <String> [querytime<String> <Time>]` - Display selected chat spaces
393
401
  * See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
394
402
 
403
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
404
+ add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
405
+ to get the `accessSettings` field.
406
+
395
407
  By default, Gam displays the information as an indented list of keys and values.
396
408
  * `formatjson` - Display the fields in JSON format.
397
409
 
@@ -399,13 +411,17 @@ By default, Gam displays the information as an indented list of keys and values.
399
411
  gam <UserItem> print chatspaces asadmin [todrive <ToDriveAttribute>*]
400
412
  [query <String>] [querytime<String> <Time>]
401
413
  [orderby <ChatSpaceAdminOrderByFieldName> [ascending|descending]]
402
- [fields <ChatSpaceFieldNameList>]
414
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
403
415
  [formatjson [quotechar <Character>]]
404
416
  ```
405
417
  By default, all chat spaces of type SPACE are displayed.
406
418
  * `query <String> [querytime<String> <Time>]` - Display selected chat spaces
407
419
  * See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
408
420
 
421
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
422
+ add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
423
+ to get the `accessSettings` field.
424
+
409
425
  By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
410
426
  * `formatjson` - Display the fields in JSON format.
411
427
 
@@ -975,8 +991,9 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
975
991
  ## Bulk Operations
976
992
  ### Display information about all chat spaces for a collection of users
977
993
  ```
978
- gam config auto_batch_min 1 redirect csv ./ChatSpaces.csv multiprocess [todrive <ToDriveAttribute>*] redirect stdout - multiprocess redirect stderr <UserTypeEntity> print chatspaces
994
+ gam config auto_batch_min 1 redirect csv ./ChatSpaces.csv multiprocess [todrive <ToDriveAttribute>*] redirect stdout - multiprocess redirect stderr <UserTypeEntity> print chatsacesp
979
995
  [types <ChatSpaceTypeList>]
996
+ [fields <ChatSpaceFieldNameList>] [showaccessssettings]
980
997
  [formatjson [quotechar <Character>]]
981
998
  ```
982
999
 
@@ -3,7 +3,7 @@
3
3
  Print the current version of Gam with details
4
4
  ```
5
5
  gam version
6
- GAM 7.19.03 - https://github.com/GAM-team/GAM - pyinstaller
6
+ GAM 7.20.01 - 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 Sequoia 15.6.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.19.03 - https://github.com/GAM-team/GAM - pyinstaller
18
+ GAM 7.20.01 - 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 Sequoia 15.6.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.19.03 - https://github.com/GAM-team/GAM - pyinstaller
30
+ GAM 7.20.01 - 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 Sequoia 15.6.1 x86_64
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
64
64
  Path: /Users/Admin/bin/gam7
65
65
  Version Check:
66
66
  Current: 5.35.08
67
- Latest: 7.19.03
67
+ Latest: 7.20.01
68
68
  echo $?
69
69
  1
70
70
  ```
@@ -72,7 +72,7 @@ echo $?
72
72
  Print the current version number without details
73
73
  ```
74
74
  gam version simple
75
- 7.19.03
75
+ 7.20.01
76
76
  ```
77
77
  In Linux/MacOS you can do:
78
78
  ```
@@ -82,7 +82,7 @@ echo $VER
82
82
  Print the current version of Gam and address of this Wiki
83
83
  ```
84
84
  gam help
85
- GAM 7.19.03 - https://github.com/GAM-team/GAM
85
+ GAM 7.20.01 - https://github.com/GAM-team/GAM
86
86
  GAM Team <google-apps-manager@googlegroups.com>
87
87
  Python 3.13.7 64-bit final
88
88
  MacOS Sequoia 15.6.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