gam7 7.7.10__tar.gz → 7.7.12__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.
- {gam7-7.7.10 → gam7-7.7.12}/PKG-INFO +1 -1
- {gam7-7.7.10 → gam7-7.7.12}/src/GamUpdate.txt +19 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/__init__.py +54 -59
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glcfg.py +5 -5
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glglobals.py +1 -4
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Authorization.md +1 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/GamUpdates.md +21 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Groups.md +5 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Version-and-Help.md +6 -6
- {gam7-7.7.10 → gam7-7.7.12}/wiki/gam.cfg.md +5 -3
- {gam7-7.7.10 → gam7-7.7.12}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/actions/decrypt.sh +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/actions/entitlements.plist +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/stale.yml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/workflows/build.yml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.github/workflows/pypi.yml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/.pre-commit-config.yaml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/LICENSE +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/README.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/pyproject.toml +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/.gitignore +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/GamCommands.txt +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/LICENSE +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/cacerts.pem +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/callgam.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/__main__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/auth.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/client.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/core.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/data.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/http.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/http_core.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/service.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/token_store.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/atom/url.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/cacerts.pem +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/service.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam/six.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam-install.sh +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam-setup.bat +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam.exe.manifest +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam.spec +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/gam.wxs +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/license.rtf +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/requirements-dev.txt +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/requirements.txt +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/setup.cfg +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/setup.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/tools/mkGamRef.py +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/tools/openssl.props +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/src/version_info.txt.in +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/00scratch.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Addresses.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Administrators.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Alert-Center.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Aliases.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Basic-Items.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Calendars-Access.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Calendars-Events.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Calendars.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chat-Bot.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Customer.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Domains-Verification.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Domains.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Drive-Items.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Groups-Membership.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Home.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Licenses.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/List-Items.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/List.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Organizational-Units.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Other-Resources.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Permission-Matches.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/README.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Rclone.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Reports.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Reseller.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Resources.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Schemas.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Scripts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Send-Email.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Shared-Drives.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Sites.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Tag-Replace.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Todrive.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Calendars.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Chat.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Contacts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Forms.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Meet.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Photo.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Tasks.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-Tokens.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users-YouTube.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Users.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/_Sidebar.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Home.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Printers.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.7.10 → gam7-7.7.12}/wiki/l-_Footer.md +0 -0
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
7.07.12
|
|
2
|
+
|
|
3
|
+
Fixed bug in `gam print|show oushareddrives` that caused a trap.
|
|
4
|
+
|
|
5
|
+
Improved getting Shared Drive names from IDs when accessing Shared Drives in external workspaces.
|
|
6
|
+
|
|
7
|
+
7.07.11
|
|
8
|
+
|
|
9
|
+
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
|
10
|
+
to handle the following error:
|
|
11
|
+
```
|
|
12
|
+
ERROR: 400: badRequest - Bad Request
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Updated `gam <UserTypeEntity> move drivefile` to handle the following error:
|
|
16
|
+
```
|
|
17
|
+
ERROR: 400: shareOutNotPermitted
|
|
18
|
+
```
|
|
19
|
+
|
|
1
20
|
7.07.10
|
|
2
21
|
|
|
3
22
|
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# GAM7
|
|
5
5
|
#
|
|
6
|
-
# Copyright
|
|
6
|
+
# Copyright 2025, All Rights Reserved.
|
|
7
7
|
#
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
9
|
# you may not use this file except in compliance with the License.
|
|
@@ -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.07.
|
|
28
|
+
__version__ = '7.07.12'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -39299,7 +39299,7 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
|
|
|
39299
39299
|
throwReasons=GAPI.CALENDAR_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.DELETED, GAPI.FORBIDDEN, GAPI.BACKEND_ERROR,
|
|
39300
39300
|
GAPI.INVALID, GAPI.REQUIRED, GAPI.TIME_RANGE_EMPTY, GAPI.EVENT_DURATION_EXCEEDS_LIMIT,
|
|
39301
39301
|
GAPI.REQUIRED_ACCESS_LEVEL, GAPI.CANNOT_CHANGE_ORGANIZER_OF_INSTANCE,
|
|
39302
|
-
GAPI.MALFORMED_WORKING_LOCATION_EVENT, GAPI.EVENT_TYPE_RESTRICTION],
|
|
39302
|
+
GAPI.MALFORMED_WORKING_LOCATION_EVENT, GAPI.EVENT_TYPE_RESTRICTION, GAPI.BAD_REQUEST],
|
|
39303
39303
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS+[GAPI.BACKEND_ERROR],
|
|
39304
39304
|
calendarId=calId, eventId=eventId, conferenceDataVersion=1, sendUpdates=parameters['sendUpdates'], supportsAttachments=True,
|
|
39305
39305
|
body=body, fields=pfields)
|
|
@@ -39316,7 +39316,7 @@ def _updateCalendarEvents(origUser, user, origCal, calIds, count, calendarEventE
|
|
|
39316
39316
|
entityActionFailedWarning([Ent.CALENDAR, calId, Ent.EVENT, eventId], str(e), j, jcount)
|
|
39317
39317
|
except (GAPI.forbidden, GAPI.backendError, GAPI.invalid, GAPI.required, GAPI.timeRangeEmpty, GAPI.eventDurationExceedsLimit,
|
|
39318
39318
|
GAPI.requiredAccessLevel, GAPI.cannotChangeOrganizerOfInstance, GAPI.malformedWorkingLocationEvent,
|
|
39319
|
-
GAPI.eventTypeRestriction) as e:
|
|
39319
|
+
GAPI.eventTypeRestriction, GAPI.badRequest) as e:
|
|
39320
39320
|
entityActionFailedWarning([Ent.CALENDAR, calId, Ent.EVENT, eventId], str(e), j, jcount)
|
|
39321
39321
|
except GAPI.notACalendarUser:
|
|
39322
39322
|
userCalServiceNotEnabledWarning(calId, i, count)
|
|
@@ -42021,22 +42021,21 @@ def printShowUserVaultHolds(entityList):
|
|
|
42021
42021
|
else:
|
|
42022
42022
|
printKeyValueList(['Total Holds', totalHolds])
|
|
42023
42023
|
|
|
42024
|
-
def _cleanVaultQuery(query, cd):
|
|
42024
|
+
def _cleanVaultQuery(query, cd, drive):
|
|
42025
42025
|
if 'query' in query:
|
|
42026
|
-
if cd is not None:
|
|
42027
|
-
|
|
42028
|
-
|
|
42029
|
-
|
|
42030
|
-
|
|
42031
|
-
|
|
42032
|
-
query['query']['sharedDriveInfo']['sharedDriveNames'].append(_getSharedDriveNameFromId(sharedDriveId))
|
|
42026
|
+
if cd is not None and 'orgUnitInfo' in query['query']:
|
|
42027
|
+
query['query']['orgUnitInfo']['orgUnitPath'] = convertOrgUnitIDtoPath(cd, query['query']['orgUnitInfo']['orgUnitId'])
|
|
42028
|
+
if drive is not None and 'sharedDriveInfo' in query['query']:
|
|
42029
|
+
query['query']['sharedDriveInfo']['sharedDriveNames'] = []
|
|
42030
|
+
for sharedDriveId in query['query']['sharedDriveInfo']['sharedDriveIds']:
|
|
42031
|
+
query['query']['sharedDriveInfo']['sharedDriveNames'].append(_getSharedDriveNameFromId(drive, sharedDriveId, False))
|
|
42033
42032
|
query['query'].pop('searchMethod', None)
|
|
42034
42033
|
query['query'].pop('teamDriveInfo', None)
|
|
42035
42034
|
|
|
42036
42035
|
VAULT_QUERY_TIME_OBJECTS = {'createTime', 'endTime', 'startTime', 'versionDate'}
|
|
42037
42036
|
|
|
42038
|
-
def _showVaultQuery(matterNameId, query, cd, FJQC, k=0, kcount=0):
|
|
42039
|
-
_cleanVaultQuery(query, cd)
|
|
42037
|
+
def _showVaultQuery(matterNameId, query, cd, drive, FJQC, k=0, kcount=0):
|
|
42038
|
+
_cleanVaultQuery(query, cd, drive)
|
|
42040
42039
|
if FJQC is not None and FJQC.formatJSON:
|
|
42041
42040
|
printLine(json.dumps(cleanJSON(query, timeObjects=VAULT_QUERY_TIME_OBJECTS), ensure_ascii=False, sort_keys=False))
|
|
42042
42041
|
return
|
|
@@ -42068,7 +42067,7 @@ def doInfoVaultQuery():
|
|
|
42068
42067
|
queryId, queryName, queryNameId = convertQueryNameToID(v, getString(Cmd.OB_QUERY_ITEM), matterId, matterNameId)
|
|
42069
42068
|
else:
|
|
42070
42069
|
queryName = getString(Cmd.OB_QUERY_ITEM)
|
|
42071
|
-
cd = None
|
|
42070
|
+
cd = drive = None
|
|
42072
42071
|
fieldsList = []
|
|
42073
42072
|
FJQC = FormatJSONQuoteChar()
|
|
42074
42073
|
while Cmd.ArgumentsRemaining():
|
|
@@ -42078,8 +42077,8 @@ def doInfoVaultQuery():
|
|
|
42078
42077
|
queryId, queryName, queryNameId = convertQueryNameToID(v, queryName, matterId, matterNameId)
|
|
42079
42078
|
elif myarg == 'shownames':
|
|
42080
42079
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
42081
|
-
_,
|
|
42082
|
-
if
|
|
42080
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
42081
|
+
if drive is None:
|
|
42083
42082
|
return
|
|
42084
42083
|
elif getFieldsList(myarg, VAULT_QUERY_FIELDS_CHOICE_MAP, fieldsList, initialField=['savedQueryId', 'displayName']):
|
|
42085
42084
|
pass
|
|
@@ -42090,7 +42089,7 @@ def doInfoVaultQuery():
|
|
|
42090
42089
|
query = callGAPI(v.matters().savedQueries(), 'get',
|
|
42091
42090
|
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42092
42091
|
matterId=matterId, savedQueryId=queryId, fields=fields)
|
|
42093
|
-
_showVaultQuery(matterNameId, query, cd, FJQC)
|
|
42092
|
+
_showVaultQuery(matterNameId, query, cd, drive, FJQC)
|
|
42094
42093
|
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42095
42094
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, queryNameId], str(e))
|
|
42096
42095
|
|
|
@@ -42107,7 +42106,7 @@ def doPrintShowVaultQueries():
|
|
|
42107
42106
|
csvPF = CSVPrintFile(PRINT_VAULT_QUERIES_TITLES, 'sortall') if Act.csvFormat() else None
|
|
42108
42107
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
42109
42108
|
matters = []
|
|
42110
|
-
cd = None
|
|
42109
|
+
cd = drive = None
|
|
42111
42110
|
fieldsList = []
|
|
42112
42111
|
while Cmd.ArgumentsRemaining():
|
|
42113
42112
|
myarg = getArgument()
|
|
@@ -42117,8 +42116,8 @@ def doPrintShowVaultQueries():
|
|
|
42117
42116
|
matters = shlexSplitList(getString(Cmd.OB_MATTER_ITEM_LIST))
|
|
42118
42117
|
elif myarg == 'shownames':
|
|
42119
42118
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
42120
|
-
_,
|
|
42121
|
-
if
|
|
42119
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
42120
|
+
if drive is None:
|
|
42122
42121
|
return
|
|
42123
42122
|
elif getFieldsList(myarg, VAULT_QUERY_FIELDS_CHOICE_MAP, fieldsList, initialField=['savedQueryId', 'displayName']):
|
|
42124
42123
|
pass
|
|
@@ -42180,11 +42179,11 @@ def doPrintShowVaultQueries():
|
|
|
42180
42179
|
k = 0
|
|
42181
42180
|
for query in queries:
|
|
42182
42181
|
k += 1
|
|
42183
|
-
_showVaultQuery(matterNameId, query, cd, FJQC, k, kcount)
|
|
42182
|
+
_showVaultQuery(matterNameId, query, cd, drive, FJQC, k, kcount)
|
|
42184
42183
|
Ind.Decrement()
|
|
42185
42184
|
else:
|
|
42186
42185
|
for query in queries:
|
|
42187
|
-
_cleanVaultQuery(query, cd)
|
|
42186
|
+
_cleanVaultQuery(query, cd, drive)
|
|
42188
42187
|
row = flattenJSON(query, flattened={'matterId': matterId, 'matterName': matterName}, timeObjects=VAULT_QUERY_TIME_OBJECTS)
|
|
42189
42188
|
if not FJQC.formatJSON:
|
|
42190
42189
|
csvPF.WriteRowTitles(row)
|
|
@@ -52447,20 +52446,15 @@ def _convertSharedDriveNameToId(drive, user, i, count, fileIdEntity, useDomainAd
|
|
|
52447
52446
|
','.join([td['id'] for td in tdlist])), i, count)
|
|
52448
52447
|
return False
|
|
52449
52448
|
|
|
52450
|
-
def _getSharedDriveNameFromId(sharedDriveId):
|
|
52449
|
+
def _getSharedDriveNameFromId(drive, sharedDriveId, useDomainAdminAccess=False):
|
|
52451
52450
|
sharedDriveName = GM.Globals[GM.MAP_SHAREDDRIVE_ID_TO_NAME].get(sharedDriveId)
|
|
52452
52451
|
if not sharedDriveName:
|
|
52453
|
-
|
|
52454
|
-
|
|
52455
|
-
|
|
52456
|
-
|
|
52457
|
-
|
|
52458
|
-
|
|
52459
|
-
useDomainAdminAccess=True,
|
|
52460
|
-
driveId=sharedDriveId, fields='name')['name']
|
|
52461
|
-
except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy):
|
|
52462
|
-
sharedDriveName = TEAM_DRIVE
|
|
52463
|
-
else:
|
|
52452
|
+
try:
|
|
52453
|
+
sharedDriveName = callGAPI(drive.drives(), 'get',
|
|
52454
|
+
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND],
|
|
52455
|
+
useDomainAdminAccess=useDomainAdminAccess,
|
|
52456
|
+
driveId=sharedDriveId, fields='name')['name']
|
|
52457
|
+
except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy):
|
|
52464
52458
|
sharedDriveName = TEAM_DRIVE
|
|
52465
52459
|
GM.Globals[GM.MAP_SHAREDDRIVE_ID_TO_NAME][sharedDriveId] = sharedDriveName
|
|
52466
52460
|
return sharedDriveName
|
|
@@ -52473,7 +52467,7 @@ def _getDriveFileNameFromId(drive, fileId, combineTitleId=True, useDomainAdminAc
|
|
|
52473
52467
|
if result:
|
|
52474
52468
|
fileName = result['name']
|
|
52475
52469
|
if (result['mimeType'] == MIMETYPE_GA_FOLDER) and result.get('driveId') and (result['name'] == TEAM_DRIVE):
|
|
52476
|
-
fileName = _getSharedDriveNameFromId(result['driveId'])
|
|
52470
|
+
fileName = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
52477
52471
|
if combineTitleId:
|
|
52478
52472
|
fileName += '('+fileId+')'
|
|
52479
52473
|
return (fileName, _getEntityMimeType(result), result['mimeType'])
|
|
@@ -53555,7 +53549,7 @@ def getFilePaths(drive, fileTree, initialResult, filePathInfo, addParentsToTree=
|
|
|
53555
53549
|
fullpath=False, showDepth=False, folderPathOnly=False):
|
|
53556
53550
|
def _getParentName(result):
|
|
53557
53551
|
if (result['mimeType'] == MIMETYPE_GA_FOLDER) and result.get('driveId') and (result['name'] == TEAM_DRIVE):
|
|
53558
|
-
parentName = _getSharedDriveNameFromId(result['driveId'])
|
|
53552
|
+
parentName = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
53559
53553
|
if parentName != TEAM_DRIVE:
|
|
53560
53554
|
return f'{SHARED_DRIVES}{filePathInfo["delimiter"]}{parentName}'
|
|
53561
53555
|
return result['name']
|
|
@@ -54254,9 +54248,9 @@ def showFileInfo(users):
|
|
|
54254
54248
|
driveId = result.get('driveId')
|
|
54255
54249
|
if driveId:
|
|
54256
54250
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
54257
|
-
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
54251
|
+
result['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
54258
54252
|
if DFF.showSharedDriveNames:
|
|
54259
|
-
result['driveName'] = _getSharedDriveNameFromId(driveId)
|
|
54253
|
+
result['driveName'] = _getSharedDriveNameFromId(drive, driveId)
|
|
54260
54254
|
if showNoParents:
|
|
54261
54255
|
result.setdefault('parents', [])
|
|
54262
54256
|
if getPermissionsForSharedDrives and driveId and 'permissions' not in result:
|
|
@@ -54944,7 +54938,7 @@ def extendFileTreeParents(drive, fileTree, fields):
|
|
|
54944
54938
|
result['parents'] = [ORPHANS] if result.get('ownedByMe', False) and 'sharedWithMeTime' not in result else [SHARED_WITHME]
|
|
54945
54939
|
else:
|
|
54946
54940
|
if result['name'] == TEAM_DRIVE:
|
|
54947
|
-
result['name'] = _getSharedDriveNameFromId(result['driveId'])
|
|
54941
|
+
result['name'] = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
54948
54942
|
result['parents'] = [SHARED_DRIVES] if 'sharedWithMeTime' not in result else [SHARED_WITHME]
|
|
54949
54943
|
fileTree[fileId]['info'] = result
|
|
54950
54944
|
fileTree[fileId]['info']['noDisplay'] = True
|
|
@@ -55689,7 +55683,7 @@ def printFileList(users):
|
|
|
55689
55683
|
if not pmselect and 'permissions' in fileInfo:
|
|
55690
55684
|
fileInfo['permissions'] = DLP.GetFileMatchingPermission(fileInfo)
|
|
55691
55685
|
if DFF.showSharedDriveNames and driveId:
|
|
55692
|
-
fileInfo['driveName'] = _getSharedDriveNameFromId(driveId)
|
|
55686
|
+
fileInfo['driveName'] = _getSharedDriveNameFromId(drive, driveId)
|
|
55693
55687
|
if filepath:
|
|
55694
55688
|
if not FJQC.formatJSON or not addPathsToJSON:
|
|
55695
55689
|
addFilePathsToRow(drive, fileTree, fileInfo, filePathInfo, csvPF, row,
|
|
@@ -56559,7 +56553,7 @@ def printShowFilePaths(users):
|
|
|
56559
56553
|
driveId = result.get('driveId')
|
|
56560
56554
|
if driveId:
|
|
56561
56555
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
56562
|
-
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
56556
|
+
result['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
56563
56557
|
if returnPathOnly:
|
|
56564
56558
|
if fullpath:
|
|
56565
56559
|
writeStdout(f'{SHARED_DRIVES}/{result["name"]}\n')
|
|
@@ -56649,7 +56643,7 @@ def printFileParentTree(users):
|
|
|
56649
56643
|
driveId = result.get('driveId')
|
|
56650
56644
|
if driveId:
|
|
56651
56645
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
56652
|
-
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
56646
|
+
result['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
56653
56647
|
result['isRoot'] = True
|
|
56654
56648
|
result['parents'] = ['']
|
|
56655
56649
|
fileList.append(result)
|
|
@@ -56886,7 +56880,7 @@ def printShowFileCounts(users):
|
|
|
56886
56880
|
if not drive:
|
|
56887
56881
|
continue
|
|
56888
56882
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
56889
|
-
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
56883
|
+
sharedDriveName = _getSharedDriveNameFromId(drive, sharedDriveId) if sharedDriveId else ''
|
|
56890
56884
|
mimeTypeInfo = {}
|
|
56891
56885
|
userLastModification = _initLastModification()
|
|
56892
56886
|
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
@@ -57031,7 +57025,7 @@ def printShowDrivelastModifications(users):
|
|
|
57031
57025
|
if not drive:
|
|
57032
57026
|
continue
|
|
57033
57027
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
57034
|
-
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
57028
|
+
sharedDriveName = _getSharedDriveNameFromId(drive, sharedDriveId) if sharedDriveId else ''
|
|
57035
57029
|
userLastModification = _initLastModification()
|
|
57036
57030
|
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
57037
57031
|
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count)
|
|
@@ -57214,7 +57208,7 @@ def printDiskUsage(users):
|
|
|
57214
57208
|
includeOwner = False
|
|
57215
57209
|
csvPF.RemoveTitles(['Owner', 'ownedByMe'])
|
|
57216
57210
|
if topFolder['name'] == TEAM_DRIVE and not topFolder.get('parents'):
|
|
57217
|
-
topFolder['name'] = _getSharedDriveNameFromId(driveId)
|
|
57211
|
+
topFolder['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
57218
57212
|
topFolder['path'] = f'{SHARED_DRIVES}{pathDelimiter}{topFolder["name"]}'
|
|
57219
57213
|
else:
|
|
57220
57214
|
topFolder['path'] = topFolder['name']
|
|
@@ -57654,7 +57648,7 @@ def printShowFileTree(users):
|
|
|
57654
57648
|
fileId=fileId, fields=fields, supportsAllDrives=True)
|
|
57655
57649
|
if (fileEntryInfo['mimeType'] == MIMETYPE_GA_FOLDER and fileEntryInfo.get('driveId') and
|
|
57656
57650
|
fileEntryInfo['name'] == TEAM_DRIVE and not fileEntryInfo.get('parents', [])):
|
|
57657
|
-
fileEntryInfo['name'] = f"{SHARED_DRIVES}/{_getSharedDriveNameFromId(fileId)}"
|
|
57651
|
+
fileEntryInfo['name'] = f"{SHARED_DRIVES}/{_getSharedDriveNameFromId(drive, fileId)}"
|
|
57658
57652
|
if stripCRsFromName:
|
|
57659
57653
|
fileEntryInfo['name'] = _stripControlCharsFromName(fileEntryInfo['name'])
|
|
57660
57654
|
if buildTree:
|
|
@@ -59295,7 +59289,7 @@ def _getCopyMoveParentInfo(drive, user, i, count, j, jcount, newParentId, statis
|
|
|
59295
59289
|
result['destParentType'] = DEST_PARENT_MYDRIVE_FOLDER
|
|
59296
59290
|
else:
|
|
59297
59291
|
if result['name'] == TEAM_DRIVE and not result.get('parents', []):
|
|
59298
|
-
result['name'] = _getSharedDriveNameFromId(result['driveId'])
|
|
59292
|
+
result['name'] = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
59299
59293
|
result['destParentType'] = DEST_PARENT_SHAREDDRIVE_ROOT
|
|
59300
59294
|
else:
|
|
59301
59295
|
result['destParentType'] = DEST_PARENT_SHAREDDRIVE_FOLDER
|
|
@@ -59844,7 +59838,7 @@ def copyDriveFile(users):
|
|
|
59844
59838
|
# Source at root of Shared Drive?
|
|
59845
59839
|
sourceMimeType = source['mimeType']
|
|
59846
59840
|
if sourceMimeType == MIMETYPE_GA_FOLDER and source.get('driveId') and source['name'] == TEAM_DRIVE and not source.get('parents', []):
|
|
59847
|
-
source['name'] = _getSharedDriveNameFromId(source['driveId'])
|
|
59841
|
+
source['name'] = _getSharedDriveNameFromId(drive, source['driveId'])
|
|
59848
59842
|
sourceName = source['name']
|
|
59849
59843
|
sourceNameId = f"{sourceName}({source['id']})"
|
|
59850
59844
|
copyMoveOptions['sourceDriveId'] = source.get('driveId')
|
|
@@ -60450,6 +60444,7 @@ def moveDriveFile(users):
|
|
|
60450
60444
|
GAPI.FILE_OWNER_NOT_MEMBER_OF_TEAMDRIVE,
|
|
60451
60445
|
GAPI.FILE_OWNER_NOT_MEMBER_OF_WRITER_DOMAIN,
|
|
60452
60446
|
GAPI.FILE_WRITER_TEAMDRIVE_MOVE_IN_DISABLED,
|
|
60447
|
+
GAPI.SHARE_OUT_NOT_PERMITTED,
|
|
60453
60448
|
GAPI.TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION,
|
|
60454
60449
|
GAPI.CANNOT_MOVE_TRASHED_ITEM_INTO_TEAMDRIVE,
|
|
60455
60450
|
GAPI.CANNOT_MOVE_TRASHED_ITEM_OUT_OF_TEAMDRIVE,
|
|
@@ -60464,7 +60459,7 @@ def moveDriveFile(users):
|
|
|
60464
60459
|
_incrStatistic(statistics, STAT_FILE_COPIED_MOVED)
|
|
60465
60460
|
return
|
|
60466
60461
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.unknownError, GAPI.badRequest,
|
|
60467
|
-
GAPI.targetUserRoleLimitedByLicenseRestriction,
|
|
60462
|
+
GAPI.shareOutNotPermitted, GAPI.targetUserRoleLimitedByLicenseRestriction,
|
|
60468
60463
|
GAPI.cannotMoveTrashedItemIntoTeamDrive, GAPI.cannotMoveTrashedItemOutOfTeamDrive,
|
|
60469
60464
|
GAPI.teamDrivesShortcutFileNotSupported, GAPI.storageQuotaExceeded) as e:
|
|
60470
60465
|
entityActionFailedWarning(kvList, str(e), k, kcount)
|
|
@@ -60614,7 +60609,7 @@ def moveDriveFile(users):
|
|
|
60614
60609
|
if sourceMimeType == MIMETYPE_GA_FOLDER and source['name'] in [MY_DRIVE, TEAM_DRIVE] and not source.get('parents', []):
|
|
60615
60610
|
copyMoveOptions['sourceIsMyDriveSharedDrive'] = True
|
|
60616
60611
|
if source.get('driveId'):
|
|
60617
|
-
source['name'] = _getSharedDriveNameFromId(source['driveId'])
|
|
60612
|
+
source['name'] = _getSharedDriveNameFromId(drive, source['driveId'])
|
|
60618
60613
|
sourceName = source['name']
|
|
60619
60614
|
sourceNameId = f"{sourceName}({source['id']})"
|
|
60620
60615
|
copyMoveOptions['sourceDriveId'] = source.get('driveId')
|
|
@@ -63058,7 +63053,7 @@ def printEmptyDriveFolders(users):
|
|
|
63058
63053
|
fileIdEntity['shareddrive'] = {'driveId': sharedDriveId, 'corpora': 'drive', 'includeItemsFromAllDrives': True, 'supportsAllDrives': True}
|
|
63059
63054
|
csvPF.AddTitles(['driveId'])
|
|
63060
63055
|
csvPF.MoveTitlesToEnd(['name'])
|
|
63061
|
-
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(sharedDriveId)}']
|
|
63056
|
+
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(drive, sharedDriveId)}']
|
|
63062
63057
|
else:
|
|
63063
63058
|
pathList = [fileEntryInfo['name']]
|
|
63064
63059
|
mimeType = fileEntryInfo['mimeType']
|
|
@@ -63148,7 +63143,7 @@ def deleteEmptyDriveFolders(users):
|
|
|
63148
63143
|
if 'driveId' in fileEntryInfo:
|
|
63149
63144
|
sharedDriveId = fileEntryInfo['driveId']
|
|
63150
63145
|
fileIdEntity['shareddrive'] = {'driveId': sharedDriveId, 'corpora': 'drive', 'includeItemsFromAllDrives': True, 'supportsAllDrives': True}
|
|
63151
|
-
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(sharedDriveId)}']
|
|
63146
|
+
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(drive, sharedDriveId)}']
|
|
63152
63147
|
else:
|
|
63153
63148
|
pathList = [fileEntryInfo['name']]
|
|
63154
63149
|
mimeType = fileEntryInfo['mimeType']
|
|
@@ -65585,7 +65580,7 @@ def doPrintShowSharedDrives():
|
|
|
65585
65580
|
def doPrintShowOrgunitSharedDrives():
|
|
65586
65581
|
def _getOrgUnitSharedDriveInfo(shareddrive):
|
|
65587
65582
|
shareddrive['driveId'] = shareddrive['name'].rsplit(';')[1]
|
|
65588
|
-
shareddrive['driveName'] = _getSharedDriveNameFromId(shareddrive['driveId'])
|
|
65583
|
+
shareddrive['driveName'] = _getSharedDriveNameFromId(drive, shareddrive['driveId'], True)
|
|
65589
65584
|
shareddrive['orgUnitPath'] = orgUnitPath
|
|
65590
65585
|
|
|
65591
65586
|
def _showOrgUnitSharedDrive(shareddrive, j, jcount, FJQC):
|
|
@@ -65599,13 +65594,13 @@ def doPrintShowOrgunitSharedDrives():
|
|
|
65599
65594
|
printEntity([Ent.MEMBER_URI, shareddrive['memberUri']])
|
|
65600
65595
|
printEntity([Ent.SHAREDDRIVE_ID, shareddrive['driveId']])
|
|
65601
65596
|
printEntity([Ent.SHAREDDRIVE_NAME, shareddrive['driveName']])
|
|
65602
|
-
printEntity([Ent.ORGANIZATIONAL_UNIT, shareddrive['
|
|
65597
|
+
printEntity([Ent.ORGANIZATIONAL_UNIT, shareddrive['orgUnitPath']])
|
|
65603
65598
|
Ind.Decrement()
|
|
65604
65599
|
|
|
65605
65600
|
ci = buildGAPIObject(API.CLOUDIDENTITY_ORGUNITS_BETA)
|
|
65606
65601
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
65607
|
-
_,
|
|
65608
|
-
if
|
|
65602
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
65603
|
+
if drive is None:
|
|
65609
65604
|
return
|
|
65610
65605
|
csvPF = CSVPrintFile(['name', 'type', 'member', 'memberUri', 'driveId', 'driveName', 'orgUnitPath']) if Act.csvFormat() else None
|
|
65611
65606
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
@@ -65684,13 +65679,13 @@ def copySyncSharedDriveACLs(users, useDomainAdminAccess=False):
|
|
|
65684
65679
|
if not drive:
|
|
65685
65680
|
continue
|
|
65686
65681
|
if not srcFileIdEntity.get('shareddrivename'):
|
|
65687
|
-
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(srcFileIdEntity['shareddrive']['driveId'])
|
|
65682
|
+
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, srcFileIdEntity['shareddrive']['driveId'])
|
|
65688
65683
|
if tgtFileIdEntity.get('shareddrivename'):
|
|
65689
65684
|
if not _convertSharedDriveNameToId(drive, user, i, count, tgtFileIdEntity, useDomainAdminAccess):
|
|
65690
65685
|
continue
|
|
65691
65686
|
tgtFileIdEntity['shareddrive']['corpora'] = 'drive'
|
|
65692
65687
|
else:
|
|
65693
|
-
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(tgtFileIdEntity['shareddrive']['driveId'])
|
|
65688
|
+
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, tgtFileIdEntity['shareddrive']['driveId'])
|
|
65694
65689
|
statistics = _initStatistics()
|
|
65695
65690
|
copyMoveOptions['sourceDriveId'] = srcFileIdEntity['shareddrive']['driveId']
|
|
65696
65691
|
copyMoveOptions['destDriveId'] = tgtFileIdEntity['shareddrive']['driveId']
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
# Copyright (C)
|
|
3
|
+
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
|
4
4
|
#
|
|
5
5
|
# All Rights Reserved.
|
|
6
6
|
#
|
|
@@ -260,12 +260,12 @@ SMTP_HOST = 'smtp_host'
|
|
|
260
260
|
SMTP_USERNAME = 'smtp_username'
|
|
261
261
|
# SMTP password
|
|
262
262
|
SMTP_PASSWORD = 'smtp_password'
|
|
263
|
+
# Time Zone
|
|
264
|
+
TIMEZONE = 'timezone'
|
|
263
265
|
## Minimum TLS Version required for HTTPS connections
|
|
264
266
|
TLS_MIN_VERSION = 'tls_min_version'
|
|
265
267
|
## Maximum TLS Version used for HTTPS connections
|
|
266
268
|
TLS_MAX_VERSION = 'tls_max_version'
|
|
267
|
-
# Time Zone
|
|
268
|
-
TIMEZONE = 'timezone'
|
|
269
269
|
# Clear basic filter when updating an existing sheet
|
|
270
270
|
TODRIVE_CLEARFILTER = 'todrive_clearfilter'
|
|
271
271
|
# Use client access for todrive
|
|
@@ -431,9 +431,9 @@ Defaults = {
|
|
|
431
431
|
SMTP_HOST: '',
|
|
432
432
|
SMTP_USERNAME: '',
|
|
433
433
|
SMTP_PASSWORD: '',
|
|
434
|
+
TIMEZONE: 'utc',
|
|
434
435
|
TLS_MIN_VERSION: 'TLSv1_3',
|
|
435
436
|
TLS_MAX_VERSION: '',
|
|
436
|
-
TIMEZONE: 'utc',
|
|
437
437
|
TODRIVE_CLEARFILTER: FALSE,
|
|
438
438
|
TODRIVE_CLIENTACCESS: FALSE,
|
|
439
439
|
TODRIVE_CONVERSION: TRUE,
|
|
@@ -599,9 +599,9 @@ VAR_INFO = {
|
|
|
599
599
|
SMTP_HOST: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
600
600
|
SMTP_USERNAME: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
601
601
|
SMTP_PASSWORD: {VAR_TYPE: TYPE_PASSWORD, VAR_LIMITS: (0, None)},
|
|
602
|
+
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
|
602
603
|
TLS_MIN_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MIN_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
|
603
604
|
TLS_MAX_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MAX_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
|
604
|
-
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
|
605
605
|
TODRIVE_CLEARFILTER: {VAR_TYPE: TYPE_BOOLEAN},
|
|
606
606
|
TODRIVE_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
607
607
|
TODRIVE_CONVERSION: {VAR_TYPE: TYPE_BOOLEAN},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
# Copyright (C)
|
|
3
|
+
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
|
4
4
|
#
|
|
5
5
|
# All Rights Reserved.
|
|
6
6
|
#
|
|
@@ -25,8 +25,6 @@
|
|
|
25
25
|
# Some commands want to set a non-zero return code but not bail
|
|
26
26
|
# GAM admin user from oauth2.txt or oauth2service.json
|
|
27
27
|
ADMIN = 'admn'
|
|
28
|
-
# Drive service for admin; used to look up Shared Drive Names
|
|
29
|
-
ADMIN_DRIVE = 'addr'
|
|
30
28
|
# Number/length of API call retries
|
|
31
29
|
API_CALLS_RETRY_DATA = 'rtry'
|
|
32
30
|
# GAM cache directory. If no_cache is True, this variable will be set to None
|
|
@@ -220,7 +218,6 @@ REDIRECT_QUEUE_EOF = 'eof'
|
|
|
220
218
|
#
|
|
221
219
|
Globals = {
|
|
222
220
|
ADMIN: None,
|
|
223
|
-
ADMIN_DRIVE: None,
|
|
224
221
|
API_CALLS_RETRY_DATA: {},
|
|
225
222
|
CACHE_DIR: None,
|
|
226
223
|
CACHE_DISCOVERY_ONLY: True,
|
|
@@ -64,6 +64,7 @@ Verify the following steps:
|
|
|
64
64
|
* If groups are used to authenticate access, make sure the super admin is in one of the groups
|
|
65
65
|
* Collapse "Service status"
|
|
66
66
|
* Expand "Cloud Resource Manager API settings"
|
|
67
|
+
* Select the OU in the left that contains the super admin you'll be using
|
|
67
68
|
* Make sure that "Allow users to create projects" is checked
|
|
68
69
|
|
|
69
70
|
Verify that all scopes are available:
|
|
@@ -10,6 +10,27 @@ 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.07.11
|
|
14
|
+
|
|
15
|
+
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
|
16
|
+
to handle the following error:
|
|
17
|
+
```
|
|
18
|
+
ERROR: 400: badRequest - Bad Request
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Updated `gam <UserTypeEntity> move drivefile` to handle the following error:
|
|
22
|
+
```
|
|
23
|
+
ERROR: 400: shareOutNotPermitted
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 7.07.10
|
|
27
|
+
|
|
28
|
+
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
|
29
|
+
to handle the following error:
|
|
30
|
+
```
|
|
31
|
+
ERROR: 400: eventTypeRestriction - Attendees cannot be added to 'fromGmail' event with this visibility setting.
|
|
32
|
+
```
|
|
33
|
+
|
|
13
34
|
### 7.07.09
|
|
14
35
|
|
|
15
36
|
Updated `gam calendars <CalendarEntity> update events` and `gam <UserTypeEntity> update events <UserCalendarEntity>`
|
|
@@ -335,6 +335,11 @@ gam update group group@domain.com whoCanViewMembership ALL_MEMBERS_CAN_VIEW whoC
|
|
|
335
335
|
Group: group@domain.com, Updated
|
|
336
336
|
```
|
|
337
337
|
|
|
338
|
+
If you are entering a valid combination but an error message is returned, do the following and then re-issue your command.
|
|
339
|
+
```
|
|
340
|
+
gam update group group@domain.com whoCanViewMembership ALL_IN_DOMAIN_CAN_VIEW whoCanDiscoverGroup ALL_IN_DOMAIN_CAN_DISCOVER
|
|
341
|
+
```
|
|
342
|
+
|
|
338
343
|
## Manage groups
|
|
339
344
|
|
|
340
345
|
These commands allow you to create, update and delete groups.
|
|
@@ -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.07.
|
|
254
|
+
GAM 7.07.11 - 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.5 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.07.
|
|
992
|
+
GAM 7.07.11 - 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
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Print the current version of Gam with details
|
|
4
4
|
```
|
|
5
5
|
gam version
|
|
6
|
-
GAM 7.07.
|
|
6
|
+
GAM 7.07.11 - https://github.com/GAM-team/GAM - pyinstaller
|
|
7
7
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
8
8
|
Python 3.13.3 64-bit final
|
|
9
9
|
MacOS Sequoia 15.5 x86_64
|
|
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
|
|
15
15
|
Print the current version of Gam with details and time offset information
|
|
16
16
|
```
|
|
17
17
|
gam version timeoffset
|
|
18
|
-
GAM 7.07.
|
|
18
|
+
GAM 7.07.11 - https://github.com/GAM-team/GAM - pyinstaller
|
|
19
19
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
20
20
|
Python 3.13.3 64-bit final
|
|
21
21
|
MacOS Sequoia 15.5 x86_64
|
|
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|
|
27
27
|
Print the current version of Gam with extended details and SSL information
|
|
28
28
|
```
|
|
29
29
|
gam version extended
|
|
30
|
-
GAM 7.07.
|
|
30
|
+
GAM 7.07.11 - https://github.com/GAM-team/GAM - pyinstaller
|
|
31
31
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
32
32
|
Python 3.13.3 64-bit final
|
|
33
33
|
MacOS Sequoia 15.5 x86_64
|
|
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|
|
64
64
|
Path: /Users/Admin/bin/gam7
|
|
65
65
|
Version Check:
|
|
66
66
|
Current: 5.35.08
|
|
67
|
-
Latest: 7.07.
|
|
67
|
+
Latest: 7.07.11
|
|
68
68
|
echo $?
|
|
69
69
|
1
|
|
70
70
|
```
|
|
@@ -72,7 +72,7 @@ echo $?
|
|
|
72
72
|
Print the current version number without details
|
|
73
73
|
```
|
|
74
74
|
gam version simple
|
|
75
|
-
7.07.
|
|
75
|
+
7.07.11
|
|
76
76
|
```
|
|
77
77
|
In Linux/MacOS you can do:
|
|
78
78
|
```
|
|
@@ -82,7 +82,7 @@ echo $VER
|
|
|
82
82
|
Print the current version of Gam and address of this Wiki
|
|
83
83
|
```
|
|
84
84
|
gam help
|
|
85
|
-
GAM 7.07.
|
|
85
|
+
GAM 7.07.11 - https://github.com/GAM-team/GAM
|
|
86
86
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
87
87
|
Python 3.13.3 64-bit final
|
|
88
88
|
MacOS Sequoia 15.5 x86_64
|
|
@@ -287,7 +287,7 @@ csv_output_users_audit
|
|
|
287
287
|
Default: False
|
|
288
288
|
customer_id
|
|
289
289
|
Google Customer ID
|
|
290
|
-
Default:
|
|
290
|
+
Default: my_customer
|
|
291
291
|
Environment variable: CUSTOMER_ID
|
|
292
292
|
debug_level
|
|
293
293
|
If debug_level > 0, turn on API debugging output.
|
|
@@ -321,7 +321,7 @@ drive_v3_native_names
|
|
|
321
321
|
email_batch_size
|
|
322
322
|
When archiving, printing, showing, trashing, untrashing, marking as spam Gmail messages.
|
|
323
323
|
how many should be processed in each batch
|
|
324
|
-
Default:
|
|
324
|
+
Default: 50
|
|
325
325
|
Range: 1 - 100
|
|
326
326
|
enable_dasa
|
|
327
327
|
Enable/disable Delegated Admin Service Account API Access
|
|
@@ -384,7 +384,7 @@ message_batch_size
|
|
|
384
384
|
message_max_results
|
|
385
385
|
When retrieving lists of Gmail messages from API,
|
|
386
386
|
how many should be retrieved in each API call
|
|
387
|
-
Default:
|
|
387
|
+
Default: 500
|
|
388
388
|
Range: 1 - 10000
|
|
389
389
|
mobile_max_results
|
|
390
390
|
When retrieving lists of Mobile devices from API,
|
|
@@ -416,8 +416,10 @@ no_short_urls
|
|
|
416
416
|
the shortened URL redirects to the long URL.
|
|
417
417
|
When True, the long scopes URLs in `gam oauth create` and
|
|
418
418
|
`gam <UserTypeEntity> check|update serviceaccount` will be used as is.
|
|
419
|
+
Default: True
|
|
419
420
|
no_verify_ssl
|
|
420
421
|
Disable SSL certificate validation
|
|
422
|
+
Default: False
|
|
421
423
|
num_tbatch_threads
|
|
422
424
|
Number of threads for gam tbatch
|
|
423
425
|
Default: 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|