gam7 7.9.3__tar.gz → 7.9.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of gam7 might be problematic. Click here for more details.

Files changed (318) hide show
  1. {gam7-7.9.3 → gam7-7.9.5}/.github/workflows/build.yml +1 -1
  2. {gam7-7.9.3 → gam7-7.9.5}/PKG-INFO +1 -1
  3. {gam7-7.9.3 → gam7-7.9.5}/src/GamUpdate.txt +14 -0
  4. {gam7-7.9.3 → gam7-7.9.5}/src/gam/__init__.py +128 -65
  5. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Policies.md +3057 -329
  6. {gam7-7.9.3 → gam7-7.9.5}/wiki/GamUpdates.md +8 -0
  7. {gam7-7.9.3 → gam7-7.9.5}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +4 -4
  8. {gam7-7.9.3 → gam7-7.9.5}/wiki/Version-and-Help.md +10 -10
  9. {gam7-7.9.3 → gam7-7.9.5}/wiki/gam.cfg.md +1 -1
  10. {gam7-7.9.3 → gam7-7.9.5}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  11. {gam7-7.9.3 → gam7-7.9.5}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  12. {gam7-7.9.3 → gam7-7.9.5}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  13. {gam7-7.9.3 → gam7-7.9.5}/.github/ISSUE_TEMPLATE.txt +0 -0
  14. {gam7-7.9.3 → gam7-7.9.5}/.github/actions/decrypt.sh +0 -0
  15. {gam7-7.9.3 → gam7-7.9.5}/.github/actions/entitlements.plist +0 -0
  16. {gam7-7.9.3 → gam7-7.9.5}/.github/actions/package_exclusions.txt +0 -0
  17. {gam7-7.9.3 → gam7-7.9.5}/.github/stale.yml +0 -0
  18. {gam7-7.9.3 → gam7-7.9.5}/.github/workflows/codeql-analysis.yml +0 -0
  19. {gam7-7.9.3 → gam7-7.9.5}/.github/workflows/get-cacerts.yml +0 -0
  20. {gam7-7.9.3 → gam7-7.9.5}/.github/workflows/pushwiki.yml +0 -0
  21. {gam7-7.9.3 → gam7-7.9.5}/.github/workflows/pypi.yml +0 -0
  22. {gam7-7.9.3 → gam7-7.9.5}/.pre-commit-config.yaml +0 -0
  23. {gam7-7.9.3 → gam7-7.9.5}/LICENSE +0 -0
  24. {gam7-7.9.3 → gam7-7.9.5}/README.md +0 -0
  25. {gam7-7.9.3 → gam7-7.9.5}/pyproject.toml +0 -0
  26. {gam7-7.9.3 → gam7-7.9.5}/src/.gitignore +0 -0
  27. {gam7-7.9.3 → gam7-7.9.5}/src/GamCommands.txt +0 -0
  28. {gam7-7.9.3 → gam7-7.9.5}/src/LICENSE +0 -0
  29. {gam7-7.9.3 → gam7-7.9.5}/src/cacerts.pem +0 -0
  30. {gam7-7.9.3 → gam7-7.9.5}/src/callgam.py +0 -0
  31. {gam7-7.9.3 → gam7-7.9.5}/src/gam/__main__.py +0 -0
  32. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/__init__.py +0 -0
  33. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/auth.py +0 -0
  34. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/client.py +0 -0
  35. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/core.py +0 -0
  36. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/data.py +0 -0
  37. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/http.py +0 -0
  38. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/http_core.py +0 -0
  39. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/http_interface.py +0 -0
  40. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/mock_http.py +0 -0
  41. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/mock_http_core.py +0 -0
  42. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/mock_service.py +0 -0
  43. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/service.py +0 -0
  44. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/token_store.py +0 -0
  45. {gam7-7.9.3 → gam7-7.9.5}/src/gam/atom/url.py +0 -0
  46. {gam7-7.9.3 → gam7-7.9.5}/src/gam/cacerts.pem +0 -0
  47. {gam7-7.9.3 → gam7-7.9.5}/src/gam/cbcm-v1.1beta1.json +0 -0
  48. {gam7-7.9.3 → gam7-7.9.5}/src/gam/contactdelegation-v1.json +0 -0
  49. {gam7-7.9.3 → gam7-7.9.5}/src/gam/datastudio-v1.json +0 -0
  50. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/__init__.py +0 -0
  51. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glaction.py +0 -0
  52. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glapi.py +0 -0
  53. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glcfg.py +0 -0
  54. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glclargs.py +0 -0
  55. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glentity.py +0 -0
  56. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glgapi.py +0 -0
  57. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glgdata.py +0 -0
  58. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glglobals.py +0 -0
  59. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glindent.py +0 -0
  60. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glmsgs.py +0 -0
  61. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glskus.py +0 -0
  62. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/gluprop.py +0 -0
  63. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/glverlibs.py +0 -0
  64. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gamlib/yubikey.py +0 -0
  65. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/__init__.py +0 -0
  66. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/alt/__init__.py +0 -0
  67. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/alt/app_engine.py +0 -0
  68. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/alt/appengine.py +0 -0
  69. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/apps/__init__.py +0 -0
  70. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/apps/audit/__init__.py +0 -0
  71. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/apps/audit/service.py +0 -0
  72. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  73. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/apps/contacts/service.py +0 -0
  74. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/apps/service.py +0 -0
  75. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/service.py +0 -0
  76. {gam7-7.9.3 → gam7-7.9.5}/src/gam/gdata/urlfetch.py +0 -0
  77. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/__init__.py +0 -0
  78. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/_auth.py +0 -0
  79. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/_helpers.py +0 -0
  80. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/channel.py +0 -0
  81. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/discovery.py +0 -0
  82. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
  83. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
  84. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
  85. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
  86. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/errors.py +0 -0
  87. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/http.py +0 -0
  88. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/mimeparse.py +0 -0
  89. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/model.py +0 -0
  90. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/schema.py +0 -0
  91. {gam7-7.9.3 → gam7-7.9.5}/src/gam/googleapiclient/version.py +0 -0
  92. {gam7-7.9.3 → gam7-7.9.5}/src/gam/iso8601/__init__.py +0 -0
  93. {gam7-7.9.3 → gam7-7.9.5}/src/gam/iso8601/iso8601.py +0 -0
  94. {gam7-7.9.3 → gam7-7.9.5}/src/gam/meet-v2beta.json +0 -0
  95. {gam7-7.9.3 → gam7-7.9.5}/src/gam/serviceaccountlookup-v1.json +0 -0
  96. {gam7-7.9.3 → gam7-7.9.5}/src/gam/six.py +0 -0
  97. {gam7-7.9.3 → gam7-7.9.5}/src/gam-install.sh +0 -0
  98. {gam7-7.9.3 → gam7-7.9.5}/src/gam-setup.bat +0 -0
  99. {gam7-7.9.3 → gam7-7.9.5}/src/gam.exe.manifest +0 -0
  100. {gam7-7.9.3 → gam7-7.9.5}/src/gam.py +0 -0
  101. {gam7-7.9.3 → gam7-7.9.5}/src/gam.spec +0 -0
  102. {gam7-7.9.3 → gam7-7.9.5}/src/gam.wxs +0 -0
  103. {gam7-7.9.3 → gam7-7.9.5}/src/license.rtf +0 -0
  104. {gam7-7.9.3 → gam7-7.9.5}/src/requirements-dev.txt +0 -0
  105. {gam7-7.9.3 → gam7-7.9.5}/src/requirements.txt +0 -0
  106. {gam7-7.9.3 → gam7-7.9.5}/src/setup.cfg +0 -0
  107. {gam7-7.9.3 → gam7-7.9.5}/src/setup.py +0 -0
  108. {gam7-7.9.3 → gam7-7.9.5}/src/tools/a_atleast_b.py +0 -0
  109. {gam7-7.9.3 → gam7-7.9.5}/src/tools/gen-wix-xml-filelist.py +0 -0
  110. {gam7-7.9.3 → gam7-7.9.5}/src/tools/mkGamRef.py +0 -0
  111. {gam7-7.9.3 → gam7-7.9.5}/src/tools/openssl.props +0 -0
  112. {gam7-7.9.3 → gam7-7.9.5}/src/version_info.txt.in +0 -0
  113. {gam7-7.9.3 → gam7-7.9.5}/wiki/00scratch.md +0 -0
  114. {gam7-7.9.3 → gam7-7.9.5}/wiki/Addresses.md +0 -0
  115. {gam7-7.9.3 → gam7-7.9.5}/wiki/Administrators.md +0 -0
  116. {gam7-7.9.3 → gam7-7.9.5}/wiki/Alert-Center.md +0 -0
  117. {gam7-7.9.3 → gam7-7.9.5}/wiki/Aliases.md +0 -0
  118. {gam7-7.9.3 → gam7-7.9.5}/wiki/Authorization.md +0 -0
  119. {gam7-7.9.3 → gam7-7.9.5}/wiki/BNF-Syntax.md +0 -0
  120. {gam7-7.9.3 → gam7-7.9.5}/wiki/Basic-Items.md +0 -0
  121. {gam7-7.9.3 → gam7-7.9.5}/wiki/Bulk-Processing.md +0 -0
  122. {gam7-7.9.3 → gam7-7.9.5}/wiki/CSV-Input-Filtering.md +0 -0
  123. {gam7-7.9.3 → gam7-7.9.5}/wiki/CSV-Output-Filtering.md +0 -0
  124. {gam7-7.9.3 → gam7-7.9.5}/wiki/CSV-Special-Characters.md +0 -0
  125. {gam7-7.9.3 → gam7-7.9.5}/wiki/Calendars-Access.md +0 -0
  126. {gam7-7.9.3 → gam7-7.9.5}/wiki/Calendars-Events.md +0 -0
  127. {gam7-7.9.3 → gam7-7.9.5}/wiki/Calendars.md +0 -0
  128. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chat-Bot.md +0 -0
  129. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-AUE-Counts.md +0 -0
  130. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  131. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Installed-Apps.md +0 -0
  132. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  133. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Printers.md +0 -0
  134. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Profile-Management.md +0 -0
  135. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Version-Counts.md +0 -0
  136. {gam7-7.9.3 → gam7-7.9.5}/wiki/Chrome-Version-History.md +0 -0
  137. {gam7-7.9.3 → gam7-7.9.5}/wiki/ChromeOS-Devices.md +0 -0
  138. {gam7-7.9.3 → gam7-7.9.5}/wiki/Classroom-Courses.md +0 -0
  139. {gam7-7.9.3 → gam7-7.9.5}/wiki/Classroom-Guardians.md +0 -0
  140. {gam7-7.9.3 → gam7-7.9.5}/wiki/Classroom-Invitations.md +0 -0
  141. {gam7-7.9.3 → gam7-7.9.5}/wiki/Classroom-Membership.md +0 -0
  142. {gam7-7.9.3 → gam7-7.9.5}/wiki/Cloud-Channel.md +0 -0
  143. {gam7-7.9.3 → gam7-7.9.5}/wiki/Cloud-Identity-Devices.md +0 -0
  144. {gam7-7.9.3 → gam7-7.9.5}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  145. {gam7-7.9.3 → gam7-7.9.5}/wiki/Cloud-Identity-Groups.md +0 -0
  146. {gam7-7.9.3 → gam7-7.9.5}/wiki/Cloud-Identity-Policies.md +0 -0
  147. {gam7-7.9.3 → gam7-7.9.5}/wiki/Cloud-Storage.md +0 -0
  148. {gam7-7.9.3 → gam7-7.9.5}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  149. {gam7-7.9.3 → gam7-7.9.5}/wiki/Collections-of-Items.md +0 -0
  150. {gam7-7.9.3 → gam7-7.9.5}/wiki/Collections-of-Users.md +0 -0
  151. {gam7-7.9.3 → gam7-7.9.5}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  152. {gam7-7.9.3 → gam7-7.9.5}/wiki/Command-Line-Parsing.md +0 -0
  153. {gam7-7.9.3 → gam7-7.9.5}/wiki/Command-Logging-Progress.md +0 -0
  154. {gam7-7.9.3 → gam7-7.9.5}/wiki/Context-Aware-Access-Levels.md +0 -0
  155. {gam7-7.9.3 → gam7-7.9.5}/wiki/Customer.md +0 -0
  156. {gam7-7.9.3 → gam7-7.9.5}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  157. {gam7-7.9.3 → gam7-7.9.5}/wiki/Domain-SharedContacts.md +0 -0
  158. {gam7-7.9.3 → gam7-7.9.5}/wiki/Domains-Verification.md +0 -0
  159. {gam7-7.9.3 → gam7-7.9.5}/wiki/Domains.md +0 -0
  160. {gam7-7.9.3 → gam7-7.9.5}/wiki/Downloads-Installs.md +0 -0
  161. {gam7-7.9.3 → gam7-7.9.5}/wiki/Drive-File-Selection.md +0 -0
  162. {gam7-7.9.3 → gam7-7.9.5}/wiki/Drive-Items.md +0 -0
  163. {gam7-7.9.3 → gam7-7.9.5}/wiki/Drive-REST-API-v3.md +0 -0
  164. {gam7-7.9.3 → gam7-7.9.5}/wiki/Email-Audit-Monitor.md +0 -0
  165. {gam7-7.9.3 → gam7-7.9.5}/wiki/Find-File-Owner.md +0 -0
  166. {gam7-7.9.3 → gam7-7.9.5}/wiki/GAM-Public-Chat-Room.md +0 -0
  167. {gam7-7.9.3 → gam7-7.9.5}/wiki/GAM-Return-Codes.md +0 -0
  168. {gam7-7.9.3 → gam7-7.9.5}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  169. {gam7-7.9.3 → gam7-7.9.5}/wiki/GAM7-on-Android-Devices.md +0 -0
  170. {gam7-7.9.3 → gam7-7.9.5}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  171. {gam7-7.9.3 → gam7-7.9.5}/wiki/Google-Data-Transfers.md +0 -0
  172. {gam7-7.9.3 → gam7-7.9.5}/wiki/Google-Network-Addresses.md +0 -0
  173. {gam7-7.9.3 → gam7-7.9.5}/wiki/Groups-Membership.md +0 -0
  174. {gam7-7.9.3 → gam7-7.9.5}/wiki/Groups.md +0 -0
  175. {gam7-7.9.3 → gam7-7.9.5}/wiki/HTTPS-Proxy.md +0 -0
  176. {gam7-7.9.3 → gam7-7.9.5}/wiki/Home.md +0 -0
  177. {gam7-7.9.3 → gam7-7.9.5}/wiki/How-to-Install-GAM7.md +0 -0
  178. {gam7-7.9.3 → gam7-7.9.5}/wiki/How-to-Uninstall-GAM7.md +0 -0
  179. {gam7-7.9.3 → gam7-7.9.5}/wiki/How-to-Update-GAM7.md +0 -0
  180. {gam7-7.9.3 → gam7-7.9.5}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  181. {gam7-7.9.3 → gam7-7.9.5}/wiki/Inbound-SSO.md +0 -0
  182. {gam7-7.9.3 → gam7-7.9.5}/wiki/Install-GAM-as-Python-Library.md +0 -0
  183. {gam7-7.9.3 → gam7-7.9.5}/wiki/Licenses.md +0 -0
  184. {gam7-7.9.3 → gam7-7.9.5}/wiki/List-Items.md +0 -0
  185. {gam7-7.9.3 → gam7-7.9.5}/wiki/List.md +0 -0
  186. {gam7-7.9.3 → gam7-7.9.5}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  187. {gam7-7.9.3 → gam7-7.9.5}/wiki/Mobile-Devices.md +0 -0
  188. {gam7-7.9.3 → gam7-7.9.5}/wiki/Organizational-Units.md +0 -0
  189. {gam7-7.9.3 → gam7-7.9.5}/wiki/Other-Resources.md +0 -0
  190. {gam7-7.9.3 → gam7-7.9.5}/wiki/Permission-Matches.md +0 -0
  191. {gam7-7.9.3 → gam7-7.9.5}/wiki/Python-Regular-Expressions.md +0 -0
  192. {gam7-7.9.3 → gam7-7.9.5}/wiki/README.md +0 -0
  193. {gam7-7.9.3 → gam7-7.9.5}/wiki/Rclone.md +0 -0
  194. {gam7-7.9.3 → gam7-7.9.5}/wiki/Reports.md +0 -0
  195. {gam7-7.9.3 → gam7-7.9.5}/wiki/Reseller.md +0 -0
  196. {gam7-7.9.3 → gam7-7.9.5}/wiki/Resources.md +0 -0
  197. {gam7-7.9.3 → gam7-7.9.5}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  198. {gam7-7.9.3 → gam7-7.9.5}/wiki/SSL-Root-CA-Certificates.md +0 -0
  199. {gam7-7.9.3 → gam7-7.9.5}/wiki/Schemas.md +0 -0
  200. {gam7-7.9.3 → gam7-7.9.5}/wiki/Scripts.md +0 -0
  201. {gam7-7.9.3 → gam7-7.9.5}/wiki/Send-Email.md +0 -0
  202. {gam7-7.9.3 → gam7-7.9.5}/wiki/Shared-Drives.md +0 -0
  203. {gam7-7.9.3 → gam7-7.9.5}/wiki/Sites.md +0 -0
  204. {gam7-7.9.3 → gam7-7.9.5}/wiki/Tag-Replace.md +0 -0
  205. {gam7-7.9.3 → gam7-7.9.5}/wiki/Todrive.md +0 -0
  206. {gam7-7.9.3 → gam7-7.9.5}/wiki/Unmanaged-Accounts.md +0 -0
  207. {gam7-7.9.3 → gam7-7.9.5}/wiki/Upgrade-Benefits.md +0 -0
  208. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Analytics-Admin.md +0 -0
  209. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Application-Specific-Passwords.md +0 -0
  210. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Backup-Verification-Codes.md +0 -0
  211. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Calendars-Access.md +0 -0
  212. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Calendars-Events.md +0 -0
  213. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Calendars.md +0 -0
  214. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Chat.md +0 -0
  215. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Classification-Labels.md +0 -0
  216. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Classroom-Profile.md +0 -0
  217. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Contacts-Delegates.md +0 -0
  218. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Contacts.md +0 -0
  219. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Deprovision.md +0 -0
  220. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Activity-Settings.md +0 -0
  221. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Cleanup.md +0 -0
  222. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Comments.md +0 -0
  223. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Copy-Move.md +0 -0
  224. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Files-Display.md +0 -0
  225. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Files-Manage.md +0 -0
  226. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Orphans.md +0 -0
  227. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Ownership.md +0 -0
  228. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Permissions.md +0 -0
  229. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Query.md +0 -0
  230. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Revisions.md +0 -0
  231. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Shortcuts.md +0 -0
  232. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Drive-Transfer.md +0 -0
  233. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Forms.md +0 -0
  234. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-CSE.md +0 -0
  235. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Delegates.md +0 -0
  236. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Filters.md +0 -0
  237. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Forwarding.md +0 -0
  238. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Labels.md +0 -0
  239. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  240. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Profile.md +0 -0
  241. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-S-MIME.md +0 -0
  242. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  243. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Gmail-Settings.md +0 -0
  244. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Group-Membership.md +0 -0
  245. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Keep-Notes.md +0 -0
  246. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Looker-Studio.md +0 -0
  247. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Meet.md +0 -0
  248. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-People-Contacts-Profiles.md +0 -0
  249. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Photo.md +0 -0
  250. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Profile-Photo.md +0 -0
  251. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Profile-Sharing.md +0 -0
  252. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Shared-Drives.md +0 -0
  253. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  254. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Spreadsheets.md +0 -0
  255. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Tasks.md +0 -0
  256. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-Tokens.md +0 -0
  257. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users-YouTube.md +0 -0
  258. {gam7-7.9.3 → gam7-7.9.5}/wiki/Users.md +0 -0
  259. {gam7-7.9.3 → gam7-7.9.5}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  260. {gam7-7.9.3 → gam7-7.9.5}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  261. {gam7-7.9.3 → gam7-7.9.5}/wiki/Vault-Takeout.md +0 -0
  262. {gam7-7.9.3 → gam7-7.9.5}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  263. {gam7-7.9.3 → gam7-7.9.5}/wiki/_Sidebar.md +0 -0
  264. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-AdminSettingsExamples.md +0 -0
  265. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Android-Installation.md +0 -0
  266. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-BulkOperations.md +0 -0
  267. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-CalendarExamples.md +0 -0
  268. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Chat-Bot.md +0 -0
  269. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Chrome-Browser-Management.md +0 -0
  270. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Chrome-OS-Installation.md +0 -0
  271. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Chrome-Policy-Settings.md +0 -0
  272. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Cloud-Identity-Groups.md +0 -0
  273. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  274. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Calendars.md +0 -0
  275. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Definitions.md +0 -0
  276. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Drive.md +0 -0
  277. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Email.md +0 -0
  278. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  279. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Groups.md +0 -0
  280. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Command-Reference-Users.md +0 -0
  281. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  282. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  283. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-CreatingClientSecretsFile.md +0 -0
  284. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Custom-Schemas.md +0 -0
  285. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Data-Transfers.md +0 -0
  286. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-DomainVerification.md +0 -0
  287. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-ExamplesAccountAuditing.md +0 -0
  288. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-ExamplesCSV.md +0 -0
  289. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-ExamplesEmailSettings.md +0 -0
  290. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-ExamplesOrganizations.md +0 -0
  291. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM-Discussion-Group.md +0 -0
  292. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  293. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM-options-files.md +0 -0
  294. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  295. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM3CSVListings.md +0 -0
  296. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM3DirectoryCommands.md +0 -0
  297. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM3GroupSettings.md +0 -0
  298. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GAM7-FAQ.md +0 -0
  299. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  300. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-GoogleDriveManagement.md +0 -0
  301. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  302. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Home.md +0 -0
  303. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  304. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Inbound-SSO-Settings.md +0 -0
  305. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-LicenseExamples.md +0 -0
  306. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Managing-Admins.md +0 -0
  307. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  308. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Managing-Devices.md +0 -0
  309. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Managing-Google-Classroom.md +0 -0
  310. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-OAuthKeyManagement.md +0 -0
  311. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Printers.md +0 -0
  312. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-ResellerCommands.md +0 -0
  313. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  314. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-SecurityExamples.md +0 -0
  315. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-UnmanagedUsersExamples.md +0 -0
  316. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Use-a-Yubikey.md +0 -0
  317. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  318. {gam7-7.9.3 → gam7-7.9.5}/wiki/l-_Footer.md +0 -0
@@ -126,7 +126,7 @@ jobs:
126
126
  with:
127
127
  path: |
128
128
  cache.tar.xz
129
- key: gam-${{ matrix.jid }}-20250603
129
+ key: gam-${{ matrix.jid }}-20250611
130
130
 
131
131
  - name: Untar Cache archive
132
132
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.9.3
3
+ Version: 7.9.5
4
4
  Summary: CLI tool to manage Google Workspace
5
5
  Project-URL: Homepage, https://github.com/GAM-team/GAM
6
6
  Project-URL: Issues, https://github.com/GAM-team/GAM/issues
@@ -1,3 +1,17 @@
1
+ 7.09.05
2
+
3
+ Improved output of `gam info|show chromeschemas [std]` to more accurately display the schemas.
4
+
5
+ Fixed bugs in `gam update chromepolicy` that caused invalid error messaages.
6
+
7
+ 7.09.04
8
+
9
+ Fixed bug in `gam whatis <EmailItem>` where the check for an invitable user always failed.
10
+
11
+ Fixed bug in `gam print shareddriveorganizers` where no organizers were displayed when `domain` in `gam.cfg` was blank.
12
+
13
+ Updated to Python 3.13.5
14
+
1
15
  7.09.03
2
16
 
3
17
  Updated `gam <UserTypeEntity> create focustime|outofoffice ... timerange <Time> <Time>` to check
@@ -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.09.03'
28
+ __version__ = '7.09.05'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -12353,7 +12353,8 @@ def checkServiceAccount(users):
12353
12353
  Ind.Increment()
12354
12354
  try:
12355
12355
  key = callGAPI(iam.projects().serviceAccounts().keys(), 'get',
12356
- throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND, GAPI.PERMISSION_DENIED],
12356
+ throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND,
12357
+ GAPI.PERMISSION_DENIED, GAPI.SERVICE_NOT_AVAILABLE],
12357
12358
  name=name, fields='validAfterTime')
12358
12359
  key_created, _ = iso8601.parse_date(key['validAfterTime'])
12359
12360
  key_age = todaysTime()-key_created
@@ -12366,6 +12367,10 @@ def checkServiceAccount(users):
12366
12367
  Ent.SVCACCT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']],
12367
12368
  str(e))
12368
12369
  printPassFail(Msg.SERVICE_ACCOUNT_PRIVATE_KEY_AGE.format('UNKNOWN'), testWarn)
12370
+ except GAPI.serviceNotAvailable as e:
12371
+ entityActionFailedExit([Ent.PROJECT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['project_id'],
12372
+ Ent.SVCACCT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']],
12373
+ str(e))
12369
12374
  else:
12370
12375
  printPassFail(Msg.SERVICE_ACCOUNT_SKIPPING_KEY_AGE_CHECK.format(key_type), testPass)
12371
12376
  Ind.Decrement()
@@ -13138,7 +13143,7 @@ def doWhatIs():
13138
13143
  entityUnknownWarning(Ent.EMAIL, email)
13139
13144
  setSysExitRC(ENTITY_IS_UKNOWN_RC)
13140
13145
  return
13141
- if not invitableCheck or not getSvcAcctCredentials(API.CLOUDIDENTITY_USERINVITATIONS, _getAdminEmail(), softErrors=True):
13146
+ if not invitableCheck:
13142
13147
  isInvitableUser = False
13143
13148
  else:
13144
13149
  isInvitableUser, ci = _getIsInvitableUser(None, email)
@@ -28111,27 +28116,21 @@ def commonprefix(m):
28111
28116
  return s1[:i]
28112
28117
  return s1
28113
28118
 
28114
- def simplifyChromeSchema(schema):
28119
+ SCHEMA_TYPE_MESSAGE_MAP = {
28120
+ 'NullableDuration': {'type': 'TYPE_INT64', 'namedType': 'duration'},
28121
+ 'NullableLong': {'type': 'TYPE_INT64', 'namedType': 'value'},
28122
+ 'SystemTimezone': {'type': 'TYPE_STRING', 'namedType': 'value'}
28123
+ }
28124
+
28125
+ def simplifyChromeSchemaUpdate(schema):
28115
28126
  schema_name = schema['name'].split('/')[-1]
28116
- schema_dict = {'name': schema_name,
28117
- 'description': schema.get('policyDescription', ''),
28118
- 'settings': {}
28119
- }
28120
- fieldDescriptions = schema['fieldDescriptions']
28121
- savedSettingName = ''
28122
- savedTypeName = ''
28127
+ schema_dict = {'name': schema_name, 'settings': {}}
28123
28128
  for mtype in schema['definition']['messageType']:
28124
- numSettings = len(mtype['field'])
28129
+ if mtype['name'] in SCHEMA_TYPE_MESSAGE_MAP:
28130
+ continue
28125
28131
  for setting in mtype['field']:
28126
28132
  setting_name = setting['name']
28127
- setting_dict = {'name': setting_name,
28128
- 'constraints': None,
28129
- 'descriptions': [],
28130
- 'type': setting['type'],
28131
- }
28132
- if mtype['name'] == savedTypeName and numSettings == 1:
28133
- setting_dict['name'] = savedSettingName
28134
- savedTypeName = ''
28133
+ setting_dict = {'name': setting_name, 'type': setting['type'], 'namedType': ''}
28135
28134
  if setting_dict['type'] == 'TYPE_STRING' and setting.get('label') == 'LABEL_REPEATED':
28136
28135
  setting_dict['type'] = 'TYPE_LIST'
28137
28136
  if setting_dict['type'] == 'TYPE_ENUM':
@@ -28142,29 +28141,83 @@ def simplifyChromeSchema(schema):
28142
28141
  setting_dict['enum_prefix'] = commonprefix(setting_dict['enums'])
28143
28142
  prefix_len = len(setting_dict['enum_prefix'])
28144
28143
  setting_dict['enums'] = [enum[prefix_len:] for enum in setting_dict['enums'] if not enum.endswith('UNSPECIFIED')]
28145
- setting_dict['descriptions'] = ['']*len(setting_dict['enums'])
28146
- for i, an in enumerate(setting_dict['enums']):
28144
+ elif setting_dict['type'] == 'TYPE_MESSAGE':
28145
+ type_name = setting['typeName']
28146
+ if type_name not in SCHEMA_TYPE_MESSAGE_MAP:
28147
+ continue
28148
+ setting_dict['type'] = SCHEMA_TYPE_MESSAGE_MAP[type_name]['type']
28149
+ setting_dict['namedType'] = SCHEMA_TYPE_MESSAGE_MAP[type_name]['namedType']
28150
+ schema_dict['settings'][setting_name.lower()] = setting_dict
28151
+ return(schema_name, schema_dict)
28152
+
28153
+ def simplifyChromeSchemaDisplay(schema):
28154
+ schema_name = schema['name'].split('/')[-1]
28155
+ schema_dict = {'name': schema_name, 'description': schema.get('policyDescription', '')}
28156
+ fieldDescriptions = schema['fieldDescriptions']
28157
+ enumDict = {}
28158
+ for enumType in schema['definition'].get('enumType', []):
28159
+ enumEntry = {}
28160
+ enumEntry['enums'] = [enum['name'] for enum in enumType['value']]
28161
+ enumEntry['enum_prefix'] = commonprefix(enumEntry['enums'])
28162
+ enumEntry['enum_prefix_len'] = prefix_len = len(enumEntry['enum_prefix'])
28163
+ enumEntry['enums'] = [enum[prefix_len:] for enum in enumEntry['enums'] if not enum.endswith('UNSPECIFIED')]
28164
+ enumDict[enumType['name']] = enumEntry.copy()
28165
+ mesgDict = {}
28166
+ mesgPops = set()
28167
+ for mesgType in schema['definition']['messageType']:
28168
+ mtypeEntry = {'field': {}, 'subfield': False}
28169
+ for mfield in mesgType['field']:
28170
+ mfield.pop('number')
28171
+ mtypeEntry['field'][mfield.pop('name')] = mfield
28172
+ mesgDict[mesgType['name']] = mtypeEntry.copy()
28173
+ for _, mtypeEntry in mesgDict.items():
28174
+ for mfieldName, mfield in mtypeEntry['field'].items():
28175
+ mfield['descriptions'] = []
28176
+ if mfield['type'] == 'TYPE_STRING' and mfield.get('label') == 'LABEL_REPEATED':
28177
+ mfield['type'] = 'TYPE_LIST'
28178
+ if mfield['type'] == 'TYPE_ENUM':
28179
+ mfield['subtype'] = enumDict[mfield['typeName']]
28180
+ for an_enum in schema['definition']['enumType']:
28181
+ if an_enum['name'] == mfield['typeName']:
28182
+ mfield['descriptions'] = ['']*len(mfield['subtype']['enums'])
28183
+ for i, an in enumerate(mfield['subtype']['enums']):
28147
28184
  for fdesc in fieldDescriptions:
28148
- if fdesc.get('field') == setting_name:
28185
+ if fdesc.get('field') == mfieldName:
28149
28186
  for d in fdesc.get('knownValueDescriptions', []):
28150
- if d['value'][prefix_len:] == an:
28151
- setting_dict['descriptions'][i] = d.get('description', '')
28187
+ if d['value'][mfield['subtype']['enum_prefix_len']:] == an:
28188
+ mfield['descriptions'][i] = d.get('description', '')
28152
28189
  break
28153
28190
  break
28154
28191
  break
28155
- elif setting_dict['type'] == 'TYPE_MESSAGE':
28156
- savedSettingName = setting_name
28157
- savedTypeName = setting['typeName']
28192
+ elif mfield['type'] == 'TYPE_MESSAGE':
28193
+ subfield = mfield['typeName']
28194
+ if subfield not in SCHEMA_TYPE_MESSAGE_MAP:
28195
+ mesgDict[subfield]['subfield'] = True
28196
+ mfield['subtype'] = mesgDict[subfield]
28197
+ else:
28198
+ mfield['type'] = SCHEMA_TYPE_MESSAGE_MAP[subfield]['type']
28199
+ mesgPops.add(subfield)
28158
28200
  continue
28159
28201
  else:
28160
- setting_dict['enums'] = None
28161
- for fdesc in schema['fieldDescriptions']:
28162
- if fdesc['field'] == setting_name:
28202
+ for fdesc in fieldDescriptions:
28203
+ if fdesc['field'] == mfieldName:
28163
28204
  if 'knownValueDescriptions' in fdesc:
28164
- setting_dict['descriptions'] = fdesc['knownValueDescriptions']
28205
+ if isinstance(fdesc['knownValueDescriptions'], list):
28206
+ for kvd in fdesc['knownValueDescriptions']:
28207
+ if isinstance(kvd, dict):
28208
+ if 'description' in kvd:
28209
+ mfield['descriptions'].append(f"{kvd['value']}: {kvd['description']}")
28210
+ else:
28211
+ mfield['descriptions'].append(f"{kvd['value']}")
28212
+ else:
28213
+ mfield['descriptions'].extend(kvd)
28214
+ else:
28215
+ mfield['descriptions'].append(kvd)
28165
28216
  elif 'description' in fdesc:
28166
- setting_dict['descriptions'] = [fdesc['description']]
28167
- schema_dict['settings'][setting_name.lower()] = setting_dict
28217
+ mfield['descriptions'].append(fdesc['description'])
28218
+ for pfield in mesgPops:
28219
+ mesgDict.pop(pfield)
28220
+ schema_dict['settings'] = mesgDict
28168
28221
  return(schema_name, schema_dict)
28169
28222
 
28170
28223
  def _getPolicyOrgUnitTarget(cd, cp, myarg, groupEmail):
@@ -28507,7 +28560,7 @@ def doUpdateChromePolicy():
28507
28560
  elif myarg == 'convertcrnl':
28508
28561
  convertCRsNLs = True
28509
28562
  else:
28510
- schemaName, schema = simplifyChromeSchema(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
28563
+ schemaName, schema = simplifyChromeSchemaUpdate(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
28511
28564
  body['requests'].append({'policyValue': {'policySchema': schemaName, 'value': {}},
28512
28565
  'updateMask': ''})
28513
28566
  schemaNameList.append(schemaName)
@@ -28593,8 +28646,9 @@ def doUpdateChromePolicy():
28593
28646
  if field not in schema['settings']:
28594
28647
  Cmd.Backup()
28595
28648
  missingChoiceExit(schema['settings'])
28596
- casedField = schema['settings'][field]['name']
28597
- vtype = schema['settings'][field]['type']
28649
+ field_settings = schema['settings'][field]
28650
+ casedField = field_settings['name']
28651
+ vtype = field_settings['type']
28598
28652
  value = getString(Cmd.OB_STRING, minLen=0 if vtype in {'TYPE_STRING', 'TYPE_LIST'} else 1)
28599
28653
  if vtype in ['TYPE_INT64', 'TYPE_INT32', 'TYPE_UINT64']:
28600
28654
  if not value.isnumeric():
@@ -28611,8 +28665,8 @@ def doUpdateChromePolicy():
28611
28665
  invalidChoiceExit(value, TRUE_FALSE, True)
28612
28666
  elif vtype == 'TYPE_ENUM':
28613
28667
  value = value.upper()
28614
- prefix = schema['settings'][field]['enum_prefix']
28615
- enum_values = schema['settings'][field]['enums']
28668
+ prefix = field_settings['enum_prefix']
28669
+ enum_values = field_settings['enums']
28616
28670
  if value in enum_values:
28617
28671
  value = f'{prefix}{value}'
28618
28672
  elif value.replace(prefix, '') in enum_values:
@@ -28639,7 +28693,10 @@ def doUpdateChromePolicy():
28639
28693
  elif value and not CHROME_TARGET_VERSION_PATTERN.match(value):
28640
28694
  Cmd.Backup()
28641
28695
  invalidArgumentExit(Msg.CHROME_TARGET_VERSION_FORMAT)
28642
- body['requests'][-1]['policyValue']['value'][casedField] = value
28696
+ if field_settings['namedType']:
28697
+ body['requests'][-1]['policyValue']['value'][casedField] = {field_settings['namedType']: value}
28698
+ else:
28699
+ body['requests'][-1]['policyValue']['value'][casedField] = value
28643
28700
  body['requests'][-1]['updateMask'] += f'{casedField},'
28644
28701
  checkPolicyArgs(targetResource, printer_id, app_id)
28645
28702
  count = len(body['requests'])
@@ -28940,7 +28997,9 @@ def _showChromePolicySchema(schema, FJQC, i=0, count=0):
28940
28997
  return
28941
28998
  printEntity([Ent.CHROME_POLICY_SCHEMA, schema['name']], i, count)
28942
28999
  Ind.Increment()
28943
- showJSON(None, schema, dictObjectsKey={'messageType': 'name', 'field': 'name', 'fieldDescriptions': 'field'})
29000
+ showJSON(None, schema,
29001
+ dictObjectsKey={'messageType': 'name', 'field': 'name',
29002
+ 'fieldDescriptions': 'field', 'knownValueDescriptions': 'value'})
28944
29003
  Ind.Decrement()
28945
29004
 
28946
29005
  CHROME_POLICY_SCHEMA_FIELDS_CHOICE_MAP = {
@@ -29074,31 +29133,35 @@ def doPrintShowChromePolicySchemas():
29074
29133
  csvPF.writeCSVfile('Chrome Policy Schemas')
29075
29134
 
29076
29135
  def _showChromePolicySchemaStd(schema):
29077
- printKeyValueList([f'{schema.get("name")}', f'{schema.get("description")}'])
29078
- Ind.Increment()
29079
- for val in schema['settings'].values():
29080
- vtype = val.get('type')
29081
- printKeyValueList([f'{val.get("name")}', f'{vtype}'])
29136
+ def _printEntry(mtypeName, mtypeEntry):
29137
+ vtype = mtypeEntry['type']
29138
+ if vtype != 'TYPE_MESSAGE':
29139
+ printKeyValueList([f'{mtypeName}', f'{vtype}'])
29140
+ else:
29141
+ printKeyValueList([f'{mtypeName}'])
29082
29142
  Ind.Increment()
29083
29143
  if vtype == 'TYPE_ENUM':
29084
- enums = val.get('enums', [])
29085
- descriptions = val.get('descriptions', [])
29086
- for i in range(len(val.get('enums', []))):
29144
+ enums = mtypeEntry['subtype']['enums']
29145
+ descriptions = mtypeEntry['descriptions']
29146
+ for i in range(len(enums)):
29087
29147
  printKeyValueList([f'{enums[i]}', f'{descriptions[i]}'])
29088
- elif vtype == 'TYPE_BOOL':
29089
- pvs = val.get('descriptions')
29090
- for pvi in pvs:
29091
- if isinstance(pvi, dict):
29092
- pvalue = pvi.get('value')
29093
- pdescription = pvi.get('description')
29094
- printKeyValueList([f'{pvalue}', f'{pdescription}'])
29095
- elif isinstance(pvi, list):
29096
- printKeyValueList([f'{pvi[0]}'])
29097
- else:
29098
- description = val.get('descriptions')
29099
- if len(description) > 0:
29100
- printKeyValueList([f'{description[0]}'])
29148
+ elif vtype == 'TYPE_MESSAGE':
29149
+ for mfieldName, mfield in mtypeEntry['subtype']['field'].items():
29150
+ # managedBookmarks is recursive
29151
+ if mtypeName != 'entries':
29152
+ _printEntry(mfieldName, mfield)
29153
+ else:
29154
+ for description in mtypeEntry.get('descriptions', []):
29155
+ printKeyValueList([description])
29101
29156
  Ind.Decrement()
29157
+
29158
+ printKeyValueList([f'{schema.get("name")}', f'{schema.get("description")}'])
29159
+ Ind.Increment()
29160
+ for _, mtypeEntry in schema['settings'].items():
29161
+ if mtypeEntry['subfield']:
29162
+ continue
29163
+ for mfieldName, mfield in mtypeEntry['field'].items():
29164
+ _printEntry(mfieldName, mfield)
29102
29165
  Ind.Decrement()
29103
29166
 
29104
29167
  # gam info chromeschema std <SchemaName>
@@ -29109,7 +29172,7 @@ def doInfoChromePolicySchemasStd(cp):
29109
29172
  schema = callGAPI(cp.customers().policySchemas(), 'get',
29110
29173
  throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
29111
29174
  name=name)
29112
- _, schema_dict = simplifyChromeSchema(schema)
29175
+ _, schema_dict = simplifyChromeSchemaDisplay(schema)
29113
29176
  _showChromePolicySchemaStd(schema_dict)
29114
29177
  except GAPI.notFound:
29115
29178
  entityUnknownWarning(Ent.CHROME_POLICY_SCHEMA, name)
@@ -29131,7 +29194,7 @@ def doShowChromePolicySchemasStd(cp):
29131
29194
  parent=parent, filter=sfilter)
29132
29195
  schemas = {}
29133
29196
  for schema in result:
29134
- schema_name, schema_dict = simplifyChromeSchema(schema)
29197
+ schema_name, schema_dict = simplifyChromeSchemaDisplay(schema)
29135
29198
  schemas[schema_name.lower()] = schema_dict
29136
29199
  for _, schema in sorted(iter(schemas.items())):
29137
29200
  _showChromePolicySchemaStd(schema)
@@ -66178,7 +66241,7 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66178
66241
  showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
66179
66242
  fieldsList = ['role', 'type', 'emailAddress']
66180
66243
  cd = entityList = orgUnitId = query = matchPattern = None
66181
- domainList = [GC.Values[GC.DOMAIN]]
66244
+ domainList = set([(GC.Values[GC.DOMAIN] if GC.Values[GC.DOMAIN] else _getValueFromOAuth('hd'))])
66182
66245
  oneOrganizer = True
66183
66246
  while Cmd.ArgumentsRemaining():
66184
66247
  myarg = getArgument()