gam7 7.6.11__tar.gz → 7.6.13__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.6.11 → gam7-7.6.13}/PKG-INFO +1 -1
  2. {gam7-7.6.11 → gam7-7.6.13}/src/GamCommands.txt +0 -11
  3. {gam7-7.6.11 → gam7-7.6.13}/src/GamUpdate.txt +12 -0
  4. {gam7-7.6.11 → gam7-7.6.13}/src/gam/__init__.py +107 -83
  5. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glapi.py +0 -7
  6. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glclargs.py +0 -2
  7. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glentity.py +0 -2
  8. {gam7-7.6.11 → gam7-7.6.13}/wiki/GamUpdates.md +7 -0
  9. {gam7-7.6.11 → gam7-7.6.13}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
  10. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Analytics-Admin.md +1 -38
  11. {gam7-7.6.11 → gam7-7.6.13}/wiki/Version-and-Help.md +6 -6
  12. {gam7-7.6.11 → gam7-7.6.13}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  13. {gam7-7.6.11 → gam7-7.6.13}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  14. {gam7-7.6.11 → gam7-7.6.13}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  15. {gam7-7.6.11 → gam7-7.6.13}/.github/ISSUE_TEMPLATE.txt +0 -0
  16. {gam7-7.6.11 → gam7-7.6.13}/.github/actions/decrypt.sh +0 -0
  17. {gam7-7.6.11 → gam7-7.6.13}/.github/actions/entitlements.plist +0 -0
  18. {gam7-7.6.11 → gam7-7.6.13}/.github/actions/package_exclusions.txt +0 -0
  19. {gam7-7.6.11 → gam7-7.6.13}/.github/stale.yml +0 -0
  20. {gam7-7.6.11 → gam7-7.6.13}/.github/workflows/build.yml +0 -0
  21. {gam7-7.6.11 → gam7-7.6.13}/.github/workflows/codeql-analysis.yml +0 -0
  22. {gam7-7.6.11 → gam7-7.6.13}/.github/workflows/get-cacerts.yml +0 -0
  23. {gam7-7.6.11 → gam7-7.6.13}/.github/workflows/pushwiki.yml +0 -0
  24. {gam7-7.6.11 → gam7-7.6.13}/.github/workflows/pypi.yml +0 -0
  25. {gam7-7.6.11 → gam7-7.6.13}/.pre-commit-config.yaml +0 -0
  26. {gam7-7.6.11 → gam7-7.6.13}/LICENSE +0 -0
  27. {gam7-7.6.11 → gam7-7.6.13}/README.md +0 -0
  28. {gam7-7.6.11 → gam7-7.6.13}/pyproject.toml +0 -0
  29. {gam7-7.6.11 → gam7-7.6.13}/src/.gitignore +0 -0
  30. {gam7-7.6.11 → gam7-7.6.13}/src/LICENSE +0 -0
  31. {gam7-7.6.11 → gam7-7.6.13}/src/cacerts.pem +0 -0
  32. {gam7-7.6.11 → gam7-7.6.13}/src/callgam.py +0 -0
  33. {gam7-7.6.11 → gam7-7.6.13}/src/gam/__main__.py +0 -0
  34. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/__init__.py +0 -0
  35. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/auth.py +0 -0
  36. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/client.py +0 -0
  37. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/core.py +0 -0
  38. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/data.py +0 -0
  39. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/http.py +0 -0
  40. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/http_core.py +0 -0
  41. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/http_interface.py +0 -0
  42. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/mock_http.py +0 -0
  43. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/mock_http_core.py +0 -0
  44. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/mock_service.py +0 -0
  45. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/service.py +0 -0
  46. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/token_store.py +0 -0
  47. {gam7-7.6.11 → gam7-7.6.13}/src/gam/atom/url.py +0 -0
  48. {gam7-7.6.11 → gam7-7.6.13}/src/gam/cacerts.pem +0 -0
  49. {gam7-7.6.11 → gam7-7.6.13}/src/gam/cbcm-v1.1beta1.json +0 -0
  50. {gam7-7.6.11 → gam7-7.6.13}/src/gam/contactdelegation-v1.json +0 -0
  51. {gam7-7.6.11 → gam7-7.6.13}/src/gam/datastudio-v1.json +0 -0
  52. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/__init__.py +0 -0
  53. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glaction.py +0 -0
  54. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glcfg.py +0 -0
  55. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glgapi.py +0 -0
  56. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glgdata.py +0 -0
  57. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glglobals.py +0 -0
  58. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glindent.py +0 -0
  59. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glmsgs.py +0 -0
  60. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glskus.py +0 -0
  61. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/gluprop.py +0 -0
  62. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/glverlibs.py +0 -0
  63. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gamlib/yubikey.py +0 -0
  64. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/__init__.py +0 -0
  65. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/alt/__init__.py +0 -0
  66. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/alt/app_engine.py +0 -0
  67. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/alt/appengine.py +0 -0
  68. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/apps/__init__.py +0 -0
  69. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/apps/audit/__init__.py +0 -0
  70. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/apps/audit/service.py +0 -0
  71. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  72. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/apps/contacts/service.py +0 -0
  73. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/apps/service.py +0 -0
  74. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/service.py +0 -0
  75. {gam7-7.6.11 → gam7-7.6.13}/src/gam/gdata/urlfetch.py +0 -0
  76. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/__init__.py +0 -0
  77. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/_auth.py +0 -0
  78. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/_helpers.py +0 -0
  79. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/channel.py +0 -0
  80. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/discovery.py +0 -0
  81. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
  82. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
  83. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
  84. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
  85. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/errors.py +0 -0
  86. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/http.py +0 -0
  87. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/mimeparse.py +0 -0
  88. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/model.py +0 -0
  89. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/schema.py +0 -0
  90. {gam7-7.6.11 → gam7-7.6.13}/src/gam/googleapiclient/version.py +0 -0
  91. {gam7-7.6.11 → gam7-7.6.13}/src/gam/iso8601/__init__.py +0 -0
  92. {gam7-7.6.11 → gam7-7.6.13}/src/gam/iso8601/iso8601.py +0 -0
  93. {gam7-7.6.11 → gam7-7.6.13}/src/gam/meet-v2beta.json +0 -0
  94. {gam7-7.6.11 → gam7-7.6.13}/src/gam/serviceaccountlookup-v1.json +0 -0
  95. {gam7-7.6.11 → gam7-7.6.13}/src/gam/six.py +0 -0
  96. {gam7-7.6.11 → gam7-7.6.13}/src/gam-install.sh +0 -0
  97. {gam7-7.6.11 → gam7-7.6.13}/src/gam-setup.bat +0 -0
  98. {gam7-7.6.11 → gam7-7.6.13}/src/gam.exe.manifest +0 -0
  99. {gam7-7.6.11 → gam7-7.6.13}/src/gam.py +0 -0
  100. {gam7-7.6.11 → gam7-7.6.13}/src/gam.spec +0 -0
  101. {gam7-7.6.11 → gam7-7.6.13}/src/gam.wxs +0 -0
  102. {gam7-7.6.11 → gam7-7.6.13}/src/license.rtf +0 -0
  103. {gam7-7.6.11 → gam7-7.6.13}/src/requirements-dev.txt +0 -0
  104. {gam7-7.6.11 → gam7-7.6.13}/src/requirements.txt +0 -0
  105. {gam7-7.6.11 → gam7-7.6.13}/src/setup.cfg +0 -0
  106. {gam7-7.6.11 → gam7-7.6.13}/src/setup.py +0 -0
  107. {gam7-7.6.11 → gam7-7.6.13}/src/tools/a_atleast_b.py +0 -0
  108. {gam7-7.6.11 → gam7-7.6.13}/src/tools/gen-wix-xml-filelist.py +0 -0
  109. {gam7-7.6.11 → gam7-7.6.13}/src/tools/mkGamRef.py +0 -0
  110. {gam7-7.6.11 → gam7-7.6.13}/src/tools/openssl.props +0 -0
  111. {gam7-7.6.11 → gam7-7.6.13}/src/version_info.txt.in +0 -0
  112. {gam7-7.6.11 → gam7-7.6.13}/wiki/00scratch.md +0 -0
  113. {gam7-7.6.11 → gam7-7.6.13}/wiki/Addresses.md +0 -0
  114. {gam7-7.6.11 → gam7-7.6.13}/wiki/Administrators.md +0 -0
  115. {gam7-7.6.11 → gam7-7.6.13}/wiki/Alert-Center.md +0 -0
  116. {gam7-7.6.11 → gam7-7.6.13}/wiki/Aliases.md +0 -0
  117. {gam7-7.6.11 → gam7-7.6.13}/wiki/Authorization.md +0 -0
  118. {gam7-7.6.11 → gam7-7.6.13}/wiki/BNF-Syntax.md +0 -0
  119. {gam7-7.6.11 → gam7-7.6.13}/wiki/Basic-Items.md +0 -0
  120. {gam7-7.6.11 → gam7-7.6.13}/wiki/Bulk-Processing.md +0 -0
  121. {gam7-7.6.11 → gam7-7.6.13}/wiki/CSV-Input-Filtering.md +0 -0
  122. {gam7-7.6.11 → gam7-7.6.13}/wiki/CSV-Output-Filtering.md +0 -0
  123. {gam7-7.6.11 → gam7-7.6.13}/wiki/CSV-Special-Characters.md +0 -0
  124. {gam7-7.6.11 → gam7-7.6.13}/wiki/Calendars-Access.md +0 -0
  125. {gam7-7.6.11 → gam7-7.6.13}/wiki/Calendars-Events.md +0 -0
  126. {gam7-7.6.11 → gam7-7.6.13}/wiki/Calendars.md +0 -0
  127. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chat-Bot.md +0 -0
  128. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-AUE-Counts.md +0 -0
  129. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  130. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Installed-Apps.md +0 -0
  131. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  132. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Policies.md +0 -0
  133. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Printers.md +0 -0
  134. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Profile-Management.md +0 -0
  135. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Version-Counts.md +0 -0
  136. {gam7-7.6.11 → gam7-7.6.13}/wiki/Chrome-Version-History.md +0 -0
  137. {gam7-7.6.11 → gam7-7.6.13}/wiki/ChromeOS-Devices.md +0 -0
  138. {gam7-7.6.11 → gam7-7.6.13}/wiki/Classroom-Courses.md +0 -0
  139. {gam7-7.6.11 → gam7-7.6.13}/wiki/Classroom-Guardians.md +0 -0
  140. {gam7-7.6.11 → gam7-7.6.13}/wiki/Classroom-Invitations.md +0 -0
  141. {gam7-7.6.11 → gam7-7.6.13}/wiki/Classroom-Membership.md +0 -0
  142. {gam7-7.6.11 → gam7-7.6.13}/wiki/Cloud-Channel.md +0 -0
  143. {gam7-7.6.11 → gam7-7.6.13}/wiki/Cloud-Identity-Devices.md +0 -0
  144. {gam7-7.6.11 → gam7-7.6.13}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  145. {gam7-7.6.11 → gam7-7.6.13}/wiki/Cloud-Identity-Groups.md +0 -0
  146. {gam7-7.6.11 → gam7-7.6.13}/wiki/Cloud-Identity-Policies.md +0 -0
  147. {gam7-7.6.11 → gam7-7.6.13}/wiki/Cloud-Storage.md +0 -0
  148. {gam7-7.6.11 → gam7-7.6.13}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  149. {gam7-7.6.11 → gam7-7.6.13}/wiki/Collections-of-Items.md +0 -0
  150. {gam7-7.6.11 → gam7-7.6.13}/wiki/Collections-of-Users.md +0 -0
  151. {gam7-7.6.11 → gam7-7.6.13}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  152. {gam7-7.6.11 → gam7-7.6.13}/wiki/Command-Line-Parsing.md +0 -0
  153. {gam7-7.6.11 → gam7-7.6.13}/wiki/Command-Logging-Progress.md +0 -0
  154. {gam7-7.6.11 → gam7-7.6.13}/wiki/Context-Aware-Access-Levels.md +0 -0
  155. {gam7-7.6.11 → gam7-7.6.13}/wiki/Customer.md +0 -0
  156. {gam7-7.6.11 → gam7-7.6.13}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  157. {gam7-7.6.11 → gam7-7.6.13}/wiki/Domain-SharedContacts-GAL.md +0 -0
  158. {gam7-7.6.11 → gam7-7.6.13}/wiki/Domains-Verification.md +0 -0
  159. {gam7-7.6.11 → gam7-7.6.13}/wiki/Domains.md +0 -0
  160. {gam7-7.6.11 → gam7-7.6.13}/wiki/Downloads-Installs.md +0 -0
  161. {gam7-7.6.11 → gam7-7.6.13}/wiki/Drive-File-Selection.md +0 -0
  162. {gam7-7.6.11 → gam7-7.6.13}/wiki/Drive-Items.md +0 -0
  163. {gam7-7.6.11 → gam7-7.6.13}/wiki/Drive-REST-API-v3.md +0 -0
  164. {gam7-7.6.11 → gam7-7.6.13}/wiki/Email-Audit-Monitor.md +0 -0
  165. {gam7-7.6.11 → gam7-7.6.13}/wiki/Find-File-Owner.md +0 -0
  166. {gam7-7.6.11 → gam7-7.6.13}/wiki/GAM-Public-Chat-Room.md +0 -0
  167. {gam7-7.6.11 → gam7-7.6.13}/wiki/GAM-Return-Codes.md +0 -0
  168. {gam7-7.6.11 → gam7-7.6.13}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  169. {gam7-7.6.11 → gam7-7.6.13}/wiki/GAM7-on-Android-Devices.md +0 -0
  170. {gam7-7.6.11 → gam7-7.6.13}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  171. {gam7-7.6.11 → gam7-7.6.13}/wiki/Google-Data-Transfers.md +0 -0
  172. {gam7-7.6.11 → gam7-7.6.13}/wiki/Google-Network-Addresses.md +0 -0
  173. {gam7-7.6.11 → gam7-7.6.13}/wiki/Groups-Membership.md +0 -0
  174. {gam7-7.6.11 → gam7-7.6.13}/wiki/Groups.md +0 -0
  175. {gam7-7.6.11 → gam7-7.6.13}/wiki/HTTPS-Proxy.md +0 -0
  176. {gam7-7.6.11 → gam7-7.6.13}/wiki/Home.md +0 -0
  177. {gam7-7.6.11 → gam7-7.6.13}/wiki/How-to-Install-GAM7.md +0 -0
  178. {gam7-7.6.11 → gam7-7.6.13}/wiki/How-to-Uninstall-GAM7.md +0 -0
  179. {gam7-7.6.11 → gam7-7.6.13}/wiki/How-to-Update-GAM7.md +0 -0
  180. {gam7-7.6.11 → gam7-7.6.13}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  181. {gam7-7.6.11 → gam7-7.6.13}/wiki/Inbound-SSO.md +0 -0
  182. {gam7-7.6.11 → gam7-7.6.13}/wiki/Install-GAM-as-Python-Library.md +0 -0
  183. {gam7-7.6.11 → gam7-7.6.13}/wiki/Licenses.md +0 -0
  184. {gam7-7.6.11 → gam7-7.6.13}/wiki/List-Items.md +0 -0
  185. {gam7-7.6.11 → gam7-7.6.13}/wiki/List.md +0 -0
  186. {gam7-7.6.11 → gam7-7.6.13}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  187. {gam7-7.6.11 → gam7-7.6.13}/wiki/Mobile-Devices.md +0 -0
  188. {gam7-7.6.11 → gam7-7.6.13}/wiki/Organizational-Units.md +0 -0
  189. {gam7-7.6.11 → gam7-7.6.13}/wiki/Other-Resources.md +0 -0
  190. {gam7-7.6.11 → gam7-7.6.13}/wiki/Permission-Matches.md +0 -0
  191. {gam7-7.6.11 → gam7-7.6.13}/wiki/Python-Regular-Expressions.md +0 -0
  192. {gam7-7.6.11 → gam7-7.6.13}/wiki/README.md +0 -0
  193. {gam7-7.6.11 → gam7-7.6.13}/wiki/Rclone.md +0 -0
  194. {gam7-7.6.11 → gam7-7.6.13}/wiki/Reports.md +0 -0
  195. {gam7-7.6.11 → gam7-7.6.13}/wiki/Reseller.md +0 -0
  196. {gam7-7.6.11 → gam7-7.6.13}/wiki/Resources.md +0 -0
  197. {gam7-7.6.11 → gam7-7.6.13}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  198. {gam7-7.6.11 → gam7-7.6.13}/wiki/SSL-Root-CA-Certificates.md +0 -0
  199. {gam7-7.6.11 → gam7-7.6.13}/wiki/Schemas.md +0 -0
  200. {gam7-7.6.11 → gam7-7.6.13}/wiki/Scripts.md +0 -0
  201. {gam7-7.6.11 → gam7-7.6.13}/wiki/Send-Email.md +0 -0
  202. {gam7-7.6.11 → gam7-7.6.13}/wiki/Shared-Drives.md +0 -0
  203. {gam7-7.6.11 → gam7-7.6.13}/wiki/Sites.md +0 -0
  204. {gam7-7.6.11 → gam7-7.6.13}/wiki/Tag-Replace.md +0 -0
  205. {gam7-7.6.11 → gam7-7.6.13}/wiki/Todrive.md +0 -0
  206. {gam7-7.6.11 → gam7-7.6.13}/wiki/Unmanaged-Accounts.md +0 -0
  207. {gam7-7.6.11 → gam7-7.6.13}/wiki/Upgrade-Benefits.md +0 -0
  208. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Application-Specific-Passwords.md +0 -0
  209. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Backup-Verification-Codes.md +0 -0
  210. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Calendars-Access.md +0 -0
  211. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Calendars-Events.md +0 -0
  212. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Calendars.md +0 -0
  213. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Chat.md +0 -0
  214. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Classification-Labels.md +0 -0
  215. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Classroom-Profile.md +0 -0
  216. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Contacts-Delegates.md +0 -0
  217. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Contacts.md +0 -0
  218. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Deprovision.md +0 -0
  219. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Activity-Settings.md +0 -0
  220. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Cleanup.md +0 -0
  221. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Comments.md +0 -0
  222. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Copy-Move.md +0 -0
  223. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Files-Display.md +0 -0
  224. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Files-Manage.md +0 -0
  225. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Orphans.md +0 -0
  226. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Ownership.md +0 -0
  227. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Permissions.md +0 -0
  228. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Query.md +0 -0
  229. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Revisions.md +0 -0
  230. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Shortcuts.md +0 -0
  231. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Drive-Transfer.md +0 -0
  232. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Forms.md +0 -0
  233. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-CSE.md +0 -0
  234. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Delegates.md +0 -0
  235. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Filters.md +0 -0
  236. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Forwarding.md +0 -0
  237. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Labels.md +0 -0
  238. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  239. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Profile.md +0 -0
  240. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-S-MIME.md +0 -0
  241. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  242. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Gmail-Settings.md +0 -0
  243. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Group-Membership.md +0 -0
  244. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Keep-Notes.md +0 -0
  245. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Looker-Studio.md +0 -0
  246. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Meet.md +0 -0
  247. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-People-Contacts-Profiles.md +0 -0
  248. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Photo.md +0 -0
  249. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Profile-Photo.md +0 -0
  250. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Profile-Sharing.md +0 -0
  251. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Shared-Drives.md +0 -0
  252. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  253. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Spreadsheets.md +0 -0
  254. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Tasks.md +0 -0
  255. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-Tokens.md +0 -0
  256. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users-YouTube.md +0 -0
  257. {gam7-7.6.11 → gam7-7.6.13}/wiki/Users.md +0 -0
  258. {gam7-7.6.11 → gam7-7.6.13}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  259. {gam7-7.6.11 → gam7-7.6.13}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  260. {gam7-7.6.11 → gam7-7.6.13}/wiki/Vault-Takeout.md +0 -0
  261. {gam7-7.6.11 → gam7-7.6.13}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  262. {gam7-7.6.11 → gam7-7.6.13}/wiki/_Sidebar.md +0 -0
  263. {gam7-7.6.11 → gam7-7.6.13}/wiki/gam.cfg.md +0 -0
  264. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-AdminSettingsExamples.md +0 -0
  265. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Android-Installation.md +0 -0
  266. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-BulkOperations.md +0 -0
  267. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-CalendarExamples.md +0 -0
  268. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Chat-Bot.md +0 -0
  269. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Chrome-Browser-Management.md +0 -0
  270. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Chrome-OS-Installation.md +0 -0
  271. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Chrome-Policy-Settings.md +0 -0
  272. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Cloud-Identity-Groups.md +0 -0
  273. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  274. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Calendars.md +0 -0
  275. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Definitions.md +0 -0
  276. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Drive.md +0 -0
  277. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Email.md +0 -0
  278. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  279. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Groups.md +0 -0
  280. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Command-Reference-Users.md +0 -0
  281. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  282. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  283. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-CreatingClientSecretsFile.md +0 -0
  284. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Custom-Schemas.md +0 -0
  285. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Data-Transfers.md +0 -0
  286. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-DomainVerification.md +0 -0
  287. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-ExamplesAccountAuditing.md +0 -0
  288. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-ExamplesCSV.md +0 -0
  289. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-ExamplesEmailSettings.md +0 -0
  290. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-ExamplesOrganizations.md +0 -0
  291. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM-Discussion-Group.md +0 -0
  292. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  293. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM-options-files.md +0 -0
  294. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  295. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM3CSVListings.md +0 -0
  296. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM3DirectoryCommands.md +0 -0
  297. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM3GroupSettings.md +0 -0
  298. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GAM7-FAQ.md +0 -0
  299. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  300. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-GoogleDriveManagement.md +0 -0
  301. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  302. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Home.md +0 -0
  303. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  304. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Inbound-SSO-Settings.md +0 -0
  305. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-LicenseExamples.md +0 -0
  306. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Managing-Admins.md +0 -0
  307. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  308. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Managing-Devices.md +0 -0
  309. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Managing-Google-Classroom.md +0 -0
  310. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-OAuthKeyManagement.md +0 -0
  311. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Printers.md +0 -0
  312. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-ResellerCommands.md +0 -0
  313. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  314. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-SecurityExamples.md +0 -0
  315. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-UnmanagedUsersExamples.md +0 -0
  316. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Use-a-Yubikey.md +0 -0
  317. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  318. {gam7-7.6.11 → gam7-7.6.13}/wiki/l-_Footer.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.6.11
3
+ Version: 7.6.13
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
@@ -1523,17 +1523,6 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
1523
1523
 
1524
1524
  gam whatis <EmailItem> [noinfo] [noinivitablecheck]
1525
1525
 
1526
- # Analytics UA
1527
-
1528
- gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
1529
- accountid [accounts/]<String>
1530
- [maxresults <Integer>]
1531
- [formatjson [quotechar <Character>]]
1532
- gam <UserTypeEntity> show analyticuaproperties
1533
- accountid [accounts/]<String>
1534
- [maxresults <Integer>]
1535
- [formatjson]
1536
-
1537
1526
  # Analytics Admin
1538
1527
 
1539
1528
  gam <UserTypeEntity> print analyticaccounts [todrive <ToDriveAttribute>*]
@@ -1,3 +1,15 @@
1
+ 7.06.13
2
+
3
+ Updated `gam print group-members ... recursive` and `gam print cigroup-members ... recursive`
4
+ to expand groups representing chat spaces.
5
+
6
+ 7.06.12
7
+
8
+ Deleted commands to display Analytic UA properties; the API has been deprecated.
9
+ ```
10
+ gam <UserTypeEntity> print|show analyticuaproperties
11
+ ```
12
+
1
13
  7.06.11
2
14
 
3
15
  Improved `gam checkconn`.
@@ -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.06.11'
28
+ __version__ = '7.06.13'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -5981,7 +5981,7 @@ def getCIGroupMemberRoleFixType(member):
5981
5981
  else:
5982
5982
  member['type'] = Ent.TYPE_OTHER
5983
5983
  roles = {}
5984
- memberRoles = member.get('roles', [{'name': Ent.MEMBER}])
5984
+ memberRoles = member.get('roles', [{'name': Ent.ROLE_MEMBER}])
5985
5985
  for role in memberRoles:
5986
5986
  roles[role['name']] = role
5987
5987
  for a_role in [Ent.ROLE_OWNER, Ent.ROLE_MANAGER, Ent.ROLE_MEMBER]:
@@ -6019,7 +6019,7 @@ def getCIGroupTransitiveMemberRoleFixType(groupName, tmember):
6019
6019
  trole['name'] = Ent.ROLE_MANAGER
6020
6020
  memberRoles.append(trole)
6021
6021
  else:
6022
- memberRoles = [{'name': Ent.MEMBER}]
6022
+ memberRoles = [{'name': Ent.ROLE_MEMBER}]
6023
6023
  roles = {}
6024
6024
  for role in memberRoles:
6025
6025
  roles[role['name']] = role
@@ -9377,7 +9377,7 @@ def doCheckConnection():
9377
9377
  flushStdout()
9378
9378
  if dns_err:
9379
9379
  writeStdout(dns_err)
9380
- return
9380
+ return
9381
9381
  gen_firewall = 'You probably have security software or a firewall on your machine or network that is preventing GAM from making Internet connections. Check your network configuration or try running GAM on a hotspot or home network to see if the problem exists only on your organization\'s network.'
9382
9382
  try:
9383
9383
  if host.startswith('http'):
@@ -9430,11 +9430,11 @@ def doCheckConnection():
9430
9430
  disc_hosts = []
9431
9431
  for api, config in API._INFO.items():
9432
9432
  if config.get('v2discovery') and not config.get('localdiscovery'):
9433
- if mapped_api := config.get('mappedAPI'):
9434
- api = mapped_api
9435
- host = f'{api}.googleapis.com'
9436
- if host not in disc_hosts:
9437
- disc_hosts.append(host)
9433
+ if mapped_api := config.get('mappedAPI'):
9434
+ api = mapped_api
9435
+ host = f'{api}.googleapis.com'
9436
+ if host not in disc_hosts:
9437
+ disc_hosts.append(host)
9438
9438
  for host in disc_hosts:
9439
9439
  check_host(host)
9440
9440
  checked_hosts = initial_hosts + api_hosts + disc_hosts
@@ -9450,7 +9450,7 @@ def doCheckConnection():
9450
9450
  parsed_base_url = urlparse(base_url)
9451
9451
  base_host = parsed_base_url.netloc
9452
9452
  if base_host not in checked_hosts:
9453
- print(f'checking {base_host} for {api}')
9453
+ writeStdout(f'Checking {base_host} for {api}\n')
9454
9454
  check_host(base_host)
9455
9455
  checked_hosts.append(base_host)
9456
9456
  if success_count == try_count:
@@ -15804,27 +15804,13 @@ ANALYTIC_ENTITY_MAP = {
15804
15804
  'pageSize': 50,
15805
15805
  'maxPageSize': 200,
15806
15806
  },
15807
- Ent.ANALYTIC_UA_PROPERTY:
15808
- {'titles': ['User', 'accountId', 'name', 'id', 'created', 'updated'],
15809
- 'JSONtitles': ['User', 'accountId', 'name', 'id', 'JSON'],
15810
- 'timeObjects': ['created', 'updated'],
15811
- 'items': 'items',
15812
- 'pageSize': 50,
15813
- 'maxPageSize': 200,
15814
- },
15815
15807
  }
15816
15808
 
15817
15809
  def printShowAnalyticItems(users, entityType):
15818
15810
  analyticEntityMap = ANALYTIC_ENTITY_MAP[entityType]
15819
15811
  csvPF = CSVPrintFile(analyticEntityMap['titles'], 'sortall') if Act.csvFormat() else None
15820
15812
  FJQC = FormatJSONQuoteChar(csvPF)
15821
- if entityType != Ent.ANALYTIC_UA_PROPERTY:
15822
- kwargs = {'pageSize': analyticEntityMap['pageSize']}
15823
- api = API.ANALYTICS_ADMIN
15824
- else:
15825
- # kwargs = {'webPropertyId': '~all'}
15826
- kwargs = {}
15827
- api = API.ANALYTICS
15813
+ kwargs = {'pageSize': analyticEntityMap['pageSize']}
15828
15814
  if entityType in {Ent.ANALYTIC_ACCOUNT, Ent.ANALYTIC_PROPERTY}:
15829
15815
  kwargs['showDeleted'] = False
15830
15816
  while Cmd.ArgumentsRemaining():
@@ -15837,16 +15823,12 @@ def printShowAnalyticItems(users, entityType):
15837
15823
  kwargs['showDeleted'] = getBoolean()
15838
15824
  elif entityType == Ent.ANALYTIC_PROPERTY and myarg == 'filter':
15839
15825
  kwargs['filter'] = getString(Cmd.OB_STRING)
15840
- elif entityType == Ent.ANALYTIC_UA_PROPERTY and myarg == 'accountid':
15841
- kwargs['accountId'] = getString(Cmd.OB_STRING).replace('accounts/', '')
15842
15826
  elif entityType == Ent.ANALYTIC_DATASTREAM and myarg == 'parent':
15843
15827
  kwargs['parent'] = getString(Cmd.OB_STRING)
15844
15828
  else:
15845
15829
  FJQC.GetFormatJSONQuoteChar(myarg, True)
15846
15830
  if entityType == Ent.ANALYTIC_PROPERTY and 'filter' not in kwargs:
15847
15831
  missingArgumentExit('filter')
15848
- if entityType == Ent.ANALYTIC_UA_PROPERTY and 'accountId' not in kwargs:
15849
- missingArgumentExit('accountid')
15850
15832
  if entityType == Ent.ANALYTIC_DATASTREAM and 'parent' not in kwargs:
15851
15833
  missingArgumentExit('parent')
15852
15834
  if csvPF and FJQC.formatJSON:
@@ -15854,7 +15836,7 @@ def printShowAnalyticItems(users, entityType):
15854
15836
  i, count, users = getEntityArgument(users)
15855
15837
  for user in users:
15856
15838
  i += 1
15857
- user, analytics = buildGAPIServiceObject(api, user, i, count)
15839
+ user, analytics = buildGAPIServiceObject(API.ANALYTICS_ADMIN, user, i, count)
15858
15840
  if not analytics:
15859
15841
  continue
15860
15842
  if entityType == Ent.ANALYTIC_ACCOUNT:
@@ -15863,11 +15845,8 @@ def printShowAnalyticItems(users, entityType):
15863
15845
  service = analytics.accountSummaries()
15864
15846
  elif entityType == Ent.ANALYTIC_DATASTREAM:
15865
15847
  service = analytics.properties().dataStreams()
15866
- elif entityType == Ent.ANALYTIC_PROPERTY:
15848
+ else: # entityType == Ent.ANALYTIC_PROPERTY:
15867
15849
  service = analytics.properties()
15868
- else: #Ent.ANALYTIC_UA_PROPERTY:
15869
- service = analytics.management().webproperties()
15870
- # service = analytics.management().profiles()
15871
15850
  if csvPF:
15872
15851
  printGettingAllEntityItemsForWhom(entityType, user, i, count)
15873
15852
  pageMessage = getPageMessageForWhom()
@@ -15908,10 +15887,7 @@ def printShowAnalyticItems(users, entityType):
15908
15887
  if not FJQC.formatJSON:
15909
15888
  csvPF.WriteRowTitles(row)
15910
15889
  elif csvPF.CheckRowTitles(row):
15911
- if entityType != Ent.ANALYTIC_UA_PROPERTY:
15912
- row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
15913
- else:
15914
- row = {'User': user, 'accountId': item['accountId'], 'id': item['id'], 'name': item['name']}
15890
+ row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
15915
15891
  for field in analyticEntityMap['JSONtitles'][2:-1]:
15916
15892
  row[field] = item[field]
15917
15893
  row['JSON'] = json.dumps(cleanJSON(item, timeObjects=analyticEntityMap['timeObjects']),
@@ -15949,17 +15925,6 @@ def printShowAnalyticAccountSummaries(users):
15949
15925
  def printShowAnalyticProperties(users):
15950
15926
  printShowAnalyticItems(users, Ent.ANALYTIC_PROPERTY)
15951
15927
 
15952
- # gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
15953
- # accountid [accounts/]<String>
15954
- # [maxresults <Integer>]
15955
- # [formatjson [quotechar <Character>]]
15956
- # gam <UserTypeEntity> show analyticuaproperties
15957
- # accountid [accounts/]<String>
15958
- # [maxresults <Integer>]
15959
- # [formatjson]
15960
- def printShowAnalyticUAProperties(users):
15961
- printShowAnalyticItems(users, Ent.ANALYTIC_UA_PROPERTY)
15962
-
15963
15928
  # gam <UserTypeEntity> print analyticdatastreams [todrive <ToDriveAttribute>*]
15964
15929
  # parent <String>
15965
15930
  # [maxresults <Integer>]
@@ -26513,6 +26478,64 @@ def _getChatMemberEmail(cd, member):
26513
26478
  _, memberUid = member['groupMember']['name'].split('/')
26514
26479
  member['groupMember']['email'], _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['group'])
26515
26480
 
26481
+ def _getChatSpaceMembers(cd, chatSpace, ciGroupName):
26482
+ if chatSpace.startswith('space/'):
26483
+ _, chatSpace = chatSpace.split('/', 1)
26484
+ chatSpace = 'spaces/'+chatSpace
26485
+ kwargsUAA = {'useAdminAccess': True, 'filter': 'member.type != "BOT"'}
26486
+ user, chat, kvList = buildChatServiceObject(API.CHAT_MEMBERSHIPS_ADMIN, _getAdminEmail(), 0, 0, [Ent.CHAT_SPACE, chatSpace], True)
26487
+ memberList = []
26488
+ if not chat:
26489
+ return memberList
26490
+ fields = getItemFieldsFromFieldsList('memberships', [])
26491
+ qfilter = f'{Ent.Singular(Ent.CHAT_SPACE)}: {chatSpace}, {kwargsUAA["filter"]}'
26492
+ try:
26493
+ members = callGAPIpages(chat.spaces().members(), 'list', 'memberships',
26494
+ pageMessage=_getChatPageMessage(Ent.CHAT_MEMBER, user, 0, 0, qfilter),
26495
+ throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
26496
+ retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
26497
+ parent=chatSpace, fields=fields, pageSize=CHAT_PAGE_SIZE, **kwargsUAA)
26498
+ for member in members:
26499
+ _getChatMemberEmail(cd, member)
26500
+ gmember = {}
26501
+ if 'member' in member:
26502
+ if member['member']['type'] == 'HUMAN':
26503
+ _, memberUid = member['member']['name'].split('/')
26504
+ gmember['type'] = Ent.TYPE_USER
26505
+ email, _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['user'])
26506
+ role = Ent.ROLE_MANAGER if member['role'] == 'ROLE_MANAGER' else Ent.ROLE_MEMBER
26507
+ if not ciGroupName:
26508
+ gmember['id'] = memberUid
26509
+ gmember['email'] = email
26510
+ gmember['role'] = role
26511
+ gmember['status'] = member['state']
26512
+ else:
26513
+ gmember['name'] = f'{ciGroupName}/memberships/{memberUid}'
26514
+ gmember['preferredMemberKey'] = {'id': email}
26515
+ gmember['roles'] = [{'name': role}]
26516
+ gmember['createTime'] = member['createTime']
26517
+ memberList.append(gmember)
26518
+ elif 'groupMember' in member:
26519
+ _, memberUid = member['groupMember']['name'].split('/')
26520
+ gmember['type'] = Ent.TYPE_GROUP
26521
+ role = Ent.ROLE_MANAGER if member['role'] == 'ROLE_MANAGER' else Ent.ROLE_MEMBER
26522
+ email, _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['group'])
26523
+ if not ciGroupName:
26524
+ gmember['id'] = memberUid
26525
+ gmember['email'] = email
26526
+ gmember['role'] = role
26527
+ gmember['status'] = member['state']
26528
+ else:
26529
+ gmember['name'] = f'{ciGroupName}/memberships/{memberUid}'
26530
+ gmember['preferredMemberKey'] = {'id': email}
26531
+ gmember['roles'] = [{'name': role}]
26532
+ gmember['createTime'] = member['createTime']
26533
+ memberList.append(gmember)
26534
+ return memberList
26535
+ except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
26536
+ exitIfChatNotConfigured(chat, kvList, str(e), 0, 0)
26537
+ return memberList
26538
+
26516
26539
  def normalizeUserMember(user, userList):
26517
26540
  userList.append(normalizeEmailAddressOrUID(user))
26518
26541
 
@@ -34173,15 +34196,18 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
34173
34196
 
34174
34197
  printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, groupEmail, i, count)
34175
34198
  validRoles, listRoles, listFields = _getRoleVerification(memberRoles, 'nextPageToken,members(email,id,role,status,type,delivery_settings)')
34176
- try:
34177
- groupMembers = callGAPIpages(cd.members(), 'list', 'members',
34178
- pageMessage=getPageMessageForWhom(),
34179
- throwReasons=GAPI.MEMBERS_THROW_REASONS, retryReasons=GAPI.MEMBERS_RETRY_REASONS,
34180
- includeDerivedMembership=memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP],
34181
- groupKey=groupEmail, roles=listRoles, fields=listFields, maxResults=GC.Values[GC.MEMBER_MAX_RESULTS])
34182
- except (GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.invalid, GAPI.forbidden, GAPI.serviceNotAvailable):
34183
- entityUnknownWarning(Ent.GROUP, groupEmail, i, count)
34184
- return
34199
+ if not groupEmail.startswith('space/'):
34200
+ try:
34201
+ groupMembers = callGAPIpages(cd.members(), 'list', 'members',
34202
+ pageMessage=getPageMessageForWhom(),
34203
+ throwReasons=GAPI.MEMBERS_THROW_REASONS, retryReasons=GAPI.MEMBERS_RETRY_REASONS,
34204
+ includeDerivedMembership=memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP],
34205
+ groupKey=groupEmail, roles=listRoles, fields=listFields, maxResults=GC.Values[GC.MEMBER_MAX_RESULTS])
34206
+ except (GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.invalid, GAPI.forbidden, GAPI.serviceNotAvailable):
34207
+ entityUnknownWarning(Ent.GROUP, groupEmail, i, count)
34208
+ return
34209
+ else:
34210
+ groupMembers = _getChatSpaceMembers(cd, groupEmail, '')
34185
34211
  checkCategory = memberDisplayOptions['showCategory']
34186
34212
  if not memberOptions[MEMBEROPTION_RECURSIVE]:
34187
34213
  if memberOptions[MEMBEROPTION_NODUPLICATES]:
@@ -34205,8 +34231,7 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
34205
34231
  elif memberOptions[MEMBEROPTION_NODUPLICATES]:
34206
34232
  groupMemberList = []
34207
34233
  for member in groupMembers:
34208
- namespace = member['email'].find('@') == -1
34209
- if member['type'] != Ent.TYPE_GROUP or namespace:
34234
+ if member['type'] != Ent.TYPE_GROUP:
34210
34235
  if ((member['type'] in typesSet and
34211
34236
  checkMemberMatch(member, memberOptions) and
34212
34237
  _checkMemberRoleIsSuspendedIsArchived(member, validRoles, memberOptions[MEMBEROPTION_ISSUSPENDED], memberOptions[MEMBEROPTION_ISARCHIVED]) and
@@ -34235,8 +34260,7 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
34235
34260
  memberOptions, memberDisplayOptions, level+1, typesSet)
34236
34261
  else:
34237
34262
  for member in groupMembers:
34238
- namespace = member['email'].find('@') == -1
34239
- if member['type'] != Ent.TYPE_GROUP or namespace:
34263
+ if member['type'] != Ent.TYPE_GROUP:
34240
34264
  if ((member['type'] in typesSet) and
34241
34265
  checkMemberMatch(member, memberOptions) and
34242
34266
  _checkMemberRoleIsSuspendedIsArchived(member, validRoles,
@@ -36288,7 +36312,7 @@ def getCIGroupTransitiveMembers(ci, groupName, membersList, i, count):
36288
36312
  return True
36289
36313
 
36290
36314
  def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, count,
36291
- memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs):
36315
+ memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs, cd):
36292
36316
  nameToPrint = groupEmail if groupEmail else groupName
36293
36317
  printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, nameToPrint, i, count)
36294
36318
  validRoles = _getCIRoleVerification(memberRoles)
@@ -36301,16 +36325,21 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
36301
36325
  if member['type'] in typesSet and checkCIMemberMatch(member, memberOptions):
36302
36326
  membersList.append(member)
36303
36327
  return
36304
- try:
36305
- groupMembers = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
36306
- pageMessage=getPageMessageForWhom(),
36307
- throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
36308
- parent=groupName, **kwargs)
36309
- except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
36310
- GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidArgument, GAPI.systemError,
36311
- GAPI.permissionDenied, GAPI.serviceNotAvailable):
36312
- entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP, nameToPrint, i, count)
36313
- return
36328
+ if not groupEmail.startswith('space/'):
36329
+ try:
36330
+ groupMembers = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
36331
+ pageMessage=getPageMessageForWhom(),
36332
+ throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
36333
+ parent=groupName, **kwargs)
36334
+ except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
36335
+ GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidArgument, GAPI.systemError,
36336
+ GAPI.permissionDenied, GAPI.serviceNotAvailable):
36337
+ entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP, nameToPrint, i, count)
36338
+ return
36339
+ else:
36340
+ if cd is None:
36341
+ cd = buildGAPIObject(API.DIRECTORY)
36342
+ groupMembers = _getChatSpaceMembers(cd, groupEmail, groupName)
36314
36343
  checkCategory = memberDisplayOptions['showCategory']
36315
36344
  if not memberOptions[MEMBEROPTION_RECURSIVE]:
36316
36345
  if memberOptions[MEMBEROPTION_NODUPLICATES]:
@@ -36335,8 +36364,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
36335
36364
  for member in groupMembers:
36336
36365
  getCIGroupMemberRoleFixType(member)
36337
36366
  memberName = member.get('preferredMemberKey', {}).get('id', '')
36338
- namespace = member.get('preferredMemberKey', {}).get('namespace', '')
36339
- if member['type'] != Ent.TYPE_GROUP or namespace:
36367
+ if member['type'] != Ent.TYPE_GROUP:
36340
36368
  if (member['type'] in typesSet and
36341
36369
  checkCIMemberMatch(member, memberOptions) and
36342
36370
  _checkMemberRole(member, validRoles) and
@@ -36359,13 +36387,12 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
36359
36387
  groupMemberList.append((f'groups/{gname}', memberName))
36360
36388
  for member in groupMemberList:
36361
36389
  getCIGroupMembers(ci, member[0], memberRoles, membersList, membersSet, i, count,
36362
- memberOptions, memberDisplayOptions, level+1, typesSet, member[1], kwargs)
36390
+ memberOptions, memberDisplayOptions, level+1, typesSet, member[1], kwargs, cd)
36363
36391
  else:
36364
36392
  for member in groupMembers:
36365
36393
  getCIGroupMemberRoleFixType(member)
36366
36394
  memberName = member.get('preferredMemberKey', {}).get('id', '')
36367
- namespace = member.get('preferredMemberKey', {}).get('namespace', '')
36368
- if member['type'] != Ent.TYPE_GROUP or namespace:
36395
+ if member['type'] != Ent.TYPE_GROUP:
36369
36396
  if (member['type'] in typesSet and
36370
36397
  checkCIMemberMatch(member, memberOptions) and
36371
36398
  _checkMemberRole(member, validRoles) and
@@ -36382,7 +36409,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
36382
36409
  membersList.append(member)
36383
36410
  _, gname = member['name'].rsplit('/', 1)
36384
36411
  getCIGroupMembers(ci, f'groups/{gname}', memberRoles, membersList, membersSet, i, count,
36385
- memberOptions, memberDisplayOptions, level+1, typesSet, memberName, kwargs)
36412
+ memberOptions, memberDisplayOptions, level+1, typesSet, memberName, kwargs, cd)
36386
36413
 
36387
36414
  CIGROUPMEMBERS_FIELDS_CHOICE_MAP = {
36388
36415
  'createtime': 'createTime',
@@ -36546,7 +36573,7 @@ def doPrintCIGroupMembers():
36546
36573
  membersList = []
36547
36574
  membersSet = set()
36548
36575
  getCIGroupMembers(ci, groupEntity['name'], getRoles, membersList, membersSet, i, count,
36549
- memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs)
36576
+ memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs, None)
36550
36577
  if showOwnedBy and not checkCIGroupShowOwnedBy(showOwnedBy, membersList):
36551
36578
  continue
36552
36579
  for member in membersList:
@@ -76716,7 +76743,6 @@ USER_COMMANDS_WITH_OBJECTS = {
76716
76743
  Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
76717
76744
  Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
76718
76745
  Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
76719
- Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
76720
76746
  Cmd.ARG_ASP: printShowASPs,
76721
76747
  Cmd.ARG_BACKUPCODE: printShowBackupCodes,
76722
76748
  Cmd.ARG_CALENDAR: printShowCalendars,
@@ -76823,7 +76849,6 @@ USER_COMMANDS_WITH_OBJECTS = {
76823
76849
  Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
76824
76850
  Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
76825
76851
  Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
76826
- Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
76827
76852
  Cmd.ARG_ASP: printShowASPs,
76828
76853
  Cmd.ARG_BACKUPCODE: printShowBackupCodes,
76829
76854
  Cmd.ARG_CALENDAR: printShowCalendars,
@@ -77036,7 +77061,6 @@ USER_COMMANDS_OBJ_ALIASES = {
77036
77061
  Cmd.ARG_ANALYTICACCOUNTSUMMARIES: Cmd.ARG_ANALYTICACCOUNTSUMMARY,
77037
77062
  Cmd.ARG_ANALYTICDATASTREAMS: Cmd.ARG_ANALYTICDATASTREAM,
77038
77063
  Cmd.ARG_ANALYTICPROPERTIES: Cmd.ARG_ANALYTICPROPERTY,
77039
- Cmd.ARG_ANALYTICUAPROPERTIES: Cmd.ARG_ANALYTICUAPROPERTY,
77040
77064
  Cmd.ARG_ASPS: Cmd.ARG_ASP,
77041
77065
  Cmd.ARG_BACKUPCODES: Cmd.ARG_BACKUPCODE,
77042
77066
  Cmd.ARG_CALENDARS: Cmd.ARG_CALENDAR,
@@ -22,7 +22,6 @@
22
22
  # APIs
23
23
  ACCESSCONTEXTMANAGER = 'accesscontextmanager'
24
24
  ALERTCENTER = 'alertcenter'
25
- ANALYTICS = 'analytics'
26
25
  ANALYTICS_ADMIN = 'analyticsadmin'
27
26
  CALENDAR = 'calendar'
28
27
  CBCM = 'cbcm'
@@ -162,7 +161,6 @@ PROJECT_APIS = [
162
161
  'accesscontextmanager.googleapis.com',
163
162
  'admin.googleapis.com',
164
163
  'alertcenter.googleapis.com',
165
- 'analytics.googleapis.com',
166
164
  'analyticsadmin.googleapis.com',
167
165
  # 'audit.googleapis.com',
168
166
  'calendar-json.googleapis.com',
@@ -201,7 +199,6 @@ PROJECT_APIS = [
201
199
  _INFO = {
202
200
  ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
203
201
  ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
204
- ANALYTICS: {'name': 'Analytics API', 'version': 'v3', 'v2discovery': False},
205
202
  ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
206
203
  CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
207
204
  CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
@@ -532,10 +529,6 @@ _SVCACCT_SCOPES = [
532
529
  'api': ALERTCENTER,
533
530
  'subscopes': [],
534
531
  'scope': 'https://www.googleapis.com/auth/apps.alerts'},
535
- {'name': 'Analytics API - read only',
536
- 'api': ANALYTICS,
537
- 'subscopes': [],
538
- 'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
539
532
  {'name': 'Analytics Admin API - read only',
540
533
  'api': ANALYTICS_ADMIN,
541
534
  'subscopes': [],
@@ -423,8 +423,6 @@ class GamCLArgs():
423
423
  ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
424
424
  ARG_ANALYTICPROPERTY = 'analyticproperty'
425
425
  ARG_ANALYTICPROPERTIES = 'analyticproperties'
426
- ARG_ANALYTICUAPROPERTY = 'analyticuaproperty'
427
- ARG_ANALYTICUAPROPERTIES = 'analyticuaproperties'
428
426
  ARG_API = 'api'
429
427
  ARG_APIS = 'apis'
430
428
  ARG_APIPROJECT = 'apiproject'
@@ -61,7 +61,6 @@ class GamEntity():
61
61
  ANALYTIC_ACCOUNT_SUMMARY = 'anas'
62
62
  ANALYTIC_DATASTREAM = 'anad'
63
63
  ANALYTIC_PROPERTY = 'anap'
64
- ANALYTIC_UA_PROPERTY = 'anau'
65
64
  API = 'api '
66
65
  APP_ACCESS_SETTINGS = 'apps'
67
66
  APP_ID = 'appi'
@@ -412,7 +411,6 @@ class GamEntity():
412
411
  ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
413
412
  ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
414
413
  ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
415
- ANALYTIC_UA_PROPERTY: ['Analytic UA Properties', 'Analytic UA Property'],
416
414
  API: ['APIs', 'API'],
417
415
  APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
418
416
  APP_ID: ['Application IDs', 'Application ID'],
@@ -10,6 +10,13 @@ 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.06.12
14
+
15
+ Deleted commands to display Analytic UA properties; the API has been deprecated.
16
+ ```
17
+ gam <UserTypeEntity> print|show analyticuaproperties
18
+ ```
19
+
13
20
  ### 7.06.11
14
21
 
15
22
  Improved `gam checkconn`.
@@ -251,7 +251,7 @@ writes the credentials into the file oauth2.txt.
251
251
  admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
252
252
  admin@server:/Users/admin$ gam version
253
253
  WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
254
- GAM 7.06.11 - https://github.com/GAM-team/GAM - pyinstaller
254
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pyinstaller
255
255
  GAM Team <google-apps-manager@googlegroups.com>
256
256
  Python 3.13.3 64-bit final
257
257
  MacOS Sequoia 15.4.1 x86_64
@@ -989,7 +989,7 @@ writes the credentials into the file oauth2.txt.
989
989
  C:\>del C:\GAMConfig\oauth2.txt
990
990
  C:\>gam version
991
991
  WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
992
- GAM 7.06.11 - https://github.com/GAM-team/GAM - pythonsource
992
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pythonsource
993
993
  GAM Team <google-apps-manager@googlegroups.com>
994
994
  Python 3.13.3 64-bit final
995
995
  Windows-10-10.0.17134 AMD64
@@ -6,14 +6,13 @@
6
6
  - [Display Analytic Account Summaries](#display-analytic-account-summaries)
7
7
  - [Display Analytic Properties](#display-analytic-properties)
8
8
  - [Display Analytic Datastreams](#display-analytic-datastreams)
9
- - [Display Analytic UA Properties](#display-analytic-ua-properties)
10
9
  - [Examples](#examples)
11
10
 
12
11
  ## API documentation
13
12
  * [Analytics Admin API](https://developers.google.com/analytics/devguides/config/admin/v1/rest)
14
13
 
15
14
  ## Notes
16
- To use these commands you must add 'Analytics API' and 'Analytics Admin API' to your project and update your service account authorization.
15
+ To use these commands you must add 'Analytics Admin API' to your project and update your service account authorization.
17
16
  ```
18
17
  gam update project
19
18
  gam user user@domain.com update serviceaccount
@@ -142,37 +141,6 @@ When using the `formatjson` option, double quotes are used extensively in the da
142
141
  The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
143
142
  `quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
144
143
 
145
- ## Display Analytic UA Properties
146
- ```
147
- gam <UserTypeEntity> show analyticuaproperties
148
- accountid [accounts/]<String>
149
- [maxresults <Integer>]
150
- [formatjson]
151
- ```
152
- The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
153
-
154
- By default, GAM asks the API for 50 properties per page of results,
155
- * `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
156
-
157
- By default, Gam displays the information as an indented list of keys and values.
158
- * `formatjson` - Display the fields in JSON format.
159
- ```
160
- gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
161
- accountid [accounts/]<String>
162
- [maxresults <Integer>]
163
- [formatjson [quotechar <Character>]]
164
- ```
165
- The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
166
-
167
- By default, GAM asks the API for 50 properties per page of results,
168
- * `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
169
-
170
- By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
171
- the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
172
- When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
173
- The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
174
- `quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
175
-
176
144
 
177
145
  ## Examples
178
146
  Get all analytic accounts
@@ -189,8 +157,3 @@ Get all analytic account properties (GA4)
189
157
  ```
190
158
  gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./GA4AnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticproperties filter "parent:~~name~~"
191
159
  ```
192
-
193
- Get all analytic account properties (UA)
194
- ```
195
- gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./UAAnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticuaproperties accountid "~~name~~"
196
- ```
@@ -4,7 +4,7 @@ k
4
4
  Print the current version of Gam with details
5
5
  ```
6
6
  gam version
7
- GAM 7.06.11 - https://github.com/GAM-team/GAM - pyinstaller
7
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pyinstaller
8
8
  GAM Team <google-apps-manager@googlegroups.com>
9
9
  Python 3.13.3 64-bit final
10
10
  MacOS Sequoia 15.4.1 x86_64
@@ -16,7 +16,7 @@ Time: 2023-06-02T21:10:00-07:00
16
16
  Print the current version of Gam with details and time offset information
17
17
  ```
18
18
  gam version timeoffset
19
- GAM 7.06.11 - https://github.com/GAM-team/GAM - pyinstaller
19
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pyinstaller
20
20
  GAM Team <google-apps-manager@googlegroups.com>
21
21
  Python 3.13.3 64-bit final
22
22
  MacOS Sequoia 15.4.1 x86_64
@@ -28,7 +28,7 @@ Your system time differs from www.googleapis.com by less than 1 second
28
28
  Print the current version of Gam with extended details and SSL information
29
29
  ```
30
30
  gam version extended
31
- GAM 7.06.11 - https://github.com/GAM-team/GAM - pyinstaller
31
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pyinstaller
32
32
  GAM Team <google-apps-manager@googlegroups.com>
33
33
  Python 3.13.3 64-bit final
34
34
  MacOS Sequoia 15.4.1 x86_64
@@ -65,7 +65,7 @@ MacOS High Sierra 10.13.6 x86_64
65
65
  Path: /Users/Admin/bin/gam7
66
66
  Version Check:
67
67
  Current: 5.35.08
68
- Latest: 7.06.11
68
+ Latest: 7.06.12
69
69
  echo $?
70
70
  1
71
71
  ```
@@ -73,7 +73,7 @@ echo $?
73
73
  Print the current version number without details
74
74
  ```
75
75
  gam version simple
76
- 7.06.11
76
+ 7.06.12
77
77
  ```
78
78
  In Linux/MacOS you can do:
79
79
  ```
@@ -83,7 +83,7 @@ echo $VER
83
83
  Print the current version of Gam and address of this Wiki
84
84
  ```
85
85
  gam help
86
- GAM 7.06.11 - https://github.com/GAM-team/GAM
86
+ GAM 7.06.12 - https://github.com/GAM-team/GAM
87
87
  GAM Team <google-apps-manager@googlegroups.com>
88
88
  Python 3.13.3 64-bit final
89
89
  MacOS Sequoia 15.4.1 x86_64
File without changes
File without changes
File without changes