globus-cli 3.38.0__tar.gz → 3.40.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.38.0/src/globus_cli.egg-info → globus_cli-3.40.0}/PKG-INFO +2 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/pyproject.toml +2 -5
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/api.py +19 -7
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/delete.py +11 -7
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/list.py +1 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/role/list.py +1 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/search.py +10 -7
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +2 -6
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +8 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +5 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +5 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/list.py +5 -4
- globus_cli-3.40.0/src/globus_cli/commands/flows/_common.py +284 -0
- globus_cli-3.40.0/src/globus_cli/commands/flows/_fields.py +113 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/create.py +26 -47
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/delete.py +8 -13
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/list.py +7 -5
- globus_cli-3.40.0/src/globus_cli/commands/flows/run/cancel.py +28 -0
- globus_cli-3.40.0/src/globus_cli/commands/flows/run/delete.py +28 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/run/resume.py +15 -15
- globus_cli-3.40.0/src/globus_cli/commands/flows/run/show.py +49 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/run/show_definition.py +4 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/run/show_logs.py +15 -9
- globus_cli-3.40.0/src/globus_cli/commands/flows/run/update.py +83 -0
- globus_cli-3.40.0/src/globus_cli/commands/flows/show.py +27 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/start.py +35 -78
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/update.py +78 -84
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/set_subscription_id.py +2 -3
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/get_subscription_info.py +1 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/login.py +53 -8
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/ls.py +3 -3
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/mkdir.py +2 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/rename.py +2 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/rm.py +11 -7
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/_common.py +1 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/session/update.py +9 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/stat.py +1 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/_common.py +69 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/create/__init__.py +4 -1
- globus_cli-3.40.0/src/globus_cli/commands/timer/create/_common.py +152 -0
- globus_cli-3.40.0/src/globus_cli/commands/timer/create/flow.py +82 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/create/transfer.py +21 -104
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/transfer.py +33 -22
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/__init__.py +2 -4
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/auth_requirements.py +1 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/messages.py +16 -11
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/registry.py +19 -5
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/manager.py +66 -21
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/scopes.py +8 -11
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/storage.py +1 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/__init__.py +12 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/__init__.py +12 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/delimited.py +15 -2
- globus_cli-3.40.0/src/globus_cli/parsing/param_types/omittable.py +113 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/shared_options/__init__.py +34 -8
- globus_cli-3.40.0/src/globus_cli/parsing/shared_options/flow_options.py +27 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +14 -4
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/auth.py +0 -7
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/transfer/client.py +1 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/transfer/data.py +26 -6
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/formatters/auth.py +16 -8
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/utils.py +35 -8
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/version.py +1 -1
- {globus_cli-3.38.0 → globus_cli-3.40.0/src/globus_cli.egg-info}/PKG-INFO +2 -2
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli.egg-info/SOURCES.txt +5 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli.egg-info/requires.txt +1 -1
- globus_cli-3.38.0/src/globus_cli/commands/flows/_common.py +0 -143
- globus_cli-3.38.0/src/globus_cli/commands/flows/run/cancel.py +0 -31
- globus_cli-3.38.0/src/globus_cli/commands/flows/run/delete.py +0 -31
- globus_cli-3.38.0/src/globus_cli/commands/flows/run/show.py +0 -77
- globus_cli-3.38.0/src/globus_cli/commands/flows/run/update.py +0 -109
- globus_cli-3.38.0/src/globus_cli/commands/flows/show.py +0 -69
- {globus_cli-3.38.0 → globus_cli-3.40.0}/LICENSE +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/README.rst +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/setup.cfg +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/__main__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/_click_compat.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/_warnings.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/_removal_stub.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/bookmark/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/create/guest.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/role/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/role/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/role/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/role/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/collection/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/run/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/flows/validate.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/set_subscription_admin_verified.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/gcs/endpoint/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/get_identities.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/join.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/leave.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/add.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/approve.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/invite.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/reject.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/member/remove.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/set_policies.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/set_subscription_admin_verified.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/group/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/list_commands.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/logout.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/index/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/ingest.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/query.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/subject/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/task/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/search/task/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/session/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/session/consent.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/session/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/_common.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/cancel.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/event_list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/pause_info.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/task/wait.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/delete.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/list.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/pause.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/resume.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/timer/show.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/update.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/version.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/whoami.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/constants.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/endpointish/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/endpointish/endpointish.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/endpointish/entity_type.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/endpointish/errors.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/authapi_hooks.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/endpoint_types.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/flows_hooks.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/generic_hooks.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/search_hooks.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/exception_handling/hooks/transfer_hooks.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/globus_cli_flake8.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/_old_config.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/auth_flows.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/client_login.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/context.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/errors.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/local_server.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/login_manager/utils.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/command_state.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/commands.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/mutex_group.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_classes.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/guest_activity_notify_param.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/location.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/parsing/shell_completion.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/reflect.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/gcs.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/transfer/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/transfer/activation.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/_display.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/context.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/errors.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/field.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/formatters/base.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/formatters/compound.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/base.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/custom_printer.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/json_printer.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/record_printer.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/table_printer.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/unix_printer/__init__.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/unix_printer/_formatter.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/printers/unix_printer/unix_printer.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/termio/server_timing.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/types.py +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
- {globus_cli-3.38.0 → globus_cli-3.40.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.40.0
|
|
4
4
|
Summary: Globus CLI
|
|
5
5
|
Author-email: Stephen Rosen <sirosen@globus.org>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,7 +18,7 @@ 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==
|
|
21
|
+
Requires-Dist: globus-sdk==4.1.0
|
|
22
22
|
Requires-Dist: click<8.4,>=8.1.4
|
|
23
23
|
Requires-Dist: jmespath==1.0.1
|
|
24
24
|
Requires-Dist: packaging>=17.0
|
|
@@ -28,7 +28,7 @@ classifiers = [
|
|
|
28
28
|
]
|
|
29
29
|
requires-python = ">=3.9"
|
|
30
30
|
dependencies = [
|
|
31
|
-
"globus-sdk==
|
|
31
|
+
"globus-sdk==4.1.0",
|
|
32
32
|
"click>=8.1.4,<8.4",
|
|
33
33
|
"jmespath==1.0.1",
|
|
34
34
|
"packaging>=17.0",
|
|
@@ -49,7 +49,7 @@ globus = "globus_cli:main"
|
|
|
49
49
|
coverage = [
|
|
50
50
|
"coverage[toml]>=7.10"
|
|
51
51
|
]
|
|
52
|
-
yaml = ["ruamel.yaml==0.18.
|
|
52
|
+
yaml = ["ruamel.yaml==0.18.16"]
|
|
53
53
|
test = [
|
|
54
54
|
{include-group = "coverage"},
|
|
55
55
|
{include-group = "yaml"}, # loading test fixture data
|
|
@@ -96,9 +96,6 @@ profile = "black"
|
|
|
96
96
|
addopts = "-n auto --maxprocesses 4 --dist loadscope --timeout 3 --color=yes"
|
|
97
97
|
filterwarnings = [
|
|
98
98
|
"error",
|
|
99
|
-
# ignore SDK warnings for 'filter_role' until
|
|
100
|
-
# 'filter_roles' update is applied
|
|
101
|
-
"ignore:The `filter_role` parameter is deprecated.:globus_sdk.exc.RemovedInV4Warning:",
|
|
102
99
|
]
|
|
103
100
|
|
|
104
101
|
[tool.coverage.run]
|
|
@@ -7,6 +7,7 @@ from collections import defaultdict
|
|
|
7
7
|
|
|
8
8
|
import click
|
|
9
9
|
import globus_sdk
|
|
10
|
+
from globus_sdk.scopes import ScopeParser
|
|
10
11
|
|
|
11
12
|
from globus_cli import termio, version
|
|
12
13
|
from globus_cli._click_compat import shim_get_metavar
|
|
@@ -137,7 +138,7 @@ def _get_resource_server(service_name: str) -> str:
|
|
|
137
138
|
"groups": globus_sdk.GroupsClient.resource_server,
|
|
138
139
|
"search": globus_sdk.SearchClient.resource_server,
|
|
139
140
|
"transfer": globus_sdk.TransferClient.resource_server,
|
|
140
|
-
"timers": globus_sdk.
|
|
141
|
+
"timers": globus_sdk.TimersClient.resource_server,
|
|
141
142
|
}.get(service_name)
|
|
142
143
|
if _resource_server is None:
|
|
143
144
|
raise NotImplementedError(f"unrecognized service: {service_name}")
|
|
@@ -282,7 +283,7 @@ def _execute_service_command(
|
|
|
282
283
|
|
|
283
284
|
client.app_name = version.app_name + " raw-api-command"
|
|
284
285
|
if no_retry:
|
|
285
|
-
client.
|
|
286
|
+
client.retry_config.max_retries = 0
|
|
286
287
|
|
|
287
288
|
# Prepare Query Params
|
|
288
289
|
query_params_d = defaultdict(list)
|
|
@@ -316,9 +317,17 @@ def _execute_service_command(
|
|
|
316
317
|
for header_name, header_value in header:
|
|
317
318
|
headers_d[header_name] = header_value
|
|
318
319
|
|
|
319
|
-
#
|
|
320
|
-
|
|
321
|
-
|
|
320
|
+
# Legacy Behavior: add '/v2/' and '/v0.10/' base paths to Groups and Transfer
|
|
321
|
+
# this was inherited from globus-sdk v3
|
|
322
|
+
# removing it should be done in a controlled manner
|
|
323
|
+
if isinstance(client, globus_sdk.GroupsClient) and not path.startswith("/v2/"):
|
|
324
|
+
if path.startswith("/"):
|
|
325
|
+
path = path[1:]
|
|
326
|
+
path = f"/v2/{path}"
|
|
327
|
+
if isinstance(client, globus_sdk.TransferClient) and not path.startswith("/v0.10/"):
|
|
328
|
+
if path.startswith("/"):
|
|
329
|
+
path = path[1:]
|
|
330
|
+
path = f"/v0.10/{path}"
|
|
322
331
|
|
|
323
332
|
# try sending and handle any error
|
|
324
333
|
try:
|
|
@@ -342,14 +351,17 @@ def _execute_service_command(
|
|
|
342
351
|
def _handle_scope_string(
|
|
343
352
|
login_manager: LoginManager,
|
|
344
353
|
resource_server: str,
|
|
345
|
-
|
|
354
|
+
scope_strings: tuple[str, ...],
|
|
346
355
|
) -> None:
|
|
347
356
|
if not is_client_login():
|
|
348
357
|
raise click.UsageError(
|
|
349
358
|
"Scope requirements (--scope-string) are currently only "
|
|
350
359
|
"supported for confidential-client authorized calls."
|
|
351
360
|
)
|
|
352
|
-
login_manager.add_requirement(
|
|
361
|
+
login_manager.add_requirement(
|
|
362
|
+
resource_server,
|
|
363
|
+
tuple(scope for s in scope_strings for scope in ScopeParser.parse(s)),
|
|
364
|
+
)
|
|
353
365
|
|
|
354
366
|
|
|
355
367
|
@group("api")
|
|
@@ -17,6 +17,7 @@ from globus_cli.parsing import (
|
|
|
17
17
|
task_submission_options,
|
|
18
18
|
)
|
|
19
19
|
from globus_cli.termio import Field, display, err_is_terminal, term_is_interactive
|
|
20
|
+
from globus_cli.utils import make_dict_json_serializable
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
@command(
|
|
@@ -74,16 +75,16 @@ def delete_command(
|
|
|
74
75
|
batch: t.TextIO | None,
|
|
75
76
|
ignore_missing: bool,
|
|
76
77
|
star_silent: bool,
|
|
77
|
-
recursive: bool,
|
|
78
|
+
recursive: bool | globus_sdk.MissingType,
|
|
78
79
|
enable_globs: bool,
|
|
79
80
|
endpoint_plus_path: tuple[uuid.UUID, str | None],
|
|
80
|
-
label: str |
|
|
81
|
-
submission_id: str |
|
|
81
|
+
label: str | globus_sdk.MissingType,
|
|
82
|
+
submission_id: str | globus_sdk.MissingType,
|
|
82
83
|
dry_run: bool,
|
|
83
|
-
deadline: str |
|
|
84
|
+
deadline: str | globus_sdk.MissingType,
|
|
84
85
|
skip_activation_check: bool,
|
|
85
86
|
notify: dict[str, bool],
|
|
86
|
-
local_user: str |
|
|
87
|
+
local_user: str | globus_sdk.MissingType,
|
|
87
88
|
) -> None:
|
|
88
89
|
"""
|
|
89
90
|
Submits an asynchronous task that deletes files and/or directories on the target
|
|
@@ -122,7 +123,6 @@ def delete_command(
|
|
|
122
123
|
transfer_client = login_manager.get_transfer_client()
|
|
123
124
|
|
|
124
125
|
delete_data = globus_sdk.DeleteData(
|
|
125
|
-
transfer_client,
|
|
126
126
|
endpoint_id,
|
|
127
127
|
label=label,
|
|
128
128
|
recursive=recursive,
|
|
@@ -173,7 +173,11 @@ def delete_command(
|
|
|
173
173
|
delete_data.add_item(path)
|
|
174
174
|
|
|
175
175
|
if dry_run:
|
|
176
|
-
display(
|
|
176
|
+
display(
|
|
177
|
+
make_dict_json_serializable(delete_data),
|
|
178
|
+
response_key="DATA",
|
|
179
|
+
fields=[Field("Path", "path")],
|
|
180
|
+
)
|
|
177
181
|
# exit safely
|
|
178
182
|
return
|
|
179
183
|
|
|
@@ -29,8 +29,7 @@ def list_command(login_manager: LoginManager, *, endpoint_id: uuid.UUID) -> None
|
|
|
29
29
|
rules = transfer_client.endpoint_acl_list(endpoint_id)
|
|
30
30
|
|
|
31
31
|
formatter = AclPrincipalFormatter(auth_client)
|
|
32
|
-
|
|
33
|
-
formatter.add_item(r)
|
|
32
|
+
formatter.add_items(*rules)
|
|
34
33
|
|
|
35
34
|
display(
|
|
36
35
|
rules,
|
|
@@ -41,8 +41,7 @@ def role_list(login_manager: LoginManager, *, endpoint_id: uuid.UUID) -> None:
|
|
|
41
41
|
roles = transfer_client.endpoint_role_list(endpoint_id)
|
|
42
42
|
|
|
43
43
|
formatter = RolePrincipalFormatter(login_manager.get_auth_client())
|
|
44
|
-
|
|
45
|
-
formatter.add_item(r)
|
|
44
|
+
formatter.add_items(*roles)
|
|
46
45
|
|
|
47
46
|
display(
|
|
48
47
|
roles,
|
|
@@ -3,10 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
import typing as t
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
|
+
import globus_sdk
|
|
6
7
|
from globus_sdk.paging import Paginator
|
|
7
8
|
|
|
8
9
|
from globus_cli.login_manager import LoginManager
|
|
9
|
-
from globus_cli.parsing import command
|
|
10
|
+
from globus_cli.parsing import OMITTABLE_STRING, OmittableChoice, command
|
|
10
11
|
from globus_cli.termio import display
|
|
11
12
|
from globus_cli.utils import PagingWrapper
|
|
12
13
|
|
|
@@ -70,8 +71,8 @@ $ globus endpoint search --filter-scope my-endpoints
|
|
|
70
71
|
)
|
|
71
72
|
@click.option(
|
|
72
73
|
"--filter-entity-type",
|
|
73
|
-
default=
|
|
74
|
-
type=
|
|
74
|
+
default=globus_sdk.MISSING,
|
|
75
|
+
type=OmittableChoice(
|
|
75
76
|
(
|
|
76
77
|
"GCP_mapped_collection",
|
|
77
78
|
"GCP_guest_collection",
|
|
@@ -83,12 +84,14 @@ $ globus endpoint search --filter-scope my-endpoints
|
|
|
83
84
|
),
|
|
84
85
|
help="Filter search results to endpoints of a specific entity type.",
|
|
85
86
|
)
|
|
86
|
-
@click.argument(
|
|
87
|
+
@click.argument(
|
|
88
|
+
"filter_fulltext", required=False, default=globus_sdk.MISSING, type=OMITTABLE_STRING
|
|
89
|
+
)
|
|
87
90
|
@LoginManager.requires_login("auth", "transfer")
|
|
88
91
|
def endpoint_search(
|
|
89
92
|
login_manager: LoginManager,
|
|
90
93
|
*,
|
|
91
|
-
filter_fulltext: str |
|
|
94
|
+
filter_fulltext: str | globus_sdk.MissingType,
|
|
92
95
|
limit: int,
|
|
93
96
|
filter_owner_id: str | None,
|
|
94
97
|
filter_scope: t.Literal[
|
|
@@ -109,7 +112,7 @@ def endpoint_search(
|
|
|
109
112
|
"GCSv5_mapped_collection",
|
|
110
113
|
"GCSv5_guest_collection",
|
|
111
114
|
]
|
|
112
|
-
|
|
|
115
|
+
| globus_sdk.MissingType
|
|
113
116
|
),
|
|
114
117
|
) -> None:
|
|
115
118
|
"""
|
|
@@ -145,7 +148,7 @@ def endpoint_search(
|
|
|
145
148
|
paginator(
|
|
146
149
|
filter_fulltext=filter_fulltext,
|
|
147
150
|
filter_scope=filter_scope,
|
|
148
|
-
filter_owner_id=owner_id,
|
|
151
|
+
filter_owner_id=owner_id if owner_id is not None else globus_sdk.MISSING,
|
|
149
152
|
filter_entity_type=filter_entity_type,
|
|
150
153
|
).items(),
|
|
151
154
|
limit=limit,
|
{globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/set_subscription_id.py
RENAMED
|
@@ -50,11 +50,7 @@ def set_endpoint_subscription_id(
|
|
|
50
50
|
"""
|
|
51
51
|
transfer_client = login_manager.get_transfer_client()
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
None if subscription_id == "null" else subscription_id
|
|
55
|
-
)
|
|
56
|
-
res = transfer_client.put(
|
|
57
|
-
f"/endpoint/{endpoint_id}/subscription",
|
|
58
|
-
data={"subscription_id": optional_subscription_id},
|
|
53
|
+
res = transfer_client.set_subscription_id(
|
|
54
|
+
endpoint_id, None if subscription_id == "null" else subscription_id
|
|
59
55
|
)
|
|
60
56
|
display(res, text_mode=display.RAW, response_key="message")
|
{globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/_common.py
RENAMED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import typing as t
|
|
2
2
|
|
|
3
3
|
import click
|
|
4
|
+
import globus_sdk
|
|
4
5
|
|
|
6
|
+
from globus_cli.parsing import OMITTABLE_STRING
|
|
5
7
|
from globus_cli.types import AnyCommand
|
|
6
8
|
|
|
7
9
|
C = t.TypeVar("C", bound=AnyCommand)
|
|
@@ -30,7 +32,12 @@ def user_credential_create_and_update_params(
|
|
|
30
32
|
f = click.argument("globus-identity")(f)
|
|
31
33
|
f = click.argument("storage-gateway", type=click.UUID)(f)
|
|
32
34
|
|
|
33
|
-
f = click.option(
|
|
35
|
+
f = click.option(
|
|
36
|
+
"--display-name",
|
|
37
|
+
help="Display name for the credential.",
|
|
38
|
+
default=globus_sdk.MISSING,
|
|
39
|
+
type=OMITTABLE_STRING,
|
|
40
|
+
)(f)
|
|
34
41
|
|
|
35
42
|
return f
|
|
36
43
|
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import uuid
|
|
4
4
|
|
|
5
|
+
import globus_sdk
|
|
5
6
|
from globus_sdk.services.gcs import UserCredentialDocument
|
|
6
7
|
|
|
7
8
|
from globus_cli.login_manager import LoginManager
|
|
@@ -22,7 +23,7 @@ def posix(
|
|
|
22
23
|
storage_gateway: uuid.UUID,
|
|
23
24
|
globus_identity: str,
|
|
24
25
|
local_username: str,
|
|
25
|
-
display_name: str |
|
|
26
|
+
display_name: str | globus_sdk.MissingType,
|
|
26
27
|
) -> None:
|
|
27
28
|
"""
|
|
28
29
|
Create a User Credential for a POSIX storage gateway.
|
|
@@ -32,7 +33,9 @@ def posix(
|
|
|
32
33
|
|
|
33
34
|
data = UserCredentialDocument(
|
|
34
35
|
storage_gateway_id=storage_gateway,
|
|
35
|
-
identity_id=
|
|
36
|
+
identity_id=(
|
|
37
|
+
auth_client.maybe_lookup_identity_id(globus_identity) or globus_sdk.MISSING
|
|
38
|
+
),
|
|
36
39
|
username=local_username,
|
|
37
40
|
display_name=display_name,
|
|
38
41
|
)
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import uuid
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
|
+
import globus_sdk
|
|
6
7
|
from globus_sdk.services.gcs import UserCredentialDocument
|
|
7
8
|
|
|
8
9
|
from globus_cli.login_manager import LoginManager
|
|
@@ -27,7 +28,7 @@ def s3(
|
|
|
27
28
|
local_username: str,
|
|
28
29
|
s3_key_id: str,
|
|
29
30
|
s3_secret_key: str,
|
|
30
|
-
display_name: str |
|
|
31
|
+
display_name: str | globus_sdk.MissingType,
|
|
31
32
|
) -> None:
|
|
32
33
|
"""
|
|
33
34
|
Create a User Credential for an S3 Storage Gateway.
|
|
@@ -44,7 +45,9 @@ def s3(
|
|
|
44
45
|
|
|
45
46
|
data = UserCredentialDocument(
|
|
46
47
|
storage_gateway_id=storage_gateway,
|
|
47
|
-
identity_id=
|
|
48
|
+
identity_id=(
|
|
49
|
+
auth_client.maybe_lookup_identity_id(globus_identity) or globus_sdk.MISSING
|
|
50
|
+
),
|
|
48
51
|
username=local_username,
|
|
49
52
|
policies=policies,
|
|
50
53
|
display_name=display_name,
|
{globus_cli-3.38.0 → globus_cli-3.40.0}/src/globus_cli/commands/endpoint/user_credential/list.py
RENAMED
|
@@ -3,9 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import uuid
|
|
4
4
|
|
|
5
5
|
import click
|
|
6
|
+
import globus_sdk
|
|
6
7
|
|
|
7
8
|
from globus_cli.login_manager import LoginManager
|
|
8
|
-
from globus_cli.parsing import command, endpoint_id_arg
|
|
9
|
+
from globus_cli.parsing import OMITTABLE_UUID, command, endpoint_id_arg
|
|
9
10
|
from globus_cli.termio import Field, display, formatters
|
|
10
11
|
|
|
11
12
|
|
|
@@ -13,8 +14,8 @@ from globus_cli.termio import Field, display, formatters
|
|
|
13
14
|
@endpoint_id_arg
|
|
14
15
|
@click.option(
|
|
15
16
|
"--storage-gateway",
|
|
16
|
-
default=
|
|
17
|
-
type=
|
|
17
|
+
default=globus_sdk.MISSING,
|
|
18
|
+
type=OMITTABLE_UUID,
|
|
18
19
|
help=(
|
|
19
20
|
"Filter results to User Credentials on a Storage Gateway specified by "
|
|
20
21
|
"this UUID"
|
|
@@ -25,7 +26,7 @@ def user_credential_list(
|
|
|
25
26
|
login_manager: LoginManager,
|
|
26
27
|
*,
|
|
27
28
|
endpoint_id: uuid.UUID,
|
|
28
|
-
storage_gateway: uuid.UUID |
|
|
29
|
+
storage_gateway: uuid.UUID | globus_sdk.MissingType,
|
|
29
30
|
) -> None:
|
|
30
31
|
"""
|
|
31
32
|
List all of your User Credentials on a Globus Connect Server v5 Endpoint.
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import contextlib
|
|
4
|
+
import functools
|
|
5
|
+
import typing as t
|
|
6
|
+
import uuid
|
|
7
|
+
|
|
8
|
+
import click
|
|
9
|
+
import globus_sdk
|
|
10
|
+
import globus_sdk.gare
|
|
11
|
+
import globus_sdk.scopes
|
|
12
|
+
|
|
13
|
+
from globus_cli.login_manager import LoginManager
|
|
14
|
+
from globus_cli.parsing import OMITTABLE_STRING, JSONStringOrFile
|
|
15
|
+
from globus_cli.utils import CLIAuthRequirementsError
|
|
16
|
+
|
|
17
|
+
_input_schema_helptext = """
|
|
18
|
+
The JSON input schema that governs the parameters
|
|
19
|
+
used to start the flow.
|
|
20
|
+
|
|
21
|
+
The input document may be specified inline, or it may be a path to a JSON file.
|
|
22
|
+
|
|
23
|
+
Example: Inline JSON:
|
|
24
|
+
|
|
25
|
+
\b
|
|
26
|
+
--input-schema '{"properties": {"src": {"type": "string"}}}'
|
|
27
|
+
|
|
28
|
+
Example: Path to JSON file:
|
|
29
|
+
|
|
30
|
+
\b
|
|
31
|
+
--input-schema schema.json
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
input_schema_option = click.option(
|
|
35
|
+
"--input-schema",
|
|
36
|
+
"input_schema",
|
|
37
|
+
type=JSONStringOrFile(),
|
|
38
|
+
help=_input_schema_helptext,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
input_schema_option_with_default = click.option(
|
|
42
|
+
"--input-schema",
|
|
43
|
+
"input_schema",
|
|
44
|
+
type=JSONStringOrFile(),
|
|
45
|
+
help=_input_schema_helptext
|
|
46
|
+
+ "\n If unspecified, the default is an empty JSON object ('{}').",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
subtitle_option = click.option(
|
|
50
|
+
"--subtitle",
|
|
51
|
+
type=OMITTABLE_STRING,
|
|
52
|
+
help="A concise summary of the flow's purpose.",
|
|
53
|
+
default=globus_sdk.MISSING,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
description_option = click.option(
|
|
58
|
+
"--description",
|
|
59
|
+
type=OMITTABLE_STRING,
|
|
60
|
+
help="A detailed description of the flow's purpose.",
|
|
61
|
+
default=globus_sdk.MISSING,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
administrators_option = click.option(
|
|
66
|
+
"--administrator",
|
|
67
|
+
"administrators",
|
|
68
|
+
type=str,
|
|
69
|
+
multiple=True,
|
|
70
|
+
help="""
|
|
71
|
+
A principal that may perform administrative operations
|
|
72
|
+
on the flow (e.g., update, delete).
|
|
73
|
+
|
|
74
|
+
This option can be specified multiple times
|
|
75
|
+
to create a list of flow administrators.
|
|
76
|
+
""",
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
starters_option = click.option(
|
|
81
|
+
"--starter",
|
|
82
|
+
"starters",
|
|
83
|
+
type=str,
|
|
84
|
+
multiple=True,
|
|
85
|
+
help="""
|
|
86
|
+
A principal that may start a new run of the flow.
|
|
87
|
+
|
|
88
|
+
Use "all_authenticated_users" to allow any authenticated user
|
|
89
|
+
to start a new run of the flow.
|
|
90
|
+
|
|
91
|
+
This option can be specified multiple times
|
|
92
|
+
to create a list of flow starters.
|
|
93
|
+
""",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
viewers_option = click.option(
|
|
98
|
+
"--viewer",
|
|
99
|
+
"viewers",
|
|
100
|
+
type=str,
|
|
101
|
+
multiple=True,
|
|
102
|
+
help="""
|
|
103
|
+
A principal that may view the flow.
|
|
104
|
+
|
|
105
|
+
Use "public" to make the flow visible to everyone.
|
|
106
|
+
|
|
107
|
+
This option can be specified multiple times
|
|
108
|
+
to create a list of flow viewers.
|
|
109
|
+
""",
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
keywords_option = click.option(
|
|
114
|
+
"--keyword",
|
|
115
|
+
"keywords",
|
|
116
|
+
type=str,
|
|
117
|
+
multiple=True,
|
|
118
|
+
help="""
|
|
119
|
+
A term used to help discover this flow when
|
|
120
|
+
browsing and searching.
|
|
121
|
+
|
|
122
|
+
This option can be specified multiple times
|
|
123
|
+
to create a list of keywords.
|
|
124
|
+
""",
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class SubscriptionIdType(click.ParamType):
|
|
129
|
+
name = "SUBSCRIPTION_ID"
|
|
130
|
+
|
|
131
|
+
def __init__(self, *, omittable: bool = False) -> None:
|
|
132
|
+
self._omittable = omittable
|
|
133
|
+
|
|
134
|
+
def convert(
|
|
135
|
+
self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
|
|
136
|
+
) -> uuid.UUID | t.Literal["DEFAULT"] | globus_sdk.MissingType:
|
|
137
|
+
if self._omittable and value is globus_sdk.MISSING:
|
|
138
|
+
return globus_sdk.MISSING
|
|
139
|
+
|
|
140
|
+
if value.upper() == "DEFAULT":
|
|
141
|
+
return "DEFAULT"
|
|
142
|
+
try:
|
|
143
|
+
return uuid.UUID(value)
|
|
144
|
+
except ValueError:
|
|
145
|
+
self.fail(f"{value} must be either a UUID or 'DEFAULT'", param, ctx)
|
|
146
|
+
|
|
147
|
+
def get_type_annotation(self, param: click.Parameter) -> type:
|
|
148
|
+
if self._omittable:
|
|
149
|
+
return t.Union[ # type: ignore[return-value]
|
|
150
|
+
uuid.UUID, t.Literal["DEFAULT"], globus_sdk.MissingType
|
|
151
|
+
]
|
|
152
|
+
return t.Union[uuid.UUID, t.Literal["DEFAULT"]] # type: ignore[return-value]
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
subscription_id_option = click.option(
|
|
156
|
+
"--subscription-id",
|
|
157
|
+
"subscription_id",
|
|
158
|
+
type=SubscriptionIdType(omittable=True),
|
|
159
|
+
multiple=False,
|
|
160
|
+
help="""
|
|
161
|
+
A subscription ID to assign to the flow.
|
|
162
|
+
|
|
163
|
+
The value may be a UUID or the word "DEFAULT".
|
|
164
|
+
""",
|
|
165
|
+
default=globus_sdk.MISSING,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class FlowScopeInjector:
|
|
170
|
+
"""
|
|
171
|
+
A context manager for injecting flow-specific scopes into raised GAREs.
|
|
172
|
+
|
|
173
|
+
Usage (flow api):
|
|
174
|
+
>>> with FlowScopeInjector(login_manager).for_flow(flow_id):
|
|
175
|
+
>>> flows_client.get_flow(flow_id)
|
|
176
|
+
|
|
177
|
+
Usage (run api):
|
|
178
|
+
>>> with FlowScopeInjector(login_manager).for_run(run_id):
|
|
179
|
+
>>> flows_client.get_run(run_id)
|
|
180
|
+
|
|
181
|
+
In either case, if the function call raises a GARE-compatible GlobusAPIError,
|
|
182
|
+
the context manager will inject the appropriate flow-specific scope into the
|
|
183
|
+
GARE's required scope section, reraising it as a CLIAuthRequirementsError.
|
|
184
|
+
|
|
185
|
+
Using this ensures that the suggested remediation command will update the relevant
|
|
186
|
+
specific-flow's token, not just the statically-registered flows tokens.
|
|
187
|
+
This can resolve issues where a user, for instance, prints out an HA flow, then
|
|
188
|
+
attempts to run it.
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
def __init__(self, login_manager: LoginManager) -> None:
|
|
192
|
+
self._login_manager = login_manager
|
|
193
|
+
|
|
194
|
+
@contextlib.contextmanager
|
|
195
|
+
def for_flow(self, flow_id: uuid.UUID) -> t.Iterator[None]:
|
|
196
|
+
"""
|
|
197
|
+
Context Manager to wrap a flow operation.
|
|
198
|
+
|
|
199
|
+
If the wrapped operation raises a GARE, this manager will re-raise it
|
|
200
|
+
with the flow-specific scope injected.
|
|
201
|
+
"""
|
|
202
|
+
try:
|
|
203
|
+
yield
|
|
204
|
+
except globus_sdk.GlobusAPIError as api_error:
|
|
205
|
+
self._inject_and_raise(api_error, lambda: flow_id)
|
|
206
|
+
|
|
207
|
+
@contextlib.contextmanager
|
|
208
|
+
def for_run(self, run_id: uuid.UUID) -> t.Iterator[None]:
|
|
209
|
+
"""
|
|
210
|
+
Context manager to wrap a flow run operation.
|
|
211
|
+
|
|
212
|
+
If the wrapped operation raises a GARE, this manager will attempt to look up
|
|
213
|
+
the associated flow ID from search & re-raise it with the flow-specific scope.
|
|
214
|
+
|
|
215
|
+
If the lookup fails, the original error is raised unmodified.
|
|
216
|
+
"""
|
|
217
|
+
try:
|
|
218
|
+
yield
|
|
219
|
+
except globus_sdk.GlobusAPIError as api_error:
|
|
220
|
+
resolver = FlowIdResolver(self._login_manager)
|
|
221
|
+
resolve_flow_id = functools.partial(resolver.resolve, run_id)
|
|
222
|
+
|
|
223
|
+
self._inject_and_raise(api_error, resolve_flow_id)
|
|
224
|
+
|
|
225
|
+
@staticmethod
|
|
226
|
+
def _inject_and_raise(
|
|
227
|
+
api_error: globus_sdk.GlobusAPIError,
|
|
228
|
+
resolve_flow_id: t.Callable[[], uuid.UUID | None],
|
|
229
|
+
) -> None:
|
|
230
|
+
"""
|
|
231
|
+
:raises GlobusAPIError: if the supplied api error is not GARE-compatible
|
|
232
|
+
:raises CLIAuthRequirementsError: otherwise with the flow-scope injected into
|
|
233
|
+
the required scopes (assuming it wasn't already there).
|
|
234
|
+
"""
|
|
235
|
+
if (gare := globus_sdk.gare.to_gare(api_error)) is None or (
|
|
236
|
+
(flow_id := resolve_flow_id()) is None
|
|
237
|
+
):
|
|
238
|
+
raise api_error
|
|
239
|
+
|
|
240
|
+
flow_scope = globus_sdk.scopes.SpecificFlowScopes(flow_id).user.scope_string
|
|
241
|
+
|
|
242
|
+
required_scopes = gare.authorization_parameters.required_scopes or []
|
|
243
|
+
# Make sure that no root scopes match the one we want to inject.
|
|
244
|
+
if not any(s.startswith(flow_scope) for s in required_scopes):
|
|
245
|
+
required_scopes.insert(0, flow_scope)
|
|
246
|
+
gare.authorization_parameters.required_scopes = required_scopes
|
|
247
|
+
|
|
248
|
+
raise CLIAuthRequirementsError("", gare=gare, origin=api_error)
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class FlowIdResolver:
|
|
252
|
+
RUN_INDEX = "2a318659-a547-4b48-a0fc-e0c19081a960"
|
|
253
|
+
|
|
254
|
+
def __init__(self, login_manager: LoginManager) -> None:
|
|
255
|
+
self._search_client = login_manager.get_search_client()
|
|
256
|
+
|
|
257
|
+
def resolve(self, run_id: uuid.UUID) -> uuid.UUID | None:
|
|
258
|
+
"""
|
|
259
|
+
Lookup a run's associated flow ID from search (best-effort).
|
|
260
|
+
|
|
261
|
+
:return: The flow ID as a UUID, or None if the lookup fails or is unparsable
|
|
262
|
+
for any reason.
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
try:
|
|
266
|
+
flow_id = self._search_client.post_search(
|
|
267
|
+
self.RUN_INDEX,
|
|
268
|
+
{
|
|
269
|
+
"filters": [
|
|
270
|
+
{
|
|
271
|
+
"type": "match_any",
|
|
272
|
+
"field_name": "run_id",
|
|
273
|
+
"values": [str(run_id)],
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
"limit": 1,
|
|
277
|
+
},
|
|
278
|
+
)["gmeta"][0]["entries"][0]["content"]["flow_id"]
|
|
279
|
+
return uuid.UUID(flow_id)
|
|
280
|
+
except (globus_sdk.GlobusError, LookupError):
|
|
281
|
+
# This search is a best-effort flows-operation.
|
|
282
|
+
# To avoid mis-categorizing a flows error as a search one, silence any
|
|
283
|
+
# predictable error arising from a failed lookup.
|
|
284
|
+
return None
|