globus-cli 3.28.2__tar.gz → 3.29.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 (266) hide show
  1. {globus_cli-3.28.2/src/globus_cli.egg-info → globus_cli-3.29.0}/PKG-INFO +2 -3
  2. {globus_cli-3.28.2 → globus_cli-3.29.0}/pyproject.toml +1 -5
  3. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/list.py +20 -2
  4. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/delete.py +1 -1
  5. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/activate.py +6 -55
  6. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/login.py +3 -1
  7. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/_common.py +1 -1
  8. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/create/transfer.py +6 -1
  9. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/transfer.py +7 -2
  10. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/exception_handling/hooks.py +13 -12
  11. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/command_state.py +56 -37
  12. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/json_strorfile.py +10 -0
  13. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/shared_options/__init__.py +2 -0
  14. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/transfer/__init__.py +0 -2
  15. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/transfer/activation.py +13 -20
  16. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/transfer/client.py +8 -3
  17. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/printer.py +1 -1
  18. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/version.py +1 -1
  19. {globus_cli-3.28.2 → globus_cli-3.29.0/src/globus_cli.egg-info}/PKG-INFO +2 -3
  20. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli.egg-info/SOURCES.txt +0 -1
  21. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli.egg-info/requires.txt +1 -2
  22. globus_cli-3.28.2/src/globus_cli/services/transfer/delegate_proxy.py +0 -245
  23. {globus_cli-3.28.2 → globus_cli-3.29.0}/LICENSE +0 -0
  24. {globus_cli-3.28.2 → globus_cli-3.29.0}/README.rst +0 -0
  25. {globus_cli-3.28.2 → globus_cli-3.29.0}/setup.cfg +0 -0
  26. {globus_cli-3.28.2 → globus_cli-3.29.0}/setup.py +0 -0
  27. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/__init__.py +0 -0
  28. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/__main__.py +0 -0
  29. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/_warnings.py +0 -0
  30. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/__init__.py +0 -0
  31. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/_common.py +0 -0
  32. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/api.py +0 -0
  33. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  34. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  35. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  36. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  37. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  38. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  39. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  40. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
  41. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  42. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/_common.py +0 -0
  43. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  44. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/create/guest.py +0 -0
  45. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
  46. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/delete.py +0 -0
  47. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/show.py +0 -0
  48. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/collection/update.py +0 -0
  49. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  50. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  51. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/create.py +0 -0
  52. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/deactivate.py +0 -0
  53. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  54. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/is_activated.py +0 -0
  55. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  56. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  57. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  58. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
  59. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
  60. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  61. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  62. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
  63. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
  64. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  65. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  66. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  67. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  68. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  69. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  70. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/search.py +0 -0
  71. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/__init__.py +0 -0
  72. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/_common.py +0 -0
  73. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/add.py +0 -0
  74. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/delete.py +0 -0
  75. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/list.py +0 -0
  76. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/show.py +0 -0
  77. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/server/update.py +0 -0
  78. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +0 -0
  79. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/show.py +0 -0
  80. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  81. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  82. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  83. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  84. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  85. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  86. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  87. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  88. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
  89. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  90. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  91. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  92. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  93. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  94. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/__init__.py +0 -0
  95. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/_common.py +0 -0
  96. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/create.py +0 -0
  97. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/delete.py +0 -0
  98. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/list.py +0 -0
  99. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  100. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  101. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  102. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  103. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/resume.py +0 -0
  104. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  105. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  106. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  107. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  108. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/show.py +0 -0
  109. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/start.py +0 -0
  110. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/update.py +0 -0
  111. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/flows/validate.py +0 -0
  112. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  113. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  114. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
  115. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  116. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  117. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/set_subscription_id.py +0 -0
  118. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  119. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  120. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  121. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  122. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  123. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  124. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  125. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  126. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  127. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  128. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  129. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  130. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +0 -0
  131. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  132. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/gcs/endpoint/update.py +0 -0
  133. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/get_identities.py +0 -0
  134. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/__init__.py +0 -0
  135. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/_common.py +0 -0
  136. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/create.py +0 -0
  137. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/delete.py +0 -0
  138. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  139. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  140. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  141. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
  142. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  143. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  144. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/join.py +0 -0
  145. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/leave.py +0 -0
  146. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/list.py +0 -0
  147. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  148. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/add.py +0 -0
  149. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  150. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  151. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/list.py +0 -0
  152. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  153. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  154. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  155. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/show.py +0 -0
  156. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/group/update.py +0 -0
  157. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/list_commands.py +0 -0
  158. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/logout.py +0 -0
  159. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/ls.py +0 -0
  160. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/mkdir.py +0 -0
  161. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/rename.py +0 -0
  162. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/rm.py +0 -0
  163. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/__init__.py +0 -0
  164. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/_common.py +0 -0
  165. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  166. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  167. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/create.py +0 -0
  168. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/delete.py +0 -0
  169. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/list.py +0 -0
  170. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  171. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  172. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  173. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  174. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/index/show.py +0 -0
  175. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/ingest.py +0 -0
  176. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/query.py +0 -0
  177. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  178. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  179. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  180. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  181. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/task/list.py +0 -0
  182. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/search/task/show.py +0 -0
  183. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/session/__init__.py +0 -0
  184. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/session/consent.py +0 -0
  185. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/session/show.py +0 -0
  186. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/session/update.py +0 -0
  187. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/stat.py +0 -0
  188. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/__init__.py +0 -0
  189. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/_common.py +0 -0
  190. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/cancel.py +0 -0
  191. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/event_list.py +0 -0
  192. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  193. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/list.py +0 -0
  194. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  195. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/show.py +0 -0
  196. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/update.py +0 -0
  197. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/task/wait.py +0 -0
  198. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  199. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  200. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/delete.py +0 -0
  201. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/list.py +0 -0
  202. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/pause.py +0 -0
  203. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/resume.py +0 -0
  204. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/timer/show.py +0 -0
  205. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/update.py +0 -0
  206. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/version.py +0 -0
  207. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/commands/whoami.py +0 -0
  208. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/constants.py +0 -0
  209. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/endpointish/__init__.py +0 -0
  210. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/endpointish/endpointish.py +0 -0
  211. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  212. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/endpointish/errors.py +0 -0
  213. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  214. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/exception_handling/registry.py +0 -0
  215. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/globus_cli_flake8.py +0 -0
  216. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/__init__.py +0 -0
  217. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  218. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/auth_flows.py +0 -0
  219. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/client_login.py +0 -0
  220. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/context.py +0 -0
  221. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/errors.py +0 -0
  222. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/local_server.py +0 -0
  223. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/manager.py +0 -0
  224. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/scopes.py +0 -0
  225. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/tokenstore.py +0 -0
  226. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/login_manager/utils.py +0 -0
  227. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/__init__.py +0 -0
  228. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/commands.py +0 -0
  229. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  230. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_classes.py +0 -0
  231. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  232. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/delimited.py +0 -0
  233. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +0 -0
  234. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
  235. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/location.py +0 -0
  236. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
  237. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
  238. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
  239. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
  240. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  241. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  242. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
  243. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
  244. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/parsing/shell_completion.py +0 -0
  245. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/reflect.py +0 -0
  246. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/__init__.py +0 -0
  247. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/auth.py +0 -0
  248. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/gcs.py +0 -0
  249. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/transfer/data.py +0 -0
  250. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  251. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/__init__.py +0 -0
  252. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/awscli_text.py +0 -0
  253. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/context.py +0 -0
  254. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/errors.py +0 -0
  255. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/field.py +0 -0
  256. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  257. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/formatters/auth.py +0 -0
  258. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/formatters/base.py +0 -0
  259. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  260. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  261. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/termio/server_timing.py +0 -0
  262. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/types.py +0 -0
  263. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli/utils.py +0 -0
  264. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
  265. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
  266. {globus_cli-3.28.2 → globus_cli-3.29.0}/src/globus_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: globus-cli
3
- Version: 3.28.2
3
+ Version: 3.29.0
4
4
  Summary: Globus CLI
5
5
  Author-email: Stephen Rosen <sirosen@globus.org>
6
6
  Project-URL: homepage, https://github.com/globus/globus-cli
@@ -24,14 +24,13 @@ Requires-Dist: jmespath==1.0.1
24
24
  Requires-Dist: packaging>=17.0
25
25
  Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
26
26
  Requires-Dist: requests<3.0.0,>=2.19.1
27
- Requires-Dist: cryptography>=3.3.1
28
27
  Provides-Extra: test
29
28
  Requires-Dist: coverage>=7; extra == "test"
30
29
  Requires-Dist: pytest>=7; extra == "test"
31
30
  Requires-Dist: pytest-xdist<4; extra == "test"
32
31
  Requires-Dist: pytest-timeout<3; extra == "test"
33
32
  Requires-Dist: click-type-test==0.0.7; python_version >= "3.10" and extra == "test"
34
- Requires-Dist: responses==0.25.0; extra == "test"
33
+ Requires-Dist: responses==0.25.3; extra == "test"
35
34
  Requires-Dist: ruamel.yaml==0.18.6; extra == "test"
36
35
  Requires-Dist: setuptools; python_version >= "3.12" and extra == "test"
37
36
 
@@ -36,7 +36,6 @@ dependencies = [
36
36
  # these are dependencies of the SDK, but they are used directly in the CLI
37
37
  # declare them here in case the underlying lib ever changes
38
38
  "requests>=2.19.1,<3.0.0",
39
- "cryptography>=3.3.1",
40
39
  ]
41
40
  dynamic = ["version"]
42
41
 
@@ -50,7 +49,7 @@ test = [
50
49
  "pytest-xdist<4",
51
50
  "pytest-timeout<3",
52
51
  "click-type-test==0.0.7;python_version>='3.10'",
53
- "responses==0.25.0",
52
+ "responses==0.25.3",
54
53
  # loading test fixture data
55
54
  "ruamel.yaml==0.18.6",
56
55
  # Python 3.12 needs setuptools.
@@ -114,9 +113,6 @@ disallow_untyped_defs = false
114
113
  disallow_incomplete_defs = false
115
114
  module = [
116
115
  "globus_cli.services.gcs",
117
- "globus_cli.services.transfer.activation",
118
- "globus_cli.services.transfer.client",
119
- "globus_cli.services.transfer.delegate_proxy",
120
116
  "globus_cli.services.transfer.recursive_ls",
121
117
  "globus_cli.termio",
122
118
  "globus_cli.termio.printer",
@@ -4,10 +4,12 @@ import typing as t
4
4
  import uuid
5
5
 
6
6
  import click
7
+ from globus_sdk.paging import Paginator
7
8
 
8
9
  from globus_cli.login_manager import LoginManager
9
10
  from globus_cli.parsing import command, endpoint_id_arg
10
11
  from globus_cli.termio import Field, display, formatters
12
+ from globus_cli.utils import PagingWrapper
11
13
 
12
14
 
13
15
  class ChoiceSlugified(click.Choice):
@@ -82,6 +84,14 @@ created-by-me:
82
84
  "the ID of the Mapped Collection"
83
85
  ),
84
86
  )
87
+ @click.option(
88
+ "--limit",
89
+ default=25,
90
+ show_default=True,
91
+ metavar="N",
92
+ type=click.IntRange(1),
93
+ help="The maximum number of results to return.",
94
+ )
85
95
  @LoginManager.requires_login("auth", "transfer")
86
96
  def collection_list(
87
97
  login_manager: LoginManager,
@@ -95,6 +105,7 @@ def collection_list(
95
105
  ...,
96
106
  ],
97
107
  mapped_collection_id: uuid.UUID | None,
108
+ limit: int,
98
109
  ) -> None:
99
110
  """
100
111
  List the Collections on a given Globus Connect Server v5 Endpoint
@@ -109,9 +120,15 @@ def collection_list(
109
120
  params["filter"] = ",".join(filters)
110
121
  if include_private_policies:
111
122
  params["include"] = "private_policies"
112
- res = gcs_client.get_collection_list(**params)
123
+
124
+ paginator = Paginator.wrap(gcs_client.get_collection_list)
125
+ paginated_call = paginator(**params)
126
+ paging_wrapper = PagingWrapper(
127
+ paginated_call.items(), json_conversion_key="DATA", limit=limit
128
+ )
129
+
113
130
  display(
114
- res,
131
+ paging_wrapper,
115
132
  text_mode=display.TABLE,
116
133
  fields=[
117
134
  Field("ID", "id"),
@@ -124,4 +141,5 @@ def collection_list(
124
141
  Field("Collection Type", "collection_type"),
125
142
  Field("Storage Gateway ID", "storage_gateway_id"),
126
143
  ],
144
+ json_converter=paging_wrapper.json_converter,
127
145
  )
@@ -108,7 +108,7 @@ def delete_command(
108
108
  Lines are of the form
109
109
  PATH
110
110
 
111
- Note that unlike `globus transfer` --recursive is not an option at the per line
111
+ Note that unlike `globus transfer`, `--recursive` is not an option at the per-line
112
112
  level, instead, if given with the original command, all paths that point to
113
113
  directories will be recursively deleted.
114
114
 
@@ -16,7 +16,7 @@ from globus_cli.termio import display
16
16
  "--web",
17
17
  is_flag=True,
18
18
  default=False,
19
- help="Use web activation. Mutually exclusive with --myproxy and --delegate-proxy.",
19
+ help="Use web activation. Mutually exclusive with --myproxy.",
20
20
  )
21
21
  @click.option(
22
22
  "--no-browser",
@@ -32,7 +32,7 @@ from globus_cli.termio import display
32
32
  "--myproxy",
33
33
  is_flag=True,
34
34
  default=False,
35
- help="Use myproxy activation. Mutually exclusive with --web and --delegate-proxy.",
35
+ help="Use myproxy activation. Mutually exclusive with --web.",
36
36
  )
37
37
  @click.option(
38
38
  "--myproxy-username",
@@ -50,24 +50,6 @@ from globus_cli.termio import display
50
50
  "lifetime which it will use if this value is too high"
51
51
  ),
52
52
  )
53
- @click.option(
54
- "--delegate-proxy",
55
- metavar="X.509_PEM_FILE",
56
- help=(
57
- "Use delegate proxy activation, takes an X.509 "
58
- "certificate in pem format as an argument. Mutually "
59
- "exclusive with --web and --myproxy."
60
- ),
61
- )
62
- @click.option(
63
- "--proxy-lifetime",
64
- type=int,
65
- default=None,
66
- help=(
67
- "Set a lifetime in hours for the proxy generated with "
68
- "--delegate-proxy. [default: 12]"
69
- ),
70
- )
71
53
  @click.option(
72
54
  "--no-autoactivate",
73
55
  is_flag=True,
@@ -83,7 +65,7 @@ from globus_cli.termio import display
83
65
  default=False,
84
66
  help="Force activation even if endpoint is already activated.",
85
67
  )
86
- @mutex_option_group("--web", "--myproxy", "--delegate-proxy")
68
+ @mutex_option_group("--web", "--myproxy")
87
69
  @LoginManager.requires_login("transfer")
88
70
  def endpoint_activate(
89
71
  login_manager: LoginManager,
@@ -95,15 +77,13 @@ def endpoint_activate(
95
77
  myproxy_lifetime: int | None,
96
78
  web: bool,
97
79
  no_browser: bool,
98
- delegate_proxy: str | None,
99
- proxy_lifetime: int | None,
100
80
  no_autoactivate: bool,
101
81
  force: bool,
102
82
  ) -> None:
103
83
  """
104
84
  Activate an endpoint using Autoactivation, Myproxy, Delegate Proxy,
105
85
  or Web activation.
106
- Note that --web, --delegate-proxy, and --myproxy activation are mutually
86
+ Note that --web and --myproxy activation are mutually
107
87
  exclusive options.
108
88
 
109
89
  \b
@@ -130,28 +110,13 @@ def endpoint_activate(
130
110
  prompted to hide your inputs and keep your password out of your
131
111
  command history, but you may pass your password with the hidden
132
112
  --myproxy-password or -P options.
133
-
134
- \b
135
- To use Delegate Proxy activation use the --delegate-proxy option with a
136
- file containing an X.509 certificate as an argument (e.g. an X.509
137
- gotten from the myproxy-logon command). This certificate must
138
- be a valid credential or proxy credential for the user from an identity
139
- provider accepted by the endpoint being activated, and the endpoint must be
140
- configured with a gridmap that will match the globus user using this
141
- command with the local user the certificate was made to. Note if the X.509
142
- is valid, but the endpoint does not recognize the identity provider or the
143
- user the error will not be detected until the user attempts to perform an
144
- operation on the endpoint.
145
113
  """
146
- from globus_cli.services.transfer import (
147
- activation_requirements_help_text,
148
- fill_delegate_proxy_activation_requirements,
149
- )
114
+ from globus_cli.services.transfer import activation_requirements_help_text
150
115
 
151
116
  transfer_client = login_manager.get_transfer_client()
152
117
 
153
118
  # validate options
154
- if no_autoactivate and not (myproxy or web or delegate_proxy):
119
+ if no_autoactivate and not (myproxy or web):
155
120
  raise click.UsageError(
156
121
  "--no-autoactivate requires another activation method be given."
157
122
  )
@@ -166,8 +131,6 @@ def endpoint_activate(
166
131
  raise click.UsageError("--myproxy-lifetime requires --myproxy.")
167
132
  if no_browser and not web:
168
133
  raise click.UsageError("--no-browser requires --web.")
169
- if proxy_lifetime and not delegate_proxy:
170
- raise click.UsageError("--proxy-lifetime requires --delegate-proxy.")
171
134
 
172
135
  # check if endpoint is already activated unless --force
173
136
  if not force:
@@ -261,17 +224,5 @@ def endpoint_activate(
261
224
  webbrowser.open(url, new=1)
262
225
  res = {"message": "Browser opened to web activation page", "url": url}
263
226
 
264
- # delegate proxy activation
265
- elif delegate_proxy:
266
- requirements_data = transfer_client.endpoint_get_activation_requirements(
267
- endpoint_id
268
- ).data
269
- filled_requirements_data = fill_delegate_proxy_activation_requirements(
270
- requirements_data, delegate_proxy, lifetime_hours=proxy_lifetime or 12
271
- )
272
- res = transfer_client.endpoint_activate(
273
- endpoint_id, requirements_data=filled_requirements_data
274
- )
275
-
276
227
  # output
277
228
  display(res, text_mode=display.RAW, response_key="message")
@@ -10,6 +10,7 @@ from globus_sdk.services.flows import SpecificFlowClient
10
10
 
11
11
  from globus_cli.login_manager import LoginManager, is_client_login
12
12
  from globus_cli.parsing import command, no_local_server_option
13
+ from globus_cli.termio import verbosity
13
14
 
14
15
  _SHARED_EPILOG = """\
15
16
 
@@ -184,7 +185,8 @@ def login_command(
184
185
 
185
186
  # if not forcing, stop if user already logged in
186
187
  if not force and manager.is_logged_in():
187
- click.echo(_LOGGED_IN_RESPONSE)
188
+ if verbosity() >= 0:
189
+ click.echo(_LOGGED_IN_RESPONSE)
188
190
  return
189
191
 
190
192
  manager.run_login_flow(
@@ -66,7 +66,7 @@ class ScheduleFormatter(formatters.FieldFormatter[t.Dict[str, t.Any]]):
66
66
  start = value.get("start")
67
67
  if start:
68
68
  start = formatters.Date.render(formatters.Date.parse(start))
69
- end = value.get("end", {})
69
+ end = value.get("end") or {}
70
70
 
71
71
  ret = f"every {interval} seconds, starting {start}"
72
72
  if end.get("datetime"):
@@ -155,7 +155,12 @@ def transfer_command(
155
155
  Lines are of the form
156
156
  [--recursive] [--external-checksum TEXT] SOURCE_PATH DEST_PATH\n
157
157
 
158
- Skips empty lines and allows comments beginning with "#".
158
+ Each line of the batch input is parsed like it would be at the command line.
159
+ This means that if `SOURCE_PATH` or `DEST_PATH` contain spaces,
160
+ the path should be wrapped in quotes, or the spaces should be escaped
161
+ using a backslash character ("\\").
162
+
163
+ Similarly, empty lines are skipped, and comments beginning with "#" are allowed.
159
164
 
160
165
  \b
161
166
  If you use `--batch` and supply a SOURCE_PATH and/or DEST_PATH via the commandline,
@@ -271,7 +271,12 @@ def transfer_command(
271
271
  Lines are of the form
272
272
  [--recursive] [--external-checksum TEXT] SOURCE_PATH DEST_PATH\n
273
273
 
274
- Skips empty lines and allows comments beginning with "#".
274
+ Each line of the batch input is parsed like it would be at the command line.
275
+ This means that if `SOURCE_PATH` or `DEST_PATH` contain spaces,
276
+ the path should be wrapped in quotes, or the spaces should be escaped
277
+ using a backslash character ("\\").
278
+
279
+ Similarly, empty lines are skipped, and comments beginning with "#" are allowed.
275
280
 
276
281
  \b
277
282
  If you use `--batch` and a commandline SOURCE_PATH and/or DEST_PATH, these
@@ -311,7 +316,7 @@ def transfer_command(
311
316
  is included by default, making the `--include` option only useful for
312
317
  overriding later `--exclude` options.
313
318
 
314
- For example, `globus transfer --include *.txt --exclude * ...` will
319
+ For example, `globus transfer --include "*.txt" --exclude "*" ...` will
315
320
  only transfer files ending in .txt found within the directory structure.
316
321
 
317
322
  {AUTOMATIC_ACTIVATION}
@@ -360,7 +360,8 @@ def flows_validation_error_hook(exception: globus_sdk.FlowsAPIError) -> None:
360
360
 
361
361
  @sdk_error_handler(error_class="FlowsAPIError")
362
362
  def flows_error_hook(exception: globus_sdk.FlowsAPIError) -> None:
363
- details: list[dict[str, t.Any]] | str = exception.raw_json["error"]["detail"] # type: ignore[index] # noqa: E501
363
+ assert exception.raw_json is not None # Influence mypy's knowledge of `raw_json`.
364
+ details: list[dict[str, t.Any]] | str = exception.raw_json["error"]["detail"]
364
365
  detail_fields: list[PrintableErrorField] = []
365
366
 
366
367
  # if the detail is a string, return that as a single field
@@ -399,17 +400,17 @@ def flows_error_hook(exception: globus_sdk.FlowsAPIError) -> None:
399
400
  )
400
401
  ]
401
402
 
402
- write_error_info(
403
- "Flows API Error",
404
- [
405
- PrintableErrorField("HTTP status", exception.http_status),
406
- PrintableErrorField("code", exception.code),
407
- PrintableErrorField(
408
- "message", exception.raw_json["error"]["message"] # type: ignore[index]
409
- ),
410
- *detail_fields,
411
- ],
412
- )
403
+ fields = [
404
+ PrintableErrorField("HTTP status", exception.http_status),
405
+ PrintableErrorField("code", exception.code),
406
+ ]
407
+ if "message" in exception.raw_json["error"]:
408
+ fields.append(
409
+ PrintableErrorField("message", exception.raw_json["error"]["message"])
410
+ )
411
+ fields.extend(detail_fields)
412
+
413
+ write_error_info("Flows API Error", fields)
413
414
 
414
415
 
415
416
  @sdk_error_handler(
@@ -66,6 +66,35 @@ class CommandState:
66
66
  def is_verbose(self) -> bool:
67
67
  return self.verbosity > 0
68
68
 
69
+ def is_quiet(self) -> bool:
70
+ return self.verbosity < 0
71
+
72
+ def set_verbosity(self, value: int) -> None:
73
+ # short-circuit if verbosity is already below 0 -- this makes `--quiet` higher
74
+ # precedence than `--verbose` regardless of the order of application
75
+ if self.verbosity < 0:
76
+ return
77
+
78
+ self.verbosity = value
79
+
80
+ # min verbosity level: never warn, never log normal events
81
+ # (covers quiet modes, e.g. `--quiet`)
82
+ if value <= 0:
83
+ _warnings.simplefilter("ignore")
84
+ _setup_logging(level="CRITICAL")
85
+ # verbosity level 1: warn minimally, log errors
86
+ elif value == 1:
87
+ _warnings.simplefilter("once")
88
+ _setup_logging(level="ERROR")
89
+ # verbosity level 2: warn once per usage, log info
90
+ elif value == 2:
91
+ _warnings.simplefilter("default")
92
+ _setup_logging(level="INFO")
93
+ # verbosity level 3+: warn always, log debug
94
+ elif value >= 3:
95
+ _warnings.simplefilter("always")
96
+ _setup_logging(level="DEBUG")
97
+
69
98
 
70
99
  def format_option(f: F) -> F:
71
100
  def callback(ctx: click.Context, param: click.Parameter, value: t.Any) -> None:
@@ -118,16 +147,13 @@ def format_option(f: F) -> F:
118
147
 
119
148
 
120
149
  def debug_option(f: F) -> F:
121
- def callback(ctx: click.Context, param: click.Parameter, value: t.Any) -> None:
122
- if not value or ctx.resilient_parsing:
123
- # turn off warnings altogether
124
- _warnings.simplefilter("ignore")
150
+ def callback(ctx: click.Context, param: click.Parameter, value: bool) -> None:
151
+ if not value:
125
152
  return
126
153
 
127
- _warnings.simplefilter("default")
128
154
  state = ctx.ensure_object(CommandState)
155
+ state.set_verbosity(max(state.verbosity, 3))
129
156
  state.debug = True
130
- _setup_logging(level="DEBUG")
131
157
 
132
158
  return click.option(
133
159
  "--debug",
@@ -140,48 +166,41 @@ def debug_option(f: F) -> F:
140
166
 
141
167
 
142
168
  def verbose_option(f: F) -> F:
143
- def callback(ctx: click.Context, param: click.Parameter, value: t.Any) -> None:
169
+ def callback(ctx: click.Context, param: click.Parameter, value: int) -> None:
144
170
  # set state verbosity value from option
145
171
  state = ctx.ensure_object(CommandState)
146
- state.verbosity = value
172
+ state.set_verbosity(state.verbosity + value)
147
173
 
148
- # no verbosity
149
- # all warnings are ignored
150
- # logging is not turned on
151
- if value == 0:
152
- _warnings.simplefilter("ignore")
174
+ return click.option(
175
+ "--verbose",
176
+ "-v",
177
+ count=True,
178
+ expose_value=False,
179
+ callback=callback,
180
+ is_eager=True,
181
+ help="Control level of output, make it more verbose.",
182
+ )(f)
153
183
 
154
- # verbosity level 1
155
- # warnings set to once
156
- # logging set to error
157
- if value == 1:
158
- _warnings.simplefilter("once")
159
- _setup_logging(level="ERROR")
160
184
 
161
- # verbosity level 2
162
- # warnings set to default
163
- # logging set to info
164
- if value == 2:
165
- _warnings.simplefilter("default")
166
- _setup_logging(level="INFO")
185
+ def quiet_option(f: F) -> F:
186
+ def callback(ctx: click.Context, param: click.Parameter, value: bool) -> None:
187
+ if not value:
188
+ return
167
189
 
168
- # verbosity level 3+
169
- # warnings set to always
170
- # logging set to debug
171
- # sets debug flag to true
172
- if value >= 3:
173
- _warnings.simplefilter("always")
174
- state.debug = True
175
- _setup_logging(level="DEBUG")
190
+ # set state verbosity value from option
191
+ state = ctx.ensure_object(CommandState)
192
+ state.set_verbosity(-1)
176
193
 
177
194
  return click.option(
178
- "--verbose",
179
- "-v",
180
- count=True,
195
+ "--quiet",
181
196
  expose_value=False,
182
197
  callback=callback,
198
+ is_flag=True,
183
199
  is_eager=True,
184
- help="Control level of output.",
200
+ help=(
201
+ "Suppress non-essential output. "
202
+ "This is higher precedence than `--verbose`."
203
+ ),
185
204
  )(f)
186
205
 
187
206
 
@@ -11,6 +11,9 @@ import click
11
11
  from globus_cli.constants import EXPLICIT_NULL, ExplicitNullType
12
12
  from globus_cli.types import JsonValue
13
13
 
14
+ if t.TYPE_CHECKING:
15
+ from click.shell_completion import CompletionItem
16
+
14
17
 
15
18
  @dataclasses.dataclass
16
19
  class ParsedJSONData:
@@ -57,6 +60,13 @@ class JSONStringOrFile(click.ParamType):
57
60
  def get_metavar(self, param: click.Parameter) -> str:
58
61
  return "[JSON_FILE|JSON|file:JSON_FILE]"
59
62
 
63
+ def shell_complete(
64
+ self, ctx: click.Context, param: click.Parameter, incomplete: str
65
+ ) -> list[CompletionItem]:
66
+ from click.shell_completion import CompletionItem
67
+
68
+ return [CompletionItem(incomplete, type="file")]
69
+
60
70
  def get_type_annotation(self, param: click.Parameter) -> type:
61
71
  if self.null is not None:
62
72
  return t.cast(type, t.Union[ParsedJSONData, ExplicitNullType])
@@ -11,6 +11,7 @@ from globus_cli.parsing.command_state import (
11
11
  debug_option,
12
12
  format_option,
13
13
  map_http_status_option,
14
+ quiet_option,
14
15
  show_server_timing_option,
15
16
  verbose_option,
16
17
  )
@@ -46,6 +47,7 @@ def common_options(*, disable_options: list[str] | None = None) -> t.Callable[[C
46
47
  f = debug_option(f)
47
48
  f = show_server_timing_option(f)
48
49
  f = verbose_option(f)
50
+ f = quiet_option(f)
49
51
  f = click.help_option("-h", "--help")(f)
50
52
 
51
53
  # if the format option is being allowed, it needs to be applied to `f`
@@ -10,7 +10,6 @@ from .data import (
10
10
  display_name_or_cname,
11
11
  iterable_response_to_dict,
12
12
  )
13
- from .delegate_proxy import fill_delegate_proxy_activation_requirements
14
13
  from .recursive_ls import RecursiveLsResponse
15
14
 
16
15
 
@@ -34,7 +33,6 @@ __all__ = (
34
33
  "RecursiveLsResponse",
35
34
  "supported_activation_methods",
36
35
  "activation_requirements_help_text",
37
- "fill_delegate_proxy_activation_requirements",
38
36
  "display_name_or_cname",
39
37
  "iterable_response_to_dict",
40
38
  "assemble_generic_doc",
@@ -1,4 +1,13 @@
1
- def supported_activation_methods(res):
1
+ from __future__ import annotations
2
+
3
+ import uuid
4
+
5
+ import globus_sdk
6
+
7
+
8
+ def supported_activation_methods(
9
+ res: globus_sdk.GlobusHTTPResponse,
10
+ ) -> list[str]:
2
11
  """
3
12
  Given an activation_requirements document
4
13
  returns a list of activation methods supported by this endpoint.
@@ -18,14 +27,12 @@ def supported_activation_methods(res):
18
27
  ):
19
28
  supported.append("myproxy")
20
29
 
21
- # delegate_proxy
22
- if req["type"] == "delegate_proxy" and req["name"] == "public_key":
23
- supported.append("delegate_proxy")
24
-
25
30
  return supported
26
31
 
27
32
 
28
- def activation_requirements_help_text(res, ep_id):
33
+ def activation_requirements_help_text(
34
+ res: globus_sdk.GlobusHTTPResponse, ep_id: str | uuid.UUID
35
+ ) -> str:
29
36
  """
30
37
  Given an activation requirements document and an endpoint_id
31
38
  returns a string of help text for how to activate the endpoint
@@ -54,20 +61,6 @@ def activation_requirements_help_text(res, ep_id):
54
61
  if "oauth" in methods
55
62
  else ""
56
63
  ),
57
- (
58
- "For delegate proxy activation use:\n"
59
- "'globus endpoint activate --delegate-proxy "
60
- "X.509_PEM_FILE {}'\n".format(ep_id)
61
- if "delegate_proxy" in methods
62
- else ""
63
- ),
64
- (
65
- "Delegate proxy activation requires an additional dependency on "
66
- "cryptography. See the docs for details:\n"
67
- "https://docs.globus.org/cli/reference/endpoint_activate/\n"
68
- if "delegate_proxy" in methods
69
- else ""
70
- ),
71
64
  ]
72
65
 
73
66
  return "".join(lines)
@@ -44,8 +44,13 @@ def _retry_client_consent(ctx: RetryContext) -> RetryCheckResult:
44
44
 
45
45
 
46
46
  class CustomTransferClient(globus_sdk.TransferClient):
47
- def __init__(self, *args, **kwargs):
48
- super().__init__(*args, **kwargs)
47
+ def __init__(
48
+ self,
49
+ *,
50
+ authorizer: globus_sdk.GlobusAuthorizer,
51
+ app_name: str,
52
+ ) -> None:
53
+ super().__init__(authorizer=authorizer, app_name=app_name)
49
54
  self.transport.register_retry_check(_retry_client_consent)
50
55
 
51
56
  # TODO: Remove this function when endpoints natively support recursive ls
@@ -78,7 +83,7 @@ class CustomTransferClient(globus_sdk.TransferClient):
78
83
  return RecursiveLsResponse(self, endpoint_id, params, max_depth=depth)
79
84
 
80
85
  def get_endpoint_w_server_list(
81
- self, endpoint_id
86
+ self, endpoint_id: str | uuid.UUID
82
87
  ) -> tuple[
83
88
  globus_sdk.GlobusHTTPResponse, str | globus_sdk.IterableTransferResponse
84
89
  ]:
@@ -282,7 +282,7 @@ def _display(
282
282
  click.echo(simple_text)
283
283
  return
284
284
 
285
- # if there's a preamble, print it beofre any other text
285
+ # if there's a preamble, print it before any other text
286
286
  if text_preamble is not None:
287
287
  click.echo(text_preamble)
288
288
 
@@ -7,7 +7,7 @@ if t.TYPE_CHECKING:
7
7
 
8
8
  # single source of truth for package version,
9
9
  # see https://packaging.python.org/en/latest/single_source_version/
10
- __version__ = "3.28.2"
10
+ __version__ = "3.29.0"
11
11
 
12
12
  # app name to send as part of SDK requests
13
13
  app_name = f"Globus CLI v{__version__}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: globus-cli
3
- Version: 3.28.2
3
+ Version: 3.29.0
4
4
  Summary: Globus CLI
5
5
  Author-email: Stephen Rosen <sirosen@globus.org>
6
6
  Project-URL: homepage, https://github.com/globus/globus-cli
@@ -24,14 +24,13 @@ Requires-Dist: jmespath==1.0.1
24
24
  Requires-Dist: packaging>=17.0
25
25
  Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
26
26
  Requires-Dist: requests<3.0.0,>=2.19.1
27
- Requires-Dist: cryptography>=3.3.1
28
27
  Provides-Extra: test
29
28
  Requires-Dist: coverage>=7; extra == "test"
30
29
  Requires-Dist: pytest>=7; extra == "test"
31
30
  Requires-Dist: pytest-xdist<4; extra == "test"
32
31
  Requires-Dist: pytest-timeout<3; extra == "test"
33
32
  Requires-Dist: click-type-test==0.0.7; python_version >= "3.10" and extra == "test"
34
- Requires-Dist: responses==0.25.0; extra == "test"
33
+ Requires-Dist: responses==0.25.3; extra == "test"
35
34
  Requires-Dist: ruamel.yaml==0.18.6; extra == "test"
36
35
  Requires-Dist: setuptools; python_version >= "3.12" and extra == "test"
37
36