globus-cli 3.41.0__tar.gz → 3.42.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 (293) hide show
  1. {globus_cli-3.41.0 → globus_cli-3.42.0}/PKG-INFO +6 -6
  2. {globus_cli-3.41.0 → globus_cli-3.42.0}/changelog.adoc +27 -0
  3. {globus_cli-3.41.0 → globus_cli-3.42.0}/pyproject.toml +8 -6
  4. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/api.py +20 -17
  5. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/list.py +2 -19
  6. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +1 -1
  7. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/show.py +2 -0
  8. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/__init__.py +2 -0
  9. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/_common.py +3 -1
  10. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/_fields.py +54 -0
  11. globus_cli-3.42.0/src/globus_cli/commands/flows/registered_api/__init__.py +12 -0
  12. globus_cli-3.42.0/src/globus_cli/commands/flows/registered_api/list.py +92 -0
  13. globus_cli-3.42.0/src/globus_cli/commands/flows/registered_api/show.py +27 -0
  14. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/resume.py +2 -4
  15. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/start.py +0 -2
  16. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/create/_common.py +2 -4
  17. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/set_subscription_id.py +1 -1
  18. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +3 -1
  19. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/update.py +1 -3
  20. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/_common.py +1 -1
  21. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/list.py +1 -0
  22. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/login.py +6 -19
  23. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/__init__.py +1 -0
  24. globus_cli-3.42.0/src/globus_cli/commands/streams/tunnel/events.py +37 -0
  25. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/create/_common.py +2 -4
  26. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/create/transfer.py +2 -4
  27. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/resume.py +2 -4
  28. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/local_server.py +2 -4
  29. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/commands.py +0 -18
  30. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/delimited.py +3 -20
  31. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +2 -5
  32. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/guest_activity_notify_param.py +3 -3
  33. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/identity_type.py +1 -4
  34. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/json_strorfile.py +1 -3
  35. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/location.py +1 -1
  36. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/notify_param.py +1 -4
  37. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/nullable.py +2 -6
  38. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/omittable.py +19 -23
  39. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/task_path.py +1 -1
  40. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/timedelta.py +1 -1
  41. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shared_options/__init__.py +2 -4
  42. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +2 -4
  43. globus_cli-3.42.0/src/globus_cli/services/transfer/__init__.py +66 -0
  44. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/_display.py +11 -2
  45. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/context.py +5 -0
  46. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/__init__.py +2 -0
  47. globus_cli-3.42.0/src/globus_cli/termio/printers/folded_table_printer.py +355 -0
  48. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/version.py +1 -1
  49. globus_cli-3.41.0/src/globus_cli/_click_compat.py +0 -55
  50. globus_cli-3.41.0/src/globus_cli/services/transfer/__init__.py +0 -35
  51. {globus_cli-3.41.0 → globus_cli-3.42.0}/LICENSE +0 -0
  52. {globus_cli-3.41.0 → globus_cli-3.42.0}/README.rst +0 -0
  53. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/__init__.py +0 -0
  54. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/__main__.py +0 -0
  55. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/_warnings.py +0 -0
  56. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/__init__.py +0 -0
  57. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/_common.py +0 -0
  58. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/_removal_stub.py +0 -0
  59. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  60. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  61. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  62. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  63. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  64. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  65. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  66. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
  67. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  68. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/_common.py +0 -0
  69. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  70. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/create/guest.py +0 -0
  71. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
  72. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/delete.py +0 -0
  73. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/role/__init__.py +0 -0
  74. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/role/delete.py +0 -0
  75. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/role/list.py +0 -0
  76. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/role/show.py +0 -0
  77. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/show.py +0 -0
  78. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/collection/update.py +0 -0
  79. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/delete.py +0 -0
  80. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  81. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  82. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  83. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  84. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  85. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  86. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
  87. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
  88. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  89. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  90. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
  91. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
  92. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  93. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  94. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  95. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  96. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  97. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  98. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/search.py +0 -0
  99. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  100. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  101. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  102. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  103. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  104. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  105. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  106. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  107. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
  108. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  109. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  110. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  111. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  112. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  113. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/create.py +0 -0
  114. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/delete.py +0 -0
  115. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/list.py +0 -0
  116. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  117. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  118. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  119. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  120. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  121. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  122. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  123. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  124. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/show.py +0 -0
  125. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/update.py +0 -0
  126. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/flows/validate.py +0 -0
  127. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  128. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  129. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  130. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  131. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/set_subscription_admin_verified.py +0 -0
  132. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  133. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  134. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  135. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  136. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  137. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  138. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  139. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  140. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  141. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  142. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  143. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  144. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  145. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/get_identities.py +0 -0
  146. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/__init__.py +0 -0
  147. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/create.py +0 -0
  148. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/delete.py +0 -0
  149. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  150. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  151. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  152. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
  153. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  154. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  155. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/join.py +0 -0
  156. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/leave.py +0 -0
  157. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  158. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/add.py +0 -0
  159. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  160. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  161. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/list.py +0 -0
  162. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  163. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  164. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  165. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/set_subscription_admin_verified.py +0 -0
  166. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/show.py +0 -0
  167. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/group/update.py +0 -0
  168. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/list_commands.py +0 -0
  169. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/logout.py +0 -0
  170. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/ls.py +0 -0
  171. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/mkdir.py +0 -0
  172. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/rename.py +0 -0
  173. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/rm.py +0 -0
  174. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/__init__.py +0 -0
  175. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/_common.py +0 -0
  176. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  177. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  178. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/create.py +0 -0
  179. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/delete.py +0 -0
  180. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/list.py +0 -0
  181. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  182. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  183. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  184. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  185. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/index/show.py +0 -0
  186. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/ingest.py +0 -0
  187. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/query.py +0 -0
  188. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  189. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  190. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  191. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  192. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/task/list.py +0 -0
  193. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/search/task/show.py +0 -0
  194. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/session/__init__.py +0 -0
  195. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/session/consent.py +0 -0
  196. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/session/show.py +0 -0
  197. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/session/update.py +0 -0
  198. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/stat.py +0 -0
  199. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/__init__.py +0 -0
  200. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/access_point/__init__.py +0 -0
  201. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/access_point/show.py +0 -0
  202. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/_common.py +0 -0
  203. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/create.py +0 -0
  204. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/delete.py +0 -0
  205. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/list.py +0 -0
  206. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/show.py +0 -0
  207. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/stop.py +0 -0
  208. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/streams/tunnel/update.py +0 -0
  209. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/__init__.py +0 -0
  210. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/_common.py +0 -0
  211. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/cancel.py +0 -0
  212. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/event_list.py +0 -0
  213. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  214. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/list.py +0 -0
  215. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  216. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/show.py +0 -0
  217. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/update.py +0 -0
  218. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/task/wait.py +0 -0
  219. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  220. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/_common.py +0 -0
  221. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  222. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/create/flow.py +0 -0
  223. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/delete.py +0 -0
  224. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/list.py +0 -0
  225. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/pause.py +0 -0
  226. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/timer/show.py +0 -0
  227. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/transfer.py +0 -0
  228. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/update.py +0 -0
  229. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/version.py +0 -0
  230. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/commands/whoami.py +0 -0
  231. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/constants.py +0 -0
  232. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/endpointish/__init__.py +0 -0
  233. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/endpointish/endpointish.py +0 -0
  234. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  235. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/endpointish/errors.py +0 -0
  236. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  237. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/__init__.py +0 -0
  238. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/auth_requirements.py +0 -0
  239. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/authapi_hooks.py +0 -0
  240. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/endpoint_types.py +0 -0
  241. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/flows_hooks.py +0 -0
  242. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/generic_hooks.py +0 -0
  243. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/search_hooks.py +0 -0
  244. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/hooks/transfer_hooks.py +0 -0
  245. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/messages.py +0 -0
  246. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/exception_handling/registry.py +0 -0
  247. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/globus_cli_flake8.py +0 -0
  248. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/__init__.py +0 -0
  249. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  250. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/auth_flows.py +0 -0
  251. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/client_login.py +0 -0
  252. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/context.py +0 -0
  253. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/errors.py +0 -0
  254. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/manager.py +0 -0
  255. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/scopes.py +0 -0
  256. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/storage.py +0 -0
  257. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/login_manager/utils.py +0 -0
  258. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/__init__.py +0 -0
  259. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/command_state.py +0 -0
  260. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  261. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_classes.py +0 -0
  262. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  263. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  264. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  265. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shared_options/flow_options.py +0 -0
  266. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
  267. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/parsing/shell_completion.py +0 -0
  268. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/reflect.py +0 -0
  269. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/services/__init__.py +0 -0
  270. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/services/auth.py +0 -0
  271. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/services/gcs.py +0 -0
  272. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/services/transfer/client.py +0 -0
  273. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/services/transfer/data.py +0 -0
  274. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  275. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/__init__.py +0 -0
  276. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/errors.py +0 -0
  277. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/field.py +0 -0
  278. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  279. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/formatters/auth.py +0 -0
  280. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/formatters/base.py +0 -0
  281. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  282. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  283. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/base.py +0 -0
  284. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/custom_printer.py +0 -0
  285. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/json_printer.py +0 -0
  286. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/record_printer.py +0 -0
  287. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/table_printer.py +0 -0
  288. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/unix_printer/__init__.py +0 -0
  289. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/unix_printer/_formatter.py +0 -0
  290. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/printers/unix_printer/unix_printer.py +0 -0
  291. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/termio/server_timing.py +0 -0
  292. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/types.py +0 -0
  293. {globus_cli-3.41.0 → globus_cli-3.42.0}/src/globus_cli/utils.py +0 -0
@@ -1,25 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: globus-cli
3
- Version: 3.41.0
3
+ Version: 3.42.0
4
4
  Summary: Globus CLI
5
5
  Keywords: globus,cli,command line
6
6
  Author-email: Stephen Rosen <sirosen@globus.org>
7
- Requires-Python: >=3.9
7
+ Requires-Python: >=3.10
8
8
  Description-Content-Type: text/x-rst
9
9
  License-Expression: Apache-2.0
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: Operating System :: POSIX
13
13
  Classifier: Programming Language :: Python
14
- Classifier: Programming Language :: Python :: 3.9
15
14
  Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
19
  License-File: LICENSE
20
- Requires-Dist: globus-sdk==4.3.0
21
- Requires-Dist: click>=8.1.4,<8.4
22
- Requires-Dist: jmespath==1.0.1
20
+ Requires-Dist: globus-sdk==4.8.0
21
+ Requires-Dist: click>=8.4,<8.5
22
+ Requires-Dist: jmespath==1.1.0
23
23
  Requires-Dist: packaging>=17.0
24
24
  Requires-Dist: typing_extensions>=4.0;python_version<'3.11'
25
25
  Requires-Dist: requests>=2.32.3,<3.0.0
@@ -2,6 +2,33 @@
2
2
 
3
3
  // scriv-insert-here
4
4
 
5
+ == 3.42.0 (2026-06-10)
6
+
7
+ Bugfixes:
8
+
9
+ * `globus api transfer` no longer prepends `/v0.10/` to `/v2/` paths
10
+
11
+ Enhancements:
12
+
13
+ * Added Domain field to default output of `globus endpoint search` and `globus endpoint show`
14
+
15
+ * Added `globus streams tunnel events` command to show tunnel events
16
+
17
+ * When using table output on narrow terminals, the Globus CLI will now stack
18
+ table elements in a new "folded table" layout. This behavior is only used
19
+ when the output device is a TTY. To disable the new output altogether, users
20
+ can set `GLOBUS_CLI_FOLD_TABLES=0`.
21
+
22
+ * Added Subscription ID to the text output of `globus group list`
23
+
24
+ * Added `globus flows registered-api show` command to display details of a registered API
25
+
26
+ * Added `globus flows registered-api list` command to list registered APIs
27
+
28
+ Other:
29
+
30
+ * Removed support for Python 3.9 .
31
+
5
32
  == 3.41.0 (2026-01-14)
6
33
 
7
34
  Bugfixes:
@@ -20,17 +20,19 @@ classifiers = [
20
20
  "Intended Audience :: Developers",
21
21
  "Operating System :: POSIX",
22
22
  "Programming Language :: Python",
23
- "Programming Language :: Python :: 3.9",
24
23
  "Programming Language :: Python :: 3.10",
25
24
  "Programming Language :: Python :: 3.11",
26
25
  "Programming Language :: Python :: 3.12",
27
26
  "Programming Language :: Python :: 3.13",
27
+ "Programming Language :: Python :: 3.14",
28
28
  ]
29
- requires-python = ">=3.9"
29
+ requires-python = ">=3.10"
30
30
  dependencies = [
31
- "globus-sdk==4.3.0",
32
- "click>=8.1.4,<8.4",
33
- "jmespath==1.0.1",
31
+ "globus-sdk==4.8.0",
32
+ # NOTE: `click` does not use semver; minor releases are expected to contain
33
+ # minor breaking changes
34
+ "click>=8.4,<8.5",
35
+ "jmespath==1.1.0",
34
36
  "packaging>=17.0",
35
37
  "typing_extensions>=4.0;python_version<'3.11'",
36
38
  # these are dependencies of the SDK, but they are used directly in the CLI
@@ -61,7 +63,7 @@ test = [
61
63
  ]
62
64
  test-mindeps = [
63
65
  {include-group = "test"},
64
- "click==8.1.8",
66
+ "click==8.4.0",
65
67
  "requests==2.32.4",
66
68
  "pyjwt==2.0.0",
67
69
  "cryptography==3.3.1",
@@ -10,7 +10,6 @@ import globus_sdk
10
10
  from globus_sdk.scopes import ScopeParser
11
11
 
12
12
  from globus_cli import termio, version
13
- from globus_cli._click_compat import shim_get_metavar
14
13
  from globus_cli.login_manager import LoginManager, is_client_login
15
14
  from globus_cli.login_manager.scopes import CLI_SCOPE_REQUIREMENTS
16
15
  from globus_cli.parsing import command, endpoint_id_arg, group, mutex_option_group
@@ -20,8 +19,7 @@ from globus_cli.types import AnyCommand, ServiceNameLiteral
20
19
  C = t.TypeVar("C", bound=AnyCommand)
21
20
 
22
21
 
23
- class QueryParamType(click.ParamType):
24
- @shim_get_metavar
22
+ class QueryParamType(click.ParamType[tuple[str, str] | None]):
25
23
  def get_metavar(self, param: click.Parameter, ctx: click.Context) -> str:
26
24
  return "Key=Value"
27
25
 
@@ -33,21 +31,17 @@ class QueryParamType(click.ParamType):
33
31
 
34
32
  def convert(
35
33
  self,
36
- value: str | None,
34
+ value: str,
37
35
  param: click.Parameter | None,
38
36
  ctx: click.Context | None,
39
37
  ) -> tuple[str, str] | None:
40
- value = super().convert(value, param, ctx)
41
- if value is None:
42
- return None
43
38
  if "=" not in value:
44
39
  self.fail("invalid query param", param=param, ctx=ctx)
45
40
  left, right = value.split("=", 1)
46
41
  return (left, right)
47
42
 
48
43
 
49
- class HeaderParamType(click.ParamType):
50
- @shim_get_metavar
44
+ class HeaderParamType(click.ParamType[tuple[str, str] | None]):
51
45
  def get_metavar(self, param: click.Parameter, ctx: click.Context) -> str:
52
46
  return "Key:Value"
53
47
 
@@ -59,13 +53,10 @@ class HeaderParamType(click.ParamType):
59
53
 
60
54
  def convert(
61
55
  self,
62
- value: str | None,
56
+ value: str,
63
57
  param: click.Parameter | None,
64
58
  ctx: click.Context | None,
65
59
  ) -> tuple[str, str] | None:
66
- value = super().convert(value, param, ctx)
67
- if value is None:
68
- return None
69
60
  if ":" not in value:
70
61
  self.fail("invalid header param", param=param, ctx=ctx)
71
62
  left, right = value.split(":", 1)
@@ -172,7 +163,7 @@ def _get_url(service_name: str) -> str:
172
163
  "search": "https://search.api.globus.org/",
173
164
  "transfer": "https://transfer.api.globus.org/v0.10/",
174
165
  "timers": "https://timer.automate.globus.org/",
175
- "gcs": "https://$GCS_MANAGER/",
166
+ "gcs": "https://GCS_MANAGER/",
176
167
  }[service_name]
177
168
 
178
169
 
@@ -324,7 +315,9 @@ def _execute_service_command(
324
315
  if path.startswith("/"):
325
316
  path = path[1:]
326
317
  path = f"/v2/{path}"
327
- if isinstance(client, globus_sdk.TransferClient) and not path.startswith("/v0.10/"):
318
+ if isinstance(client, globus_sdk.TransferClient) and not (
319
+ path.startswith(("/v0.10/", "/v2/"))
320
+ ):
328
321
  if path.startswith("/"):
329
322
  path = path[1:]
330
323
  path = f"/v0.10/{path}"
@@ -379,16 +372,26 @@ def build_command(
379
372
  )
380
373
  hidden: bool = command_name == "timer"
381
374
 
375
+ example_command_name: str = command_name
376
+ helptext_epilog: str = ""
377
+ service_title: str = service_name.title()
378
+
379
+ if command_name == "gcs":
380
+ service_title = "GCS"
381
+ example_command_name = "gcs ENDPOINT_ID"
382
+ helptext_epilog = "\nWhere GCS_MANAGER is looked up from ENDPOINT_ID."
383
+
382
384
  helptext = f"""\
383
- Make API calls to Globus {service_name.title()}
385
+ Make API calls to Globus {service_title}
384
386
 
385
387
  The arguments are an HTTP method name and a path within the service to which the request
386
388
  should be made. The path will be joined with the known service URL.
387
389
  For example, a call of
388
390
 
389
- globus api {command_name} GET /foo/bar
391
+ globus api {example_command_name} GET /foo/bar
390
392
 
391
393
  sends a 'GET' request to `{_get_url(service_name)}foo/bar`
394
+ {helptext_epilog}
392
395
  """
393
396
 
394
397
  if service_name != "gcs":
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import sys
4
3
  import typing as t
5
4
  import uuid
6
5
 
@@ -12,22 +11,8 @@ from globus_cli.parsing import command, endpoint_id_arg
12
11
  from globus_cli.termio import Field, display, formatters
13
12
  from globus_cli.utils import PagingWrapper
14
13
 
15
- if sys.version_info >= (3, 10):
16
- from typing import TypeAlias
17
- else:
18
- from typing_extensions import TypeAlias
19
14
 
20
- # until our minimum click version is 8.2.0+ , we need to handle the fact that
21
- # click.Choice became a generic in 8.2.0
22
- # we cannot leave it without a defined type parameter, as we have
23
- # "no-any-generics" set for mypy
24
- if t.TYPE_CHECKING:
25
- ChoiceType: TypeAlias = click.Choice[str]
26
- else:
27
- ChoiceType = click.Choice
28
-
29
-
30
- class ChoiceSlugified(ChoiceType):
15
+ class ChoiceSlugified(click.Choice[str]):
31
16
  """
32
17
  Allow either hyphens or underscores, e.g. both 'mapped-collections' or
33
18
  'mapped_collections'
@@ -37,10 +22,8 @@ class ChoiceSlugified(ChoiceType):
37
22
  return t.cast(type, t.Literal[tuple(self._slugify(c) for c in self.choices)])
38
23
 
39
24
  def convert(
40
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
25
+ self, value: str, param: click.Parameter | None, ctx: click.Context | None
41
26
  ) -> t.Any:
42
- if value is None:
43
- return None
44
27
  return self._slugify(super().convert(value.replace("_", "-"), param, ctx))
45
28
 
46
29
  def _slugify(self, value: str) -> str:
@@ -9,7 +9,7 @@ from globus_cli.parsing import command, endpoint_id_arg
9
9
  from globus_cli.termio import display
10
10
 
11
11
 
12
- class SubscriptionIdType(click.ParamType):
12
+ class SubscriptionIdType(click.ParamType[str]):
13
13
  def convert(
14
14
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
15
15
  ) -> str:
@@ -5,12 +5,14 @@ import click
5
5
  from globus_cli.endpointish import Endpointish
6
6
  from globus_cli.login_manager import LoginManager
7
7
  from globus_cli.parsing import command, endpoint_id_arg
8
+ from globus_cli.services.transfer import DOMAIN_FIELD
8
9
  from globus_cli.termio import Field, display, formatters
9
10
 
10
11
  STANDARD_FIELDS = [
11
12
  Field("Display Name", "display_name"),
12
13
  Field("ID", "id"),
13
14
  Field("Owner", "owner_string"),
15
+ DOMAIN_FIELD,
14
16
  Field("Description", "description", wrap_enabled=True),
15
17
  Field("Shareable", "shareable"),
16
18
  Field("Keywords", "keywords"),
@@ -13,6 +13,8 @@ from globus_cli.parsing import group
13
13
  "start": (".start", "start_command"),
14
14
  # "run" is a subgroup of commands.
15
15
  "run": (".run", "run_command"),
16
+ # "registered-api" is a subgroup of commands.
17
+ "registered-api": (".registered_api", "registered_api_command"),
16
18
  },
17
19
  )
18
20
  def flows_command() -> None:
@@ -125,7 +125,9 @@ keywords_option = click.option(
125
125
  )
126
126
 
127
127
 
128
- class SubscriptionIdType(click.ParamType):
128
+ class SubscriptionIdType(
129
+ click.ParamType[uuid.UUID | t.Literal["DEFAULT"] | globus_sdk.MissingType]
130
+ ):
129
131
  name = "SUBSCRIPTION_ID"
130
132
 
131
133
  def __init__(self, *, omittable: bool = False) -> None:
@@ -111,3 +111,57 @@ def flow_run_format_fields(
111
111
  Field("Run Managers", "run_managers", formatter=csv_principal_list),
112
112
  Field("Run Monitors", "run_monitors", formatter=csv_principal_list),
113
113
  ]
114
+
115
+
116
+ class RegisteredAPIPrincipalFormatter(PrincipalURNFormatter):
117
+ """A principal formatter which pre-registers all principals for a registered API."""
118
+
119
+ def __init__(
120
+ self, auth_client: globus_sdk.AuthClient, registered_api: dict[str, t.Any]
121
+ ) -> None:
122
+ super().__init__(auth_client)
123
+ roles = registered_api.get("roles", {})
124
+ self.add_items(*roles.get("owners", ()))
125
+ self.add_items(*roles.get("administrators", ()))
126
+ self.add_items(*roles.get("viewers", ()))
127
+
128
+
129
+ def registered_api_format_fields(
130
+ auth_client: globus_sdk.AuthClient,
131
+ registered_api: dict[str, t.Any],
132
+ ) -> list[Field]:
133
+ """
134
+ The standard list of fields to render for a registered API resource.
135
+
136
+ :param auth_client: An AuthClient, used to resolve principal URNs.
137
+ :param registered_api: The registered API resource, used to pre-register
138
+ principals.
139
+ """
140
+ principal = RegisteredAPIPrincipalFormatter(auth_client, registered_api)
141
+ csv_principal_list = formatters.ArrayFormatter(
142
+ element_formatter=principal,
143
+ delimiter=", ",
144
+ )
145
+
146
+ return [
147
+ Field("Registered API ID", "id"),
148
+ Field("Name", "name"),
149
+ Field("Description", "description"),
150
+ Field("Status", "status"),
151
+ Field("Subscription ID", "subscription_id"),
152
+ Field("Created At", "created_timestamp", formatter=formatters.Date),
153
+ Field("Updated At", "updated_timestamp", formatter=formatters.Date),
154
+ Field("Edited At", "edited_timestamp", formatter=formatters.Date),
155
+ Field(
156
+ "Scheduled Deletion",
157
+ "scheduled_deletion_timestamp",
158
+ formatter=formatters.Date,
159
+ ),
160
+ Field("Owners", "roles.owners", formatter=csv_principal_list),
161
+ Field("Administrators", "roles.administrators", formatter=csv_principal_list),
162
+ Field("Viewers", "roles.viewers", formatter=csv_principal_list),
163
+ Field("Target Type", "target.type"),
164
+ Field("OpenAPI Version", "target.openapi_version"),
165
+ Field("Destination Method", "target.destination.method"),
166
+ Field("Destination URL", "target.destination.url"),
167
+ ]
@@ -0,0 +1,12 @@
1
+ from globus_cli.parsing import group
2
+
3
+
4
+ @group(
5
+ "registered-api",
6
+ lazy_subcommands={
7
+ "show": (".show", "show_command"),
8
+ "list": (".list", "list_command"),
9
+ },
10
+ )
11
+ def registered_api_command() -> None:
12
+ """Interact with registered APIs in the Globus Flows service."""
@@ -0,0 +1,92 @@
1
+ from __future__ import annotations
2
+
3
+ import typing as t
4
+
5
+ import click
6
+ import globus_sdk
7
+ from globus_sdk.paging import Paginator
8
+
9
+ from globus_cli.login_manager import LoginManager
10
+ from globus_cli.parsing import ColonDelimitedChoiceTuple, command
11
+ from globus_cli.termio import Field, display, formatters
12
+ from globus_cli.utils import PagingWrapper
13
+
14
+ ROLE_TYPES = ("owner", "administrator", "viewer")
15
+ ORDER_BY_FIELDS = ("id", "name", "created_timestamp", "updated_timestamp")
16
+
17
+
18
+ @command("list")
19
+ @click.option(
20
+ "--filter-role",
21
+ "filter_roles",
22
+ type=click.Choice(ROLE_TYPES),
23
+ help="Filter results by the registered API's role type associated with the caller",
24
+ multiple=True,
25
+ )
26
+ @click.option(
27
+ "--orderby",
28
+ default=("created_timestamp:DESC",),
29
+ show_default=True,
30
+ type=ColonDelimitedChoiceTuple(
31
+ choices=tuple(
32
+ f"{field}:{order}" for field in ORDER_BY_FIELDS for order in ("ASC", "DESC")
33
+ ),
34
+ case_sensitive=False,
35
+ ),
36
+ multiple=True,
37
+ metavar=f"[{'|'.join(ORDER_BY_FIELDS)}]:[ASC|DESC]",
38
+ help="""
39
+ Sort results by the given field and ordering.
40
+ ASC for ascending, DESC for descending.
41
+
42
+ This option can be specified multiple times to sort by multiple fields.
43
+ """,
44
+ )
45
+ @click.option(
46
+ "--limit",
47
+ default=25,
48
+ show_default=True,
49
+ metavar="N",
50
+ type=click.IntRange(1),
51
+ help="The maximum number of results to return.",
52
+ )
53
+ @LoginManager.requires_login("flows")
54
+ def list_command(
55
+ login_manager: LoginManager,
56
+ *,
57
+ filter_roles: tuple[t.Literal["owner", "administrator", "viewer"], ...],
58
+ orderby: tuple[
59
+ tuple[
60
+ t.Literal["id", "name", "created_timestamp", "updated_timestamp"],
61
+ t.Literal["ASC", "DESC"],
62
+ ],
63
+ ...,
64
+ ],
65
+ limit: int,
66
+ ) -> None:
67
+ """
68
+ List registered APIs.
69
+ """
70
+ flows_client = login_manager.get_flows_client()
71
+ paginator = Paginator.wrap(flows_client.list_registered_apis)
72
+ api_iterator = PagingWrapper(
73
+ paginator(
74
+ filter_roles=filter_roles or globus_sdk.MISSING,
75
+ orderby=",".join(f"{field} {order}" for field, order in orderby),
76
+ ).items(),
77
+ json_conversion_key="registered_apis",
78
+ limit=limit,
79
+ )
80
+
81
+ fields = [
82
+ Field("Registered API ID", "id"),
83
+ Field("Name", "name"),
84
+ Field("Created At", "created_timestamp", formatter=formatters.Date),
85
+ Field("Updated At", "updated_timestamp", formatter=formatters.Date),
86
+ ]
87
+
88
+ display(
89
+ api_iterator,
90
+ fields=fields,
91
+ json_converter=api_iterator.json_converter,
92
+ )
@@ -0,0 +1,27 @@
1
+ from __future__ import annotations
2
+
3
+ import uuid
4
+
5
+ import click
6
+
7
+ from globus_cli.commands.flows._fields import registered_api_format_fields
8
+ from globus_cli.login_manager import LoginManager
9
+ from globus_cli.parsing import command
10
+ from globus_cli.termio import display
11
+
12
+
13
+ @command("show")
14
+ @click.argument("registered_api_id", type=click.UUID)
15
+ @LoginManager.requires_login("auth", "flows")
16
+ def show_command(login_manager: LoginManager, *, registered_api_id: uuid.UUID) -> None:
17
+ """
18
+ Show a registered API.
19
+ """
20
+ flows_client = login_manager.get_flows_client()
21
+
22
+ res = flows_client.get_registered_api(registered_api_id)
23
+
24
+ auth_client = login_manager.get_auth_client()
25
+ fields = registered_api_format_fields(auth_client, res.data)
26
+
27
+ display(res, fields=fields, text_mode=display.RECORD)
@@ -94,13 +94,11 @@ def check_inactive_reason(
94
94
  "This run has additional authentication requirements that must be met "
95
95
  "in order to resume.",
96
96
  gare=gare,
97
- epilog=textwrap.dedent(
98
- f"""\
97
+ epilog=textwrap.dedent(f"""\
99
98
  After updating your session, resume the run with
100
99
 
101
100
  globus flows run resume --skip-inactive-reason-check {run_id}
102
- """
103
- ),
101
+ """),
104
102
  )
105
103
 
106
104
 
@@ -8,7 +8,6 @@ import uuid
8
8
  import click
9
9
  import globus_sdk
10
10
 
11
- from globus_cli._click_compat import shim_get_metavar
12
11
  from globus_cli.commands.flows._common import FlowScopeInjector
13
12
  from globus_cli.commands.flows._fields import flow_run_format_fields
14
13
  from globus_cli.login_manager import LoginManager
@@ -43,7 +42,6 @@ class ActivityNotificationPolicyType(JSONStringOrFile):
43
42
 
44
43
  choices = ("INACTIVE", "FAILED", "SUCCEEDED")
45
44
 
46
- @shim_get_metavar
47
45
  def get_metavar(self, param: click.Parameter, ctx: click.Context) -> str:
48
46
  return f"[{{{','.join(self.choices)}}}|JSON_FILE|JSON]"
49
47
 
@@ -35,10 +35,8 @@ def _deprecated_verify_warning_callback(
35
35
  ctx: click.Context, param: click.Parameter, value: bool | None
36
36
  ) -> bool | None:
37
37
  if value is not None:
38
- print_command_hint(
39
- """\
38
+ print_command_hint("""\
40
39
  '--disable-verify/--no-disable-verify' is deprecated
41
40
 
42
- Use the '--verify' option instead."""
43
- )
41
+ Use the '--verify' option instead.""")
44
42
  return value
@@ -11,7 +11,7 @@ from globus_cli.parsing import command, endpoint_id_arg
11
11
  from globus_cli.termio import display
12
12
 
13
13
 
14
- class GCPSubscriptionIdType(click.ParamType):
14
+ class GCPSubscriptionIdType(click.ParamType[uuid.UUID | ExplicitNullType]):
15
15
  def convert(
16
16
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
17
17
  ) -> uuid.UUID | ExplicitNullType:
@@ -11,7 +11,9 @@ from globus_cli.parsing import command, endpoint_id_arg
11
11
  from globus_cli.termio import display
12
12
 
13
13
 
14
- class GCSSubscriptionIdType(click.ParamType):
14
+ class GCSSubscriptionIdType(
15
+ click.ParamType[uuid.UUID | t.Literal["DEFAULT"] | ExplicitNullType]
16
+ ):
15
17
  def convert(
16
18
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
17
19
  ) -> uuid.UUID | t.Literal["DEFAULT"] | ExplicitNullType:
@@ -7,7 +7,6 @@ import uuid
7
7
  import click
8
8
  import globus_sdk
9
9
 
10
- from globus_cli._click_compat import shim_get_metavar
11
10
  from globus_cli.commands.gcs.endpoint._common import GCS_ENDPOINT_FIELDS
12
11
  from globus_cli.constants import EXPLICIT_NULL, ExplicitNullType
13
12
  from globus_cli.login_manager import LoginManager
@@ -19,8 +18,7 @@ from globus_cli.types import AnyCallable
19
18
  F = t.TypeVar("F", bound=AnyCallable)
20
19
 
21
20
 
22
- class SubscriptionIdType(click.ParamType):
23
- @shim_get_metavar
21
+ class SubscriptionIdType(click.ParamType[str | ExplicitNullType]):
24
22
  def get_metavar(self, param: click.Parameter, ctx: click.Context) -> str:
25
23
  return "[<uuid>|DEFAULT|null]"
26
24
 
@@ -78,7 +78,7 @@ def group_id_arg(f: C) -> C:
78
78
  return click.argument("GROUP_ID", type=click.UUID)(f)
79
79
 
80
80
 
81
- class GroupSubscriptionVerifiedIdType(click.ParamType):
81
+ class GroupSubscriptionVerifiedIdType(click.ParamType[uuid.UUID | ExplicitNullType]):
82
82
  name = "TEXT"
83
83
 
84
84
  def convert(
@@ -21,5 +21,6 @@ def group_list(login_manager: LoginManager) -> None:
21
21
  Field("Type", "group_type"),
22
22
  SESSION_ENFORCEMENT_FIELD,
23
23
  Field("Roles", "my_memberships[].role", formatter=formatters.SortedArray),
24
+ Field("Subscription ID", "subscription_id"),
24
25
  ],
25
26
  )
@@ -13,7 +13,6 @@ from globus_sdk.scopes import (
13
13
  )
14
14
  from globus_sdk.services.flows import SpecificFlowClient
15
15
 
16
- from globus_cli._click_compat import shim_get_metavar
17
16
  from globus_cli.login_manager import LoginManager, is_client_login
18
17
  from globus_cli.parsing import command, no_local_server_option
19
18
  from globus_cli.termio import verbosity
@@ -30,27 +29,17 @@ Logout of the Globus CLI with
30
29
  globus logout
31
30
  """
32
31
 
33
- _LOGIN_EPILOG = (
34
- (
35
- """\
32
+ _LOGIN_EPILOG = ("""\
36
33
 
37
34
  You have successfully logged in to the Globus CLI!
38
- """
39
- )
40
- + _SHARED_EPILOG
41
- )
35
+ """) + _SHARED_EPILOG
42
36
 
43
- _LOGGED_IN_RESPONSE = (
44
- (
45
- """\
37
+ _LOGGED_IN_RESPONSE = ("""\
46
38
  You are already logged in!
47
39
 
48
40
  You may force a new login with
49
41
  globus login --force
50
- """
51
- )
52
- + _SHARED_EPILOG
53
- )
42
+ """) + _SHARED_EPILOG
54
43
 
55
44
  _IS_CLIENT_ID_RESPONSE = """\
56
45
  GLOBUS_CLI_CLIENT_ID and GLOBUS_CLI_CLIENT_SECRET are both set.
@@ -60,10 +49,9 @@ Clients are always "logged in"
60
49
  """
61
50
 
62
51
 
63
- class GCSEndpointType(click.ParamType):
52
+ class GCSEndpointType(click.ParamType[uuid.UUID | tuple[uuid.UUID, uuid.UUID]]):
64
53
  name = "GCS Server"
65
54
 
66
- @shim_get_metavar
67
55
  def get_metavar(self, param: click.Parameter, ctx: click.Context) -> str:
68
56
  return "<endpoint_id>[:<collection_id>]"
69
57
 
@@ -98,10 +86,9 @@ class GCSEndpointType(click.ParamType):
98
86
  return endpoint_id if not collection_id else (endpoint_id, collection_id)
99
87
 
100
88
 
101
- class TimerResourceType(click.ParamType):
89
+ class TimerResourceType(click.ParamType[tuple[t.Literal["flow"], uuid.UUID]]):
102
90
  name = "TIMER_RESOURCE"
103
91
 
104
- @shim_get_metavar
105
92
  def get_metavar(self, param: click.Parameter, ctx: click.Context) -> str:
106
93
  return "flow:<flow_id>"
107
94
 
@@ -10,6 +10,7 @@ from globus_cli.parsing import group
10
10
  "list": (".list", "list_tunnel_command"),
11
11
  "show": (".show", "show_tunnel_command"),
12
12
  "stop": (".stop", "stop_tunnel_command"),
13
+ "events": (".events", "events_command"),
13
14
  },
14
15
  )
15
16
  def tunnel_command() -> None: