globus-cli 3.36.0__tar.gz → 3.37.0__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.
- {globus_cli-3.36.0/src/globus_cli.egg-info → globus_cli-3.37.0}/PKG-INFO +3 -3
- {globus_cli-3.36.0 → globus_cli-3.37.0}/pyproject.toml +3 -4
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/role/__init__.py +1 -0
- globus_cli-3.37.0/src/globus_cli/commands/collection/role/delete.py +23 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/delete.py +0 -1
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/rm.py +0 -1
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/transfer.py +0 -1
- globus_cli-3.37.0/src/globus_cli/termio/printers/unix_printer/_formatter.py +221 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/unix_printer/unix_printer.py +7 -4
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/version.py +1 -1
- {globus_cli-3.36.0 → globus_cli-3.37.0/src/globus_cli.egg-info}/PKG-INFO +3 -3
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/SOURCES.txt +2 -1
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/requires.txt +2 -2
- globus_cli-3.36.0/src/globus_cli/termio/printers/unix_printer/awscli_text.py +0 -127
- {globus_cli-3.36.0 → globus_cli-3.37.0}/LICENSE +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/README.rst +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/setup.cfg +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/__main__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/_click_compat.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/_warnings.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/_removal_stub.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/api.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/guest.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/role/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/role/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/search.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/resume.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/start.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/validate.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/set_subscription_admin_verified.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/set_subscription_id.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/get_identities.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/join.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/leave.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/add.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/approve.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/invite.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/reject.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/remove.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/set_policies.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/list_commands.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/login.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/logout.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/ls.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/mkdir.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/rename.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/ingest.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/query.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/subject/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/task/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/task/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/consent.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/stat.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/cancel.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/event_list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/pause_info.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/wait.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/_common.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/create/transfer.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/delete.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/list.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/pause.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/resume.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/show.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/update.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/version.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/whoami.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/constants.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/endpointish.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/entity_type.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/errors.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/auth_requirements.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/authapi_hooks.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/endpoint_types.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/flows_hooks.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/generic_hooks.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/search_hooks.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/transfer_hooks.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/messages.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/registry.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/globus_cli_flake8.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/_old_config.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/auth_flows.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/client_login.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/context.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/errors.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/local_server.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/manager.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/scopes.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/storage.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/utils.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/command_state.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/commands.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/mutex_group.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_classes.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/delimited.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/guest_activity_notify_param.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/location.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shell_completion.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/reflect.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/auth.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/gcs.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/activation.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/client.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/data.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/_display.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/context.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/errors.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/field.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/auth.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/base.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/compound.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/base.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/custom_printer.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/json_printer.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/record_printer.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/table_printer.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/unix_printer/__init__.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/server_timing.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/types.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/utils.py +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
- {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: globus-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.37.0
|
|
4
4
|
Summary: Globus CLI
|
|
5
5
|
Author-email: Stephen Rosen <sirosen@globus.org>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
19
|
Description-Content-Type: text/x-rst
|
|
20
20
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: globus-sdk==3.
|
|
22
|
-
Requires-Dist: click<
|
|
21
|
+
Requires-Dist: globus-sdk==3.63.0
|
|
22
|
+
Requires-Dist: click<8.3,>=8.1.4
|
|
23
23
|
Requires-Dist: jmespath==1.0.1
|
|
24
24
|
Requires-Dist: packaging>=17.0
|
|
25
25
|
Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
|
|
@@ -28,8 +28,8 @@ classifiers = [
|
|
|
28
28
|
]
|
|
29
29
|
requires-python = ">=3.9"
|
|
30
30
|
dependencies = [
|
|
31
|
-
"globus-sdk==3.
|
|
32
|
-
"click>=8.1.4,<
|
|
31
|
+
"globus-sdk==3.63.0",
|
|
32
|
+
"click>=8.1.4,<8.3",
|
|
33
33
|
"jmespath==1.0.1",
|
|
34
34
|
"packaging>=17.0",
|
|
35
35
|
"typing_extensions>=4.0;python_version<'3.11'",
|
|
@@ -69,7 +69,7 @@ test-mindeps = [
|
|
|
69
69
|
"typing_extensions==4.0",
|
|
70
70
|
]
|
|
71
71
|
typing = [
|
|
72
|
-
"mypy==1.
|
|
72
|
+
"mypy==1.18.1",
|
|
73
73
|
"types-jwt",
|
|
74
74
|
"types-requests",
|
|
75
75
|
"types-jmespath",
|
|
@@ -151,5 +151,4 @@ disallow_untyped_defs = false
|
|
|
151
151
|
disallow_incomplete_defs = false
|
|
152
152
|
module = [
|
|
153
153
|
"globus_cli.services.transfer.recursive_ls",
|
|
154
|
-
"globus_cli.termio.printers.unix_printer.awscli_text",
|
|
155
154
|
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
|
|
5
|
+
from globus_cli.login_manager import LoginManager
|
|
6
|
+
from globus_cli.parsing import collection_id_arg, command
|
|
7
|
+
from globus_cli.termio import display
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@command("delete")
|
|
11
|
+
@collection_id_arg
|
|
12
|
+
@click.argument("ROLE_ID", type=click.UUID)
|
|
13
|
+
@LoginManager.requires_login("transfer")
|
|
14
|
+
def delete_command(
|
|
15
|
+
login_manager: LoginManager,
|
|
16
|
+
*,
|
|
17
|
+
collection_id: uuid.UUID,
|
|
18
|
+
role_id: uuid.UUID,
|
|
19
|
+
) -> None:
|
|
20
|
+
"""Delete a particular role on a Collection."""
|
|
21
|
+
gcs_client = login_manager.get_gcs_client(collection_id=collection_id)
|
|
22
|
+
res = gcs_client.delete_role(role_id)
|
|
23
|
+
display(res, text_mode=display.RAW, response_key="code")
|
|
@@ -392,7 +392,6 @@ def transfer_command(
|
|
|
392
392
|
deadline=deadline,
|
|
393
393
|
skip_source_errors=skip_source_errors,
|
|
394
394
|
fail_on_quota_errors=fail_on_quota_errors,
|
|
395
|
-
skip_activation_check=skip_activation_check,
|
|
396
395
|
delete_destination_extra=(delete or delete_destination_extra),
|
|
397
396
|
source_local_user=source_local_user,
|
|
398
397
|
destination_local_user=destination_local_user,
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import typing as t
|
|
5
|
+
from itertools import chain
|
|
6
|
+
|
|
7
|
+
if sys.version_info >= (3, 10):
|
|
8
|
+
from typing import TypeAlias
|
|
9
|
+
else:
|
|
10
|
+
from typing_extensions import TypeAlias
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Scalar: TypeAlias = "str | int | float | bool | None"
|
|
14
|
+
NonScalar: TypeAlias = "list[Scalar | NonScalar] | dict[str, Scalar | NonScalar]"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class UnixFormattingError(ValueError):
|
|
18
|
+
"""Class of errors indicating that the data could not be formatted."""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def emit_any_value(item: Scalar | NonScalar) -> t.Iterator[str]:
|
|
22
|
+
"""
|
|
23
|
+
Emission of values is defined as yielding back each line of output.
|
|
24
|
+
|
|
25
|
+
Lists and dicts are handled specially. Any scalar value is just passed to Python
|
|
26
|
+
``str()``. Note that this means that null becomes "None" in our output.
|
|
27
|
+
"""
|
|
28
|
+
if isinstance(item, list):
|
|
29
|
+
yield from emit_list(item)
|
|
30
|
+
elif isinstance(item, dict):
|
|
31
|
+
yield from emit_dict(item)
|
|
32
|
+
else:
|
|
33
|
+
yield str(item)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def emit_list(
|
|
37
|
+
elements: list[Scalar | NonScalar],
|
|
38
|
+
identifier: str | None = None,
|
|
39
|
+
) -> t.Iterator[str]:
|
|
40
|
+
"""
|
|
41
|
+
Given a list, and optionally some identifier used to tag the output, emit lines of
|
|
42
|
+
output.
|
|
43
|
+
|
|
44
|
+
Supports:
|
|
45
|
+
list[dict] , list[scalar] , and list[list | scalar]
|
|
46
|
+
|
|
47
|
+
If the input mixes dicts and non-dict values, this function will raise a ValueError.
|
|
48
|
+
"""
|
|
49
|
+
# empty lists disappear in the output
|
|
50
|
+
if not elements:
|
|
51
|
+
return
|
|
52
|
+
|
|
53
|
+
# across these branches, mypy does not correctly narrow the type of `elements`
|
|
54
|
+
# so we need to type-ignore the argument type
|
|
55
|
+
if all(isinstance(item, dict) for item in elements):
|
|
56
|
+
yield from emit_list_of_dicts(
|
|
57
|
+
elements, # type: ignore[arg-type]
|
|
58
|
+
identifier=identifier,
|
|
59
|
+
)
|
|
60
|
+
elif any(isinstance(item, dict) for item in elements):
|
|
61
|
+
raise UnixFormattingError(
|
|
62
|
+
"Formatter cannot handle arrays which mix JSON objects "
|
|
63
|
+
"with other datatypes."
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
elif any(isinstance(item, list) for item in elements):
|
|
67
|
+
yield from emit_list_containing_lists(
|
|
68
|
+
elements, # type: ignore[arg-type]
|
|
69
|
+
identifier=identifier,
|
|
70
|
+
)
|
|
71
|
+
else:
|
|
72
|
+
yield from emit_scalar_list(
|
|
73
|
+
elements, # type: ignore[arg-type]
|
|
74
|
+
identifier=identifier,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def emit_scalar_list(
|
|
79
|
+
elements: list[Scalar], identifier: str | None = None
|
|
80
|
+
) -> t.Iterator[str]:
|
|
81
|
+
"""
|
|
82
|
+
Emit a list of scalars, with or without an identifier.
|
|
83
|
+
|
|
84
|
+
Given an identifier, each element is placed on a separate line of output:
|
|
85
|
+
|
|
86
|
+
>>> emit_scalar_list([1, 2], identifier="FOO")
|
|
87
|
+
FOO\t1
|
|
88
|
+
FOO\t2
|
|
89
|
+
|
|
90
|
+
Without an identifier, all elements are placed on the same line:
|
|
91
|
+
|
|
92
|
+
>>> emit_scalar_list([1, 2], identifier="FOO")
|
|
93
|
+
1\t2
|
|
94
|
+
"""
|
|
95
|
+
if identifier is not None:
|
|
96
|
+
for item in elements:
|
|
97
|
+
yield f"{identifier}\t{item}"
|
|
98
|
+
else:
|
|
99
|
+
yield "\t".join(str(item) for item in elements)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def emit_list_containing_lists(
|
|
103
|
+
elements: list[Scalar | list[Scalar | NonScalar]],
|
|
104
|
+
identifier: str | None = None,
|
|
105
|
+
) -> t.Iterator[str]:
|
|
106
|
+
"""
|
|
107
|
+
Emit a list which contains nested lists, potentially mixed with scalars.
|
|
108
|
+
First, the scalars are split off and emitted, then all of the nested lists are
|
|
109
|
+
emitted in order of appearance.
|
|
110
|
+
"""
|
|
111
|
+
scalars: list[Scalar] = []
|
|
112
|
+
nested: list[list[Scalar | NonScalar]] = []
|
|
113
|
+
for item in elements:
|
|
114
|
+
if isinstance(item, list):
|
|
115
|
+
nested.append(item)
|
|
116
|
+
else:
|
|
117
|
+
scalars.append(item)
|
|
118
|
+
|
|
119
|
+
if scalars:
|
|
120
|
+
yield from emit_scalar_list(scalars)
|
|
121
|
+
for nested_list in nested:
|
|
122
|
+
yield from emit_list(nested_list, identifier=identifier)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def emit_list_of_dicts(
|
|
126
|
+
elements: list[dict[str, Scalar | NonScalar]], identifier: str | None = None
|
|
127
|
+
) -> t.Iterator[str]:
|
|
128
|
+
keys = extract_scalar_keys(elements)
|
|
129
|
+
for item in elements:
|
|
130
|
+
yield from emit_dict(item, identifier=identifier, scalar_keys=keys)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def emit_dict(
|
|
134
|
+
item: dict[str, Scalar | NonScalar],
|
|
135
|
+
identifier: str | None = None,
|
|
136
|
+
scalar_keys: list[str] | None = None,
|
|
137
|
+
) -> t.Iterator[str]:
|
|
138
|
+
if scalar_keys is None:
|
|
139
|
+
scalar_keys = extract_scalar_keys(item)
|
|
140
|
+
scalars, non_scalars = partition_dict(item, scalar_keys)
|
|
141
|
+
|
|
142
|
+
if scalars:
|
|
143
|
+
if identifier is not None:
|
|
144
|
+
yield identifier
|
|
145
|
+
yield "\t".join(str(s) for s in scalars)
|
|
146
|
+
|
|
147
|
+
for subkey, value in non_scalars:
|
|
148
|
+
if isinstance(value, list):
|
|
149
|
+
yield from emit_list(value, identifier=subkey.upper())
|
|
150
|
+
else:
|
|
151
|
+
yield from emit_dict(value, identifier=subkey.upper())
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def partition_dict(
|
|
155
|
+
item: dict[str, Scalar | NonScalar], scalar_keys: list[str]
|
|
156
|
+
) -> tuple[list[Scalar], list[tuple[str, NonScalar]]]:
|
|
157
|
+
"""
|
|
158
|
+
Given a dict and a collection of keys for its scalar parts, split it into two lists
|
|
159
|
+
representing the scalar and non-scalar parts.
|
|
160
|
+
The non-scalar parts retain their keys.
|
|
161
|
+
|
|
162
|
+
This method assumes that the 'scalar_keys' provided are correct to the dict in
|
|
163
|
+
question.
|
|
164
|
+
"""
|
|
165
|
+
scalars: list[Scalar] = []
|
|
166
|
+
non_scalars: list[tuple[str, NonScalar]] = []
|
|
167
|
+
|
|
168
|
+
non_scalar_keys = sorted(set(item.keys()) - set(scalar_keys))
|
|
169
|
+
|
|
170
|
+
for key in scalar_keys:
|
|
171
|
+
value = item.get(key)
|
|
172
|
+
|
|
173
|
+
# we are not guaranteed that the scalar keys really map to scalars
|
|
174
|
+
# but if they don't, formatting will break, so error early
|
|
175
|
+
if isinstance(value, (list, dict)):
|
|
176
|
+
raise UnixFormattingError(
|
|
177
|
+
"Error during UNIX formatting of response data. "
|
|
178
|
+
"Lists where key-value mappings are not uniformly scalar or non-scalar "
|
|
179
|
+
"are not supported."
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
scalars.append(str(value))
|
|
183
|
+
|
|
184
|
+
for key in non_scalar_keys:
|
|
185
|
+
value = item[key]
|
|
186
|
+
|
|
187
|
+
# converse of the above: we are not "guaranteed" that the non-scalar keys
|
|
188
|
+
# do not map to scalars on a heterogeneous list[dict] structure
|
|
189
|
+
#
|
|
190
|
+
# in practice, this is not reachable because `extract_scalar_keys()` prefers
|
|
191
|
+
# to categorize data as scalar
|
|
192
|
+
if not isinstance(value, (list, dict)):
|
|
193
|
+
raise UnixFormattingError(
|
|
194
|
+
"Error during UNIX formatting of response data. "
|
|
195
|
+
"Lists where key-value mappings are not uniformly scalar or non-scalar "
|
|
196
|
+
"are not supported."
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
non_scalars.append((key, value))
|
|
200
|
+
|
|
201
|
+
return scalars, non_scalars
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def extract_scalar_keys(
|
|
205
|
+
element_or_elements: (
|
|
206
|
+
dict[str, Scalar | NonScalar] | list[dict[str, Scalar | NonScalar]]
|
|
207
|
+
),
|
|
208
|
+
) -> list[str]:
|
|
209
|
+
if isinstance(element_or_elements, dict):
|
|
210
|
+
elements: list[dict[str, Scalar | NonScalar]] = [element_or_elements]
|
|
211
|
+
else:
|
|
212
|
+
elements = element_or_elements
|
|
213
|
+
|
|
214
|
+
seen: set[str] = set()
|
|
215
|
+
for key, value in chain(*(item.items() for item in elements)):
|
|
216
|
+
if key in seen:
|
|
217
|
+
continue
|
|
218
|
+
if isinstance(value, (dict, list)):
|
|
219
|
+
continue
|
|
220
|
+
seen.add(key)
|
|
221
|
+
return sorted(seen)
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/unix_printer/unix_printer.py
RENAMED
|
@@ -8,7 +8,7 @@ import globus_sdk
|
|
|
8
8
|
from globus_cli.types import JsonValue
|
|
9
9
|
|
|
10
10
|
from ..base import Printer
|
|
11
|
-
from .
|
|
11
|
+
from ._formatter import UnixFormattingError, emit_any_value
|
|
12
12
|
|
|
13
13
|
DataObject = t.Union[JsonValue, globus_sdk.GlobusHTTPResponse]
|
|
14
14
|
|
|
@@ -25,15 +25,18 @@ class UnixPrinter(Printer[DataObject]):
|
|
|
25
25
|
res = UnixPrinter.jmespath_preprocess(data)
|
|
26
26
|
|
|
27
27
|
try:
|
|
28
|
-
|
|
28
|
+
for line in emit_any_value(res):
|
|
29
|
+
click.echo(line, file=stream)
|
|
30
|
+
|
|
29
31
|
# Attr errors indicate that we got data which cannot be unix formatted
|
|
30
32
|
# likely a scalar + non-scalar in an array, though there may be other cases
|
|
31
33
|
# print good error and exit(2) (Count this as UsageError!)
|
|
32
|
-
except
|
|
34
|
+
except UnixFormattingError as err:
|
|
33
35
|
click.echo(
|
|
34
36
|
"UNIX formatting of output failed."
|
|
37
|
+
f"\n{err}"
|
|
35
38
|
"\n "
|
|
36
|
-
"This
|
|
39
|
+
"This means that data has a structure which cannot be "
|
|
37
40
|
"handled by the UNIX formatter."
|
|
38
41
|
"\n "
|
|
39
42
|
"To avoid this error in the future, ensure that you query the "
|
|
@@ -7,7 +7,7 @@ if t.TYPE_CHECKING:
|
|
|
7
7
|
|
|
8
8
|
# single source of truth for package version,
|
|
9
9
|
# see https://packaging.python.org/en/latest/single_source_version/
|
|
10
|
-
__version__ = "3.
|
|
10
|
+
__version__ = "3.37.0"
|
|
11
11
|
|
|
12
12
|
# app name to send as part of SDK requests
|
|
13
13
|
app_name = f"Globus CLI v{__version__}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: globus-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.37.0
|
|
4
4
|
Summary: Globus CLI
|
|
5
5
|
Author-email: Stephen Rosen <sirosen@globus.org>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
19
|
Description-Content-Type: text/x-rst
|
|
20
20
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: globus-sdk==3.
|
|
22
|
-
Requires-Dist: click<
|
|
21
|
+
Requires-Dist: globus-sdk==3.63.0
|
|
22
|
+
Requires-Dist: click<8.3,>=8.1.4
|
|
23
23
|
Requires-Dist: jmespath==1.0.1
|
|
24
24
|
Requires-Dist: packaging>=17.0
|
|
25
25
|
Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
|
|
@@ -53,6 +53,7 @@ src/globus_cli/commands/collection/create/__init__.py
|
|
|
53
53
|
src/globus_cli/commands/collection/create/guest.py
|
|
54
54
|
src/globus_cli/commands/collection/create/mapped.py
|
|
55
55
|
src/globus_cli/commands/collection/role/__init__.py
|
|
56
|
+
src/globus_cli/commands/collection/role/delete.py
|
|
56
57
|
src/globus_cli/commands/collection/role/list.py
|
|
57
58
|
src/globus_cli/commands/collection/role/show.py
|
|
58
59
|
src/globus_cli/commands/endpoint/__init__.py
|
|
@@ -270,5 +271,5 @@ src/globus_cli/termio/printers/json_printer.py
|
|
|
270
271
|
src/globus_cli/termio/printers/record_printer.py
|
|
271
272
|
src/globus_cli/termio/printers/table_printer.py
|
|
272
273
|
src/globus_cli/termio/printers/unix_printer/__init__.py
|
|
273
|
-
src/globus_cli/termio/printers/unix_printer/
|
|
274
|
+
src/globus_cli/termio/printers/unix_printer/_formatter.py
|
|
274
275
|
src/globus_cli/termio/printers/unix_printer/unix_printer.py
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# pulled from the AWSCLI and modified by Globus
|
|
2
|
-
# note that this file has also been modified by auotfixers (e.g. black, pyupgrade)
|
|
3
|
-
|
|
4
|
-
# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
7
|
-
# may not use this file except in compliance with the License. A copy of
|
|
8
|
-
# the License is located at
|
|
9
|
-
#
|
|
10
|
-
# http://aws.amazon.com/apache2.0/
|
|
11
|
-
#
|
|
12
|
-
# or in the "license" file accompanying this file. This file is
|
|
13
|
-
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
14
|
-
# ANY KIND, either express or implied. See the License for the specific
|
|
15
|
-
# language governing permissions and limitations under the License.
|
|
16
|
-
|
|
17
|
-
import errno
|
|
18
|
-
import sys
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def _format_text(item, stream, identifier=None, scalar_keys=None):
|
|
22
|
-
if isinstance(item, dict):
|
|
23
|
-
_format_dict(scalar_keys, item, identifier, stream)
|
|
24
|
-
elif isinstance(item, list):
|
|
25
|
-
_format_list(item, identifier, stream)
|
|
26
|
-
else:
|
|
27
|
-
# If it's not a list or a dict, we just write the scalar
|
|
28
|
-
# value out directly.
|
|
29
|
-
stream.write(str(item))
|
|
30
|
-
stream.write("\n")
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def _format_list(item, identifier, stream):
|
|
34
|
-
if not item:
|
|
35
|
-
return
|
|
36
|
-
if any(isinstance(el, dict) for el in item):
|
|
37
|
-
all_keys = _all_scalar_keys(item)
|
|
38
|
-
for element in item:
|
|
39
|
-
_format_text(
|
|
40
|
-
element, stream=stream, identifier=identifier, scalar_keys=all_keys
|
|
41
|
-
)
|
|
42
|
-
elif any(isinstance(el, list) for el in item):
|
|
43
|
-
scalar_elements, non_scalars = _partition_list(item)
|
|
44
|
-
if scalar_elements:
|
|
45
|
-
_format_scalar_list(scalar_elements, identifier, stream)
|
|
46
|
-
for non_scalar in non_scalars:
|
|
47
|
-
_format_text(non_scalar, stream=stream, identifier=identifier)
|
|
48
|
-
else:
|
|
49
|
-
_format_scalar_list(item, identifier, stream)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def _partition_list(item):
|
|
53
|
-
scalars = []
|
|
54
|
-
non_scalars = []
|
|
55
|
-
for element in item:
|
|
56
|
-
if isinstance(element, (list, dict)):
|
|
57
|
-
non_scalars.append(element)
|
|
58
|
-
else:
|
|
59
|
-
scalars.append(element)
|
|
60
|
-
return scalars, non_scalars
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def _format_scalar_list(elements, identifier, stream):
|
|
64
|
-
if identifier is not None:
|
|
65
|
-
for item in elements:
|
|
66
|
-
stream.write(f"{identifier.upper()}\t{item}\n")
|
|
67
|
-
else:
|
|
68
|
-
# For a bare list, just print the contents.
|
|
69
|
-
stream.write("\t".join([str(item) for item in elements]))
|
|
70
|
-
stream.write("\n")
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def _format_dict(scalar_keys, item, identifier, stream):
|
|
74
|
-
scalars, non_scalars = _partition_dict(item, scalar_keys=scalar_keys)
|
|
75
|
-
if scalars:
|
|
76
|
-
if identifier is not None:
|
|
77
|
-
scalars.insert(0, identifier.upper())
|
|
78
|
-
stream.write("\t".join(scalars))
|
|
79
|
-
stream.write("\n")
|
|
80
|
-
for new_identifier, non_scalar in non_scalars:
|
|
81
|
-
_format_text(item=non_scalar, stream=stream, identifier=new_identifier)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def _all_scalar_keys(list_of_dicts):
|
|
85
|
-
keys_seen = set()
|
|
86
|
-
for item_dict in list_of_dicts:
|
|
87
|
-
for key, value in item_dict.items():
|
|
88
|
-
if not isinstance(value, (dict, list)):
|
|
89
|
-
keys_seen.add(key)
|
|
90
|
-
return sorted(keys_seen)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def _partition_dict(item_dict, scalar_keys):
|
|
94
|
-
# Given a dictionary, partition it into two list based on the
|
|
95
|
-
# values associated with the keys.
|
|
96
|
-
# {'foo': 'scalar', 'bar': 'scalar', 'baz': ['not, 'scalar']}
|
|
97
|
-
# scalar = [('foo', 'scalar'), ('bar', 'scalar')]
|
|
98
|
-
# non_scalar = [('baz', ['not', 'scalar'])]
|
|
99
|
-
scalar = []
|
|
100
|
-
non_scalar = []
|
|
101
|
-
if scalar_keys is None:
|
|
102
|
-
# scalar_keys can have more than just the keys in the item_dict,
|
|
103
|
-
# but if user does not provide scalar_keys, we'll grab the keys
|
|
104
|
-
# from the current item_dict
|
|
105
|
-
for key, value in sorted(item_dict.items()):
|
|
106
|
-
if isinstance(value, (dict, list)):
|
|
107
|
-
non_scalar.append((key, value))
|
|
108
|
-
else:
|
|
109
|
-
scalar.append(str(value))
|
|
110
|
-
else:
|
|
111
|
-
for key in scalar_keys:
|
|
112
|
-
scalar.append(str(item_dict.get(key, "")))
|
|
113
|
-
remaining_keys = sorted(set(item_dict.keys()) - set(scalar_keys))
|
|
114
|
-
for remaining_key in remaining_keys:
|
|
115
|
-
non_scalar.append((remaining_key, item_dict[remaining_key]))
|
|
116
|
-
return scalar, non_scalar
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def unix_display(data, stream):
|
|
120
|
-
_format_text(data, stream or sys.stdout)
|
|
121
|
-
try:
|
|
122
|
-
sys.stdout.flush()
|
|
123
|
-
except OSError as err:
|
|
124
|
-
if err.errno is errno.EPIPE:
|
|
125
|
-
pass
|
|
126
|
-
else:
|
|
127
|
-
raise
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py
RENAMED
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/__init__.py
RENAMED
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/_common.py
RENAMED
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/create.py
RENAMED
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/delete.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|