globus-cli 3.30.0__tar.gz → 3.31.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.
Files changed (269) hide show
  1. {globus_cli-3.30.0/src/globus_cli.egg-info → globus_cli-3.31.0}/PKG-INFO +2 -2
  2. {globus_cli-3.30.0 → globus_cli-3.31.0}/pyproject.toml +1 -1
  3. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/create/guest.py +0 -1
  4. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/update.py +14 -15
  5. globus_cli-3.31.0/src/globus_cli/commands/endpoint/activate.py +46 -0
  6. globus_cli-3.31.0/src/globus_cli/commands/endpoint/deactivate.py +24 -0
  7. globus_cli-3.31.0/src/globus_cli/commands/endpoint/is_activated.py +33 -0
  8. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +5 -4
  9. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/show.py +0 -1
  10. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/resume.py +7 -4
  11. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/_common.py +1 -0
  12. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/update.py +11 -3
  13. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/list_commands.py +1 -6
  14. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/logout.py +18 -11
  15. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/delete.py +5 -3
  16. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/session/consent.py +2 -2
  17. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/create/transfer.py +6 -6
  18. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/resume.py +7 -4
  19. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/auth_flows.py +3 -3
  20. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/manager.py +21 -15
  21. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/scopes.py +9 -9
  22. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/shared_options/__init__.py +3 -5
  23. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/transfer/__init__.py +0 -3
  24. globus_cli-3.31.0/src/globus_cli/services/transfer/activation.py +28 -0
  25. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/version.py +1 -1
  26. {globus_cli-3.30.0 → globus_cli-3.31.0/src/globus_cli.egg-info}/PKG-INFO +2 -2
  27. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli.egg-info/requires.txt +1 -1
  28. globus_cli-3.30.0/src/globus_cli/commands/endpoint/activate.py +0 -228
  29. globus_cli-3.30.0/src/globus_cli/commands/endpoint/deactivate.py +0 -18
  30. globus_cli-3.30.0/src/globus_cli/commands/endpoint/is_activated.py +0 -87
  31. globus_cli-3.30.0/src/globus_cli/services/transfer/activation.py +0 -66
  32. {globus_cli-3.30.0 → globus_cli-3.31.0}/LICENSE +0 -0
  33. {globus_cli-3.30.0 → globus_cli-3.31.0}/README.rst +0 -0
  34. {globus_cli-3.30.0 → globus_cli-3.31.0}/setup.cfg +0 -0
  35. {globus_cli-3.30.0 → globus_cli-3.31.0}/setup.py +0 -0
  36. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/__init__.py +0 -0
  37. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/__main__.py +0 -0
  38. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/_warnings.py +0 -0
  39. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/__init__.py +0 -0
  40. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/_common.py +0 -0
  41. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/api.py +0 -0
  42. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  43. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  44. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  45. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  46. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  47. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  48. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  49. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
  50. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  51. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/_common.py +0 -0
  52. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  53. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
  54. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/delete.py +0 -0
  55. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/list.py +0 -0
  56. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/collection/show.py +0 -0
  57. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/delete.py +0 -0
  58. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  59. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  60. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/create.py +0 -0
  61. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  62. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  63. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  64. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  65. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
  66. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
  67. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  68. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  69. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
  70. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
  71. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  72. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  73. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  74. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  75. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  76. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  77. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/search.py +0 -0
  78. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/__init__.py +0 -0
  79. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/_common.py +0 -0
  80. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/add.py +0 -0
  81. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/delete.py +0 -0
  82. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/list.py +0 -0
  83. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/show.py +0 -0
  84. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/server/update.py +0 -0
  85. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  86. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  87. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  88. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  89. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  90. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  91. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  92. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  93. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
  94. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  95. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  96. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  97. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  98. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  99. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/__init__.py +0 -0
  100. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/_common.py +0 -0
  101. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/create.py +0 -0
  102. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/delete.py +0 -0
  103. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/list.py +0 -0
  104. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  105. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  106. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  107. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  108. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  109. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  110. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  111. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  112. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/show.py +0 -0
  113. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/start.py +0 -0
  114. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/update.py +0 -0
  115. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/flows/validate.py +0 -0
  116. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  117. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  118. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
  119. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  120. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  121. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/set_subscription_id.py +0 -0
  122. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  123. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  124. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  125. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  126. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  127. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  128. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  129. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  130. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  131. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  132. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  133. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  134. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +0 -0
  135. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  136. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/gcs/endpoint/update.py +0 -0
  137. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/get_identities.py +0 -0
  138. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/__init__.py +0 -0
  139. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/create.py +0 -0
  140. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/delete.py +0 -0
  141. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  142. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  143. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  144. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
  145. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  146. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  147. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/join.py +0 -0
  148. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/leave.py +0 -0
  149. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/list.py +0 -0
  150. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  151. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/add.py +0 -0
  152. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  153. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  154. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/list.py +0 -0
  155. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  156. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  157. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  158. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/group/show.py +0 -0
  159. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/login.py +0 -0
  160. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/ls.py +0 -0
  161. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/mkdir.py +0 -0
  162. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/rename.py +0 -0
  163. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/rm.py +0 -0
  164. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/__init__.py +0 -0
  165. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/_common.py +0 -0
  166. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  167. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  168. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/create.py +0 -0
  169. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/list.py +0 -0
  170. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  171. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  172. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  173. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  174. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/index/show.py +0 -0
  175. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/ingest.py +0 -0
  176. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/query.py +0 -0
  177. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  178. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  179. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  180. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  181. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/task/list.py +0 -0
  182. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/search/task/show.py +0 -0
  183. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/session/__init__.py +0 -0
  184. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/session/show.py +0 -0
  185. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/session/update.py +0 -0
  186. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/stat.py +0 -0
  187. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/__init__.py +0 -0
  188. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/_common.py +0 -0
  189. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/cancel.py +0 -0
  190. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/event_list.py +0 -0
  191. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  192. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/list.py +0 -0
  193. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  194. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/show.py +0 -0
  195. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/update.py +0 -0
  196. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/task/wait.py +0 -0
  197. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  198. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/_common.py +0 -0
  199. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  200. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/delete.py +0 -0
  201. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/list.py +0 -0
  202. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/pause.py +0 -0
  203. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/timer/show.py +0 -0
  204. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/transfer.py +0 -0
  205. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/update.py +0 -0
  206. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/version.py +0 -0
  207. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/commands/whoami.py +0 -0
  208. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/constants.py +0 -0
  209. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/endpointish/__init__.py +0 -0
  210. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/endpointish/endpointish.py +0 -0
  211. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  212. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/endpointish/errors.py +0 -0
  213. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  214. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/exception_handling/hooks.py +0 -0
  215. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/exception_handling/registry.py +0 -0
  216. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/globus_cli_flake8.py +0 -0
  217. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/__init__.py +0 -0
  218. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  219. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/client_login.py +0 -0
  220. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/context.py +0 -0
  221. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/errors.py +0 -0
  222. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/local_server.py +0 -0
  223. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/tokenstore.py +0 -0
  224. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/login_manager/utils.py +0 -0
  225. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/__init__.py +0 -0
  226. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/command_state.py +0 -0
  227. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/commands.py +0 -0
  228. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  229. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_classes.py +0 -0
  230. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  231. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/delimited.py +0 -0
  232. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +0 -0
  233. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
  234. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
  235. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/location.py +0 -0
  236. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
  237. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
  238. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
  239. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
  240. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  241. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  242. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
  243. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
  244. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/parsing/shell_completion.py +0 -0
  245. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/reflect.py +0 -0
  246. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/__init__.py +0 -0
  247. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/auth.py +0 -0
  248. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/gcs.py +0 -0
  249. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/transfer/client.py +0 -0
  250. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/transfer/data.py +0 -0
  251. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  252. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/__init__.py +0 -0
  253. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/awscli_text.py +0 -0
  254. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/context.py +0 -0
  255. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/errors.py +0 -0
  256. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/field.py +0 -0
  257. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  258. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/formatters/auth.py +0 -0
  259. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/formatters/base.py +0 -0
  260. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  261. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  262. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/printer.py +0 -0
  263. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/termio/server_timing.py +0 -0
  264. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/types.py +0 -0
  265. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli/utils.py +0 -0
  266. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli.egg-info/SOURCES.txt +0 -0
  267. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
  268. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
  269. {globus_cli-3.30.0 → globus_cli-3.31.0}/src/globus_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: globus-cli
3
- Version: 3.30.0
3
+ Version: 3.31.0
4
4
  Summary: Globus CLI
5
5
  Author-email: Stephen Rosen <sirosen@globus.org>
6
6
  Project-URL: homepage, https://github.com/globus/globus-cli
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Requires-Python: >=3.8
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
- Requires-Dist: globus-sdk==3.43.0
21
+ Requires-Dist: globus-sdk==3.45.0
22
22
  Requires-Dist: click<9,>=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.8"
30
30
  dependencies = [
31
- "globus-sdk==3.43.0",
31
+ "globus-sdk==3.45.0",
32
32
  "click>=8.1.4,<9",
33
33
  "jmespath==1.0.1",
34
34
  "packaging>=17.0",
@@ -5,7 +5,6 @@ import uuid
5
5
 
6
6
  import click
7
7
  import globus_sdk
8
- import globus_sdk.experimental.auth_requirements_error
9
8
 
10
9
  from globus_cli.commands.collection._common import (
11
10
  LazyCurrentIdentity,
@@ -37,14 +37,14 @@ class _FullDataField(Field):
37
37
  "--force-encryption/--no-force-encryption",
38
38
  "force_encryption",
39
39
  default=None,
40
- help="When set, all transfers to and from this collection are always encrypted",
40
+ help="When set, all transfers to and from this collection are always encrypted.",
41
41
  )
42
42
  @click.option(
43
43
  "--sharing-restrict-paths",
44
44
  type=JSONStringOrFile(null="null"),
45
45
  help=(
46
46
  "Path restrictions for sharing data on guest collections "
47
- "based on this collection. This option is only usable on Mapped Collections"
47
+ "based on this collection. This option is only usable on Mapped Collections."
48
48
  ),
49
49
  )
50
50
  @click.option(
@@ -55,7 +55,7 @@ class _FullDataField(Field):
55
55
  "Allow Guest Collections to be created on this Collection. This option "
56
56
  "is only usable on Mapped Collections. If this option is disabled on a "
57
57
  "Mapped Collection which already has associated Guest Collections, "
58
- "those collections will no longer be accessible"
58
+ "those collections will no longer be accessible."
59
59
  ),
60
60
  )
61
61
  @click.option(
@@ -66,7 +66,7 @@ class _FullDataField(Field):
66
66
  "Mapped Collection. This option is only usable on non high assurance "
67
67
  "Mapped Collections and the setting is inherited by the hosted Guest "
68
68
  "Collections. Anonymous write ACLs are enabled by default "
69
- "(requires an endpoint with API v1.8.0)"
69
+ "(requires an endpoint with API v1.8.0)."
70
70
  ),
71
71
  )
72
72
  @click.option(
@@ -74,10 +74,9 @@ class _FullDataField(Field):
74
74
  "domain_name",
75
75
  default=None,
76
76
  help=(
77
- "DNS host name for the collection (mapped "
78
- "collections only). This may be either a host name "
79
- "or a fully-qualified domain name, but if it is the latter "
80
- "it must be a subdomain of the endpoint's domain"
77
+ "DNS host name for the collection (mapped collections only). "
78
+ "This may be either a host name or a fully-qualified domain name, "
79
+ "but if it is the latter it must be a subdomain of the endpoint's domain."
81
80
  ),
82
81
  )
83
82
  @click.option(
@@ -85,8 +84,8 @@ class _FullDataField(Field):
85
84
  "enable_https",
86
85
  default=None,
87
86
  help=(
88
- "Explicitly enable or disable HTTPS support (requires a managed endpoint "
89
- "with API v1.1.0)"
87
+ "Explicitly enable or disable HTTPS support "
88
+ "(requires a managed endpoint with API v1.1.0)."
90
89
  ),
91
90
  )
92
91
  @click.option(
@@ -95,9 +94,9 @@ class _FullDataField(Field):
95
94
  multiple=True,
96
95
  callback=emptyable_opt_list_callback,
97
96
  help=(
98
- "Connector-specific username allowed to create guest collections."
97
+ "Connector-specific username allowed to create guest collections. "
99
98
  f"{_MULTI_USE_OPTION_STR} to allow multiple users. "
100
- 'Set a value of "" to clear this'
99
+ 'Set a value of "" to clear this.'
101
100
  ),
102
101
  )
103
102
  @click.option(
@@ -106,9 +105,9 @@ class _FullDataField(Field):
106
105
  multiple=True,
107
106
  callback=emptyable_opt_list_callback,
108
107
  help=(
109
- "Connector-specific username denied permission to create guest "
110
- f"collections. {_MULTI_USE_OPTION_STR} to deny multiple users. "
111
- 'Set a value of "" to clear this'
108
+ "Connector-specific username denied permission to create guest collections. "
109
+ f"{_MULTI_USE_OPTION_STR} to deny multiple users. "
110
+ 'Set a value of "" to clear this.'
112
111
  ),
113
112
  )
114
113
  @LoginManager.requires_login("auth", "transfer")
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ import uuid
4
+
5
+ import click
6
+
7
+ from globus_cli.parsing import command, endpoint_id_arg, mutex_option_group
8
+
9
+
10
+ @command("activate", deprecated=True, hidden=True)
11
+ @endpoint_id_arg
12
+ @click.option("--web", is_flag=True, default=False)
13
+ @click.option("--no-browser", is_flag=True, default=False)
14
+ @click.option("--myproxy", is_flag=True, default=False)
15
+ @click.option("--myproxy-username", "-U")
16
+ @click.option("--myproxy-password", "-P", hidden=True)
17
+ @click.option("--myproxy-lifetime", type=int)
18
+ @click.option("--no-autoactivate", is_flag=True, default=False)
19
+ @click.option("--force", is_flag=True, default=False)
20
+ @mutex_option_group("--web", "--myproxy")
21
+ def endpoint_activate(
22
+ *,
23
+ endpoint_id: uuid.UUID,
24
+ myproxy: bool,
25
+ myproxy_username: str | None,
26
+ myproxy_password: str | None,
27
+ myproxy_lifetime: int | None,
28
+ web: bool,
29
+ no_browser: bool,
30
+ no_autoactivate: bool,
31
+ force: bool,
32
+ ) -> None:
33
+ """
34
+ Activate an endpoint.
35
+
36
+ Endpoint Activation has been removed from the Globus ecosystem. This command
37
+ no longer does anything.
38
+ """
39
+ click.echo(
40
+ click.style(
41
+ "`globus endpoint activate` has been deprecated and "
42
+ "will be removed in a future release.",
43
+ fg="yellow",
44
+ ),
45
+ err=True,
46
+ )
@@ -0,0 +1,24 @@
1
+ import uuid
2
+
3
+ import click
4
+
5
+ from globus_cli.parsing import command, endpoint_id_arg
6
+
7
+
8
+ @command("deactivate", deprecated=True, hidden=True)
9
+ @endpoint_id_arg
10
+ def endpoint_deactivate(*, endpoint_id: uuid.UUID) -> None:
11
+ """
12
+ Deactivate an endpoint.
13
+
14
+ Endpoint Activation has been removed from the Globus ecosystem. This command
15
+ no longer does anything.
16
+ """
17
+ click.echo(
18
+ click.style(
19
+ "`globus endpoint deactivate` has been deprecated and "
20
+ "will be removed in a future release.",
21
+ fg="yellow",
22
+ ),
23
+ err=True,
24
+ )
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ import uuid
4
+
5
+ import click
6
+
7
+ from globus_cli.parsing import command, endpoint_id_arg
8
+
9
+
10
+ @command("is-activated", deprecated=True, hidden=True)
11
+ @endpoint_id_arg
12
+ @click.option("--until", type=int)
13
+ @click.option("--absolute-time", is_flag=True, show_default=True, default=False)
14
+ def endpoint_is_activated(
15
+ *,
16
+ endpoint_id: uuid.UUID,
17
+ until: int | None,
18
+ absolute_time: bool,
19
+ ) -> None:
20
+ """
21
+ Check if an endpoint is activated or requires activation.
22
+
23
+ Endpoint Activation has been removed from the Globus ecosystem. This command
24
+ no longer does anything.
25
+ """
26
+ click.echo(
27
+ click.style(
28
+ "`globus endpoint is-activated` has been deprecated and "
29
+ "will be removed in a future release.",
30
+ fg="yellow",
31
+ ),
32
+ err=True,
33
+ )
@@ -40,10 +40,11 @@ def set_endpoint_subscription_id(
40
40
  login_manager: LoginManager, *, endpoint_id: uuid.UUID, subscription_id: str
41
41
  ) -> None:
42
42
  """
43
- For GCS endpoints, refer to ``globus gcs endpoint set-subscription-id``. For
44
- GCP endpoints, refer to ``globus gcp set-subscription-id``.
45
-
46
- -----------------------------
43
+ [NOTE]
44
+ ====
45
+ For GCS endpoints, refer to ``globus gcs endpoint set-subscription-id``.
46
+ For GCP endpoints, refer to ``globus gcp set-subscription-id``.
47
+ ====
47
48
 
48
49
  Set an endpoint's subscription ID.
49
50
 
@@ -12,7 +12,6 @@ STANDARD_FIELDS = [
12
12
  Field("ID", "id"),
13
13
  Field("Owner", "owner_string"),
14
14
  Field("Description", "description", wrap_enabled=True),
15
- Field("Activated", "activated"),
16
15
  Field("Shareable", "shareable"),
17
16
  Field("Department", "department"),
18
17
  Field("Keywords", "keywords"),
@@ -110,9 +110,12 @@ def check_inactive_reason(
110
110
  def _get_inactive_reason(
111
111
  run_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse
112
112
  ) -> GlobusAuthRequirementsError | None:
113
- from globus_sdk.experimental.auth_requirements_error import (
114
- to_auth_requirements_error,
115
- )
113
+ try:
114
+ from globus_sdk.gare import to_gare # type: ignore[import-not-found]
115
+ except ImportError:
116
+ from globus_sdk.experimental.auth_requirements_error import (
117
+ to_auth_requirements_error as to_gare,
118
+ )
116
119
 
117
120
  if not run_doc.get("status") == "INACTIVE":
118
121
  return None
@@ -121,7 +124,7 @@ def _get_inactive_reason(
121
124
  if not isinstance(details, dict):
122
125
  return None
123
126
 
124
- return to_auth_requirements_error(details)
127
+ return to_gare(details) # type: ignore[no-any-return]
125
128
 
126
129
 
127
130
  def _has_required_consent(
@@ -64,6 +64,7 @@ _BASE_GROUP_RECORD_FIELDS = [
64
64
  "my_memberships[].role",
65
65
  formatter=formatters.SortedArray,
66
66
  ),
67
+ Field("Terms and Conditions", "terms_and_conditions", wrap_enabled=True),
67
68
  ]
68
69
  GROUP_FIELDS = [Field("Group ID", "id")] + _BASE_GROUP_RECORD_FIELDS
69
70
  GROUP_FIELDS_W_SUBSCRIPTION = (
@@ -15,6 +15,9 @@ from ._common import group_id_arg
15
15
  @group_id_arg
16
16
  @click.option("--name", help="Name for the group")
17
17
  @click.option("--description", help="Description for the group")
18
+ @click.option(
19
+ "--terms-and-conditions", help="Terms and conditions for group membership"
20
+ )
18
21
  @LoginManager.requires_login("groups")
19
22
  def group_update(
20
23
  login_manager: LoginManager,
@@ -22,6 +25,7 @@ def group_update(
22
25
  group_id: uuid.UUID,
23
26
  name: str | None,
24
27
  description: str | None,
28
+ terms_and_conditions: str | None,
25
29
  ) -> None:
26
30
  """Update an existing group."""
27
31
  groups_client = login_manager.get_groups_client()
@@ -30,10 +34,14 @@ def group_update(
30
34
  group = groups_client.get_group(group_id)
31
35
 
32
36
  # assemble put data using existing values for any field not given
33
- # note that the API does not accept the full group document, so we must
34
- # specify name and description instead of just iterating kwargs
37
+ # note that the API only allows modification of certain fields
38
+ # https://groups.api.globus.org/redoc#tag/groups/operation/update_group_v2_groups__group_id__put
35
39
  data = {}
36
- for attrname, argval in (("name", name), ("description", description)):
40
+ for attrname, argval in (
41
+ ("name", name),
42
+ ("description", description),
43
+ ("terms_and_conditions", terms_and_conditions),
44
+ ):
37
45
  if argval is not None:
38
46
  data[attrname] = argval
39
47
  else:
@@ -42,12 +42,7 @@ def _print_tree(
42
42
  def list_commands() -> None:
43
43
  """
44
44
  Prints the name and a short description of every command available in the globus
45
- cli. Commands are grouped by their parent commands,
46
- e.g. 'globus endpoint activate' is listed as 'activate' under 'globus endpoint'.
47
-
48
- Note that commands with the same listed name under different parent commands
49
- are distinct. e.g. 'globus task update' is a distinct command from
50
- 'globus endpoint update'.
45
+ cli. Commands are grouped by their parent commands.
51
46
  """
52
47
  # get the root context (the click context for the entire CLI tree)
53
48
  root_ctx = click.get_current_context().find_root()
@@ -54,8 +54,14 @@ flow.
54
54
  is_flag=True,
55
55
  default=False,
56
56
  )
57
+ @click.option("--delete-client", is_flag=True, hidden=True)
57
58
  @LoginManager.requires_login()
58
- def logout_command(login_manager: LoginManager, *, ignore_errors: bool) -> None:
59
+ def logout_command(
60
+ login_manager: LoginManager,
61
+ *,
62
+ ignore_errors: bool,
63
+ delete_client: bool,
64
+ ) -> None:
59
65
  """
60
66
  Logout of the Globus CLI
61
67
 
@@ -89,10 +95,15 @@ def logout_command(login_manager: LoginManager, *, ignore_errors: bool) -> None:
89
95
  "Logging out of Globus{}\n".format(" as " + username if username else "")
90
96
  )
91
97
 
92
- # first, try to delete the templated credentialed client
93
- # ignore failure (maybe creds are already invalidated or the client was deleted)
94
- # client logins don't do this as they don't use a templated client
95
- if not is_client_login():
98
+ # By default, preserve the templated client to avoid revocation of associated
99
+ # consents (which can cause refresh token revocation, causing resources
100
+ # associated with those tokens to become inoperable)
101
+ # If the user has specifically requested a client deletion via hidden option,
102
+ # then try to delete the templated credentialed client
103
+ # ignoring failure by default (maybe creds are already invalidated or the
104
+ # client was deleted)
105
+ # Always skip for client logins, which don't use a templated client
106
+ if delete_client and not is_client_login():
96
107
  try:
97
108
  delete_templated_client()
98
109
  except globus_sdk.AuthAPIError:
@@ -108,13 +119,9 @@ def logout_command(login_manager: LoginManager, *, ignore_errors: bool) -> None:
108
119
  "Continuing... (--ignore-errors)",
109
120
  )
110
121
 
111
- # because the client was deleted above, the tokens should all be revoked
112
- # but it could have been the `--ignore-errors` case, so take a shot at revoking
113
- # tokens
114
- # use the native client for this purpose so that we definitely have a valid API
115
- # client in this case
122
+ # Attempt to revoke all tokens in storage; use the internal native client to ensure
123
+ # we have a valid Auth client
116
124
  native_client = internal_native_client()
117
-
118
125
  adapter = token_storage_adapter()
119
126
 
120
127
  for rs, tokendata in adapter.get_by_resource_server().items():
@@ -1,14 +1,16 @@
1
- import click
1
+ import uuid
2
2
 
3
3
  from globus_cli.login_manager import LoginManager
4
4
  from globus_cli.parsing import command
5
5
  from globus_cli.termio import display
6
6
 
7
+ from .._common import index_id_arg
8
+
7
9
 
8
10
  @command("delete")
9
11
  @LoginManager.requires_login("search")
10
- @click.argument("INDEX_ID")
11
- def delete_command(login_manager: LoginManager, *, index_id: str) -> None:
12
+ @index_id_arg
13
+ def delete_command(login_manager: LoginManager, *, index_id: uuid.UUID) -> None:
12
14
  """Delete a Search index."""
13
15
  search_client = login_manager.get_search_client()
14
16
  display(
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import click
4
- from globus_sdk.scopes import MutableScope
4
+ from globus_sdk.scopes import Scope
5
5
 
6
6
  from globus_cli import utils
7
7
  from globus_cli.login_manager import LoginManager, compute_timer_scope
@@ -36,7 +36,7 @@ def session_consent(
36
36
  This command is necessary when the CLI needs access to resources which require the
37
37
  user to explicitly consent to access.
38
38
  """
39
- scope_list: list[str | MutableScope] = [
39
+ scope_list: list[str | Scope] = [
40
40
  utils.unquote_cmdprompt_single_quotes(s) for s in scopes
41
41
  ]
42
42
 
@@ -6,7 +6,7 @@ import uuid
6
6
 
7
7
  import click
8
8
  import globus_sdk
9
- from globus_sdk.scopes import GCSCollectionScopeBuilder, MutableScope
9
+ from globus_sdk.scopes import GCSCollectionScopeBuilder, Scope
10
10
 
11
11
  from globus_cli.endpointish import Endpointish
12
12
  from globus_cli.login_manager import LoginManager, is_client_login
@@ -314,7 +314,7 @@ def resolve_optional_local_time(
314
314
 
315
315
  def _derive_needed_scopes(
316
316
  needs_data_access: list[str],
317
- ) -> dict[str, MutableScope]:
317
+ ) -> dict[str, Scope]:
318
318
  # Render the fully nested scope strings for each target
319
319
  scopes_needed = {}
320
320
  for target in needs_data_access:
@@ -330,7 +330,7 @@ def _derive_needed_scopes(
330
330
 
331
331
  def _derive_missing_scopes(
332
332
  auth_client: CustomAuthClient,
333
- scopes_needed: dict[str, MutableScope],
333
+ scopes_needed: dict[str, Scope],
334
334
  ) -> list[str]:
335
335
  # read the identity ID stored from the login flow
336
336
  user_identity_id = get_current_identity_id()
@@ -350,8 +350,8 @@ def _derive_missing_scopes(
350
350
 
351
351
 
352
352
  # shorthand helper for constructing a nested scope
353
- def _ez_make_nested_scope(*scope_strings: str) -> MutableScope:
354
- current_node = MutableScope(scope_strings[-1])
353
+ def _ez_make_nested_scope(*scope_strings: str) -> Scope:
354
+ current_node = Scope(scope_strings[-1])
355
355
  for current_scope in scope_strings[-2::-1]:
356
- current_node = MutableScope(current_scope, dependencies=[current_node])
356
+ current_node = Scope(current_scope, dependencies=[current_node])
357
357
  return current_node
@@ -103,9 +103,12 @@ def check_inactive_reason(
103
103
  def _get_inactive_reason(
104
104
  timer_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse
105
105
  ) -> GlobusAuthRequirementsError | None:
106
- from globus_sdk.experimental.auth_requirements_error import (
107
- to_auth_requirements_error,
108
- )
106
+ try:
107
+ from globus_sdk.gare import to_gare # type: ignore[import-not-found]
108
+ except ImportError:
109
+ from globus_sdk.experimental.auth_requirements_error import (
110
+ to_auth_requirements_error as to_gare,
111
+ )
109
112
 
110
113
  if timer_doc.get("status") != "inactive":
111
114
  return None
@@ -114,7 +117,7 @@ def _get_inactive_reason(
114
117
  if reason.get("cause") != "globus_auth_requirements":
115
118
  return None
116
119
 
117
- return to_auth_requirements_error(reason.get("detail", {}))
120
+ return to_gare(reason.get("detail", {})) # type: ignore[no-any-return]
118
121
 
119
122
 
120
123
  def _has_required_consent(
@@ -6,7 +6,7 @@ import typing as t
6
6
 
7
7
  import click
8
8
  import globus_sdk
9
- from globus_sdk.scopes import MutableScope
9
+ from globus_sdk.scopes import Scope
10
10
 
11
11
  from .tokenstore import (
12
12
  internal_auth_client,
@@ -17,7 +17,7 @@ from .tokenstore import (
17
17
 
18
18
 
19
19
  def do_link_auth_flow(
20
- scopes: str | t.Sequence[str | MutableScope],
20
+ scopes: str | t.Sequence[str | Scope],
21
21
  *,
22
22
  session_params: dict[str, str] | None = None,
23
23
  ) -> bool:
@@ -58,7 +58,7 @@ def do_link_auth_flow(
58
58
 
59
59
 
60
60
  def do_local_server_auth_flow(
61
- scopes: str | t.Sequence[str | MutableScope],
61
+ scopes: str | t.Sequence[str | Scope],
62
62
  *,
63
63
  session_params: dict[str, str] | None = None,
64
64
  ) -> bool:
@@ -7,20 +7,26 @@ import uuid
7
7
 
8
8
  import click
9
9
  import globus_sdk
10
- from globus_sdk.experimental.consents import ConsentForest
11
- from globus_sdk.experimental.scope_parser import Scope
12
10
  from globus_sdk.scopes import (
13
11
  AuthScopes,
14
12
  FlowsScopes,
15
13
  GCSCollectionScopeBuilder,
16
14
  GCSEndpointScopeBuilder,
17
15
  GroupsScopes,
18
- MutableScope,
16
+ Scope,
19
17
  SearchScopes,
20
- TimerScopes,
18
+ TimersScopes,
21
19
  TransferScopes,
22
20
  )
23
21
 
22
+ # TODO: remove this after an SDK release provides scopes.consents
23
+ try:
24
+ from globus_sdk.scopes.consents import ( # type: ignore[import-not-found]
25
+ ConsentForest,
26
+ )
27
+ except ImportError:
28
+ from globus_sdk.experimental.consents import ConsentForest
29
+
24
30
  from globus_cli.endpointish import Endpointish, EntityType
25
31
  from globus_cli.types import ServiceNameLiteral
26
32
 
@@ -54,21 +60,19 @@ R = t.TypeVar("R")
54
60
  class LoginManager:
55
61
  def __init__(self) -> None:
56
62
  self._token_storage = token_storage_adapter()
57
- self._nonstatic_requirements: dict[str, list[str | MutableScope]] = {}
63
+ self._nonstatic_requirements: dict[str, list[str | Scope]] = {}
58
64
 
59
- def add_requirement(
60
- self, rs_name: str, scopes: t.Sequence[str | MutableScope]
61
- ) -> None:
65
+ def add_requirement(self, rs_name: str, scopes: t.Sequence[str | Scope]) -> None:
62
66
  self._nonstatic_requirements[rs_name] = list(scopes)
63
67
 
64
68
  @property
65
- def login_requirements(self) -> t.Iterator[tuple[str, list[str | MutableScope]]]:
69
+ def login_requirements(self) -> t.Iterator[tuple[str, list[str | Scope]]]:
66
70
  for req in CLI_SCOPE_REQUIREMENTS.values():
67
71
  yield req["resource_server"], req["scopes"]
68
72
  yield from self._nonstatic_requirements.items()
69
73
 
70
74
  @property
71
- def always_required_scopes(self) -> t.Iterator[str | MutableScope]:
75
+ def always_required_scopes(self) -> t.Iterator[str | Scope]:
72
76
  """
73
77
  scopes which are required on all login flows, regardless of the specified
74
78
  scopes for that flow
@@ -179,7 +183,9 @@ class LoginManager:
179
183
  else:
180
184
  # If there are dependent scopes all required scope paths are present in the
181
185
  # user's cached consent forest.
182
- return self._cached_consent_forest.meets_scope_requirements(required_scopes)
186
+ return ( # type: ignore[no-any-return]
187
+ self._cached_consent_forest.meets_scope_requirements(required_scopes)
188
+ )
183
189
 
184
190
  @property
185
191
  @functools.lru_cache(maxsize=1) # noqa: B019
@@ -195,7 +201,7 @@ class LoginManager:
195
201
  local_server_message: str | None = None,
196
202
  epilog: str | None = None,
197
203
  session_params: dict[str, str] | None = None,
198
- scopes: list[str | MutableScope] | None = None,
204
+ scopes: list[str | Scope] | None = None,
199
205
  ) -> None:
200
206
  if is_client_login():
201
207
  click.echo(
@@ -371,7 +377,7 @@ class LoginManager:
371
377
  return globus_sdk.SearchClient(authorizer=authorizer, app_name=version.app_name)
372
378
 
373
379
  def get_timer_client(self) -> globus_sdk.TimerClient:
374
- authorizer = self._get_client_authorizer(TimerScopes.resource_server)
380
+ authorizer = self._get_client_authorizer(TimersScopes.resource_server)
375
381
  return globus_sdk.TimerClient(authorizer=authorizer, app_name=version.app_name)
376
382
 
377
383
  def _get_gcs_info(
@@ -455,7 +461,7 @@ class LoginManager:
455
461
 
456
462
  if not include_data_access:
457
463
  # Just require an endpoint:manage_collections scope
458
- scope = GCSEndpointScopeBuilder(gcs_id).make_mutable("manage_collections")
464
+ scope = Scope(GCSEndpointScopeBuilder(gcs_id).manage_collections)
459
465
  login_context = LoginContext(
460
466
  login_command=f"globus login --gcs {gcs_id}",
461
467
  error_message="Missing 'manage_collections' consent on an endpoint.",
@@ -463,7 +469,7 @@ class LoginManager:
463
469
  else:
464
470
  # Require an endpoint:manage_collections scope with a dependent
465
471
  # collection[data_access] scope
466
- scope = GCSEndpointScopeBuilder(gcs_id).make_mutable("manage_collections")
472
+ scope = Scope(GCSEndpointScopeBuilder(gcs_id).manage_collections)
467
473
  data_access = GCSCollectionScopeBuilder(str(collection_id)).data_access
468
474
  scope.add_dependency(data_access)
469
475