globus-cli 3.32.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.32.0/src/globus_cli.egg-info → globus_cli-3.33.0}/PKG-INFO +5 -13
  2. {globus_cli-3.32.0 → globus_cli-3.33.0}/pyproject.toml +35 -13
  3. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/_warnings.py +1 -1
  4. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/api.py +10 -4
  5. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/cli_profile_list.py +7 -4
  6. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/_common.py +3 -4
  7. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/create/guest.py +5 -2
  8. {globus_cli-3.32.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.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/_common.py +14 -0
  11. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/create.py +5 -0
  12. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/show.py +1 -0
  13. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/update.py +10 -3
  14. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/search.py +26 -0
  15. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +1 -7
  16. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/resume.py +2 -3
  17. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/validate.py +2 -4
  18. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/set_subscription_id.py +1 -8
  19. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +7 -7
  20. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/update.py +1 -6
  21. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/_common.py +1 -1
  22. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/login.py +1 -4
  23. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/logout.py +6 -14
  24. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/show.py +3 -10
  25. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/create/transfer.py +5 -3
  26. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/resume.py +2 -3
  27. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/exception_handling/hooks.py +122 -31
  28. globus_cli-3.33.0/src/globus_cli/login_manager/__init__.py +14 -0
  29. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/auth_flows.py +11 -14
  30. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/manager.py +40 -18
  31. globus_cli-3.33.0/src/globus_cli/login_manager/storage.py +256 -0
  32. globus_cli-3.33.0/src/globus_cli/login_manager/utils.py +5 -0
  33. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_classes.py +1 -1
  34. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +5 -2
  35. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shell_completion.py +2 -0
  36. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/data.py +1 -1
  37. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/__init__.py +1 -1
  38. globus_cli-3.33.0/src/globus_cli/termio/_display.py +202 -0
  39. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/field.py +1 -1
  40. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/auth.py +2 -0
  41. globus_cli-3.33.0/src/globus_cli/termio/printers/__init__.py +16 -0
  42. globus_cli-3.33.0/src/globus_cli/termio/printers/base.py +34 -0
  43. globus_cli-3.33.0/src/globus_cli/termio/printers/custom_printer.py +17 -0
  44. globus_cli-3.33.0/src/globus_cli/termio/printers/json_printer.py +38 -0
  45. globus_cli-3.33.0/src/globus_cli/termio/printers/record_printer.py +137 -0
  46. globus_cli-3.33.0/src/globus_cli/termio/printers/table_printer.py +135 -0
  47. globus_cli-3.33.0/src/globus_cli/termio/printers/unix_printer/__init__.py +3 -0
  48. {globus_cli-3.32.0/src/globus_cli/termio → globus_cli-3.33.0/src/globus_cli/termio/printers/unix_printer}/awscli_text.py +2 -2
  49. globus_cli-3.33.0/src/globus_cli/termio/printers/unix_printer/unix_printer.py +43 -0
  50. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/version.py +1 -1
  51. {globus_cli-3.32.0 → globus_cli-3.33.0/src/globus_cli.egg-info}/PKG-INFO +5 -13
  52. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/SOURCES.txt +12 -4
  53. globus_cli-3.33.0/src/globus_cli.egg-info/requires.txt +8 -0
  54. globus_cli-3.32.0/src/globus_cli/commands/collection/delete.py +0 -18
  55. globus_cli-3.32.0/src/globus_cli/login_manager/__init__.py +0 -30
  56. globus_cli-3.32.0/src/globus_cli/login_manager/tokenstore.py +0 -265
  57. globus_cli-3.32.0/src/globus_cli/login_manager/utils.py +0 -22
  58. globus_cli-3.32.0/src/globus_cli/termio/printer.py +0 -347
  59. globus_cli-3.32.0/src/globus_cli.egg-info/requires.txt +0 -22
  60. {globus_cli-3.32.0 → globus_cli-3.33.0}/LICENSE +0 -0
  61. {globus_cli-3.32.0 → globus_cli-3.33.0}/README.rst +0 -0
  62. {globus_cli-3.32.0 → globus_cli-3.33.0}/setup.cfg +0 -0
  63. {globus_cli-3.32.0 → globus_cli-3.33.0}/setup.py +0 -0
  64. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/__init__.py +0 -0
  65. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/__main__.py +0 -0
  66. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/__init__.py +0 -0
  67. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/_common.py +0 -0
  68. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  69. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  70. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  71. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  72. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  73. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  74. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  75. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  76. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  77. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/list.py +0 -0
  78. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/show.py +0 -0
  79. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/collection/update.py +0 -0
  80. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/delete.py +0 -0
  81. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  82. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  83. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/activate.py +0 -0
  84. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/create.py +0 -0
  85. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/deactivate.py +0 -0
  86. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  87. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/is_activated.py +0 -0
  88. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  89. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  90. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  91. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  92. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  93. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  94. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  95. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  96. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  97. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  98. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  99. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/__init__.py +0 -0
  100. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/_common.py +0 -0
  101. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/add.py +0 -0
  102. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/delete.py +0 -0
  103. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/list.py +0 -0
  104. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/show.py +0 -0
  105. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/server/update.py +0 -0
  106. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/show.py +0 -0
  107. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  108. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  109. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  110. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  111. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  112. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  113. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  114. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  115. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
  116. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  117. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  118. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  119. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  120. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  121. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/__init__.py +0 -0
  122. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/_common.py +0 -0
  123. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/create.py +0 -0
  124. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/delete.py +0 -0
  125. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/list.py +0 -0
  126. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  127. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  128. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  129. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  130. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  131. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  132. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  133. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  134. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/show.py +0 -0
  135. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/start.py +0 -0
  136. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/flows/update.py +0 -0
  137. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  138. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  139. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
  140. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  141. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  142. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  143. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  144. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  145. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  146. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  147. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  148. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  149. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  150. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  151. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  152. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  153. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  154. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  155. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/get_identities.py +0 -0
  156. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/__init__.py +0 -0
  157. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/_common.py +0 -0
  158. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/create.py +0 -0
  159. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/delete.py +0 -0
  160. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  161. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  162. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  163. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  164. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  165. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/join.py +0 -0
  166. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/leave.py +0 -0
  167. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/list.py +0 -0
  168. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  169. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/add.py +0 -0
  170. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  171. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  172. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/list.py +0 -0
  173. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  174. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  175. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  176. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/show.py +0 -0
  177. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/group/update.py +0 -0
  178. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/list_commands.py +0 -0
  179. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/ls.py +0 -0
  180. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/mkdir.py +0 -0
  181. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/rename.py +0 -0
  182. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/rm.py +0 -0
  183. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/__init__.py +0 -0
  184. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/_common.py +0 -0
  185. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  186. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  187. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/create.py +0 -0
  188. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/delete.py +0 -0
  189. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/list.py +0 -0
  190. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  191. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  192. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  193. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  194. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/index/show.py +0 -0
  195. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/ingest.py +0 -0
  196. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/query.py +0 -0
  197. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  198. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  199. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  200. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  201. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/task/list.py +0 -0
  202. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/search/task/show.py +0 -0
  203. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/__init__.py +0 -0
  204. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/consent.py +0 -0
  205. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/session/update.py +0 -0
  206. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/stat.py +0 -0
  207. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/__init__.py +0 -0
  208. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/_common.py +0 -0
  209. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/cancel.py +0 -0
  210. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/event_list.py +0 -0
  211. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  212. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/list.py +0 -0
  213. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  214. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/show.py +0 -0
  215. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/update.py +0 -0
  216. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/task/wait.py +0 -0
  217. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  218. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/_common.py +0 -0
  219. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  220. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/delete.py +0 -0
  221. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/list.py +0 -0
  222. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/pause.py +0 -0
  223. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/timer/show.py +0 -0
  224. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/transfer.py +0 -0
  225. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/update.py +0 -0
  226. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/version.py +0 -0
  227. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/commands/whoami.py +0 -0
  228. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/constants.py +0 -0
  229. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/__init__.py +0 -0
  230. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/endpointish.py +0 -0
  231. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  232. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/endpointish/errors.py +0 -0
  233. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  234. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/exception_handling/registry.py +0 -0
  235. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/globus_cli_flake8.py +0 -0
  236. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  237. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/client_login.py +0 -0
  238. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/context.py +0 -0
  239. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/errors.py +0 -0
  240. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/local_server.py +0 -0
  241. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/login_manager/scopes.py +0 -0
  242. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/__init__.py +0 -0
  243. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/command_state.py +0 -0
  244. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/commands.py +0 -0
  245. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  246. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  247. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/delimited.py +0 -0
  248. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
  249. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
  250. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/location.py +0 -0
  251. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
  252. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
  253. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
  254. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
  255. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  256. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/__init__.py +0 -0
  257. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  258. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
  259. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
  260. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/reflect.py +0 -0
  261. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/__init__.py +0 -0
  262. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/auth.py +0 -0
  263. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/gcs.py +0 -0
  264. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/__init__.py +0 -0
  265. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/activation.py +0 -0
  266. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/client.py +0 -0
  267. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  268. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/context.py +0 -0
  269. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/errors.py +0 -0
  270. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  271. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/base.py +0 -0
  272. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  273. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  274. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/termio/server_timing.py +0 -0
  275. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/types.py +0 -0
  276. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli/utils.py +0 -0
  277. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
  278. {globus_cli-3.32.0 → globus_cli-3.33.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
  279. {globus_cli-3.32.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.32.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.46.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==1.0.0; 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.46.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==1.0.0;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__"
@@ -90,5 +112,5 @@ disallow_untyped_defs = false
90
112
  disallow_incomplete_defs = false
91
113
  module = [
92
114
  "globus_cli.services.transfer.recursive_ls",
93
- "globus_cli.termio.awscli_text",
115
+ "globus_cli.termio.printers.unix_printer.awscli_text",
94
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:
@@ -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
@@ -106,7 +105,7 @@ def check_inactive_reason(
106
105
 
107
106
 
108
107
  def _get_inactive_reason(
109
- run_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse
108
+ run_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse,
110
109
  ) -> GARE | None:
111
110
  from globus_sdk.gare import to_gare
112
111
 
@@ -124,6 +123,6 @@ def _has_required_consent(
124
123
  login_manager: LoginManager, required_scopes: list[str]
125
124
  ) -> bool:
126
125
  auth_client = login_manager.get_auth_client()
127
- user_identity_id = get_current_identity_id()
126
+ user_identity_id = login_manager.get_current_identity_id()
128
127
  consents = auth_client.get_consents(user_identity_id).to_forest()
129
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
 
@@ -57,15 +57,12 @@ Clients are always "logged in"
57
57
  class GCSEndpointType(click.ParamType):
58
58
  name = "GCS Server"
59
59
 
60
- def get_type_annotation(self, _: click.Parameter) -> type:
61
- return t.cast(type, t.Union[uuid.UUID, tuple[uuid.UUID, uuid.UUID]])
62
-
63
60
  def get_metavar(self, _: t.Optional[click.Parameter]) -> str:
64
61
  return "<endpoint_id>[:<collection_id>]"
65
62
 
66
63
  def convert(
67
64
  self, value: t.Any, param: Parameter | None, ctx: Context | None
68
- ) -> t.Any:
65
+ ) -> uuid.UUID | tuple[uuid.UUID, uuid.UUID]:
69
66
  if isinstance(value, uuid.UUID):
70
67
  return value
71
68
  elif isinstance(value, tuple) and len(value) == 2:
@@ -1,14 +1,7 @@
1
1
  import click
2
2
  import globus_sdk
3
3
 
4
- from globus_cli.login_manager import (
5
- LoginManager,
6
- delete_templated_client,
7
- internal_native_client,
8
- is_client_login,
9
- remove_well_known_config,
10
- token_storage_adapter,
11
- )
4
+ from globus_cli.login_manager import LoginManager, is_client_login
12
5
  from globus_cli.parsing import command
13
6
 
14
7
 
@@ -105,7 +98,7 @@ def logout_command(
105
98
  # Always skip for client logins, which don't use a templated client
106
99
  if delete_client and not is_client_login():
107
100
  try:
108
- delete_templated_client()
101
+ login_manager.storage.delete_templated_client()
109
102
  except globus_sdk.AuthAPIError:
110
103
  if not ignore_errors:
111
104
  warnecho(
@@ -121,10 +114,9 @@ def logout_command(
121
114
 
122
115
  # Attempt to revoke all tokens in storage; use the internal native client to ensure
123
116
  # we have a valid Auth client
124
- native_client = internal_native_client()
125
- adapter = token_storage_adapter()
117
+ native_client = login_manager.storage.cli_native_client
126
118
 
127
- for rs, tokendata in adapter.get_by_resource_server().items():
119
+ for rs, tokendata in login_manager.storage.adapter.get_by_resource_server().items():
128
120
  for tok_key in ("access_token", "refresh_token"):
129
121
  token = tokendata[tok_key]
130
122
 
@@ -145,9 +137,9 @@ def logout_command(
145
137
  "Continuing... (--ignore-errors)",
146
138
  )
147
139
 
148
- adapter.remove_tokens_for_resource_server(rs)
140
+ login_manager.storage.adapter.remove_tokens_for_resource_server(rs)
149
141
 
150
- remove_well_known_config("auth_user_data")
142
+ login_manager.storage.remove_well_known_config("auth_user_data")
151
143
 
152
144
  if is_client_login():
153
145
  click.echo(_CLIENT_LOGOUT_EPILOG)