globus-cli 3.31.0__tar.gz → 3.33.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 (279) hide show
  1. {globus_cli-3.31.0/src/globus_cli.egg-info → globus_cli-3.33.0}/PKG-INFO +5 -13
  2. {globus_cli-3.31.0 → globus_cli-3.33.0}/pyproject.toml +37 -14
  3. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/_warnings.py +1 -1
  4. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/api.py +10 -4
  5. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/cli_profile_list.py +7 -4
  6. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/_common.py +3 -4
  7. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/create/guest.py +5 -2
  8. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/create/mapped.py +1 -1
  9. globus_cli-3.33.0/src/globus_cli/commands/collection/delete.py +30 -0
  10. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/_common.py +14 -0
  11. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/create.py +5 -0
  12. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/show.py +1 -0
  13. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/update.py +10 -3
  14. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/search.py +26 -0
  15. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +1 -7
  16. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +1 -1
  17. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/resume.py +7 -15
  18. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/validate.py +2 -4
  19. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/set_subscription_id.py +1 -8
  20. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +7 -7
  21. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/update.py +1 -6
  22. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/_common.py +1 -1
  23. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/login.py +1 -4
  24. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/logout.py +6 -14
  25. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/show.py +3 -10
  26. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/show.py +3 -0
  27. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/create/transfer.py +41 -19
  28. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/resume.py +7 -15
  29. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/transfer.py +34 -8
  30. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/endpointish.py +1 -1
  31. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/exception_handling/hooks.py +124 -35
  32. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/globus_cli_flake8.py +2 -2
  33. globus_cli-3.33.0/src/globus_cli/login_manager/__init__.py +14 -0
  34. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/auth_flows.py +11 -14
  35. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/errors.py +1 -1
  36. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/manager.py +43 -30
  37. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/scopes.py +3 -10
  38. globus_cli-3.33.0/src/globus_cli/login_manager/storage.py +256 -0
  39. globus_cli-3.33.0/src/globus_cli/login_manager/utils.py +5 -0
  40. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_classes.py +1 -1
  41. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +5 -2
  42. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/task_path.py +1 -1
  43. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shell_completion.py +2 -0
  44. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/client.py +1 -1
  45. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/data.py +1 -1
  46. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/__init__.py +1 -1
  47. globus_cli-3.33.0/src/globus_cli/termio/_display.py +202 -0
  48. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/field.py +2 -2
  49. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/auth.py +3 -1
  50. globus_cli-3.33.0/src/globus_cli/termio/printers/__init__.py +16 -0
  51. globus_cli-3.33.0/src/globus_cli/termio/printers/base.py +34 -0
  52. globus_cli-3.33.0/src/globus_cli/termio/printers/custom_printer.py +17 -0
  53. globus_cli-3.33.0/src/globus_cli/termio/printers/json_printer.py +38 -0
  54. globus_cli-3.33.0/src/globus_cli/termio/printers/record_printer.py +137 -0
  55. globus_cli-3.33.0/src/globus_cli/termio/printers/table_printer.py +135 -0
  56. globus_cli-3.33.0/src/globus_cli/termio/printers/unix_printer/__init__.py +3 -0
  57. {globus_cli-3.31.0/src/globus_cli/termio → globus_cli-3.33.0/src/globus_cli/termio/printers/unix_printer}/awscli_text.py +2 -2
  58. globus_cli-3.33.0/src/globus_cli/termio/printers/unix_printer/unix_printer.py +43 -0
  59. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/version.py +1 -1
  60. {globus_cli-3.31.0 → globus_cli-3.33.0/src/globus_cli.egg-info}/PKG-INFO +5 -13
  61. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/SOURCES.txt +12 -4
  62. globus_cli-3.33.0/src/globus_cli.egg-info/requires.txt +8 -0
  63. globus_cli-3.31.0/src/globus_cli/commands/collection/delete.py +0 -18
  64. globus_cli-3.31.0/src/globus_cli/login_manager/__init__.py +0 -30
  65. globus_cli-3.31.0/src/globus_cli/login_manager/tokenstore.py +0 -265
  66. globus_cli-3.31.0/src/globus_cli/login_manager/utils.py +0 -22
  67. globus_cli-3.31.0/src/globus_cli/termio/printer.py +0 -347
  68. globus_cli-3.31.0/src/globus_cli.egg-info/requires.txt +0 -22
  69. {globus_cli-3.31.0 → globus_cli-3.33.0}/LICENSE +0 -0
  70. {globus_cli-3.31.0 → globus_cli-3.33.0}/README.rst +0 -0
  71. {globus_cli-3.31.0 → globus_cli-3.33.0}/setup.cfg +0 -0
  72. {globus_cli-3.31.0 → globus_cli-3.33.0}/setup.py +0 -0
  73. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/__init__.py +0 -0
  74. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/__main__.py +0 -0
  75. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/__init__.py +0 -0
  76. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/_common.py +0 -0
  77. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  78. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  79. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  80. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  81. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  82. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  83. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  84. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  85. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  86. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/list.py +0 -0
  87. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/show.py +0 -0
  88. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/update.py +0 -0
  89. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/delete.py +0 -0
  90. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  91. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  92. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/activate.py +0 -0
  93. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/create.py +0 -0
  94. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/deactivate.py +0 -0
  95. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  96. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/is_activated.py +0 -0
  97. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  98. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  99. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  100. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  101. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  102. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  103. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  104. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  105. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  106. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  107. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  108. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/__init__.py +0 -0
  109. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/_common.py +0 -0
  110. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/add.py +0 -0
  111. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/delete.py +0 -0
  112. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/list.py +0 -0
  113. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/show.py +0 -0
  114. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/update.py +0 -0
  115. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/show.py +0 -0
  116. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  117. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  118. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  119. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  120. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  121. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  122. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  123. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  124. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  125. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  126. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  127. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  128. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  129. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/__init__.py +0 -0
  130. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/_common.py +0 -0
  131. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/create.py +0 -0
  132. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/delete.py +0 -0
  133. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/list.py +0 -0
  134. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  135. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  136. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  137. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  138. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  139. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  140. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  141. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  142. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/show.py +0 -0
  143. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/start.py +0 -0
  144. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/update.py +0 -0
  145. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  146. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  147. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
  148. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  149. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  150. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  151. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  152. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  153. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  154. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  155. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  156. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  157. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  158. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  159. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  160. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  161. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  162. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  163. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/get_identities.py +0 -0
  164. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/__init__.py +0 -0
  165. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/_common.py +0 -0
  166. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/create.py +0 -0
  167. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/delete.py +0 -0
  168. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  169. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  170. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  171. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  172. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  173. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/join.py +0 -0
  174. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/leave.py +0 -0
  175. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/list.py +0 -0
  176. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  177. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/add.py +0 -0
  178. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  179. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  180. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/list.py +0 -0
  181. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  182. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  183. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  184. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/show.py +0 -0
  185. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/update.py +0 -0
  186. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/list_commands.py +0 -0
  187. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/ls.py +0 -0
  188. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/mkdir.py +0 -0
  189. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/rename.py +0 -0
  190. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/rm.py +0 -0
  191. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/__init__.py +0 -0
  192. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/_common.py +0 -0
  193. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  194. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  195. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/create.py +0 -0
  196. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/delete.py +0 -0
  197. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/list.py +0 -0
  198. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  199. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  200. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  201. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  202. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/show.py +0 -0
  203. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/ingest.py +0 -0
  204. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/query.py +0 -0
  205. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  206. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  207. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  208. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  209. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/task/list.py +0 -0
  210. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/task/show.py +0 -0
  211. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/__init__.py +0 -0
  212. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/consent.py +0 -0
  213. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/update.py +0 -0
  214. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/stat.py +0 -0
  215. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/__init__.py +0 -0
  216. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/_common.py +0 -0
  217. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/cancel.py +0 -0
  218. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/event_list.py +0 -0
  219. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  220. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/list.py +0 -0
  221. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  222. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/update.py +0 -0
  223. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/wait.py +0 -0
  224. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  225. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/_common.py +0 -0
  226. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  227. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/delete.py +0 -0
  228. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/list.py +0 -0
  229. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/pause.py +0 -0
  230. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/show.py +0 -0
  231. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/update.py +0 -0
  232. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/version.py +0 -0
  233. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/commands/whoami.py +0 -0
  234. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/constants.py +0 -0
  235. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/__init__.py +0 -0
  236. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  237. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/errors.py +0 -0
  238. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  239. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/exception_handling/registry.py +0 -0
  240. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  241. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/client_login.py +0 -0
  242. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/context.py +0 -0
  243. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/local_server.py +0 -0
  244. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/__init__.py +0 -0
  245. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/command_state.py +0 -0
  246. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/commands.py +0 -0
  247. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  248. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  249. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/delimited.py +0 -0
  250. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
  251. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
  252. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/location.py +0 -0
  253. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
  254. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
  255. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
  256. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  257. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/__init__.py +0 -0
  258. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  259. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
  260. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
  261. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/reflect.py +0 -0
  262. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/__init__.py +0 -0
  263. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/auth.py +0 -0
  264. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/gcs.py +0 -0
  265. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/__init__.py +0 -0
  266. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/activation.py +0 -0
  267. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  268. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/context.py +0 -0
  269. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/errors.py +0 -0
  270. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  271. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/base.py +0 -0
  272. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  273. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  274. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/termio/server_timing.py +0 -0
  275. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/types.py +0 -0
  276. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli/utils.py +0 -0
  277. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
  278. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
  279. {globus_cli-3.31.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: globus-cli
3
- Version: 3.31.0
3
+ Version: 3.33.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
@@ -15,24 +15,16 @@ Classifier: Programming Language :: Python :: 3.9
15
15
  Classifier: Programming Language :: Python :: 3.10
16
16
  Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
18
19
  Requires-Python: >=3.8
19
20
  Description-Content-Type: text/x-rst
20
21
  License-File: LICENSE
21
- Requires-Dist: globus-sdk==3.45.0
22
+ Requires-Dist: globus-sdk==3.51.0
22
23
  Requires-Dist: click<9,>=8.1.4
23
24
  Requires-Dist: jmespath==1.0.1
24
25
  Requires-Dist: packaging>=17.0
25
26
  Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
26
- Requires-Dist: requests<3.0.0,>=2.19.1
27
- Provides-Extra: test
28
- Requires-Dist: coverage>=7; extra == "test"
29
- Requires-Dist: pytest>=7; extra == "test"
30
- Requires-Dist: pytest-xdist<4; extra == "test"
31
- Requires-Dist: pytest-timeout<3; extra == "test"
32
- Requires-Dist: click-type-test==0.0.7; python_version >= "3.10" and extra == "test"
33
- Requires-Dist: responses==0.25.3; extra == "test"
34
- Requires-Dist: ruamel.yaml==0.18.6; extra == "test"
35
- Requires-Dist: setuptools; python_version >= "3.12" and extra == "test"
27
+ Requires-Dist: requests<3.0.0,>=2.32.3
36
28
 
37
29
  .. image:: https://github.com/globus/globus-cli/workflows/build/badge.svg?event=push
38
30
  :alt: build status
@@ -25,39 +25,61 @@ classifiers = [
25
25
  "Programming Language :: Python :: 3.10",
26
26
  "Programming Language :: Python :: 3.11",
27
27
  "Programming Language :: Python :: 3.12",
28
+ "Programming Language :: Python :: 3.13",
28
29
  ]
29
30
  requires-python = ">=3.8"
30
31
  dependencies = [
31
- "globus-sdk==3.45.0",
32
+ "globus-sdk==3.51.0",
32
33
  "click>=8.1.4,<9",
33
34
  "jmespath==1.0.1",
34
35
  "packaging>=17.0",
35
36
  "typing_extensions>=4.0;python_version<'3.11'",
36
37
  # these are dependencies of the SDK, but they are used directly in the CLI
37
38
  # declare them here in case the underlying lib ever changes
38
- "requests>=2.19.1,<3.0.0",
39
+ "requests>=2.32.3,<3.0.0",
39
40
  ]
40
41
  dynamic = ["version"]
41
42
 
42
43
  [project.urls]
43
44
  homepage = "https://github.com/globus/globus-cli"
44
45
 
45
- [project.optional-dependencies]
46
+ [project.scripts]
47
+ globus = "globus_cli:main"
48
+
49
+ [dependency-groups]
50
+ coverage = [
51
+ "coverage[toml]>=7"
52
+ ]
46
53
  test = [
47
- "coverage>=7",
54
+ {include-group = "coverage"},
48
55
  "pytest>=7",
49
56
  "pytest-xdist<4",
50
57
  "pytest-timeout<3",
51
- "click-type-test==0.0.7;python_version>='3.10'",
52
- "responses==0.25.3",
58
+ "click-type-test==1.1.0;python_version>='3.10'",
59
+ "responses==0.25.6",
53
60
  # loading test fixture data
54
- "ruamel.yaml==0.18.6",
55
- # Python 3.12 needs setuptools.
56
- "setuptools;python_version>='3.12'",
61
+ "ruamel.yaml==0.18.10",
62
+ ]
63
+ test-mindeps = [
64
+ {include-group = "test"},
65
+ "click==8.1.4",
66
+ "requests==2.32.3",
67
+ "pyjwt==2.0.0",
68
+ "cryptography==3.3.1",
69
+ "packaging==17.0",
70
+ "typing_extensions==4.0",
71
+ ]
72
+ typing = [
73
+ "mypy==1.15.0",
74
+ "types-jwt",
75
+ "types-requests",
76
+ "types-jmespath",
77
+ ]
78
+ # `dev` is what's installed if you `make install`
79
+ dev = [
80
+ {include-group = "test"},
81
+ {include-group = "typing"},
57
82
  ]
58
-
59
- [project.scripts]
60
- globus = "globus_cli:main"
61
83
 
62
84
  [tool.setuptools.dynamic.version]
63
85
  attr = "globus_cli.version.__version__"
@@ -66,7 +88,7 @@ attr = "globus_cli.version.__version__"
66
88
  profile = "black"
67
89
 
68
90
  [tool.pytest.ini_options]
69
- addopts = "--timeout 3"
91
+ addopts = "--timeout 3 --color=yes"
70
92
  filterwarnings = ["error"]
71
93
 
72
94
  [tool.scriv]
@@ -79,6 +101,7 @@ entry_title_template = '{{ version }} ({{ date.strftime("%Y-%m-%d") }})'
79
101
 
80
102
  [tool.mypy]
81
103
  strict = true
104
+ sqlite_cache = true
82
105
 
83
106
  # additional settings (not part of strict=true)
84
107
  warn_unreachable = true
@@ -89,5 +112,5 @@ disallow_untyped_defs = false
89
112
  disallow_incomplete_defs = false
90
113
  module = [
91
114
  "globus_cli.services.transfer.recursive_ls",
92
- "globus_cli.termio.awscli_text",
115
+ "globus_cli.termio.printers.unix_printer.awscli_text",
93
116
  ]
@@ -8,7 +8,7 @@ _TEST_WARNING_CONTROL: bool = False
8
8
 
9
9
 
10
10
  def simplefilter(
11
- filterstr: t.Literal["default", "error", "ignore", "always", "module", "once"]
11
+ filterstr: t.Literal["default", "error", "ignore", "always", "module", "once"],
12
12
  ) -> None:
13
13
  """
14
14
  Wrap `warnings.simplefilter` with a check on `_TEST_WARNING_CONTROL`.
@@ -23,14 +23,17 @@ class QueryParamType(click.ParamType):
23
23
  return "Key=Value"
24
24
 
25
25
  def get_type_annotation(self, param: click.Parameter) -> type:
26
- return tuple[str, str]
26
+ # this is a "<typing special form>" vs "type" issue, so type ignore for now
27
+ # click-type-test has an issue for improving this, with details, see:
28
+ # https://github.com/sirosen/click-type-test/issues/14
29
+ return t.Tuple[str, str] # type: ignore[return-value]
27
30
 
28
31
  def convert(
29
32
  self,
30
33
  value: str | None,
31
34
  param: click.Parameter | None,
32
35
  ctx: click.Context | None,
33
- ) -> t.Tuple[str, str] | None:
36
+ ) -> tuple[str, str] | None:
34
37
  value = super().convert(value, param, ctx)
35
38
  if value is None:
36
39
  return None
@@ -45,14 +48,17 @@ class HeaderParamType(click.ParamType):
45
48
  return "Key:Value"
46
49
 
47
50
  def get_type_annotation(self, param: click.Parameter) -> type:
48
- return tuple[str, str]
51
+ # this is a "<typing special form>" vs "type" issue, so type ignore for now
52
+ # click-type-test has an issue for improving this, with details, see:
53
+ # https://github.com/sirosen/click-type-test/issues/14
54
+ return t.Tuple[str, str] # type: ignore[return-value]
49
55
 
50
56
  def convert(
51
57
  self,
52
58
  value: str | None,
53
59
  param: click.Parameter | None,
54
60
  ctx: click.Context | None,
55
- ) -> t.Tuple[str, str] | None:
61
+ ) -> tuple[str, str] | None:
56
62
  value = super().convert(value, param, ctx)
57
63
  if value is None:
58
64
  return None
@@ -5,7 +5,7 @@ import typing as t
5
5
 
6
6
  import click
7
7
 
8
- from globus_cli.login_manager import is_client_login, token_storage_adapter
8
+ from globus_cli.login_manager import LoginManager, is_client_login
9
9
  from globus_cli.parsing import command
10
10
  from globus_cli.termio import Field, display, formatters
11
11
 
@@ -29,13 +29,16 @@ def _profilestr_to_datadict(s: str) -> dict[str, t.Any] | None:
29
29
 
30
30
 
31
31
  def _parse_and_filter_profiles(
32
+ login_manager: LoginManager,
32
33
  all: bool,
33
34
  ) -> tuple[list[dict[str, t.Any]], list[dict[str, t.Any]]]:
34
35
  globus_env = os.getenv("GLOBUS_SDK_ENVIRONMENT", "production")
35
36
 
36
37
  client_profiles = []
37
38
  user_profiles = []
38
- for n in token_storage_adapter().iter_namespaces(include_config_namespaces=True):
39
+ for n in login_manager.storage.adapter.iter_namespaces(
40
+ include_config_namespaces=True
41
+ ):
39
42
  data = _profilestr_to_datadict(n)
40
43
  if not data: # skip any parse failures
41
44
  continue
@@ -86,8 +89,8 @@ def cli_profile_list(*, all: bool) -> None:
86
89
  These are the values for GLOBUS_PROFILE which have been recorded, as well as
87
90
  GLOBUS_CLI_CLIENT_ID values which have been used.
88
91
  """
89
-
90
- client_profiles, user_profiles = _parse_and_filter_profiles(all)
92
+ login_manager = LoginManager()
93
+ client_profiles, user_profiles = _parse_and_filter_profiles(login_manager, all)
91
94
 
92
95
  if user_profiles:
93
96
  fields = [
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import click
4
4
  import globus_sdk
5
5
 
6
- from globus_cli.login_manager.utils import get_current_identity_id
6
+ from globus_cli.login_manager import LoginManager
7
7
  from globus_cli.termio import Field, formatters
8
8
  from globus_cli.types import DATA_CONTAINER_T
9
9
 
@@ -12,10 +12,9 @@ class LazyCurrentIdentity:
12
12
  def __init__(self, value: str | None) -> None:
13
13
  self._value = value
14
14
 
15
- @property
16
- def value(self) -> str:
15
+ def resolve(self, login_manager: LoginManager) -> str:
17
16
  if self._value is None:
18
- self._value = get_current_identity_id()
17
+ self._value = login_manager.get_current_identity_id()
19
18
  return str(self._value)
20
19
 
21
20
 
@@ -91,7 +91,10 @@ def collection_create_guest(
91
91
 
92
92
  if not user_credential_id:
93
93
  user_credential_id = _select_user_credential_id(
94
- gcs_client, mapped_collection_id, local_username, identity_id.value
94
+ gcs_client,
95
+ mapped_collection_id,
96
+ local_username,
97
+ identity_id.resolve(login_manager),
95
98
  )
96
99
 
97
100
  converted_kwargs: dict[str, t.Any] = ExplicitNullType.nullify_dict(
@@ -105,7 +108,7 @@ def collection_create_guest(
105
108
  "display_name": display_name,
106
109
  "enable_https": enable_https,
107
110
  "force_encryption": force_encryption,
108
- "identity_id": identity_id.value,
111
+ "identity_id": identity_id.resolve(login_manager),
109
112
  "info_link": info_link,
110
113
  "keywords": keywords,
111
114
  "mapped_collection_id": mapped_collection_id,
@@ -284,7 +284,7 @@ def collection_create_mapped(
284
284
  "domain_name": domain_name,
285
285
  "enable_https": enable_https,
286
286
  "force_encryption": force_encryption,
287
- "identity_id": identity_id.value,
287
+ "identity_id": identity_id.resolve(login_manager),
288
288
  "info_link": info_link,
289
289
  "keywords": keywords,
290
290
  "organization": organization,
@@ -0,0 +1,30 @@
1
+ import uuid
2
+
3
+ from globus_cli.login_manager import LoginManager
4
+ from globus_cli.parsing import collection_id_arg, command
5
+ from globus_cli.termio import display
6
+
7
+
8
+ @command("delete", short_help="Delete an existing Collection.")
9
+ @collection_id_arg
10
+ @LoginManager.requires_login("transfer")
11
+ def collection_delete(login_manager: LoginManager, *, collection_id: uuid.UUID) -> None:
12
+ """
13
+ Delete an existing Collection.
14
+
15
+ This requires that you are an owner or administrator on the Collection.
16
+
17
+ Endpoint owners and administrators may delete Collections on the Endpoint.
18
+ For Guest Collections, administrators of the Mapped Collection may also delete.
19
+
20
+ If the collection has the 'delete_protection' property set to true, the Collection
21
+ can not be deleted.
22
+
23
+ All Collection-specific roles and 'sharing_policies' are also deleted.
24
+
25
+ If a Mapped Collection is deleted, then all Guest Collections and roles associated
26
+ with it are also deleted.
27
+ """
28
+ gcs_client = login_manager.get_gcs_client(collection_id=collection_id)
29
+ res = gcs_client.delete_collection(collection_id)
30
+ display(res, text_mode=display.RAW, response_key="code")
@@ -1,6 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import typing as t
4
+
5
+ import click
6
+
3
7
  from globus_cli.termio import formatters
8
+ from globus_cli.types import AnyCommand
9
+
10
+ C = t.TypeVar("C", bound=AnyCommand)
4
11
 
5
12
 
6
13
  class AclPrincipalFormatter(formatters.auth.PrincipalDictFormatter):
@@ -18,3 +25,10 @@ class AclPrincipalFormatter(formatters.auth.PrincipalDictFormatter):
18
25
  # it could be made multi-environment using `globus_sdk.config.get_webapp_url()`
19
26
  def render_group_id(self, group_id: str) -> str:
20
27
  return f"https://app.globus.org/groups/{group_id}"
28
+
29
+
30
+ def expiration_date_option(f: C) -> C:
31
+ return click.option(
32
+ "--expiration-date",
33
+ help="Expiration date for the permission in ISO 8601 format",
34
+ )(f)
@@ -9,6 +9,8 @@ from globus_cli.login_manager import LoginManager
9
9
  from globus_cli.parsing import ENDPOINT_PLUS_REQPATH, command, security_principal_opts
10
10
  from globus_cli.termio import Field, display
11
11
 
12
+ from ._common import expiration_date_option
13
+
12
14
 
13
15
  @command(
14
16
  "create",
@@ -50,6 +52,7 @@ $ globus endpoint permission create $ep_id:/ --permissions rw --identity go@glob
50
52
  help="A custom message to add to email notifications",
51
53
  )
52
54
  @click.argument("endpoint_plus_path", type=ENDPOINT_PLUS_REQPATH)
55
+ @expiration_date_option
53
56
  @LoginManager.requires_login("auth", "transfer")
54
57
  def create_command(
55
58
  login_manager: LoginManager,
@@ -59,6 +62,7 @@ def create_command(
59
62
  endpoint_plus_path: tuple[uuid.UUID, str | None],
60
63
  notify_email: str | None,
61
64
  notify_message: str | None,
65
+ expiration_date: str | None,
62
66
  ) -> None:
63
67
  """
64
68
  Create a new access control rule on the target endpoint, granting users new
@@ -105,6 +109,7 @@ def create_command(
105
109
  path=path,
106
110
  notify_email=notify_email,
107
111
  notify_message=notify_message,
112
+ expiration_date=expiration_date,
108
113
  )
109
114
 
110
115
  res = transfer_client.add_endpoint_acl_rule(endpoint_id, rule_data)
@@ -47,5 +47,6 @@ def show_command(
47
47
  formatter=AclPrincipalFormatter(auth_client=auth_client),
48
48
  ),
49
49
  Field("Path", "path"),
50
+ Field("Expiration Date", "expiration_date"),
50
51
  ],
51
52
  )
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import typing as t
2
4
  import uuid
3
5
 
@@ -7,6 +9,8 @@ from globus_cli.login_manager import LoginManager
7
9
  from globus_cli.parsing import command, endpoint_id_arg
8
10
  from globus_cli.termio import display
9
11
 
12
+ from ._common import expiration_date_option
13
+
10
14
 
11
15
  @command(
12
16
  "update",
@@ -25,17 +29,18 @@ $ globus endpoint permission update $ep_id $rule_id --permissions r
25
29
  @click.argument("rule_id")
26
30
  @click.option(
27
31
  "--permissions",
28
- required=True,
29
32
  type=click.Choice(("r", "rw"), case_sensitive=False),
30
33
  help="Permissions to add. Read-Only or Read/Write",
31
34
  )
35
+ @expiration_date_option
32
36
  @LoginManager.requires_login("transfer")
33
37
  def update_command(
34
38
  login_manager: LoginManager,
35
39
  *,
36
- permissions: t.Literal["r", "rw"],
40
+ permissions: t.Literal["r", "rw"] | None,
37
41
  rule_id: str,
38
42
  endpoint_id: uuid.UUID,
43
+ expiration_date: str | None,
39
44
  ) -> None:
40
45
  """
41
46
  Update an existing access control rule's permissions.
@@ -47,6 +52,8 @@ def update_command(
47
52
 
48
53
  transfer_client = login_manager.get_transfer_client()
49
54
 
50
- rule_data = assemble_generic_doc("access", permissions=permissions)
55
+ rule_data = assemble_generic_doc(
56
+ "access", permissions=permissions, expiration_date=expiration_date
57
+ )
51
58
  res = transfer_client.update_endpoint_acl_rule(endpoint_id, rule_id, rule_data)
52
59
  display(res, text_mode=display.RAW, response_key="message")
@@ -68,6 +68,21 @@ $ globus endpoint search --filter-scope my-endpoints
68
68
  type=click.IntRange(1, 1000),
69
69
  help="The maximum number of results to return.",
70
70
  )
71
+ @click.option(
72
+ "--filter-entity-type",
73
+ default=None,
74
+ type=click.Choice(
75
+ (
76
+ "GCP_mapped_collection",
77
+ "GCP_guest_collection",
78
+ "GCSv5_endpoint",
79
+ "GCSv5_mapped_collection",
80
+ "GCSv5_guest_collection",
81
+ ),
82
+ case_sensitive=False,
83
+ ),
84
+ help="Filter search results to endpoints of a specific entity type.",
85
+ )
71
86
  @click.argument("filter_fulltext", required=False)
72
87
  @LoginManager.requires_login("auth", "transfer")
73
88
  def endpoint_search(
@@ -86,6 +101,16 @@ def endpoint_search(
86
101
  "shared-by-me",
87
102
  "shared-with-me",
88
103
  ],
104
+ filter_entity_type: (
105
+ t.Literal[
106
+ "GCP_mapped_collection",
107
+ "GCP_guest_collection",
108
+ "GCSv5_endpoint",
109
+ "GCSv5_mapped_collection",
110
+ "GCSv5_guest_collection",
111
+ ]
112
+ | None
113
+ ),
89
114
  ) -> None:
90
115
  """
91
116
  Search for Globus endpoints with search filters. If --filter-scope is set to the
@@ -121,6 +146,7 @@ def endpoint_search(
121
146
  filter_fulltext=filter_fulltext,
122
147
  filter_scope=filter_scope,
123
148
  filter_owner_id=owner_id,
149
+ filter_entity_type=filter_entity_type,
124
150
  ).items(),
125
151
  limit=limit,
126
152
  )
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import typing as t
4
3
  import uuid
5
4
 
6
5
  import click
@@ -11,14 +10,9 @@ from globus_cli.termio import display
11
10
 
12
11
 
13
12
  class SubscriptionIdType(click.ParamType):
14
- def get_type_annotation(self, param: click.Parameter) -> type:
15
- return t.cast(type, str)
16
-
17
13
  def convert(
18
14
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
19
- ) -> t.Any:
20
- if value is None or (ctx and ctx.resilient_parsing):
21
- return None
15
+ ) -> str:
22
16
  if value.lower() == "null":
23
17
  return "null"
24
18
  try:
@@ -35,7 +35,7 @@ def s3(
35
35
  gcs_client = login_manager.get_gcs_client(endpoint_id=endpoint_id)
36
36
  auth_client = login_manager.get_auth_client()
37
37
 
38
- # TODO: replace with SDK class once available
38
+ # TODO: replace with SDK class if one becomes available
39
39
  policies = {
40
40
  "DATA_TYPE": "s3_user_credential_policies#1.0.0",
41
41
  "s3_key_id": s3_key_id,
@@ -8,7 +8,6 @@ import click
8
8
  import globus_sdk
9
9
 
10
10
  from globus_cli.login_manager import LoginManager
11
- from globus_cli.login_manager.utils import get_current_identity_id
12
11
  from globus_cli.parsing import command, run_id_arg
13
12
  from globus_cli.termio import Field, display, formatters
14
13
  from globus_cli.utils import CLIAuthRequirementsError
@@ -16,9 +15,7 @@ from globus_cli.utils import CLIAuthRequirementsError
16
15
  # NB: GARE parsing requires other SDK components and therefore needs to be deferred to
17
16
  # avoid the performance impact of non-lazy imports
18
17
  if t.TYPE_CHECKING:
19
- from globus_sdk.experimental.auth_requirements_error import (
20
- GlobusAuthRequirementsError,
21
- )
18
+ from globus_sdk.gare import GARE
22
19
 
23
20
 
24
21
  @command("resume")
@@ -66,7 +63,7 @@ def resume_command(
66
63
  def check_inactive_reason(
67
64
  login_manager: LoginManager,
68
65
  run_id: uuid.UUID,
69
- gare: GlobusAuthRequirementsError | None,
66
+ gare: GARE | None,
70
67
  ) -> None:
71
68
  if gare is None:
72
69
  return
@@ -108,14 +105,9 @@ def check_inactive_reason(
108
105
 
109
106
 
110
107
  def _get_inactive_reason(
111
- run_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse
112
- ) -> GlobusAuthRequirementsError | None:
113
- try:
114
- from globus_sdk.gare import to_gare # type: ignore[import-not-found]
115
- except ImportError:
116
- from globus_sdk.experimental.auth_requirements_error import (
117
- to_auth_requirements_error as to_gare,
118
- )
108
+ run_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse,
109
+ ) -> GARE | None:
110
+ from globus_sdk.gare import to_gare
119
111
 
120
112
  if not run_doc.get("status") == "INACTIVE":
121
113
  return None
@@ -124,13 +116,13 @@ def _get_inactive_reason(
124
116
  if not isinstance(details, dict):
125
117
  return None
126
118
 
127
- return to_gare(details) # type: ignore[no-any-return]
119
+ return to_gare(details)
128
120
 
129
121
 
130
122
  def _has_required_consent(
131
123
  login_manager: LoginManager, required_scopes: list[str]
132
124
  ) -> bool:
133
125
  auth_client = login_manager.get_auth_client()
134
- user_identity_id = get_current_identity_id()
126
+ user_identity_id = login_manager.get_current_identity_id()
135
127
  consents = auth_client.get_consents(user_identity_id).to_forest()
136
128
  return consents.meets_scope_requirements(required_scopes)
@@ -87,13 +87,11 @@ def _validate_flow_scope_output_handler(scopes_response: dict[str, str]) -> None
87
87
  for k, scopes in scopes_response.items()
88
88
  for scope in scopes
89
89
  ]
90
+
90
91
  click.echo("Discovered Scopes")
91
92
  click.echo("=================")
92
93
  if scope_entries:
93
- display.render_table(
94
- scope_entries,
95
- fields=scopes_fields,
96
- )
94
+ display(scope_entries, text_mode=display.TABLE, fields=scopes_fields)
97
95
  else:
98
96
  click.echo("No scopes discovered")
99
97
 
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import typing as t
4
3
  import uuid
5
4
 
6
5
  import click
@@ -13,15 +12,9 @@ from globus_cli.termio import display
13
12
 
14
13
 
15
14
  class GCPSubscriptionIdType(click.ParamType):
16
- def get_type_annotation(self, _: click.Parameter) -> type:
17
- return t.cast(type, uuid.UUID | ExplicitNullType)
18
-
19
15
  def convert(
20
16
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
21
- ) -> t.Any:
22
- if ctx and ctx.resilient_parsing:
23
- return None
24
-
17
+ ) -> uuid.UUID | ExplicitNullType:
25
18
  if value.lower() == "null":
26
19
  return EXPLICIT_NULL
27
20
 
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import sys
3
4
  import typing as t
4
5
  import uuid
5
6
 
@@ -10,17 +11,16 @@ from globus_cli.login_manager import LoginManager
10
11
  from globus_cli.parsing import command, endpoint_id_arg
11
12
  from globus_cli.termio import display
12
13
 
14
+ if sys.version_info >= (3, 9):
15
+ from typing import Literal
16
+ else:
17
+ from typing_extensions import Literal
13
18
 
14
- class GCSSubscriptionIdType(click.ParamType):
15
- def get_type_annotation(self, _: click.Parameter) -> type:
16
- return t.cast(type, uuid.UUID | t.Literal["DEFAULT"] | ExplicitNullType)
17
19
 
20
+ class GCSSubscriptionIdType(click.ParamType):
18
21
  def convert(
19
22
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
20
- ) -> t.Any:
21
- if ctx and ctx.resilient_parsing:
22
- return None
23
-
23
+ ) -> uuid.UUID | Literal["DEFAULT"] | ExplicitNullType:
24
24
  if value.lower() == "null":
25
25
  return EXPLICIT_NULL
26
26
  elif value.lower() == "default":
@@ -19,17 +19,12 @@ F = t.TypeVar("F", bound=AnyCallable)
19
19
 
20
20
 
21
21
  class SubscriptionIdType(click.ParamType):
22
- def get_type_annotation(self, _: click.Parameter) -> type:
23
- return t.cast(type, str | ExplicitNullType)
24
-
25
22
  def get_metavar(self, _: click.Parameter) -> t.Optional[str]:
26
23
  return "[<uuid>|DEFAULT|null]"
27
24
 
28
25
  def convert(
29
26
  self, value: str, param: click.Parameter | None, ctx: click.Context | None
30
- ) -> t.Any:
31
- if value is None or (ctx and ctx.resilient_parsing):
32
- return None
27
+ ) -> str | ExplicitNullType:
33
28
  if value.lower() == "null":
34
29
  return EXPLICIT_NULL
35
30
  if value.lower() == "default":
@@ -14,7 +14,7 @@ if t.TYPE_CHECKING:
14
14
 
15
15
 
16
16
  def get_invite_formatter(
17
- case: t.Literal["accept", "decline"]
17
+ case: t.Literal["accept", "decline"],
18
18
  ) -> t.Callable[[globus_sdk.GlobusHTTPResponse], None]:
19
19
  action_word = "Accepted" if case == "accept" else "Declined"
20
20