globus-cli 3.42.0__tar.gz → 3.44.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 (296) hide show
  1. {globus_cli-3.42.0 → globus_cli-3.44.0}/PKG-INFO +6 -4
  2. {globus_cli-3.42.0 → globus_cli-3.44.0}/changelog.adoc +30 -0
  3. {globus_cli-3.42.0 → globus_cli-3.44.0}/pyproject.toml +7 -6
  4. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/__init__.py +2 -0
  5. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/_common.py +12 -4
  6. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/_fields.py +116 -0
  7. globus_cli-3.44.0/src/globus_cli/commands/flows/web_input/__init__.py +13 -0
  8. globus_cli-3.44.0/src/globus_cli/commands/flows/web_input/list.py +132 -0
  9. globus_cli-3.44.0/src/globus_cli/commands/flows/web_input/respond.py +36 -0
  10. globus_cli-3.44.0/src/globus_cli/commands/flows/web_input/show.py +24 -0
  11. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/get_identities.py +16 -6
  12. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/__init__.py +2 -0
  13. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/delimited.py +11 -5
  14. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/omittable.py +20 -5
  15. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/shared_options/id_args.py +4 -0
  16. globus_cli-3.44.0/src/globus_cli/parsing/shell_completion.py +60 -0
  17. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/_display.py +2 -2
  18. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/context.py +1 -1
  19. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/field.py +4 -0
  20. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/folded_table_printer.py +35 -7
  21. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/record_printer.py +21 -3
  22. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/version.py +1 -1
  23. globus_cli-3.42.0/src/globus_cli/parsing/shell_completion.py +0 -120
  24. {globus_cli-3.42.0 → globus_cli-3.44.0}/LICENSE +0 -0
  25. {globus_cli-3.42.0 → globus_cli-3.44.0}/README.rst +0 -0
  26. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/__init__.py +0 -0
  27. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/__main__.py +0 -0
  28. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/_warnings.py +0 -0
  29. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/__init__.py +0 -0
  30. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/_common.py +0 -0
  31. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/_removal_stub.py +0 -0
  32. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/api.py +0 -0
  33. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  34. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  35. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  36. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  37. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  38. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  39. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  40. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
  41. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  42. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/_common.py +0 -0
  43. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  44. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/create/guest.py +0 -0
  45. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
  46. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/delete.py +0 -0
  47. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/list.py +0 -0
  48. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/role/__init__.py +0 -0
  49. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/role/delete.py +0 -0
  50. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/role/list.py +0 -0
  51. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/role/show.py +0 -0
  52. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/show.py +0 -0
  53. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/collection/update.py +0 -0
  54. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/delete.py +0 -0
  55. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  56. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  57. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  58. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  59. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  60. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  61. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
  62. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
  63. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  64. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  65. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
  66. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
  67. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  68. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  69. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  70. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  71. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  72. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  73. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/search.py +0 -0
  74. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +0 -0
  75. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/show.py +0 -0
  76. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  77. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  78. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  79. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  80. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  81. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  82. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  83. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  84. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
  85. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  86. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  87. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  88. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  89. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  90. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/create.py +0 -0
  91. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/delete.py +0 -0
  92. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/list.py +0 -0
  93. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/registered_api/__init__.py +0 -0
  94. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/registered_api/list.py +0 -0
  95. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/registered_api/show.py +0 -0
  96. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  97. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  98. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  99. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  100. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/resume.py +0 -0
  101. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  102. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  103. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  104. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  105. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/show.py +0 -0
  106. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/start.py +0 -0
  107. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/update.py +0 -0
  108. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/flows/validate.py +0 -0
  109. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  110. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  111. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
  112. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  113. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  114. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/set_subscription_admin_verified.py +0 -0
  115. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/set_subscription_id.py +0 -0
  116. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  117. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  118. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  119. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  120. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  121. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  122. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  123. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  124. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  125. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  126. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  127. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  128. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +0 -0
  129. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  130. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/gcs/endpoint/update.py +0 -0
  131. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/__init__.py +0 -0
  132. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/_common.py +0 -0
  133. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/create.py +0 -0
  134. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/delete.py +0 -0
  135. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  136. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  137. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  138. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
  139. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  140. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  141. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/join.py +0 -0
  142. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/leave.py +0 -0
  143. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/list.py +0 -0
  144. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  145. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/add.py +0 -0
  146. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  147. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  148. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/list.py +0 -0
  149. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  150. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  151. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  152. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/set_subscription_admin_verified.py +0 -0
  153. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/show.py +0 -0
  154. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/group/update.py +0 -0
  155. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/list_commands.py +0 -0
  156. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/login.py +0 -0
  157. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/logout.py +0 -0
  158. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/ls.py +0 -0
  159. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/mkdir.py +0 -0
  160. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/rename.py +0 -0
  161. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/rm.py +0 -0
  162. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/__init__.py +0 -0
  163. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/_common.py +0 -0
  164. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  165. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  166. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/create.py +0 -0
  167. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/delete.py +0 -0
  168. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/list.py +0 -0
  169. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  170. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  171. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  172. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  173. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/index/show.py +0 -0
  174. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/ingest.py +0 -0
  175. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/query.py +0 -0
  176. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  177. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  178. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  179. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  180. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/task/list.py +0 -0
  181. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/search/task/show.py +0 -0
  182. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/session/__init__.py +0 -0
  183. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/session/consent.py +0 -0
  184. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/session/show.py +0 -0
  185. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/session/update.py +0 -0
  186. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/stat.py +0 -0
  187. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/__init__.py +0 -0
  188. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/access_point/__init__.py +0 -0
  189. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/access_point/show.py +0 -0
  190. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/__init__.py +0 -0
  191. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/_common.py +0 -0
  192. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/create.py +0 -0
  193. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/delete.py +0 -0
  194. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/events.py +0 -0
  195. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/list.py +0 -0
  196. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/show.py +0 -0
  197. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/stop.py +0 -0
  198. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/streams/tunnel/update.py +0 -0
  199. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/__init__.py +0 -0
  200. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/_common.py +0 -0
  201. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/cancel.py +0 -0
  202. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/event_list.py +0 -0
  203. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  204. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/list.py +0 -0
  205. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  206. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/show.py +0 -0
  207. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/update.py +0 -0
  208. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/task/wait.py +0 -0
  209. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  210. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/_common.py +0 -0
  211. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  212. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/create/_common.py +0 -0
  213. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/create/flow.py +0 -0
  214. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/create/transfer.py +0 -0
  215. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/delete.py +0 -0
  216. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/list.py +0 -0
  217. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/pause.py +0 -0
  218. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/resume.py +0 -0
  219. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/timer/show.py +0 -0
  220. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/transfer.py +0 -0
  221. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/update.py +0 -0
  222. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/version.py +0 -0
  223. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/commands/whoami.py +0 -0
  224. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/constants.py +0 -0
  225. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/endpointish/__init__.py +0 -0
  226. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/endpointish/endpointish.py +0 -0
  227. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  228. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/endpointish/errors.py +0 -0
  229. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  230. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/__init__.py +0 -0
  231. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/auth_requirements.py +0 -0
  232. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/authapi_hooks.py +0 -0
  233. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/endpoint_types.py +0 -0
  234. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/flows_hooks.py +0 -0
  235. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/generic_hooks.py +0 -0
  236. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/search_hooks.py +0 -0
  237. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/hooks/transfer_hooks.py +0 -0
  238. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/messages.py +0 -0
  239. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/exception_handling/registry.py +0 -0
  240. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/globus_cli_flake8.py +0 -0
  241. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/__init__.py +0 -0
  242. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  243. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/auth_flows.py +0 -0
  244. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/client_login.py +0 -0
  245. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/context.py +0 -0
  246. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/errors.py +0 -0
  247. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/local_server.py +0 -0
  248. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/manager.py +0 -0
  249. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/scopes.py +0 -0
  250. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/storage.py +0 -0
  251. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/login_manager/utils.py +0 -0
  252. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/command_state.py +0 -0
  253. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/commands.py +0 -0
  254. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  255. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_classes.py +0 -0
  256. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  257. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +0 -0
  258. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/guest_activity_notify_param.py +0 -0
  259. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
  260. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
  261. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/location.py +0 -0
  262. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
  263. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
  264. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
  265. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
  266. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  267. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/shared_options/__init__.py +0 -0
  268. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  269. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/shared_options/flow_options.py +0 -0
  270. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
  271. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/reflect.py +0 -0
  272. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/__init__.py +0 -0
  273. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/auth.py +0 -0
  274. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/gcs.py +0 -0
  275. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/transfer/__init__.py +0 -0
  276. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/transfer/client.py +0 -0
  277. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/transfer/data.py +0 -0
  278. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  279. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/__init__.py +0 -0
  280. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/errors.py +0 -0
  281. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  282. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/formatters/auth.py +0 -0
  283. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/formatters/base.py +0 -0
  284. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  285. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  286. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/__init__.py +0 -0
  287. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/base.py +0 -0
  288. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/custom_printer.py +0 -0
  289. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/json_printer.py +0 -0
  290. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/table_printer.py +0 -0
  291. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/unix_printer/__init__.py +0 -0
  292. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/unix_printer/_formatter.py +0 -0
  293. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/printers/unix_printer/unix_printer.py +0 -0
  294. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/termio/server_timing.py +0 -0
  295. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/types.py +0 -0
  296. {globus_cli-3.42.0 → globus_cli-3.44.0}/src/globus_cli/utils.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: globus-cli
3
- Version: 3.42.0
3
+ Version: 3.44.0
4
4
  Summary: Globus CLI
5
5
  Keywords: globus,cli,command line
6
6
  Author-email: Stephen Rosen <sirosen@globus.org>
@@ -17,13 +17,15 @@ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Programming Language :: Python :: 3.14
19
19
  License-File: LICENSE
20
- Requires-Dist: globus-sdk==4.8.0
20
+ Requires-Dist: globus-sdk==4.9.0
21
21
  Requires-Dist: click>=8.4,<8.5
22
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
- Requires-Dist: requests>=2.32.3,<3.0.0
25
+ Requires-Dist: requests>=2.34.2,<3.0.0
26
+ Requires-Dist: certifi>=2026.10.19
26
27
  Project-URL: homepage, https://github.com/globus/globus-cli
28
+ Import-Name: globus_cli
27
29
 
28
30
  Globus CLI
29
31
  ==========
@@ -2,6 +2,36 @@
2
2
 
3
3
  // scriv-insert-here
4
4
 
5
+ == 3.44.0 (2026-10-22)
6
+
7
+ Security:
8
+
9
+ * Pinned certifi to 2023.7.22 to avoid a compromised CA.
10
+
11
+ Other:
12
+
13
+ * Updated CLI completions for bash and zsh shells.
14
+ * Added a CLI completion for fish shell.
15
+
16
+ == 3.43.0 (2026-08-12)
17
+
18
+ Bugfixes:
19
+
20
+ * Fixed a bug in which terminal device (TTY) detection ran even when
21
+ `GLOBUS_CLI_FOLD_TABLES=1` is set.
22
+ Setting the variable to true now forces use of folded tables.
23
+ Non-TTY output devices will be detected as having a fixed width of 80
24
+ characters.
25
+
26
+ * Fixed `globus get-identities` to lowercase usernames and IDs before
27
+ comparisons for normal text output.
28
+
29
+ Enhancements:
30
+
31
+ * Folded table output will now have bolded headers in interactive terminals.
32
+
33
+ * Add `globus flows web-input` subcommands to interact with Web Inputs.
34
+
5
35
  == 3.42.0 (2026-06-10)
6
36
 
7
37
  Bugfixes:
@@ -28,16 +28,17 @@ classifiers = [
28
28
  ]
29
29
  requires-python = ">=3.10"
30
30
  dependencies = [
31
- "globus-sdk==4.8.0",
31
+ "globus-sdk==4.9.0",
32
32
  # NOTE: `click` does not use semver; minor releases are expected to contain
33
- # minor breaking changes
33
+ # minor breaking changes.
34
34
  "click>=8.4,<8.5",
35
35
  "jmespath==1.1.0",
36
36
  "packaging>=17.0",
37
37
  "typing_extensions>=4.0;python_version<'3.11'",
38
38
  # these are dependencies of the SDK, but they are used directly in the CLI
39
39
  # declare them here in case the underlying lib ever changes
40
- "requests>=2.32.3,<3.0.0",
40
+ "requests>=2.34.2,<3.0.0",
41
+ "certifi>=2026.10.19",
41
42
  ]
42
43
  dynamic = ["version"]
43
44
 
@@ -64,20 +65,20 @@ test = [
64
65
  test-mindeps = [
65
66
  {include-group = "test"},
66
67
  "click==8.4.0",
67
- "requests==2.32.4",
68
+ "requests==2.34.2",
68
69
  "pyjwt==2.0.0",
69
70
  "cryptography==3.3.1",
70
71
  "packaging==17.0",
71
72
  "typing_extensions==4.0",
72
73
  ]
73
74
  typing = [
74
- "mypy==1.19.1",
75
+ "mypy==2.1.0",
75
76
  "types-jwt",
76
77
  "types-requests",
77
78
  "types-jmespath",
78
79
  ]
79
80
  check-project-metadata = [
80
- "mddj==0.4.2",
81
+ "mddj==0.6.0",
81
82
  {include-group = "yaml"},
82
83
  "build",
83
84
  "twine",
@@ -15,6 +15,8 @@ from globus_cli.parsing import group
15
15
  "run": (".run", "run_command"),
16
16
  # "registered-api" is a subgroup of commands.
17
17
  "registered-api": (".registered_api", "registered_api_command"),
18
+ # "web-input" is a subgroup of commands.
19
+ "web-input": (".web_input", "web_input_command"),
18
20
  },
19
21
  )
20
22
  def flows_command() -> None:
@@ -131,13 +131,21 @@ class SubscriptionIdType(
131
131
  name = "SUBSCRIPTION_ID"
132
132
 
133
133
  def __init__(self, *, omittable: bool = False) -> None:
134
- self._omittable = omittable
134
+ self._omittable: bool = omittable
135
135
 
136
136
  def convert(
137
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
137
+ self,
138
+ value: t.Any | globus_sdk.MissingType,
139
+ param: click.Parameter | None,
140
+ ctx: click.Context | None,
138
141
  ) -> uuid.UUID | t.Literal["DEFAULT"] | globus_sdk.MissingType:
139
- if self._omittable and value is globus_sdk.MISSING:
140
- return globus_sdk.MISSING
142
+ if value is globus_sdk.MISSING:
143
+ if self._omittable:
144
+ return globus_sdk.MISSING
145
+ else:
146
+ raise NotImplementedError(
147
+ "Cannot pass MISSING to non-omittable SubscriptionidType."
148
+ )
141
149
 
142
150
  if value.upper() == "DEFAULT":
143
151
  return "DEFAULT"
@@ -3,6 +3,10 @@ import typing as t
3
3
  import globus_sdk
4
4
 
5
5
  from globus_cli.termio import Field, formatters
6
+ from globus_cli.termio.formatters import (
7
+ ArrayFormatter,
8
+ FieldFormatter,
9
+ )
6
10
  from globus_cli.termio.formatters.auth import PrincipalURNFormatter
7
11
 
8
12
 
@@ -165,3 +169,115 @@ def registered_api_format_fields(
165
169
  Field("Destination Method", "target.destination.method"),
166
170
  Field("Destination URL", "target.destination.url"),
167
171
  ]
172
+
173
+
174
+ class WebInputPrincipalFormatter(PrincipalURNFormatter):
175
+ """A principal formatter which pre-registers all principals for a web input."""
176
+
177
+ def __init__(
178
+ self, auth_client: globus_sdk.AuthClient, web_input: dict[str, t.Any]
179
+ ) -> None:
180
+ super().__init__(auth_client)
181
+ self.add_items(web_input.get("creator_urn"))
182
+ roles = web_input.get("roles", {})
183
+ self.add_items(*roles.get("viewer_urns", ()))
184
+ self.add_items(*roles.get("respondent_urns", ()))
185
+
186
+
187
+ class IdentifiedResourceFormatter(FieldFormatter[str]):
188
+ def parse(self, value: t.Any) -> str:
189
+ if not isinstance(value, list) or len(value) != 2:
190
+ raise ValueError("cannot format parenthetical from data of wrong shape")
191
+ name, resource_id = value[0], value[1]
192
+ if not isinstance(resource_id, str):
193
+ raise ValueError("cannot format parenthetical non-str id")
194
+ if isinstance(name, str):
195
+ # If the name can be parsed, render it alongside the resource id
196
+ return f"{name} ({resource_id})"
197
+ # If the name can't be parsed, just render the resource id
198
+ return resource_id
199
+
200
+ def render(self, value: str) -> str:
201
+ return value
202
+
203
+
204
+ class _OptionFormatter(FieldFormatter[tuple[t.Any, t.Any]]):
205
+ def parse(self, value: t.Any) -> tuple[t.Any, t.Any]:
206
+ if not isinstance(value, dict):
207
+ raise ValueError("non-dict field value")
208
+ elif "option_id" not in value or "label" not in value:
209
+ raise ValueError("missing key 'option_id' and/or 'label'")
210
+ return value["option_id"], value["label"]
211
+
212
+ def render(self, value: tuple[t.Any, t.Any]) -> str:
213
+ option_id, label = value
214
+ return f"* {option_id} {label}"
215
+
216
+
217
+ class _WebInputContextRowsFormatter(FieldFormatter[t.List[t.Tuple[str, str]]]):
218
+ """Renders a list of {field, value} rows as an aligned 'field: value' block."""
219
+
220
+ def parse(self, value: t.Any) -> list[tuple[str, str]]:
221
+ if not isinstance(value, list):
222
+ raise ValueError("non list context rows value")
223
+ rows = []
224
+ for item in value:
225
+ if not isinstance(item, dict) or "field" not in item or "value" not in item:
226
+ raise ValueError("missing key 'field' and/or 'value'")
227
+ rows.append((item["field"], item["value"]))
228
+ return rows
229
+
230
+ def render(self, value: list[tuple[str, str]]) -> str:
231
+ width = max(len(field) for field, _ in value) + 2
232
+ return "\n".join(f"{field}:".ljust(width) + str(val) for field, val in value)
233
+
234
+
235
+ def web_input_format_fields(
236
+ auth_client: globus_sdk.AuthClient,
237
+ web_input: dict[str, t.Any],
238
+ ) -> list[Field]:
239
+ """
240
+ The standard list of fields to render for a web input resource.
241
+
242
+ :param auth_client: An AuthClient, used to resolve principal URNs.
243
+ :param web_input: The web input resource, used to pre-register principals.
244
+ """
245
+ principal = WebInputPrincipalFormatter(auth_client, web_input)
246
+ csv_principal_list = formatters.ArrayFormatter(
247
+ element_formatter=principal,
248
+ delimiter=", ",
249
+ )
250
+ csv_list = formatters.ArrayFormatter(delimiter=", ")
251
+ flow_run_formatter = IdentifiedResourceFormatter()
252
+
253
+ fields = [
254
+ Field("Web Input ID", "id"),
255
+ Field("Status", "status"),
256
+ Field("Title", "context.title"),
257
+ Field("Your Roles", "user_roles", formatter=csv_list),
258
+ Field("Flow", "[flow.title, flow.id]", formatter=flow_run_formatter),
259
+ Field("Run", "[run.label, run.id]", formatter=flow_run_formatter),
260
+ Field("Creator", "creator_urn", formatter=principal),
261
+ Field("Viewers", "roles.viewer_urns", formatter=csv_principal_list),
262
+ Field("Respondents", "roles.respondent_urns", formatter=csv_principal_list),
263
+ Field("Created At", "created_timestamp", formatter=formatters.Date),
264
+ Field("Closed At", "closed_timestamp", formatter=formatters.Date),
265
+ ]
266
+
267
+ if web_input.get("context", {}).get("presentation_style") == "table":
268
+ fields += [
269
+ Field(
270
+ "Context",
271
+ "context.rows",
272
+ section=True,
273
+ formatter=_WebInputContextRowsFormatter(),
274
+ )
275
+ ]
276
+ else:
277
+ fields += [Field("Context", "context.text", section=True)]
278
+
279
+ if web_input.get("options"):
280
+ formatter = ArrayFormatter(delimiter="\n", element_formatter=_OptionFormatter())
281
+ fields += [Field("Options", "options", section=True, formatter=formatter)]
282
+
283
+ return fields
@@ -0,0 +1,13 @@
1
+ from globus_cli.parsing import group
2
+
3
+
4
+ @group(
5
+ "web-input",
6
+ lazy_subcommands={
7
+ "show": (".show", "show_command"),
8
+ "list": (".list", "list_command"),
9
+ "respond": (".respond", "respond_command"),
10
+ },
11
+ )
12
+ def web_input_command() -> None:
13
+ """Interact with web inputs in the Globus Flows service."""
@@ -0,0 +1,132 @@
1
+ from __future__ import annotations
2
+
3
+ import typing as t
4
+ import uuid
5
+
6
+ import click
7
+ import globus_sdk
8
+ from globus_sdk.paging import Paginator
9
+
10
+ from globus_cli.login_manager import LoginManager
11
+ from globus_cli.parsing import ColonDelimitedChoiceTuple, command
12
+ from globus_cli.termio import Field, display
13
+ from globus_cli.utils import PagingWrapper
14
+
15
+ ROLE_TYPES = ("viewer", "respondent")
16
+ STATE_TYPES = ("open", "closed")
17
+ ORDER_BY_FIELDS = ("created_timestamp", "edited_timestamp", "closed_timestamp")
18
+
19
+
20
+ @command("list")
21
+ @click.option(
22
+ "--filter-role",
23
+ "filter_roles",
24
+ type=click.Choice(ROLE_TYPES),
25
+ help="Filter results by the caller's role on the web input",
26
+ multiple=True,
27
+ )
28
+ @click.option(
29
+ "--filter-state",
30
+ "filter_states",
31
+ type=click.Choice(STATE_TYPES),
32
+ help="Filter results by the web input's state",
33
+ multiple=True,
34
+ )
35
+ @click.option(
36
+ "--filter-flow-id",
37
+ "filter_flow_ids",
38
+ help=(
39
+ "Filter results to web inputs with a particular flow ID or flow IDs. "
40
+ "This option may be specified multiple times to filter by multiple "
41
+ "flow IDs."
42
+ ),
43
+ multiple=True,
44
+ type=click.UUID,
45
+ )
46
+ @click.option(
47
+ "--filter-run-id",
48
+ "filter_run_ids",
49
+ help=(
50
+ "Filter results to web inputs with a particular run ID or run IDs. "
51
+ "This option may be specified multiple times to filter by multiple "
52
+ "run IDs."
53
+ ),
54
+ multiple=True,
55
+ type=click.UUID,
56
+ )
57
+ @click.option(
58
+ "--orderby",
59
+ default=("created_timestamp:DESC",),
60
+ show_default=True,
61
+ type=ColonDelimitedChoiceTuple(
62
+ choices=tuple(
63
+ f"{field}:{order}" for field in ORDER_BY_FIELDS for order in ("ASC", "DESC")
64
+ ),
65
+ case_sensitive=False,
66
+ ),
67
+ multiple=True,
68
+ metavar=f"[{'|'.join(ORDER_BY_FIELDS)}]:[ASC|DESC]",
69
+ help="""
70
+ Sort results by the given field and ordering.
71
+ ASC for ascending, DESC for descending.
72
+
73
+ This option can be specified multiple times to sort by multiple fields.
74
+ """,
75
+ )
76
+ @click.option(
77
+ "--limit",
78
+ default=25,
79
+ show_default=True,
80
+ metavar="N",
81
+ type=click.IntRange(1),
82
+ help="The maximum number of results to return.",
83
+ )
84
+ @LoginManager.requires_login("flows")
85
+ def list_command(
86
+ login_manager: LoginManager,
87
+ *,
88
+ filter_roles: tuple[t.Literal["viewer", "respondent"], ...],
89
+ filter_states: tuple[t.Literal["open", "closed"], ...],
90
+ filter_flow_ids: tuple[uuid.UUID, ...],
91
+ filter_run_ids: tuple[uuid.UUID, ...],
92
+ orderby: tuple[
93
+ tuple[
94
+ t.Literal["created_timestamp", "edited_timestamp", "closed_timestamp"],
95
+ t.Literal["ASC", "DESC"],
96
+ ],
97
+ ...,
98
+ ],
99
+ limit: int,
100
+ ) -> None:
101
+ """
102
+ List web inputs accessible to the current user.
103
+ """
104
+ flows_client = login_manager.get_flows_client()
105
+
106
+ paginator = Paginator.wrap(flows_client.list_web_inputs)
107
+ web_input_iterator = PagingWrapper(
108
+ paginator(
109
+ filter_roles=filter_roles or globus_sdk.MISSING,
110
+ filter_states=filter_states or globus_sdk.MISSING,
111
+ filter_flow_ids=filter_flow_ids or globus_sdk.MISSING,
112
+ filter_run_ids=filter_run_ids or globus_sdk.MISSING,
113
+ orderby=",".join(f"{field} {order}" for field, order in orderby),
114
+ ).items(),
115
+ json_conversion_key="web_input_summaries",
116
+ limit=limit,
117
+ )
118
+
119
+ fields = [
120
+ Field("Web Input ID", "id"),
121
+ Field("Status", "status"),
122
+ Field("Input Type", "input_type"),
123
+ Field("Title", "title"),
124
+ Field("Flow Title", "flow.title"),
125
+ Field("Run Label", "run.label"),
126
+ ]
127
+
128
+ display(
129
+ web_input_iterator,
130
+ fields=fields,
131
+ json_converter=web_input_iterator.json_converter,
132
+ )
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ import uuid
4
+
5
+ import click
6
+
7
+ from globus_cli.login_manager import LoginManager
8
+ from globus_cli.parsing import command, web_input_id_arg
9
+ from globus_cli.termio import Field, display
10
+
11
+
12
+ @command("respond")
13
+ @web_input_id_arg
14
+ @click.argument("option_id", metavar="OPTION_ID", type=click.UUID, required=True)
15
+ @LoginManager.requires_login("flows")
16
+ def respond_command(
17
+ login_manager: LoginManager,
18
+ *,
19
+ web_input_id: uuid.UUID,
20
+ option_id: uuid.UUID,
21
+ ) -> None:
22
+ """
23
+ Respond to a web input.
24
+
25
+ For "selection" type web inputs, OPTION_ID is the ID of one of the web input's
26
+ available options.
27
+ """
28
+
29
+ flows_client = login_manager.get_flows_client()
30
+ response = flows_client.respond_to_web_input(web_input_id, value=option_id)
31
+
32
+ display(
33
+ response,
34
+ text_mode=display.RECORD,
35
+ fields=[Field("Status", "status")],
36
+ )
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ import uuid
4
+
5
+ from globus_cli.commands.flows._fields import web_input_format_fields
6
+ from globus_cli.login_manager import LoginManager
7
+ from globus_cli.parsing import command, web_input_id_arg
8
+ from globus_cli.termio import display
9
+
10
+
11
+ @command("show")
12
+ @web_input_id_arg
13
+ @LoginManager.requires_login("auth", "flows")
14
+ def show_command(login_manager: LoginManager, *, web_input_id: uuid.UUID) -> None:
15
+ """
16
+ Show a web input.
17
+ """
18
+ flows_client = login_manager.get_flows_client()
19
+ auth_client = login_manager.get_auth_client()
20
+
21
+ response = flows_client.get_web_input(web_input_id)
22
+ fields = web_input_format_fields(auth_client, response.data)
23
+
24
+ display(response, fields=fields, text_mode=display.RECORD)
@@ -80,15 +80,25 @@ def get_identities_command(
80
80
  Non-verbose text output is customized.
81
81
  """
82
82
 
83
- def resolve_identity(value: dict[str, t.Any]) -> str:
83
+ def resolve_identity(value: str) -> str:
84
84
  """
85
- Helper to deal with variable inputs and uncertain response order.
85
+ Given an input, resolve it to an output:
86
+
87
+ - IDs resolve to usernames
88
+ - Usernames resolve to IDs
89
+ - Missing values resolve to 'NO_SUCH_IDENTITY'
90
+ - Comparisons are all done lowercased
86
91
  """
92
+ value = value.lower()
87
93
  for identity in identities:
88
- if identity["id"] == value:
89
- return t.cast(str, identity["username"])
90
- if identity["username"] == value:
91
- return t.cast(str, identity["id"])
94
+ if identity["id"].lower() == value:
95
+ username = identity["username"]
96
+ if isinstance(username, str):
97
+ return username
98
+ if identity["username"].lower() == value:
99
+ identity_id = identity["id"]
100
+ if isinstance(identity_id, str):
101
+ return identity_id
92
102
  return "NO_SUCH_IDENTITY"
93
103
 
94
104
  # standard output is one resolved identity per line in the same order
@@ -40,6 +40,7 @@ from .shared_options.id_args import (
40
40
  endpoint_id_arg,
41
41
  flow_id_arg,
42
42
  run_id_arg,
43
+ web_input_id_arg,
43
44
  )
44
45
  from .shared_options.transfer_task_options import (
45
46
  encrypt_data_option,
@@ -86,6 +87,7 @@ __all__ = [
86
87
  "endpoint_id_arg",
87
88
  "flow_id_arg",
88
89
  "run_id_arg",
90
+ "web_input_id_arg",
89
91
  "flow_input_document_option",
90
92
  "task_submission_options",
91
93
  "delete_and_rm_options",
@@ -28,12 +28,18 @@ class CommaDelimitedList(click.ParamType[list[str] | globus_sdk.MissingType]):
28
28
  return "TEXT,TEXT,..."
29
29
 
30
30
  def convert(
31
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
31
+ self,
32
+ value: t.Any | globus_sdk.MissingType,
33
+ param: click.Parameter | None,
34
+ ctx: click.Context | None,
32
35
  ) -> list[str] | globus_sdk.MissingType:
33
- if self._omittable and value is globus_sdk.MISSING:
34
- return globus_sdk.MISSING
35
-
36
- value = super().convert(value, param, ctx)
36
+ if value is globus_sdk.MISSING:
37
+ if self._omittable:
38
+ return globus_sdk.MISSING
39
+ else:
40
+ raise NotImplementedError(
41
+ "Cannot pass MISSING to non-omittable CommaDelimitedList."
42
+ )
37
43
 
38
44
  # if `--foo` is a comma delimited list and someone passes
39
45
  # `--foo ""`, take that as `foo=[]` rather than foo=[""]
@@ -12,7 +12,10 @@ class OmittableInt(click.ParamType[int | globus_sdk.MissingType]):
12
12
  name = "integer"
13
13
 
14
14
  def convert(
15
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
15
+ self,
16
+ value: t.Any | globus_sdk.MissingType,
17
+ param: click.Parameter | None,
18
+ ctx: click.Context | None,
16
19
  ) -> int | globus_sdk.MissingType:
17
20
  if value is globus_sdk.MISSING:
18
21
  return globus_sdk.MISSING
@@ -26,7 +29,10 @@ class OmittableString(click.ParamType[str | globus_sdk.MissingType]):
26
29
  name = "text"
27
30
 
28
31
  def convert(
29
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
32
+ self,
33
+ value: t.Any | globus_sdk.MissingType,
34
+ param: click.Parameter | None,
35
+ ctx: click.Context | None,
30
36
  ) -> str | globus_sdk.MissingType:
31
37
  if value is globus_sdk.MISSING:
32
38
  return globus_sdk.MISSING
@@ -40,7 +46,10 @@ class OmittableUUID(click.ParamType[uuid.UUID | globus_sdk.MissingType]):
40
46
  name = "uuid"
41
47
 
42
48
  def convert(
43
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
49
+ self,
50
+ value: t.Any | globus_sdk.MissingType,
51
+ param: click.Parameter | None,
52
+ ctx: click.Context | None,
44
53
  ) -> uuid.UUID | globus_sdk.MissingType:
45
54
  if value is globus_sdk.MISSING:
46
55
  return globus_sdk.MISSING
@@ -65,7 +74,10 @@ class OmittableChoice(click.ParamType[str | globus_sdk.MissingType]):
65
74
  return self._inner_choice.get_missing_message(param, ctx)
66
75
 
67
76
  def convert(
68
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
77
+ self,
78
+ value: t.Any | globus_sdk.MissingType,
79
+ param: click.Parameter | None,
80
+ ctx: click.Context | None,
69
81
  ) -> str | globus_sdk.MissingType:
70
82
  if value is globus_sdk.MISSING:
71
83
  return globus_sdk.MISSING
@@ -92,7 +104,10 @@ class OmittableDateTime(_OmittableDateTimeBase):
92
104
  name = "datetime"
93
105
 
94
106
  def convert(
95
- self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None
107
+ self,
108
+ value: t.Any | globus_sdk.MissingType,
109
+ param: click.Parameter | None,
110
+ ctx: click.Context | None,
96
111
  ) -> datetime.datetime | globus_sdk.MissingType:
97
112
  if value is globus_sdk.MISSING:
98
113
  return globus_sdk.MISSING
@@ -29,3 +29,7 @@ def flow_id_arg(f: C) -> C:
29
29
 
30
30
  def run_id_arg(f: C) -> C:
31
31
  return click.argument("run_id", metavar="RUN_ID", type=click.UUID)(f)
32
+
33
+
34
+ def web_input_id_arg(f: C) -> C:
35
+ return click.argument("web_input_id", metavar="WEB_INPUT_ID", type=click.UUID)(f)