gam7 7.6.1__tar.gz → 7.6.3__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.6.1 → gam7-7.6.3}/PKG-INFO +1 -1
- {gam7-7.6.1 → gam7-7.6.3}/src/GamCommands.txt +12 -2
- {gam7-7.6.1 → gam7-7.6.3}/src/GamUpdate.txt +24 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/__init__.py +178 -26
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glclargs.py +2 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Policies.md +53 -14
- {gam7-7.6.1 → gam7-7.6.3}/wiki/GamUpdates.md +29 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Home.md +1 -3
- {gam7-7.6.1 → gam7-7.6.3}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +4 -4
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Files-Display.md +27 -3
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users.md +6 -6
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Version-and-Help.md +10 -10
- gam7-7.6.3/wiki/l-_Footer.md +3 -0
- gam7-7.6.1/wiki/_Footer.md +0 -1
- gam7-7.6.1/wiki/l-_Footer.md +0 -1
- {gam7-7.6.1 → gam7-7.6.3}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/actions/creds.tar.xz.gpg +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/actions/decrypt.sh +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/actions/entitlements.plist +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/stale.yml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/workflows/build.yml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.github/workflows/pypi.yml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/.pre-commit-config.yaml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/LICENSE +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/README.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/pyproject.toml +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/.gitignore +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/LICENSE +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/cacerts.pem +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/callgam.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/__main__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/auth.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/client.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/core.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/data.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/http.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/http_core.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/service.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/token_store.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/atom/url.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/cacerts.pem +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/service.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam/six.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam-install.sh +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam-setup.bat +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam.exe.manifest +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam.spec +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/gam.wxs +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/license.rtf +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/requirements-dev.txt +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/requirements.txt +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/setup.cfg +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/setup.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/tools/mkGamRef.py +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/tools/openssl.props +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/src/version_info.txt.in +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/00scratch.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Addresses.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Administrators.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Alert-Center.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Aliases.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Authorization.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Basic-Items.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Calendars-Access.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Calendars-Events.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Calendars.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chat-Bot.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Customer.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Domain-SharedContacts-GAL.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Domains-Verification.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Domains.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Drive-Items.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Groups-Membership.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Groups.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Licenses.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/List-Items.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/List.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Organizational-Units.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Other-Resources.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Permission-Matches.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/README.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Rclone.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Reports.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Reseller.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Resources.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Schemas.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Scripts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Send-Email.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Shared-Drives.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Sites.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Tag-Replace.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Todrive.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Calendars.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Chat.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Contacts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Forms.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Meet.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Photo.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Tasks.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-Tokens.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Users-YouTube.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/_Sidebar.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/gam.cfg.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Home.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Printers.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.6.1 → gam7-7.6.3}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
|
@@ -7163,7 +7163,8 @@ gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
|
|
7163
7163
|
[filenamematchpattern <REMatchPattern>]
|
|
7164
7164
|
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
|
7165
7165
|
[excludetrashed]
|
|
7166
|
-
[showsize] [showmimetypesize]
|
|
7166
|
+
[showsize] [showmimetypesize]
|
|
7167
|
+
[showlastmodification] [pathdelimiter <Character>]
|
|
7167
7168
|
(addcsvdata <FieldName> <String>)*
|
|
7168
7169
|
[summary none|only|plus] [summaryuser <String>]
|
|
7169
7170
|
gam <UserTypeEntity> show filecounts
|
|
@@ -7178,7 +7179,8 @@ gam <UserTypeEntity> show filecounts
|
|
|
7178
7179
|
[filenamematchpattern <REMatchPattern>]
|
|
7179
7180
|
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
|
7180
7181
|
[excludetrashed]
|
|
7181
|
-
[showsize] [showmimetypesize]
|
|
7182
|
+
[showsize] [showmimetypesize]
|
|
7183
|
+
[showlastmodification] [pathdelimiter <Character>]
|
|
7182
7184
|
[summary none|only|plus] [summaryuser <String>]
|
|
7183
7185
|
|
|
7184
7186
|
gam <UserTypeEntity> print filesharecounts [todrive <ToDriveAttribute>*]
|
|
@@ -7308,6 +7310,14 @@ gam <UserTypeEntity> print driveactivity [todrive <ToDriveAttribute>*]
|
|
|
7308
7310
|
usageindrivetrash
|
|
7309
7311
|
<DriveSettingsFieldNameList> ::= "<DriveSettingsFieldName>(,<DriveSettingsFieldName>)*"
|
|
7310
7312
|
|
|
7313
|
+
gam <UserTypeEntity> print drivelastmodification [todrive <ToDriveAttribute>*]
|
|
7314
|
+
[select <SharedDriveEntity>]
|
|
7315
|
+
[pathdelimiter <Character>]
|
|
7316
|
+
(addcsvdata <FieldName> <String>)*
|
|
7317
|
+
gam <UserTypeEntity> show drivelastmodification
|
|
7318
|
+
[select <SharedDriveEntity>]
|
|
7319
|
+
[pathdelimiter <Character>]
|
|
7320
|
+
|
|
7311
7321
|
gam <UserTypeEntity> print drivesettings [todrive <ToDriveAttribute>*]
|
|
7312
7322
|
[allfields|<DriveSettingsFieldName>*|(fields <DriveSettingsFieldNameList>)]
|
|
7313
7323
|
[delimiter <Character>] [showusagebytes]
|
|
@@ -1,8 +1,32 @@
|
|
|
1
|
+
7.06.03
|
|
2
|
+
|
|
3
|
+
Fixed bug in `gam <UserTypeEntity> print|show drivelastmodification` that caused a trap
|
|
4
|
+
when an empty drive was specified.
|
|
5
|
+
|
|
6
|
+
7.06.02
|
|
7
|
+
|
|
8
|
+
Updated `gam <UserTypeEntity> print|show filecounts ... showlastmodification` to include
|
|
9
|
+
file mimetype and path information for the last modified file.
|
|
10
|
+
|
|
11
|
+
Added simple commands to get information about the last modified file on a drive.
|
|
12
|
+
By default, a user's My Drive is processed; optionally, a Shared Drive can be processed.
|
|
13
|
+
```
|
|
14
|
+
gam <UserTypeEntity> print drivelastmodification [todrive <ToDriveAttribute>*]
|
|
15
|
+
[select <SharedDriveEntity>]
|
|
16
|
+
[pathdelimiter <Character>]
|
|
17
|
+
(addcsvdata <FieldName> <String>)*
|
|
18
|
+
gam <UserTypeEntity> show drivelastmodification
|
|
19
|
+
[select <SharedDriveEntity>]
|
|
20
|
+
[pathdelimiter <Character>]
|
|
21
|
+
```
|
|
22
|
+
|
|
1
23
|
7.06.01
|
|
2
24
|
|
|
3
25
|
Updated `gam <UserTypeEntity> create|update drivefileacl ... expiration <Time>`
|
|
4
26
|
to handle additional API errors.
|
|
5
27
|
|
|
28
|
+
Updated to Python 3.13.3.
|
|
29
|
+
|
|
6
30
|
7.06.00
|
|
7
31
|
|
|
8
32
|
Upgraded to OpenSSL 3.5.0.
|
|
@@ -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.
|
|
28
|
+
__version__ = '7.06.03'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -28152,10 +28152,18 @@ CHROME_SCHEMA_TYPE_MESSAGE = {
|
|
|
28152
28152
|
{'autoupdatecheckperiodminutesnew':
|
|
28153
28153
|
{'casedField': 'autoUpdateCheckPeriodMinutesNew',
|
|
28154
28154
|
'type': 'duration', 'minVal': 1, 'maxVal': 720, 'scale': 60}},
|
|
28155
|
+
'chrome.users.AutoUpdateCheckPeriodNewV2':
|
|
28156
|
+
{'autoupdatecheckperiodminutesnew':
|
|
28157
|
+
{'casedField': 'autoUpdateCheckPeriodMinutesNew',
|
|
28158
|
+
'type': 'duration', 'minVal': 1, 'maxVal': 720, 'scale': 60}},
|
|
28155
28159
|
'chrome.users.BrowserSwitcherDelayDuration':
|
|
28156
28160
|
{'browserswitcherdelayduration':
|
|
28157
28161
|
{'casedField': 'browserSwitcherDelayDuration',
|
|
28158
28162
|
'type': 'duration', 'minVal': 0, 'maxVal': 30, 'scale': 1}},
|
|
28163
|
+
'chrome.users.CloudReportingUploadFrequencyV2':
|
|
28164
|
+
{'cloudreportinguploadfrequency':
|
|
28165
|
+
{'casedField': 'cloudReportingUploadFrequency',
|
|
28166
|
+
'type': 'count', 'minVal': 3, 'maxVal': 24, 'scale': 1}},
|
|
28159
28167
|
'chrome.users.FetchKeepaliveDurationSecondsOnShutdown':
|
|
28160
28168
|
{'fetchkeepalivedurationsecondsonshutdown':
|
|
28161
28169
|
{'casedField': 'fetchKeepaliveDurationSecondsOnShutdown',
|
|
@@ -28172,6 +28180,10 @@ CHROME_SCHEMA_TYPE_MESSAGE = {
|
|
|
28172
28180
|
{'printjobhistoryexpirationperioddaysnew':
|
|
28173
28181
|
{'casedField': 'printJobHistoryExpirationPeriodDaysNew',
|
|
28174
28182
|
'type': 'duration', 'minVal': -1, 'maxVal': None, 'scale': 86400}},
|
|
28183
|
+
'chrome.users.RelaunchNotificationWithDurationV2':
|
|
28184
|
+
{'relaunchnotificationperiodduration':
|
|
28185
|
+
{'casedField': 'relaunchNotificationPeriodDuration',
|
|
28186
|
+
'type': 'duration', 'minVal': -1, 'maxVal': None, 'scale': 3600}},
|
|
28175
28187
|
'chrome.users.SecurityTokenSessionSettings':
|
|
28176
28188
|
{'securitytokensessionnotificationseconds':
|
|
28177
28189
|
{'casedField': 'securityTokenSessionNotificationSeconds',
|
|
@@ -56474,6 +56486,45 @@ def printFileParentTree(users):
|
|
|
56474
56486
|
kcount -= 1
|
|
56475
56487
|
csvPF.writeCSVfile('Drive File Parent Tree')
|
|
56476
56488
|
|
|
56489
|
+
# Last file modification utilities
|
|
56490
|
+
def _initLastModification():
|
|
56491
|
+
return {'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
56492
|
+
'lastModifiedFileMimeType': '', 'lastModifiedFilePath': '',
|
|
56493
|
+
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME,
|
|
56494
|
+
'fileEntryInfo': {}}
|
|
56495
|
+
|
|
56496
|
+
def _checkUpdateLastModifiction(f_file, userLastModification):
|
|
56497
|
+
if f_file.get('modifiedTime', NEVER_TIME) > userLastModification['lastModifiedTime'] and 'lastModifyingUser' in f_file:
|
|
56498
|
+
userLastModification['lastModifiedFileId'] = f_file['id']
|
|
56499
|
+
userLastModification['lastModifiedFileName'] = _stripControlCharsFromName(f_file['name'])
|
|
56500
|
+
userLastModification['lastModifiedFileMimeType'] = f_file['mimeType']
|
|
56501
|
+
userLastModification['lastModifiedTime'] = f_file['modifiedTime']
|
|
56502
|
+
userLastModification['lastModifyingUser'] = f_file['lastModifyingUser'].get('emailAddress',
|
|
56503
|
+
f_file['lastModifyingUser'].get('displayName', UNKNOWN))
|
|
56504
|
+
userLastModification['fileEntryInfo'] = f_file.copy()
|
|
56505
|
+
|
|
56506
|
+
def _getLastModificationPath(drive, userLastModification, pathDelimiter):
|
|
56507
|
+
if userLastModification['fileEntryInfo']:
|
|
56508
|
+
filePathInfo = initFilePathInfo(pathDelimiter)
|
|
56509
|
+
_, paths, _ = getFilePaths(drive, {}, userLastModification['fileEntryInfo'], filePathInfo)
|
|
56510
|
+
userLastModification['lastModifiedFilePath'] = paths[0] if paths else UNKNOWN
|
|
56511
|
+
|
|
56512
|
+
def _showLastModification(lastModification):
|
|
56513
|
+
printKeyValueList(['lastModifiedFileId', lastModification['lastModifiedFileId']])
|
|
56514
|
+
printKeyValueList(['lastModifiedFileName', lastModification['lastModifiedFileName']])
|
|
56515
|
+
printKeyValueList(['lastModifiedFileMimeType', lastModification['lastModifiedFileMimeType']])
|
|
56516
|
+
printKeyValueList(['lastModifiedFilePath', lastModification['lastModifiedFilePath']])
|
|
56517
|
+
printKeyValueList(['lastModifyingUser', lastModification['lastModifyingUser']])
|
|
56518
|
+
printKeyValueList(['lastModifiedTime', formatLocalTime(lastModification['lastModifiedTime'])])
|
|
56519
|
+
|
|
56520
|
+
def _updateLastModificationRow(row, lastModification):
|
|
56521
|
+
row.update({'lastModifiedFileId': lastModification['lastModifiedFileId'],
|
|
56522
|
+
'lastModifiedFileName': lastModification['lastModifiedFileName'],
|
|
56523
|
+
'lastModifiedFileMimeType': lastModification['lastModifiedFileMimeType'],
|
|
56524
|
+
'lastModifiedFilePath': lastModification['lastModifiedFilePath'],
|
|
56525
|
+
'lastModifyingUser': lastModification['lastModifyingUser'],
|
|
56526
|
+
'lastModifiedTime': formatLocalTime(lastModification['lastModifiedTime'])})
|
|
56527
|
+
|
|
56477
56528
|
# gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
|
56478
56529
|
# [((query <QueryDriveFile>) | (fullquery <QueryDriveFile>) | <DriveFileQueryShortcut>) (querytime<String> <Time>)*]
|
|
56479
56530
|
# [continueoninvalidquery [<Boolean>]]
|
|
@@ -56485,7 +56536,8 @@ def printFileParentTree(users):
|
|
|
56485
56536
|
# [filenamematchpattern <REMatchPattern>]
|
|
56486
56537
|
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
|
56487
56538
|
# [excludetrashed] (addcsvdata <FieldName> <String>)*
|
|
56488
|
-
# [showsize] [showmimetypesize]
|
|
56539
|
+
# [showsize] [showmimetypesize]
|
|
56540
|
+
# [showlastmodification] [pathdelimiter <Character>]
|
|
56489
56541
|
# (addcsvdata <FieldName> <String>)*
|
|
56490
56542
|
# [summary none|only|plus] [summaryuser <String>]
|
|
56491
56543
|
# gam <UserTypeEntity> show filecounts
|
|
@@ -56499,7 +56551,8 @@ def printFileParentTree(users):
|
|
|
56499
56551
|
# [filenamematchpattern <REMatchPattern>]
|
|
56500
56552
|
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
|
56501
56553
|
# [excludetrashed]
|
|
56502
|
-
# [showsize] [showmimetypesize]
|
|
56554
|
+
# [showsize] [showmimetypesize]
|
|
56555
|
+
# [showlastmodification] [pathdelimiter <Character>]
|
|
56503
56556
|
# [summary none|only|plus] [summaryuser <String>]
|
|
56504
56557
|
def printShowFileCounts(users):
|
|
56505
56558
|
def _setSelectionFields():
|
|
@@ -56508,7 +56561,7 @@ def printShowFileCounts(users):
|
|
|
56508
56561
|
if showSize or (DLP.minimumFileSize is not None) or (DLP.maximumFileSize is not None):
|
|
56509
56562
|
fieldsList.append(sizeField)
|
|
56510
56563
|
if showLastModification:
|
|
56511
|
-
fieldsList.extend(['id,name,modifiedTime,lastModifyingUser(me, displayName, emailAddress)'])
|
|
56564
|
+
fieldsList.extend(['id,name,modifiedTime,lastModifyingUser(me, displayName, emailAddress),parents'])
|
|
56512
56565
|
if DLP.filenameMatchPattern:
|
|
56513
56566
|
fieldsList.append('name')
|
|
56514
56567
|
if DLP.excludeTrashed:
|
|
@@ -56544,9 +56597,7 @@ def printShowFileCounts(users):
|
|
|
56544
56597
|
printEntityKVList(kvList, dataList, i, count)
|
|
56545
56598
|
Ind.Increment()
|
|
56546
56599
|
if showLastModification:
|
|
56547
|
-
|
|
56548
|
-
'lastModifyingUser', lastModification['lastModifyingUser'],
|
|
56549
|
-
'lastModifiedTime', formatLocalTime(lastModification['lastModifiedTime'])])
|
|
56600
|
+
_showLastModification(lastModification)
|
|
56550
56601
|
for mimeType, mtinfo in sorted(iter(mimeTypeInfo.items())):
|
|
56551
56602
|
if not showMimeTypeSize:
|
|
56552
56603
|
printKeyValueList([mimeType, mtinfo['count']])
|
|
@@ -56561,10 +56612,7 @@ def printShowFileCounts(users):
|
|
|
56561
56612
|
if showSize:
|
|
56562
56613
|
row['Size'] = sizeTotal
|
|
56563
56614
|
if showLastModification:
|
|
56564
|
-
row
|
|
56565
|
-
'lastModifiedFileName': lastModification['lastModifiedFileName'],
|
|
56566
|
-
'lastModifyingUser': lastModification['lastModifyingUser'],
|
|
56567
|
-
'lastModifiedTime': formatLocalTime(lastModification['lastModifiedTime'])})
|
|
56615
|
+
_updateLastModificationRow(row, lastModification)
|
|
56568
56616
|
if addCSVData:
|
|
56569
56617
|
row.update(addCSVData)
|
|
56570
56618
|
for mimeType, mtinfo in sorted(iter(mimeTypeInfo.items())):
|
|
@@ -56578,6 +56626,7 @@ def printShowFileCounts(users):
|
|
|
56578
56626
|
csvPF.SetZeroBlankMimeTypeCounts(True)
|
|
56579
56627
|
fieldsList = ['mimeType']
|
|
56580
56628
|
DLP = DriveListParameters({'allowChoose': False, 'allowCorpora': True, 'allowQuery': True, 'mimeTypeInQuery': True})
|
|
56629
|
+
pathDelimiter = '/'
|
|
56581
56630
|
sharedDriveId = sharedDriveName = ''
|
|
56582
56631
|
continueOnInvalidQuery = showSize = showLastModification = showMimeTypeSize = False
|
|
56583
56632
|
sizeField = 'quotaBytesUsed'
|
|
@@ -56586,9 +56635,7 @@ def printShowFileCounts(users):
|
|
|
56586
56635
|
summaryMimeTypeInfo = {}
|
|
56587
56636
|
fileIdEntity = {}
|
|
56588
56637
|
addCSVData = {}
|
|
56589
|
-
summaryLastModification =
|
|
56590
|
-
'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
56591
|
-
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME}
|
|
56638
|
+
summaryLastModification = _initLastModification()
|
|
56592
56639
|
while Cmd.ArgumentsRemaining():
|
|
56593
56640
|
myarg = getArgument()
|
|
56594
56641
|
if csvPF and myarg == 'todrive':
|
|
@@ -56611,6 +56658,8 @@ def printShowFileCounts(users):
|
|
|
56611
56658
|
summary = getChoice(FILECOUNT_SUMMARY_CHOICE_MAP, mapChoice=True)
|
|
56612
56659
|
elif myarg == 'summaryuser':
|
|
56613
56660
|
summaryUser = getString(Cmd.OB_STRING)
|
|
56661
|
+
elif myarg == 'pathdelimiter':
|
|
56662
|
+
pathDelimiter = getCharacter()
|
|
56614
56663
|
elif csvPF and myarg == 'addcsvdata':
|
|
56615
56664
|
k = getString(Cmd.OB_STRING)
|
|
56616
56665
|
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
@@ -56637,7 +56686,9 @@ def printShowFileCounts(users):
|
|
|
56637
56686
|
if showSize:
|
|
56638
56687
|
sortTitles.insert(sortTitles.index('Total')+1, 'Size')
|
|
56639
56688
|
if showLastModification:
|
|
56640
|
-
sortTitles.extend(['lastModifiedFileId', 'lastModifiedFileName',
|
|
56689
|
+
sortTitles.extend(['lastModifiedFileId', 'lastModifiedFileName',
|
|
56690
|
+
'lastModifiedFileMimeType', 'lastModifiedFilePath',
|
|
56691
|
+
'lastModifyingUser', 'lastModifiedTime'])
|
|
56641
56692
|
if addCSVData:
|
|
56642
56693
|
sortTitles.extend(sorted(addCSVData.keys()))
|
|
56643
56694
|
csvPF.SetTitles(sortTitles)
|
|
@@ -56652,9 +56703,7 @@ def printShowFileCounts(users):
|
|
|
56652
56703
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
56653
56704
|
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
56654
56705
|
mimeTypeInfo = {}
|
|
56655
|
-
userLastModification =
|
|
56656
|
-
'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
56657
|
-
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME}
|
|
56706
|
+
userLastModification = _initLastModification()
|
|
56658
56707
|
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
56659
56708
|
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count, query=DLP.fileIdEntity['query'])
|
|
56660
56709
|
try:
|
|
@@ -56666,7 +56715,7 @@ def printShowFileCounts(users):
|
|
|
56666
56715
|
retryReasons=[GAPI.UNKNOWN_ERROR],
|
|
56667
56716
|
q=DLP.fileIdEntity['query'],
|
|
56668
56717
|
fields=pagesFields, pageSize=GC.Values[GC.DRIVE_MAX_RESULTS], **btkwargs)
|
|
56669
|
-
for files in
|
|
56718
|
+
for files in feed:
|
|
56670
56719
|
for f_file in files:
|
|
56671
56720
|
driveId = f_file.get('driveId')
|
|
56672
56721
|
checkSharedDrivePermissions = getPermissionsForSharedDrives and driveId and 'permissions' not in f_file
|
|
@@ -56697,12 +56746,8 @@ def printShowFileCounts(users):
|
|
|
56697
56746
|
mimeTypeInfo[f_file['mimeType']]['count'] += 1
|
|
56698
56747
|
mimeTypeInfo[f_file['mimeType']]['size'] += int(f_file.get(sizeField, '0'))
|
|
56699
56748
|
if showLastModification:
|
|
56700
|
-
|
|
56701
|
-
|
|
56702
|
-
userLastModification['lastModifiedFileName'] = _stripControlCharsFromName(f_file['name'])
|
|
56703
|
-
userLastModification['lastModifiedTime'] = f_file['modifiedTime']
|
|
56704
|
-
userLastModification['lastModifyingUser'] = f_file['lastModifyingUser'].get('emailAddress',
|
|
56705
|
-
f_file['lastModifyingUser'].get('displayName', UNKNOWN))
|
|
56749
|
+
_checkUpdateLastModifiction(f_file, userLastModification)
|
|
56750
|
+
_getLastModificationPath(drive, userLastModification, pathDelimiter)
|
|
56706
56751
|
showMimeTypeInfo(user, mimeTypeInfo, sharedDriveId, sharedDriveName, userLastModification, i, count)
|
|
56707
56752
|
if showLastModification and userLastModification['lastModifiedTime'] > summaryLastModification['lastModifiedTime']:
|
|
56708
56753
|
summaryLastModification = userLastModification.copy()
|
|
@@ -56726,6 +56771,110 @@ def printShowFileCounts(users):
|
|
|
56726
56771
|
if csvPF:
|
|
56727
56772
|
csvPF.writeCSVfile('Drive File Counts')
|
|
56728
56773
|
|
|
56774
|
+
# gam <UserTypeEntity> print drivelastmodification [todrive <ToDriveAttribute>*]
|
|
56775
|
+
# [select <SharedDriveEntity>]
|
|
56776
|
+
# [pathdelimiter <Character>]
|
|
56777
|
+
# (addcsvdata <FieldName> <String>)*
|
|
56778
|
+
# gam <UserTypeEntity> show drivelastmodification
|
|
56779
|
+
# [select <SharedDriveEntity>]
|
|
56780
|
+
# [pathdelimiter <Character>]
|
|
56781
|
+
def printShowDrivelastModifications(users):
|
|
56782
|
+
def showLastModificationInfo(user, sharedDriveId, sharedDriveName, lastModification, i, count):
|
|
56783
|
+
if not csvPF:
|
|
56784
|
+
if sharedDriveId:
|
|
56785
|
+
kvList = [Ent.USER, user, Ent.SHAREDDRIVE, f'{sharedDriveName} ({sharedDriveId})']
|
|
56786
|
+
else:
|
|
56787
|
+
kvList = [Ent.USER, user]
|
|
56788
|
+
printEntity(kvList, i, count)
|
|
56789
|
+
Ind.Increment()
|
|
56790
|
+
_showLastModification(lastModification)
|
|
56791
|
+
Ind.Decrement()
|
|
56792
|
+
else:
|
|
56793
|
+
if sharedDriveId:
|
|
56794
|
+
row = {'User': user, 'id': sharedDriveId, 'name': sharedDriveName}
|
|
56795
|
+
else:
|
|
56796
|
+
row = {'User': user}
|
|
56797
|
+
_updateLastModificationRow(row, lastModification)
|
|
56798
|
+
if addCSVData:
|
|
56799
|
+
row.update(addCSVData)
|
|
56800
|
+
csvPF.WriteRowTitles(row)
|
|
56801
|
+
|
|
56802
|
+
csvPF = CSVPrintFile() if Act.csvFormat() else None
|
|
56803
|
+
fieldsList = ['id', 'driveId', 'name', 'mimeType', 'lastModifyingUser', 'modifiedTime', 'parents']
|
|
56804
|
+
DLP = DriveListParameters({'allowChoose': False, 'allowCorpora': False, 'allowQuery': False, 'mimeTypeInQuery': True})
|
|
56805
|
+
pathDelimiter = '/'
|
|
56806
|
+
sharedDriveId = sharedDriveName = ''
|
|
56807
|
+
fileIdEntity = {}
|
|
56808
|
+
addCSVData = {}
|
|
56809
|
+
while Cmd.ArgumentsRemaining():
|
|
56810
|
+
myarg = getArgument()
|
|
56811
|
+
if csvPF and myarg == 'todrive':
|
|
56812
|
+
csvPF.GetTodriveParameters()
|
|
56813
|
+
elif myarg == 'select':
|
|
56814
|
+
if fileIdEntity:
|
|
56815
|
+
usageErrorExit(Msg.CAN_NOT_BE_SPECIFIED_MORE_THAN_ONCE.format('select'))
|
|
56816
|
+
fileIdEntity = getSharedDriveEntity()
|
|
56817
|
+
elif myarg == 'pathdelimiter':
|
|
56818
|
+
pathDelimiter = getCharacter()
|
|
56819
|
+
elif csvPF and myarg == 'addcsvdata':
|
|
56820
|
+
k = getString(Cmd.OB_STRING)
|
|
56821
|
+
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
56822
|
+
else:
|
|
56823
|
+
unknownArgumentExit()
|
|
56824
|
+
if not fileIdEntity:
|
|
56825
|
+
fileIdEntity = DLP.GetFileIdEntity()
|
|
56826
|
+
if not fileIdEntity.get('shareddrive'):
|
|
56827
|
+
btkwargs = DLP.kwargs
|
|
56828
|
+
else:
|
|
56829
|
+
btkwargs = fileIdEntity['shareddrive']
|
|
56830
|
+
fieldsList.append('driveId')
|
|
56831
|
+
DLP.Finalize(fileIdEntity)
|
|
56832
|
+
if csvPF:
|
|
56833
|
+
sortTitles = ['User', 'id', 'name'] if fileIdEntity.get('shareddrive') else ['User']
|
|
56834
|
+
sortTitles.extend(['lastModifiedFileId', 'lastModifiedFileName',
|
|
56835
|
+
'lastModifiedFileMimeType', 'lastModifiedFilePath',
|
|
56836
|
+
'lastModifyingUser', 'lastModifiedTime'])
|
|
56837
|
+
if addCSVData:
|
|
56838
|
+
sortTitles.extend(sorted(addCSVData.keys()))
|
|
56839
|
+
csvPF.SetTitles(sortTitles)
|
|
56840
|
+
csvPF.SetSortAllTitles()
|
|
56841
|
+
pagesFields = getItemFieldsFromFieldsList('files', fieldsList)
|
|
56842
|
+
i, count, users = getEntityArgument(users)
|
|
56843
|
+
for user in users:
|
|
56844
|
+
i += 1
|
|
56845
|
+
user, drive = _validateUserSharedDrive(user, i, count, fileIdEntity)
|
|
56846
|
+
if not drive:
|
|
56847
|
+
continue
|
|
56848
|
+
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
56849
|
+
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
56850
|
+
userLastModification = _initLastModification()
|
|
56851
|
+
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
56852
|
+
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count)
|
|
56853
|
+
try:
|
|
56854
|
+
feed = yieldGAPIpages(drive.files(), 'list', 'files',
|
|
56855
|
+
pageMessage=getPageMessageForWhom(),
|
|
56856
|
+
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.INVALID, GAPI.BAD_REQUEST, GAPI.FILE_NOT_FOUND,
|
|
56857
|
+
GAPI.NOT_FOUND, GAPI.TEAMDRIVE_MEMBERSHIP_REQUIRED],
|
|
56858
|
+
retryReasons=[GAPI.UNKNOWN_ERROR],
|
|
56859
|
+
fields=pagesFields, pageSize=GC.Values[GC.DRIVE_MAX_RESULTS], **btkwargs)
|
|
56860
|
+
for files in feed:
|
|
56861
|
+
for f_file in files:
|
|
56862
|
+
_checkUpdateLastModifiction(f_file, userLastModification)
|
|
56863
|
+
_getLastModificationPath(drive, userLastModification, pathDelimiter)
|
|
56864
|
+
showLastModificationInfo(user, sharedDriveId, sharedDriveName, userLastModification, i, count)
|
|
56865
|
+
except (GAPI.invalid, GAPI.badRequest) as e:
|
|
56866
|
+
entityActionFailedWarning([Ent.USER, user, Ent.DRIVE_FILE_OR_FOLDER, None], str(e), i, count)
|
|
56867
|
+
continue
|
|
56868
|
+
except GAPI.fileNotFound:
|
|
56869
|
+
printGotEntityItemsForWhom(0)
|
|
56870
|
+
except (GAPI.notFound, GAPI.teamDriveMembershipRequired) as e:
|
|
56871
|
+
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE_ID, sharedDriveId], str(e), i, count)
|
|
56872
|
+
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
|
56873
|
+
userDriveServiceNotEnabledWarning(user, str(e), i, count)
|
|
56874
|
+
continue
|
|
56875
|
+
if csvPF:
|
|
56876
|
+
csvPF.writeCSVfile('Drive File Last Modification')
|
|
56877
|
+
|
|
56729
56878
|
DISKUSAGE_SHOW_CHOICES = {'all', 'summary', 'summaryandtrash'}
|
|
56730
56879
|
|
|
56731
56880
|
# gam <UserTypeEntity> print diskusage <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
|
@@ -76543,6 +76692,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76543
76692
|
Cmd.ARG_DRIVEFILEACL: printShowDriveFileACLs,
|
|
76544
76693
|
Cmd.ARG_DRIVELABEL: printShowDriveLabels,
|
|
76545
76694
|
Cmd.ARG_DRIVELABELPERMISSION: printShowDriveLabelPermissions,
|
|
76695
|
+
Cmd.ARG_DRIVELASTMODIFICATION: printShowDrivelastModifications,
|
|
76546
76696
|
Cmd.ARG_DRIVESETTINGS: printShowDriveSettings,
|
|
76547
76697
|
Cmd.ARG_EMPTYDRIVEFOLDERS: printEmptyDriveFolders,
|
|
76548
76698
|
Cmd.ARG_EVENT: printShowCalendarEvents,
|
|
@@ -76650,6 +76800,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76650
76800
|
Cmd.ARG_DRIVEFILEACL: printShowDriveFileACLs,
|
|
76651
76801
|
Cmd.ARG_DRIVELABEL: printShowDriveLabels,
|
|
76652
76802
|
Cmd.ARG_DRIVELABELPERMISSION: printShowDriveLabelPermissions,
|
|
76803
|
+
Cmd.ARG_DRIVELASTMODIFICATION: printShowDrivelastModifications,
|
|
76653
76804
|
Cmd.ARG_DRIVESETTINGS: printShowDriveSettings,
|
|
76654
76805
|
Cmd.ARG_EVENT: printShowCalendarEvents,
|
|
76655
76806
|
Cmd.ARG_FILECOMMENT: printShowFileComments,
|
|
@@ -76874,13 +77025,14 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
76874
77025
|
Cmd.ARG_DOMAINCONTACT: Cmd.ARG_PEOPLECONTACT,
|
|
76875
77026
|
Cmd.ARG_DOMAINCONTACTS: Cmd.ARG_PEOPLECONTACT,
|
|
76876
77027
|
Cmd.ARG_DRIVEFILEACLS: Cmd.ARG_DRIVEFILEACL,
|
|
76877
|
-
Cmd.ARG_FILEDRIVELABELS: Cmd.ARG_FILEDRIVELABEL,
|
|
76878
77028
|
Cmd.ARG_DRIVEFILESHORTCUTS: Cmd.ARG_DRIVEFILESHORTCUT,
|
|
76879
77029
|
Cmd.ARG_DRIVELABELS: Cmd.ARG_DRIVELABEL,
|
|
76880
77030
|
Cmd.ARG_DRIVELABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77031
|
+
Cmd.ARG_DRIVELASTMODIFICATIONS: Cmd.ARG_DRIVELASTMODIFICATION,
|
|
76881
77032
|
Cmd.ARG_EVENTS: Cmd.ARG_EVENT,
|
|
76882
77033
|
Cmd.ARG_FILECOMMENTS: Cmd.ARG_FILECOMMENT,
|
|
76883
77034
|
Cmd.ARG_FILECOUNTS: Cmd.ARG_FILECOUNT,
|
|
77035
|
+
Cmd.ARG_FILEDRIVELABELS: Cmd.ARG_FILEDRIVELABEL,
|
|
76884
77036
|
Cmd.ARG_FILEPATHS: Cmd.ARG_FILEPATH,
|
|
76885
77037
|
Cmd.ARG_FILEREVISIONS: Cmd.ARG_FILEREVISION,
|
|
76886
77038
|
Cmd.ARG_FILESHARECOUNTS: Cmd.ARG_FILESHARECOUNT,
|
|
@@ -579,6 +579,8 @@ class GamCLArgs():
|
|
|
579
579
|
ARG_DRIVELABELS = 'drivelabels'
|
|
580
580
|
ARG_DRIVELABELPERMISSION = 'drivelabelpermission'
|
|
581
581
|
ARG_DRIVELABELPERMISSIONS = 'drivelabelpermissions'
|
|
582
|
+
ARG_DRIVELASTMODIFICATION = 'drivelastmodification'
|
|
583
|
+
ARG_DRIVELASTMODIFICATIONS = 'drivelastmodifications'
|
|
582
584
|
ARG_DRIVESETTINGS = 'drivesettings'
|
|
583
585
|
ARG_DRIVETRASH = 'drivetrash'
|
|
584
586
|
ARG_EMPTYDRIVEFOLDERS = 'emptydrivefolders'
|