gam7 7.9.7__tar.gz → 7.10.1__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.9.7 → gam7-7.10.1}/PKG-INFO +1 -1
- {gam7-7.9.7 → gam7-7.10.1}/src/GamCommands.txt +25 -3
- {gam7-7.9.7 → gam7-7.10.1}/src/GamUpdate.txt +15 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/__init__.py +245 -13
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glapi.py +7 -1
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glclargs.py +5 -1
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glentity.py +2 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glmsgs.py +1 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Basic-Items.md +3 -1
- {gam7-7.9.7 → gam7-7.10.1}/wiki/GamUpdates.md +14 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Licenses.md +1 -1
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Chat.md +76 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Files-Display.md +2 -1
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Version-and-Help.md +6 -6
- {gam7-7.9.7 → gam7-7.10.1}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/actions/decrypt.sh +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/actions/entitlements.plist +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/stale.yml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/workflows/build.yml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.github/workflows/pypi.yml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/.pre-commit-config.yaml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/LICENSE +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/README.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/pyproject.toml +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/.gitignore +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/LICENSE +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/cacerts.pem +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/callgam.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/__main__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/auth.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/client.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/core.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/data.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/http.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/http_core.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/service.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/token_store.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/atom/url.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/cacerts.pem +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/service.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam/six.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam-install.sh +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam-setup.bat +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam.exe.manifest +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam.spec +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/gam.wxs +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/license.rtf +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/requirements-dev.txt +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/requirements.txt +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/setup.cfg +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/setup.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/tools/mkGamRef.py +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/tools/openssl.props +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/src/version_info.txt.in +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/00scratch.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Addresses.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Administrators.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Alert-Center.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Aliases.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Authorization.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Calendars-Access.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Calendars-Events.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Calendars.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chat-Bot.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Customer.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Domains-Verification.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Domains.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Drive-Items.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Groups-Membership.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Groups.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Home.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/List-Items.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/List.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Organizational-Units.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Other-Resources.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Permission-Matches.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/README.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Rclone.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Reports.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Reseller.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Resources.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Schemas.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Scripts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Send-Email.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Shared-Drives.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Sites.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Tag-Replace.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Todrive.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Calendars.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Contacts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Forms.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Meet.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Photo.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Tasks.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-Tokens.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users-YouTube.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Users.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/_Sidebar.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/gam.cfg.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Home.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Printers.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.9.7 → gam7-7.10.1}/wiki/l-_Footer.md +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
his document describes the GAM command line syntax in modified BNF, see https://en.wikipedia.org/wiki/Backus-Naur_Form
|
|
2
2
|
Skip the History section and start reading at Introduction.
|
|
3
3
|
|
|
4
4
|
Items on the command line are space separated, when an actual space character is required, it will be indicated by <Space>.
|
|
@@ -380,6 +380,8 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
380
380
|
domain:<DomainName>|domain|default
|
|
381
381
|
<CalendarItem> ::= <EmailAddress>
|
|
382
382
|
<ChannelCustomerID> ::= <String>
|
|
383
|
+
<ChatEmojiName> ::= :<String>:
|
|
384
|
+
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
|
383
385
|
<ChatMember> ::= spaces/<String>/members/<String>
|
|
384
386
|
<ChatMessage> ::= spaces/<String>/messages/<String>
|
|
385
387
|
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|
|
@@ -664,6 +666,7 @@ If an item contains spaces, it should be surrounded by ".
|
|
|
664
666
|
(gdoc|ghtml <UserGoogleDoc>)|
|
|
665
667
|
(gcsdoc|gcshtml <StorageBucketObjectName>)
|
|
666
668
|
<YouTubeChannelID> ::= <String>
|
|
669
|
+
|
|
667
670
|
## Lists of basic items
|
|
668
671
|
|
|
669
672
|
<APIScopeURLList> ::= "<APIScopeURL>(,<APIScopeURL>)*"
|
|
@@ -4437,13 +4440,14 @@ gam report usage customer [todrive <ToDriveAttribute>*]
|
|
|
4437
4440
|
calendar|calendars|
|
|
4438
4441
|
chat|
|
|
4439
4442
|
chrome|
|
|
4443
|
+
classroom|
|
|
4440
4444
|
contextawareaccess|
|
|
4441
4445
|
currents|gplus|google+|
|
|
4442
4446
|
datastudio|
|
|
4443
4447
|
devices|mobile|
|
|
4444
4448
|
domain|
|
|
4445
4449
|
drive|doc|docs|
|
|
4446
|
-
gcp|
|
|
4450
|
+
gcp|cloud|
|
|
4447
4451
|
gemini|geminiforworkspace|
|
|
4448
4452
|
groups|group|
|
|
4449
4453
|
groupsenterprise|enterprisegroups|
|
|
@@ -4462,7 +4466,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
|
|
4462
4466
|
[(user all|<UserItem>)|(orgunit|org|ou <OrgUnitPath> [showorgunit])|(select <UserTypeEntity>)]
|
|
4463
4467
|
[([start <Time>] [end <Time>])|(range <Time> <Time>)|
|
|
4464
4468
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
|
4465
|
-
[filtertime
|
|
4469
|
+
[filtertime.String> <Time>] [filter|filters <String>]
|
|
4466
4470
|
[event|events <EventNameList>] [ip <String>]
|
|
4467
4471
|
[groupidfilter <String>]
|
|
4468
4472
|
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
|
@@ -6436,6 +6440,22 @@ gam <UserTypeEntity> print chatevents [todrive <ToDriveAttribute>*]
|
|
|
6436
6440
|
filter <String>
|
|
6437
6441
|
[formatjson [quotechar <Character>]]
|
|
6438
6442
|
|
|
6443
|
+
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
|
6444
|
+
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
|
6445
|
+
|
|
6446
|
+
gam <UserTypeEntity> create chatemoji <ChatEmojiName>
|
|
6447
|
+
([drivedir|(sourcefolder <FilePath>)] [filename <FileNamePattern>])
|
|
6448
|
+
[formatjson]
|
|
6449
|
+
gam <UserTypeEntity> delete chatemoji <ChatEmoji>
|
|
6450
|
+
gam <UserTypeEntity> info chatemoji <ChatEmoji>
|
|
6451
|
+
[formatjson]
|
|
6452
|
+
gam <UserTypeEntity> show chatemojis
|
|
6453
|
+
[showcreatedby any|me|others]
|
|
6454
|
+
[formatjson]
|
|
6455
|
+
gam <UserTypeEntity> print chatemojis [todrive <ToDriveAttribute>*]
|
|
6456
|
+
[showcreatedby any|me|others]
|
|
6457
|
+
[formatjson [quotechar <Character>]]
|
|
6458
|
+
|
|
6439
6459
|
# Users - Drive
|
|
6440
6460
|
|
|
6441
6461
|
<DriveFileOrderByFieldName> ::=
|
|
@@ -7398,10 +7418,12 @@ gam <UserTypeEntity> print filters [labelidsonly] [todrive <ToDriveAttribute>*]
|
|
|
7398
7418
|
|
|
7399
7419
|
gam <UserTypeEntity> create form
|
|
7400
7420
|
title <String> [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
|
7421
|
+
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
|
7401
7422
|
[drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
|
7402
7423
|
[(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
|
7403
7424
|
gam <UserTypeEntity> update form <DriveFileEntity>
|
|
7404
7425
|
[title <String>] [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
|
7426
|
+
[ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
|
7405
7427
|
|
|
7406
7428
|
gam <UserTypeEntity> print forms <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
|
7407
7429
|
(addcsvdata <FieldName> <String>)*
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
7.10.01
|
|
2
|
+
|
|
3
|
+
Added options `ispublished [<Boolean>]` and `isacceptingresponses [<Boolean>]` to
|
|
4
|
+
`gam <UserTypeEntity> create|update form`.
|
|
5
|
+
|
|
6
|
+
7.10.00
|
|
7
|
+
|
|
8
|
+
Added commands to manage/display Chat Custom Emojis.
|
|
9
|
+
|
|
10
|
+
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#manage-chat-emojis
|
|
11
|
+
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-emojis
|
|
12
|
+
|
|
13
|
+
Updated `gam <UserItem> print|show chatspaces|chatmembers asadmin` to display
|
|
14
|
+
the spaces in ascending display name order.
|
|
15
|
+
|
|
1
16
|
7.09.07
|
|
2
17
|
|
|
3
18
|
Added `webviewlink` to `<FileTreeFieldName>` for use in `gam <UserTypeEntity> print|show filetree`.
|
|
@@ -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.
|
|
28
|
+
__version__ = '7.10.01'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -13556,7 +13556,10 @@ REPORT_CHOICE_MAP = {
|
|
|
13556
13556
|
'calendars': 'calendar',
|
|
13557
13557
|
'chat': 'chat',
|
|
13558
13558
|
'chrome': 'chrome',
|
|
13559
|
+
'classroom': 'classroom',
|
|
13560
|
+
'cloud': 'gcp',
|
|
13559
13561
|
'contextawareaccess': 'context_aware_access',
|
|
13562
|
+
'currents': 'gplus',
|
|
13560
13563
|
'customer': 'customer',
|
|
13561
13564
|
'customers': 'customer',
|
|
13562
13565
|
'datastudio': 'data_studio',
|
|
@@ -22786,7 +22789,7 @@ def _processPeopleContactPhotos(users, function):
|
|
|
22786
22789
|
if function == 'GetContactPhoto' and not os.path.isdir(targetFolder):
|
|
22787
22790
|
os.makedirs(targetFolder)
|
|
22788
22791
|
elif myarg == 'filename':
|
|
22789
|
-
filenamePattern = getString(Cmd.
|
|
22792
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
22790
22793
|
else:
|
|
22791
22794
|
unknownArgumentExit()
|
|
22792
22795
|
subForContactId = filenamePattern.find('#contactid#') != -1
|
|
@@ -25990,6 +25993,8 @@ def _printChatItem(user, citem, parent, entityType, csvPF, FJQC, addCSVData=None
|
|
|
25990
25993
|
if entityType == Ent.CHAT_SPACE:
|
|
25991
25994
|
_cleanChatSpace(citem)
|
|
25992
25995
|
baserow = {'User': user} if user is not None else {}
|
|
25996
|
+
elif entityType == Ent.CHAT_EMOJI:
|
|
25997
|
+
baserow = {'User': user, 'name': citem['name'], 'emojiName': citem['emojiName']}
|
|
25993
25998
|
else:
|
|
25994
25999
|
if user is not None:
|
|
25995
26000
|
baserow = {'User': user, 'space.name': parent['name'], 'space.displayName': parent['displayName']}
|
|
@@ -26009,6 +26014,190 @@ def _printChatItem(user, citem, parent, entityType, csvPF, FJQC, addCSVData=None
|
|
|
26009
26014
|
'JSON': json.dumps(cleanJSON(citem, timeObjects=CHAT_TIME_OBJECTS), ensure_ascii=False, sort_keys=True)})
|
|
26010
26015
|
csvPF.WriteRowNoFilter(row)
|
|
26011
26016
|
|
|
26017
|
+
def _getValidateEmojiName():
|
|
26018
|
+
name = getString(Cmd.OB_CHAT_EMOJI_NAME)
|
|
26019
|
+
if re.match(r'^:[0-9a-z_-]+:$', name):
|
|
26020
|
+
return name
|
|
26021
|
+
Cmd.Backup()
|
|
26022
|
+
usageErrorExit(Msg.INVALID_EMOJI_NAME.format(name))
|
|
26023
|
+
|
|
26024
|
+
# gam <UserTypeEntity> create chatemoji <ChatEmojiName>
|
|
26025
|
+
# ([drivedir|(sourcefolder <FilePath>)] [filename <FileNamePattern>])
|
|
26026
|
+
# [formatjson]
|
|
26027
|
+
def createChatEmoji(users):
|
|
26028
|
+
FJQC = FormatJSONQuoteChar()
|
|
26029
|
+
name = _getValidateEmojiName()
|
|
26030
|
+
body = {'emojiName': name, 'payload': {'filename': '', 'fileContent': ''}}
|
|
26031
|
+
sourceFolder = os.getcwd()
|
|
26032
|
+
filenamePattern = '#email#.jpg'
|
|
26033
|
+
while Cmd.ArgumentsRemaining():
|
|
26034
|
+
myarg = getArgument()
|
|
26035
|
+
if myarg == 'drivedir':
|
|
26036
|
+
sourceFolder = GC.Values[GC.DRIVE_DIR]
|
|
26037
|
+
elif myarg == 'sourcefolder':
|
|
26038
|
+
sourceFolder = os.path.expanduser(getString(Cmd.OB_FILE_PATH))
|
|
26039
|
+
if not os.path.isdir(sourceFolder):
|
|
26040
|
+
entityDoesNotExistExit(Ent.DIRECTORY, sourceFolder)
|
|
26041
|
+
elif myarg == 'filename':
|
|
26042
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
26043
|
+
else:
|
|
26044
|
+
FJQC.GetFormatJSON(myarg)
|
|
26045
|
+
i, count, users = getEntityArgument(users)
|
|
26046
|
+
for user in users:
|
|
26047
|
+
i += 1
|
|
26048
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, name])
|
|
26049
|
+
if not chat:
|
|
26050
|
+
continue
|
|
26051
|
+
user, userName, _ = splitEmailAddressOrUID(user)
|
|
26052
|
+
filename = _substituteForUser(filenamePattern, user, userName)
|
|
26053
|
+
if sourceFolder is not None:
|
|
26054
|
+
filename = os.path.join(sourceFolder, filename)
|
|
26055
|
+
filename = os.path.expanduser(filename)
|
|
26056
|
+
try:
|
|
26057
|
+
with open(filename, 'rb') as f:
|
|
26058
|
+
image_data = f.read()
|
|
26059
|
+
except (OSError, IOError) as e:
|
|
26060
|
+
entityActionFailedWarning([Ent.USER, user, Ent.CHAT_EMOJI, filename], str(e), i, count)
|
|
26061
|
+
continue
|
|
26062
|
+
body['payload'] = {'filename': os.path.basename(filename),
|
|
26063
|
+
'fileContent':base64.urlsafe_b64encode(image_data).decode(UTF8)}
|
|
26064
|
+
try:
|
|
26065
|
+
emoji = callGAPI(chat.customEmojis(), 'create',
|
|
26066
|
+
throwReasons=[GAPI.ALREADY_EXISTS, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
|
26067
|
+
body=body)
|
|
26068
|
+
_showChatItem(emoji, Ent.CHAT_EMOJI, FJQC, i, count)
|
|
26069
|
+
except (GAPI.alreadyExists, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26070
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26071
|
+
except GAPI.failedPrecondition:
|
|
26072
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26073
|
+
|
|
26074
|
+
def getEmojiName(myarg):
|
|
26075
|
+
if myarg == 'emojiname':
|
|
26076
|
+
name = _getValidateEmojiName()
|
|
26077
|
+
return 'customEmojis/'+name
|
|
26078
|
+
_, chatEmoji = Cmd.Previous().split('/', 1)
|
|
26079
|
+
return 'customEmojis/'+chatEmoji
|
|
26080
|
+
|
|
26081
|
+
# gam <UserTypeEntity> delete chatemoji <ChatEmoji>
|
|
26082
|
+
def deleteChatEmoji(users):
|
|
26083
|
+
name = None
|
|
26084
|
+
while Cmd.ArgumentsRemaining():
|
|
26085
|
+
myarg = getArgument()
|
|
26086
|
+
if myarg == 'emojiname':
|
|
26087
|
+
name = getEmojiName(myarg)
|
|
26088
|
+
elif myarg.startswith('customemojis/'):
|
|
26089
|
+
name = getEmojiName(myarg)
|
|
26090
|
+
else:
|
|
26091
|
+
unknownArgumentExit()
|
|
26092
|
+
if not name:
|
|
26093
|
+
missingArgumentExit('ChatEmoji')
|
|
26094
|
+
i, count, users = getEntityArgument(users)
|
|
26095
|
+
for user in users:
|
|
26096
|
+
i += 1
|
|
26097
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, name])
|
|
26098
|
+
if not chat:
|
|
26099
|
+
continue
|
|
26100
|
+
try:
|
|
26101
|
+
callGAPI(chat.customEmojis(), 'delete',
|
|
26102
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
|
26103
|
+
name=name)
|
|
26104
|
+
entityActionPerformed(kvList, i, count)
|
|
26105
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26106
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26107
|
+
except GAPI.failedPrecondition:
|
|
26108
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26109
|
+
|
|
26110
|
+
# gam <UserTypeEntity> info chatemoji <ChatEmoji>
|
|
26111
|
+
# [formatjson]
|
|
26112
|
+
def infoChatEmoji(users):
|
|
26113
|
+
FJQC = FormatJSONQuoteChar()
|
|
26114
|
+
name = None
|
|
26115
|
+
while Cmd.ArgumentsRemaining():
|
|
26116
|
+
myarg = getArgument()
|
|
26117
|
+
if myarg == 'emojiname':
|
|
26118
|
+
name = getEmojiName(myarg)
|
|
26119
|
+
elif myarg.startswith('customemojis/'):
|
|
26120
|
+
name = getEmojiName(myarg)
|
|
26121
|
+
else:
|
|
26122
|
+
FJQC.GetFormatJSON(myarg)
|
|
26123
|
+
if not name:
|
|
26124
|
+
missingArgumentExit('ChatEmoji')
|
|
26125
|
+
i, count, users = getEntityArgument(users)
|
|
26126
|
+
for user in users:
|
|
26127
|
+
i += 1
|
|
26128
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, name])
|
|
26129
|
+
if not chat:
|
|
26130
|
+
continue
|
|
26131
|
+
try:
|
|
26132
|
+
emoji = callGAPI(chat.customEmojis(), 'get',
|
|
26133
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
|
26134
|
+
name=name)
|
|
26135
|
+
if not FJQC.formatJSON:
|
|
26136
|
+
entityPerformAction(kvList, i, count)
|
|
26137
|
+
_showChatItem(emoji, Ent.CHAT_EMOJI, FJQC, i, count)
|
|
26138
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26139
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26140
|
+
except GAPI.failedPrecondition:
|
|
26141
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26142
|
+
|
|
26143
|
+
CHAT_EMOJI_SHOW_CREATED_BY_CHOICE_MAP = {
|
|
26144
|
+
'any': None,
|
|
26145
|
+
'me': 'creator("users/me")',
|
|
26146
|
+
'others': 'NOT creator("users/me")'
|
|
26147
|
+
}
|
|
26148
|
+
|
|
26149
|
+
# gam <UserTypeEntity> show chatemojis
|
|
26150
|
+
# [showcreatedby any|me|others]
|
|
26151
|
+
# [formatjson]
|
|
26152
|
+
# gam <UserTypeEntity> print chatemojis [todrive <ToDriveAttribute>*]
|
|
26153
|
+
# [showcreatedby any|me|others]
|
|
26154
|
+
# [formatjson [quotechar <Character>]]
|
|
26155
|
+
def printShowChatEmojis(users):
|
|
26156
|
+
csvPF = CSVPrintFile(['User', 'name', 'emojiName']) if Act.csvFormat() else None
|
|
26157
|
+
FJQC = FormatJSONQuoteChar(csvPF)
|
|
26158
|
+
pfilter = CHAT_EMOJI_SHOW_CREATED_BY_CHOICE_MAP['me']
|
|
26159
|
+
while Cmd.ArgumentsRemaining():
|
|
26160
|
+
myarg = getArgument()
|
|
26161
|
+
if csvPF and myarg == 'todrive':
|
|
26162
|
+
csvPF.GetTodriveParameters()
|
|
26163
|
+
elif myarg =='showcreatedby':
|
|
26164
|
+
pfilter = getChoice(CHAT_EMOJI_SHOW_CREATED_BY_CHOICE_MAP, mapChoice=True)
|
|
26165
|
+
else:
|
|
26166
|
+
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
26167
|
+
i, count, users = getEntityArgument(users)
|
|
26168
|
+
for user in users:
|
|
26169
|
+
i += 1
|
|
26170
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_CUSTOM_EMOJIS, user, i, count, [Ent.CHAT_EMOJI, None])
|
|
26171
|
+
if not chat:
|
|
26172
|
+
continue
|
|
26173
|
+
try:
|
|
26174
|
+
emojis = callGAPIpages(chat.customEmojis(), 'list', 'customEmojis',
|
|
26175
|
+
pageMessage=_getChatPageMessage(Ent.CHAT_EMOJI, user, i, count, pfilter),
|
|
26176
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
26177
|
+
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
26178
|
+
pageSize=CHAT_PAGE_SIZE, filter=pfilter)
|
|
26179
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26180
|
+
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
|
26181
|
+
continue
|
|
26182
|
+
except GAPI.failedPrecondition:
|
|
26183
|
+
userChatServiceNotEnabledWarning(user, i, count)
|
|
26184
|
+
break
|
|
26185
|
+
if not csvPF:
|
|
26186
|
+
jcount = len(emojis)
|
|
26187
|
+
if not FJQC.formatJSON:
|
|
26188
|
+
entityPerformActionNumItems(kvList, jcount, Ent.CHAT_EMOJI, i, count)
|
|
26189
|
+
Ind.Increment()
|
|
26190
|
+
j = 0
|
|
26191
|
+
for emoji in sorted(emojis, key=lambda k: k['emojiName']):
|
|
26192
|
+
j += 1
|
|
26193
|
+
_showChatItem(emoji, Ent.CHAT_EMOJI, FJQC, j, jcount)
|
|
26194
|
+
Ind.Decrement()
|
|
26195
|
+
else:
|
|
26196
|
+
for emoji in sorted(emojis, key=lambda k: k['emojiName']):
|
|
26197
|
+
_printChatItem(user, emoji, '', Ent.CHAT_EMOJI, csvPF, FJQC)
|
|
26198
|
+
if csvPF:
|
|
26199
|
+
csvPF.writeCSVfile('Chat Custom Emojis')
|
|
26200
|
+
|
|
26012
26201
|
# gam setup chat
|
|
26013
26202
|
def doSetupChat():
|
|
26014
26203
|
checkForExtraneousArguments()
|
|
@@ -26472,6 +26661,9 @@ def printShowChatSpaces(users):
|
|
|
26472
26661
|
substituteQueryTimes(queries, queryTimes)
|
|
26473
26662
|
pfilter = kwargsCS['query'] = queries[0]
|
|
26474
26663
|
kwargsCS['useAdminAccess'] = True
|
|
26664
|
+
sortName = 'displayName'
|
|
26665
|
+
else:
|
|
26666
|
+
sortName = 'name'
|
|
26475
26667
|
for user in users:
|
|
26476
26668
|
i += 1
|
|
26477
26669
|
user, chat, kvList = buildChatServiceObject(api, user, i, count, None, useAdminAccess)
|
|
@@ -26499,12 +26691,12 @@ def printShowChatSpaces(users):
|
|
|
26499
26691
|
entityPerformActionNumItems(kvList, jcount, Ent.CHAT_SPACE, i, count)
|
|
26500
26692
|
Ind.Increment()
|
|
26501
26693
|
j = 0
|
|
26502
|
-
for space in spaces:
|
|
26694
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
26503
26695
|
j += 1
|
|
26504
26696
|
_showChatItem(space, Ent.CHAT_SPACE, FJQC, j, jcount)
|
|
26505
26697
|
Ind.Decrement()
|
|
26506
26698
|
else:
|
|
26507
|
-
for space in spaces:
|
|
26699
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
26508
26700
|
_printChatItem(user, space, None, Ent.CHAT_SPACE, csvPF, FJQC)
|
|
26509
26701
|
if csvPF:
|
|
26510
26702
|
csvPF.writeCSVfile('Chat Spaces')
|
|
@@ -27139,6 +27331,9 @@ def printShowChatMembers(users):
|
|
|
27139
27331
|
i, count, users = getEntityArgument(users)
|
|
27140
27332
|
if useAdminAccess:
|
|
27141
27333
|
_chkChatAdminAccess(count)
|
|
27334
|
+
sortName = 'displayName'
|
|
27335
|
+
else:
|
|
27336
|
+
sortName = 'name'
|
|
27142
27337
|
for user in users:
|
|
27143
27338
|
i += 1
|
|
27144
27339
|
user, chat, kvList = buildChatServiceObject(api, user, i, count, [Ent.CHAT_SPACE, None], useAdminAccess)
|
|
@@ -27161,7 +27356,7 @@ def printShowChatMembers(users):
|
|
|
27161
27356
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
27162
27357
|
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
|
27163
27358
|
**kwargsCS)
|
|
27164
|
-
for space in spaces:
|
|
27359
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
27165
27360
|
if space['spaceType'] == 'SPACE' and 'membershipCount' in space:
|
|
27166
27361
|
parentList.append({'name': space['name'], 'displayName': space.get('displayName', 'None')})
|
|
27167
27362
|
except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError,
|
|
@@ -27178,7 +27373,7 @@ def printShowChatMembers(users):
|
|
|
27178
27373
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
27179
27374
|
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
|
27180
27375
|
**kwargsCS)
|
|
27181
|
-
for space in spaces:
|
|
27376
|
+
for space in sorted(spaces, key=lambda k: k[sortName]):
|
|
27182
27377
|
# if 'membershipCount' in space:
|
|
27183
27378
|
# parentList.append({'name': space['name'], 'displayName': space.get('displayName', 'None')})
|
|
27184
27379
|
parentList.append({'name': space['name'], 'displayName': space.get('displayName', 'None')})
|
|
@@ -67871,7 +68066,7 @@ def updatePhoto(users):
|
|
|
67871
68066
|
baseFileIdEntity = drive = owner = None
|
|
67872
68067
|
sourceFolder = os.getcwd()
|
|
67873
68068
|
if Cmd.NumArgumentsRemaining() == 1:
|
|
67874
|
-
filenamePattern = getString(Cmd.
|
|
68069
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67875
68070
|
else:
|
|
67876
68071
|
filenamePattern = '#email#.jpg'
|
|
67877
68072
|
while Cmd.ArgumentsRemaining():
|
|
@@ -67883,7 +68078,7 @@ def updatePhoto(users):
|
|
|
67883
68078
|
if not os.path.isdir(sourceFolder):
|
|
67884
68079
|
entityDoesNotExistExit(Ent.DIRECTORY, sourceFolder)
|
|
67885
68080
|
elif myarg == 'filename':
|
|
67886
|
-
filenamePattern = getString(Cmd.
|
|
68081
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67887
68082
|
elif myarg == 'gphoto':
|
|
67888
68083
|
owner, drive = buildGAPIServiceObject(API.DRIVE3, getEmailAddress())
|
|
67889
68084
|
if not drive:
|
|
@@ -67984,7 +68179,7 @@ def getPhoto(users, profileMode):
|
|
|
67984
68179
|
if not os.path.isdir(targetFolder):
|
|
67985
68180
|
os.makedirs(targetFolder)
|
|
67986
68181
|
elif myarg == 'filename':
|
|
67987
|
-
filenamePattern = getString(Cmd.
|
|
68182
|
+
filenamePattern = getString(Cmd.OB_FILE_NAME_PATTERN)
|
|
67988
68183
|
elif myarg == 'nofile':
|
|
67989
68184
|
writeFileData = False
|
|
67990
68185
|
elif myarg == 'noshow':
|
|
@@ -72411,8 +72606,23 @@ def updateFormRequestUpdateMasks(ubody):
|
|
|
72411
72606
|
v['updateMask'] = ','.join(v['updateMask'])
|
|
72412
72607
|
break
|
|
72413
72608
|
|
|
72609
|
+
def _initPublishSettings():
|
|
72610
|
+
return {'publishSettings': {'publishState': {'isPublished': False, 'isAcceptingResponses': False}},
|
|
72611
|
+
'updateMask': ''}
|
|
72612
|
+
|
|
72613
|
+
def _getPublishSettings(myarg, pbody):
|
|
72614
|
+
if myarg == 'ispublished':
|
|
72615
|
+
pbody['publishSettings']['publishState']['isPublished'] = getBoolean()
|
|
72616
|
+
elif myarg == 'isacceptingresponses':
|
|
72617
|
+
pbody['publishSettings']['publishState']['isAcceptingResponses'] = getBoolean()
|
|
72618
|
+
else:
|
|
72619
|
+
return False
|
|
72620
|
+
pbody['updateMask'] = 'publishState'
|
|
72621
|
+
return True
|
|
72622
|
+
|
|
72414
72623
|
# gam <UserTypeEntity> create form
|
|
72415
72624
|
# title <String> [description <String>] [isquiz [<Boolean>]] [<JSONData>]
|
|
72625
|
+
# [ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
|
72416
72626
|
# [drivefilename <DriveFileName>] [<DriveFileParentAttribute>]
|
|
72417
72627
|
# [(csv [todrive <ToDriveAttribute>*]) | returnidonly]
|
|
72418
72628
|
def createForm(users):
|
|
@@ -72421,6 +72631,7 @@ def createForm(users):
|
|
|
72421
72631
|
title = ''
|
|
72422
72632
|
body = {'mimeType': MIMETYPE_GA_FORM}
|
|
72423
72633
|
ubody = {'includeFormInResponse': True, 'requests': []}
|
|
72634
|
+
pbody = _initPublishSettings()
|
|
72424
72635
|
parentParms = initDriveFileAttributes()
|
|
72425
72636
|
while Cmd.ArgumentsRemaining():
|
|
72426
72637
|
myarg = getArgument()
|
|
@@ -72434,6 +72645,8 @@ def createForm(users):
|
|
|
72434
72645
|
elif myarg == 'json':
|
|
72435
72646
|
jsonData = getJSON([])
|
|
72436
72647
|
ubody['requests'].extend(jsonData.get('requests', []))
|
|
72648
|
+
elif _getPublishSettings(myarg, pbody):
|
|
72649
|
+
pass
|
|
72437
72650
|
elif myarg == 'drivefilename':
|
|
72438
72651
|
body['name'] = getString(Cmd.OB_DRIVE_FILE_NAME)
|
|
72439
72652
|
elif getDriveFileParentAttribute(myarg, parentParms):
|
|
@@ -72474,6 +72687,10 @@ def createForm(users):
|
|
|
72474
72687
|
form = callGAPI(gform.forms(), 'batchUpdate',
|
|
72475
72688
|
throwReasons=[GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
72476
72689
|
formId=formId, body=ubody)
|
|
72690
|
+
if pbody['updateMask']:
|
|
72691
|
+
callGAPI(gform.forms(), 'setPublishSettings',
|
|
72692
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
72693
|
+
formId=formId, body=pbody)
|
|
72477
72694
|
if returnIdOnly:
|
|
72478
72695
|
writeStdout(f'{formId}\n')
|
|
72479
72696
|
elif not csvPF:
|
|
@@ -72498,8 +72715,10 @@ def createForm(users):
|
|
|
72498
72715
|
|
|
72499
72716
|
# gam <UserTypeEntity> update form <DriveFileEntity>
|
|
72500
72717
|
# [title <String>] [description <String>] [isquiz [Boolean>]] [<JSONData>]
|
|
72718
|
+
# [ispublished [<Boolean>] isacceptingresponses [<Boolean>]]
|
|
72501
72719
|
def updateForm(users):
|
|
72502
72720
|
ubody = {'includeFormInResponse': False, 'requests': []}
|
|
72721
|
+
pbody = _initPublishSettings()
|
|
72503
72722
|
fileIdEntity = getDriveFileEntity()
|
|
72504
72723
|
while Cmd.ArgumentsRemaining():
|
|
72505
72724
|
myarg = getArgument()
|
|
@@ -72512,10 +72731,12 @@ def updateForm(users):
|
|
|
72512
72731
|
elif myarg == 'json':
|
|
72513
72732
|
jsonData = getJSON([])
|
|
72514
72733
|
ubody['requests'].extend(jsonData.get('requests', []))
|
|
72734
|
+
elif _getPublishSettings(myarg, pbody):
|
|
72735
|
+
pass
|
|
72515
72736
|
else:
|
|
72516
72737
|
unknownArgumentExit()
|
|
72517
72738
|
updateFormRequestUpdateMasks(ubody)
|
|
72518
|
-
if not ubody['requests']:
|
|
72739
|
+
if not ubody['requests'] and not pbody['updateMask']:
|
|
72519
72740
|
return
|
|
72520
72741
|
i, count, users = getEntityArgument(users)
|
|
72521
72742
|
for user in users:
|
|
@@ -72531,9 +72752,14 @@ def updateForm(users):
|
|
|
72531
72752
|
for formId in fileIdEntity['list']:
|
|
72532
72753
|
j += 1
|
|
72533
72754
|
try:
|
|
72534
|
-
|
|
72535
|
-
|
|
72536
|
-
|
|
72755
|
+
if ubody['requests']:
|
|
72756
|
+
callGAPI(gform.forms(), 'batchUpdate',
|
|
72757
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
72758
|
+
formId=formId, body=ubody)
|
|
72759
|
+
if pbody['updateMask']:
|
|
72760
|
+
callGAPI(gform.forms(), 'setPublishSettings',
|
|
72761
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
72762
|
+
formId=formId, body=pbody)
|
|
72537
72763
|
entityActionPerformed([Ent.USER, user, Ent.FORM, formId], j, jcount)
|
|
72538
72764
|
except (GAPI.notFound, GAPI.invalidArgument) as e:
|
|
72539
72765
|
entityActionFailedWarning([Ent.USER, user, Ent.FORM, formId], str(e), j, jcount)
|
|
@@ -76983,6 +77209,7 @@ USER_ADD_CREATE_FUNCTIONS = {
|
|
|
76983
77209
|
Cmd.ARG_CALENDAR: addCreateCalendars,
|
|
76984
77210
|
Cmd.ARG_GROUP: addUserToGroups,
|
|
76985
77211
|
Cmd.ARG_CALENDARACL: createCalendarACLs,
|
|
77212
|
+
Cmd.ARG_CHATEMOJI: createChatEmoji,
|
|
76986
77213
|
Cmd.ARG_CHATMEMBER: createChatMember,
|
|
76987
77214
|
Cmd.ARG_CHATMESSAGE: createChatMessage,
|
|
76988
77215
|
Cmd.ARG_CHATSPACE: createChatSpace,
|
|
@@ -77099,6 +77326,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77099
77326
|
Cmd.ARG_BACKUPCODE: deleteBackupCodes,
|
|
77100
77327
|
Cmd.ARG_CALENDAR: deleteCalendars,
|
|
77101
77328
|
Cmd.ARG_CALENDARACL: deleteCalendarACLs,
|
|
77329
|
+
Cmd.ARG_CHATEMOJI: deleteChatEmoji,
|
|
77102
77330
|
Cmd.ARG_CHATMEMBER: deleteUpdateChatMember,
|
|
77103
77331
|
Cmd.ARG_CHATMESSAGE: deleteChatMessage,
|
|
77104
77332
|
Cmd.ARG_CHATSPACE: deleteChatSpace,
|
|
@@ -77203,6 +77431,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77203
77431
|
(Act.INFO,
|
|
77204
77432
|
{Cmd.ARG_CALENDAR: infoCalendars,
|
|
77205
77433
|
Cmd.ARG_CALENDARACL: infoCalendarACLs,
|
|
77434
|
+
Cmd.ARG_CHATEMOJI: infoChatEmoji,
|
|
77206
77435
|
Cmd.ARG_CHATEVENT: infoChatEvent,
|
|
77207
77436
|
Cmd.ARG_CHATMEMBER: infoChatMember,
|
|
77208
77437
|
Cmd.ARG_CHATMESSAGE: infoChatMessage,
|
|
@@ -77275,6 +77504,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77275
77504
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
77276
77505
|
Cmd.ARG_CALENDARACL: printShowCalendarACLs,
|
|
77277
77506
|
Cmd.ARG_CALSETTINGS: printShowCalSettings,
|
|
77507
|
+
Cmd.ARG_CHATEMOJI: printShowChatEmojis,
|
|
77278
77508
|
Cmd.ARG_CHATEVENT: printShowChatEvents,
|
|
77279
77509
|
Cmd.ARG_CHATMEMBER: printShowChatMembers,
|
|
77280
77510
|
Cmd.ARG_CHATMESSAGE: printShowChatMessages,
|
|
@@ -77382,6 +77612,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
77382
77612
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
77383
77613
|
Cmd.ARG_CALENDARACL: printShowCalendarACLs,
|
|
77384
77614
|
Cmd.ARG_CALSETTINGS: printShowCalSettings,
|
|
77615
|
+
Cmd.ARG_CHATEMOJI: printShowChatEmojis,
|
|
77385
77616
|
Cmd.ARG_CHATEVENT: printShowChatEvents,
|
|
77386
77617
|
Cmd.ARG_CHATMEMBER: printShowChatMembers,
|
|
77387
77618
|
Cmd.ARG_CHATMESSAGE: printShowChatMessages,
|
|
@@ -77598,6 +77829,7 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
77598
77829
|
Cmd.ARG_CLASSIFICATIONLABELPERMISSION: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77599
77830
|
Cmd.ARG_CLASSIFICATIONLABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77600
77831
|
Cmd.ARG_CLASSROOMINVITATIONS: Cmd.ARG_CLASSROOMINVITATION,
|
|
77832
|
+
Cmd.ARG_CHATEMOJIS: Cmd.ARG_CHATEMOJI,
|
|
77601
77833
|
Cmd.ARG_CHATEVENTS: Cmd.ARG_CHATEVENT,
|
|
77602
77834
|
Cmd.ARG_CHATMEMBERS: Cmd.ARG_CHATMEMBER,
|
|
77603
77835
|
Cmd.ARG_CHATMESSAGES: Cmd.ARG_CHATMESSAGE,
|
|
@@ -26,6 +26,7 @@ ANALYTICS_ADMIN = 'analyticsadmin'
|
|
|
26
26
|
CALENDAR = 'calendar'
|
|
27
27
|
CBCM = 'cbcm'
|
|
28
28
|
CHAT = 'chat'
|
|
29
|
+
CHAT_CUSTOM_EMOJIS = 'chatcustomemojis'
|
|
29
30
|
CHAT_EVENTS = 'chatevents'
|
|
30
31
|
CHAT_MEMBERSHIPS = 'chatmemberships'
|
|
31
32
|
CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
|
|
@@ -210,6 +211,7 @@ _INFO = {
|
|
|
210
211
|
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
|
211
212
|
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
|
212
213
|
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True},
|
|
214
|
+
CHAT_CUSTOM_EMOJIS: {'name': 'Chat API - Custom Emojis', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
213
215
|
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
214
216
|
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
215
217
|
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
@@ -544,6 +546,10 @@ _SVCACCT_SCOPES = [
|
|
|
544
546
|
'api': CALENDAR,
|
|
545
547
|
'subscopes': READONLY,
|
|
546
548
|
'scope': 'https://www.googleapis.com/auth/calendar'},
|
|
549
|
+
{'name': 'Chat API - Custom Emojis',
|
|
550
|
+
'api': CHAT_CUSTOM_EMOJIS,
|
|
551
|
+
'subscopes': READONLY,
|
|
552
|
+
'scope': 'https://www.googleapis.com/auth/chat.customemojis'},
|
|
547
553
|
{'name': 'Chat API - Memberships',
|
|
548
554
|
'api': CHAT_MEMBERSHIPS,
|
|
549
555
|
'subscopes': READONLY,
|
|
@@ -644,7 +650,7 @@ _SVCACCT_SCOPES = [
|
|
|
644
650
|
'api': GMAIL,
|
|
645
651
|
'subscopes': [],
|
|
646
652
|
'scope': 'https://www.googleapis.com/auth/gmail.modify'},
|
|
647
|
-
{'name': 'Gmail API - Basic Settings (Filters,IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
|
653
|
+
{'name': 'Gmail API - Basic Settings (Filters, IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
|
648
654
|
'api': GMAIL,
|
|
649
655
|
'subscopes': [],
|
|
650
656
|
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
|
@@ -461,6 +461,8 @@ class GamCLArgs():
|
|
|
461
461
|
ARG_CHANNELSKU = 'channelsku'
|
|
462
462
|
ARG_CHANNELSKUS = 'channelskus'
|
|
463
463
|
ARG_CHAT = 'chat'
|
|
464
|
+
ARG_CHATEMOJI = 'chatemoji'
|
|
465
|
+
ARG_CHATEMOJIS = 'chatemojis'
|
|
464
466
|
ARG_CHATEVENT = 'chatevent'
|
|
465
467
|
ARG_CHATEVENTS = 'chatevents'
|
|
466
468
|
ARG_CHATMEMBER = 'chatmember'
|
|
@@ -843,6 +845,8 @@ class GamCLArgs():
|
|
|
843
845
|
OB_CHARACTER = 'Character'
|
|
844
846
|
OB_CHAR_SET = 'CharacterSet'
|
|
845
847
|
OG_CHAT_ATTACHMENT = 'ChatAttachment'
|
|
848
|
+
OB_CHAT_EMOJI = 'ChatEmoji'
|
|
849
|
+
OB_CHAT_EMOJI_NAME = 'ChatEmojiName'
|
|
846
850
|
OB_CHAT_EVENT = 'ChatEvent'
|
|
847
851
|
OB_CHAT_MEMBER = 'ChatMember'
|
|
848
852
|
OB_CHAT_MESSAGE = 'ChatMessage'
|
|
@@ -930,6 +934,7 @@ class GamCLArgs():
|
|
|
930
934
|
OB_FILE_NAME = 'FileName'
|
|
931
935
|
OB_FILE_NAME_FIELD_NAME = OB_FILE_NAME+'(:'+OB_FIELD_NAME+')+'
|
|
932
936
|
OB_FILE_NAME_OR_URL = 'FileName|URL'
|
|
937
|
+
OB_FILE_NAME_PATTERN = 'FileNamePattern'
|
|
933
938
|
OB_FILE_PATH = 'FilePath'
|
|
934
939
|
OB_FILTER_ID_ENTITY = 'FilterIDEntity'
|
|
935
940
|
OB_FORMAT_LIST = 'FormatList'
|
|
@@ -975,7 +980,6 @@ class GamCLArgs():
|
|
|
975
980
|
OB_PERMISSION_ID_LIST = 'PermissionIDList'
|
|
976
981
|
OB_PERMISSION_ROLE_LIST = 'PermissionRoleList'
|
|
977
982
|
OB_PERMISSION_TYPE_LIST = 'PermissionTypeList'
|
|
978
|
-
OB_PHOTO_FILENAME_PATTERN = 'FilenameNamePattern'
|
|
979
983
|
OB_PRINTER_ID = 'PrinterID'
|
|
980
984
|
OB_PRIVILEGE_LIST = 'PrivilegeList'
|
|
981
985
|
OB_PRODUCT_ID = 'ProductID'
|
|
@@ -86,6 +86,7 @@ class GamEntity():
|
|
|
86
86
|
CHANNEL_SKU = 'chsk'
|
|
87
87
|
CHAT_BOT = 'chbo'
|
|
88
88
|
CHAT_ADMIN = 'chad'
|
|
89
|
+
CHAT_EMOJI = 'chem'
|
|
89
90
|
CHAT_EVENT = 'chev'
|
|
90
91
|
CHAT_MANAGER_USER = 'chgu'
|
|
91
92
|
CHAT_MEMBER = 'chme'
|
|
@@ -436,6 +437,7 @@ class GamEntity():
|
|
|
436
437
|
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
|
437
438
|
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
|
438
439
|
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
|
440
|
+
CHAT_EMOJI: ['Chat Emojis', 'Chat Emoji'],
|
|
439
441
|
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
|
440
442
|
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
|
441
443
|
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
|
@@ -309,6 +309,7 @@ INVALID_ALIAS = 'Invalid Alias'
|
|
|
309
309
|
INVALID_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
|
310
310
|
INVALID_CHARSET = 'Invalid charset "{0}"'
|
|
311
311
|
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
|
312
|
+
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
|
312
313
|
INVALID_ENTITY = 'Invalid {0}, {1}'
|
|
313
314
|
INVALID_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
|
314
315
|
INVALID_FILE_SELECTION_WITH_ADMIN_ACCESS = 'Invalid file selection with adminaccess|asadmin'
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
banana|basil|blueberry|flamingo|graphite|grape|
|
|
97
97
|
lavender|peacock|sage|tangerine|tomato
|
|
98
98
|
<FileFormat> ::=
|
|
99
|
-
csv|doc|dot|docx|dotx|epub|html|jpeg|jpg|mht|odp|ods|odt|
|
|
99
|
+
csv|doc|dot|docx|dotx|epub|html|jpeg|jpg|json|mht|odp|ods|odt|
|
|
100
100
|
pdf|png|ppt|pot|potx|pptx|rtf|svg|tsv|txt|xls|xlt|xlsx|xltx|zip|
|
|
101
101
|
ms|microsoft|openoffice|
|
|
102
102
|
<LabelColorHex> ::=
|
|
@@ -278,6 +278,8 @@
|
|
|
278
278
|
domain:<DomainName>|domain|default
|
|
279
279
|
<CalendarItem> ::= <EmailAddress>
|
|
280
280
|
<ChannelCustomerID> ::= <String>
|
|
281
|
+
<ChatEmojiName> ::= :[0-9a-z_-]+:
|
|
282
|
+
<ChatEmoji> ::= emojiname <ChatEmojiName> | customemojis/<String>
|
|
281
283
|
<ChatMember> ::= spaces/<String>/members/<String>
|
|
282
284
|
<ChatMessage> ::= spaces/<String>/messages/<String>
|
|
283
285
|
<ChatSpace> ::= spaces/<String> | space <String> | space spaces/<String>
|