globus-cli 3.36.0__tar.gz → 3.37.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 (278) hide show
  1. {globus_cli-3.36.0/src/globus_cli.egg-info → globus_cli-3.37.0}/PKG-INFO +3 -3
  2. {globus_cli-3.36.0 → globus_cli-3.37.0}/pyproject.toml +3 -4
  3. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/role/__init__.py +1 -0
  4. globus_cli-3.37.0/src/globus_cli/commands/collection/role/delete.py +23 -0
  5. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/delete.py +0 -1
  6. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/rm.py +0 -1
  7. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/transfer.py +0 -1
  8. globus_cli-3.37.0/src/globus_cli/termio/printers/unix_printer/_formatter.py +221 -0
  9. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/unix_printer/unix_printer.py +7 -4
  10. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/version.py +1 -1
  11. {globus_cli-3.36.0 → globus_cli-3.37.0/src/globus_cli.egg-info}/PKG-INFO +3 -3
  12. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/SOURCES.txt +2 -1
  13. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/requires.txt +2 -2
  14. globus_cli-3.36.0/src/globus_cli/termio/printers/unix_printer/awscli_text.py +0 -127
  15. {globus_cli-3.36.0 → globus_cli-3.37.0}/LICENSE +0 -0
  16. {globus_cli-3.36.0 → globus_cli-3.37.0}/README.rst +0 -0
  17. {globus_cli-3.36.0 → globus_cli-3.37.0}/setup.cfg +0 -0
  18. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/__init__.py +0 -0
  19. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/__main__.py +0 -0
  20. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/_click_compat.py +0 -0
  21. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/_warnings.py +0 -0
  22. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/__init__.py +0 -0
  23. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/_common.py +0 -0
  24. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/_removal_stub.py +0 -0
  25. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/api.py +0 -0
  26. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/__init__.py +0 -0
  27. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/_common.py +0 -0
  28. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/create.py +0 -0
  29. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/delete.py +0 -0
  30. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/list.py +0 -0
  31. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/rename.py +0 -0
  32. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/bookmark/show.py +0 -0
  33. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/cli_profile_list.py +0 -0
  34. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/__init__.py +0 -0
  35. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/_common.py +0 -0
  36. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/__init__.py +0 -0
  37. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/guest.py +0 -0
  38. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/create/mapped.py +0 -0
  39. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/delete.py +0 -0
  40. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/list.py +0 -0
  41. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/role/list.py +0 -0
  42. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/role/show.py +0 -0
  43. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/show.py +0 -0
  44. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/collection/update.py +0 -0
  45. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/__init__.py +0 -0
  46. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/_common.py +0 -0
  47. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/delete.py +0 -0
  48. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/local_id.py +0 -0
  49. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/my_shared_endpoint_list.py +0 -0
  50. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/__init__.py +0 -0
  51. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/_common.py +0 -0
  52. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/create.py +0 -0
  53. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/delete.py +0 -0
  54. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/list.py +0 -0
  55. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/show.py +0 -0
  56. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/permission/update.py +0 -0
  57. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/__init__.py +0 -0
  58. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/_common.py +0 -0
  59. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/create.py +0 -0
  60. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/delete.py +0 -0
  61. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/list.py +0 -0
  62. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/role/show.py +0 -0
  63. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/search.py +0 -0
  64. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/set_subscription_id.py +0 -0
  65. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/show.py +0 -0
  66. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/storage_gateway/__init__.py +0 -0
  67. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/storage_gateway/list.py +0 -0
  68. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/update.py +0 -0
  69. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/__init__.py +0 -0
  70. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/_common.py +0 -0
  71. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/__init__.py +0 -0
  72. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/from_json.py +0 -0
  73. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/posix.py +0 -0
  74. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/create/s3.py +0 -0
  75. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/delete.py +0 -0
  76. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/list.py +0 -0
  77. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/show.py +0 -0
  78. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/update/__init__.py +0 -0
  79. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/endpoint/user_credential/update/from_json.py +0 -0
  80. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/__init__.py +0 -0
  81. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/_common.py +0 -0
  82. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/create.py +0 -0
  83. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/delete.py +0 -0
  84. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/list.py +0 -0
  85. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/__init__.py +0 -0
  86. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/cancel.py +0 -0
  87. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/delete.py +0 -0
  88. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/list.py +0 -0
  89. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/resume.py +0 -0
  90. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/show.py +0 -0
  91. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/show_definition.py +0 -0
  92. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/show_logs.py +0 -0
  93. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/run/update.py +0 -0
  94. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/show.py +0 -0
  95. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/start.py +0 -0
  96. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/update.py +0 -0
  97. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/flows/validate.py +0 -0
  98. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/__init__.py +0 -0
  99. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/__init__.py +0 -0
  100. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/_common.py +0 -0
  101. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/guest.py +0 -0
  102. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/create/mapped.py +0 -0
  103. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/set_subscription_admin_verified.py +0 -0
  104. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/set_subscription_id.py +0 -0
  105. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/update/__init__.py +0 -0
  106. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/update/guest.py +0 -0
  107. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcp/update/mapped.py +0 -0
  108. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/__init__.py +0 -0
  109. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/__init__.py +0 -0
  110. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/_common.py +0 -0
  111. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/__init__.py +0 -0
  112. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/_common.py +0 -0
  113. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/create.py +0 -0
  114. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/delete.py +0 -0
  115. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/list.py +0 -0
  116. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/role/show.py +0 -0
  117. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/set_subscription_id.py +0 -0
  118. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/show.py +0 -0
  119. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/gcs/endpoint/update.py +0 -0
  120. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/get_identities.py +0 -0
  121. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/__init__.py +0 -0
  122. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/_common.py +0 -0
  123. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/create.py +0 -0
  124. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/delete.py +0 -0
  125. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/get_by_subscription.py +0 -0
  126. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/get_subscription_info.py +0 -0
  127. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/__init__.py +0 -0
  128. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/_common.py +0 -0
  129. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/accept.py +0 -0
  130. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/invite/decline.py +0 -0
  131. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/join.py +0 -0
  132. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/leave.py +0 -0
  133. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/list.py +0 -0
  134. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/__init__.py +0 -0
  135. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/add.py +0 -0
  136. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/approve.py +0 -0
  137. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/invite.py +0 -0
  138. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/list.py +0 -0
  139. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/reject.py +0 -0
  140. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/member/remove.py +0 -0
  141. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/set_policies.py +0 -0
  142. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/show.py +0 -0
  143. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/group/update.py +0 -0
  144. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/list_commands.py +0 -0
  145. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/login.py +0 -0
  146. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/logout.py +0 -0
  147. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/ls.py +0 -0
  148. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/mkdir.py +0 -0
  149. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/rename.py +0 -0
  150. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/__init__.py +0 -0
  151. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/_common.py +0 -0
  152. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/delete_by_query.py +0 -0
  153. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/__init__.py +0 -0
  154. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/create.py +0 -0
  155. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/delete.py +0 -0
  156. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/list.py +0 -0
  157. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/__init__.py +0 -0
  158. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/create.py +0 -0
  159. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/delete.py +0 -0
  160. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/role/list.py +0 -0
  161. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/index/show.py +0 -0
  162. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/ingest.py +0 -0
  163. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/query.py +0 -0
  164. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/subject/__init__.py +0 -0
  165. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/subject/delete.py +0 -0
  166. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/subject/show.py +0 -0
  167. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/task/__init__.py +0 -0
  168. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/task/list.py +0 -0
  169. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/search/task/show.py +0 -0
  170. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/__init__.py +0 -0
  171. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/consent.py +0 -0
  172. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/show.py +0 -0
  173. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/session/update.py +0 -0
  174. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/stat.py +0 -0
  175. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/__init__.py +0 -0
  176. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/_common.py +0 -0
  177. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/cancel.py +0 -0
  178. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/event_list.py +0 -0
  179. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/generate_submission_id.py +0 -0
  180. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/list.py +0 -0
  181. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/pause_info.py +0 -0
  182. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/show.py +0 -0
  183. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/update.py +0 -0
  184. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/task/wait.py +0 -0
  185. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/__init__.py +0 -0
  186. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/_common.py +0 -0
  187. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/create/__init__.py +0 -0
  188. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/create/transfer.py +0 -0
  189. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/delete.py +0 -0
  190. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/list.py +0 -0
  191. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/pause.py +0 -0
  192. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/resume.py +0 -0
  193. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/timer/show.py +0 -0
  194. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/update.py +0 -0
  195. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/version.py +0 -0
  196. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/commands/whoami.py +0 -0
  197. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/constants.py +0 -0
  198. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/__init__.py +0 -0
  199. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/endpointish.py +0 -0
  200. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/entity_type.py +0 -0
  201. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/endpointish/errors.py +0 -0
  202. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/__init__.py +0 -0
  203. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/__init__.py +0 -0
  204. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/auth_requirements.py +0 -0
  205. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/authapi_hooks.py +0 -0
  206. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/endpoint_types.py +0 -0
  207. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/flows_hooks.py +0 -0
  208. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/generic_hooks.py +0 -0
  209. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/search_hooks.py +0 -0
  210. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/hooks/transfer_hooks.py +0 -0
  211. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/messages.py +0 -0
  212. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/exception_handling/registry.py +0 -0
  213. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/globus_cli_flake8.py +0 -0
  214. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/__init__.py +0 -0
  215. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/_old_config.py +0 -0
  216. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/auth_flows.py +0 -0
  217. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/client_login.py +0 -0
  218. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/context.py +0 -0
  219. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/errors.py +0 -0
  220. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/local_server.py +0 -0
  221. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/manager.py +0 -0
  222. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/scopes.py +0 -0
  223. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/storage.py +0 -0
  224. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/login_manager/utils.py +0 -0
  225. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/__init__.py +0 -0
  226. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/command_state.py +0 -0
  227. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/commands.py +0 -0
  228. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/mutex_group.py +0 -0
  229. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_classes.py +0 -0
  230. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/__init__.py +0 -0
  231. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/delimited.py +0 -0
  232. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/endpoint_plus_path.py +0 -0
  233. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/guest_activity_notify_param.py +0 -0
  234. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/identity_type.py +0 -0
  235. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/json_strorfile.py +0 -0
  236. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/location.py +0 -0
  237. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/notify_param.py +0 -0
  238. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/nullable.py +0 -0
  239. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/task_path.py +0 -0
  240. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/param_types/timedelta.py +0 -0
  241. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_callbacks.py +0 -0
  242. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/__init__.py +0 -0
  243. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/endpointish.py +0 -0
  244. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/id_args.py +0 -0
  245. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shared_options/transfer_task_options.py +0 -0
  246. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/parsing/shell_completion.py +0 -0
  247. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/reflect.py +0 -0
  248. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/__init__.py +0 -0
  249. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/auth.py +0 -0
  250. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/gcs.py +0 -0
  251. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/__init__.py +0 -0
  252. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/activation.py +0 -0
  253. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/client.py +0 -0
  254. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/data.py +0 -0
  255. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/services/transfer/recursive_ls.py +0 -0
  256. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/__init__.py +0 -0
  257. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/_display.py +0 -0
  258. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/context.py +0 -0
  259. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/errors.py +0 -0
  260. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/field.py +0 -0
  261. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/__init__.py +0 -0
  262. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/auth.py +0 -0
  263. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/base.py +0 -0
  264. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/compound.py +0 -0
  265. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/formatters/primitive.py +0 -0
  266. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/__init__.py +0 -0
  267. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/base.py +0 -0
  268. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/custom_printer.py +0 -0
  269. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/json_printer.py +0 -0
  270. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/record_printer.py +0 -0
  271. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/table_printer.py +0 -0
  272. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/printers/unix_printer/__init__.py +0 -0
  273. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/termio/server_timing.py +0 -0
  274. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/types.py +0 -0
  275. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli/utils.py +0 -0
  276. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/dependency_links.txt +0 -0
  277. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/entry_points.txt +0 -0
  278. {globus_cli-3.36.0 → globus_cli-3.37.0}/src/globus_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: globus-cli
3
- Version: 3.36.0
3
+ Version: 3.37.0
4
4
  Summary: Globus CLI
5
5
  Author-email: Stephen Rosen <sirosen@globus.org>
6
6
  License-Expression: Apache-2.0
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Python: >=3.9
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
- Requires-Dist: globus-sdk==3.62.0
22
- Requires-Dist: click<9,>=8.1.4
21
+ Requires-Dist: globus-sdk==3.63.0
22
+ Requires-Dist: click<8.3,>=8.1.4
23
23
  Requires-Dist: jmespath==1.0.1
24
24
  Requires-Dist: packaging>=17.0
25
25
  Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
@@ -28,8 +28,8 @@ classifiers = [
28
28
  ]
29
29
  requires-python = ">=3.9"
30
30
  dependencies = [
31
- "globus-sdk==3.62.0",
32
- "click>=8.1.4,<9",
31
+ "globus-sdk==3.63.0",
32
+ "click>=8.1.4,<8.3",
33
33
  "jmespath==1.0.1",
34
34
  "packaging>=17.0",
35
35
  "typing_extensions>=4.0;python_version<'3.11'",
@@ -69,7 +69,7 @@ test-mindeps = [
69
69
  "typing_extensions==4.0",
70
70
  ]
71
71
  typing = [
72
- "mypy==1.17.1",
72
+ "mypy==1.18.1",
73
73
  "types-jwt",
74
74
  "types-requests",
75
75
  "types-jmespath",
@@ -151,5 +151,4 @@ disallow_untyped_defs = false
151
151
  disallow_incomplete_defs = false
152
152
  module = [
153
153
  "globus_cli.services.transfer.recursive_ls",
154
- "globus_cli.termio.printers.unix_printer.awscli_text",
155
154
  ]
@@ -6,6 +6,7 @@ from globus_cli.parsing import group
6
6
  lazy_subcommands={
7
7
  "list": (".list", "list_command"),
8
8
  "show": (".show", "show_command"),
9
+ "delete": (".delete", "delete_command"),
9
10
  },
10
11
  )
11
12
  def role_command() -> None:
@@ -0,0 +1,23 @@
1
+ import uuid
2
+
3
+ import click
4
+
5
+ from globus_cli.login_manager import LoginManager
6
+ from globus_cli.parsing import collection_id_arg, command
7
+ from globus_cli.termio import display
8
+
9
+
10
+ @command("delete")
11
+ @collection_id_arg
12
+ @click.argument("ROLE_ID", type=click.UUID)
13
+ @LoginManager.requires_login("transfer")
14
+ def delete_command(
15
+ login_manager: LoginManager,
16
+ *,
17
+ collection_id: uuid.UUID,
18
+ role_id: uuid.UUID,
19
+ ) -> None:
20
+ """Delete a particular role on a Collection."""
21
+ gcs_client = login_manager.get_gcs_client(collection_id=collection_id)
22
+ res = gcs_client.delete_role(role_id)
23
+ display(res, text_mode=display.RAW, response_key="code")
@@ -131,7 +131,6 @@ def delete_command(
131
131
  local_user=local_user,
132
132
  additional_fields={
133
133
  "ignore_missing": ignore_missing,
134
- "skip_activation_check": skip_activation_check,
135
134
  "interpret_globs": enable_globs,
136
135
  **notify,
137
136
  },
@@ -88,7 +88,6 @@ def rm_command(
88
88
  local_user=local_user,
89
89
  additional_fields={
90
90
  "ignore_missing": ignore_missing,
91
- "skip_activation_check": skip_activation_check,
92
91
  "interpret_globs": enable_globs,
93
92
  **notify,
94
93
  },
@@ -392,7 +392,6 @@ def transfer_command(
392
392
  deadline=deadline,
393
393
  skip_source_errors=skip_source_errors,
394
394
  fail_on_quota_errors=fail_on_quota_errors,
395
- skip_activation_check=skip_activation_check,
396
395
  delete_destination_extra=(delete or delete_destination_extra),
397
396
  source_local_user=source_local_user,
398
397
  destination_local_user=destination_local_user,
@@ -0,0 +1,221 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+ import typing as t
5
+ from itertools import chain
6
+
7
+ if sys.version_info >= (3, 10):
8
+ from typing import TypeAlias
9
+ else:
10
+ from typing_extensions import TypeAlias
11
+
12
+
13
+ Scalar: TypeAlias = "str | int | float | bool | None"
14
+ NonScalar: TypeAlias = "list[Scalar | NonScalar] | dict[str, Scalar | NonScalar]"
15
+
16
+
17
+ class UnixFormattingError(ValueError):
18
+ """Class of errors indicating that the data could not be formatted."""
19
+
20
+
21
+ def emit_any_value(item: Scalar | NonScalar) -> t.Iterator[str]:
22
+ """
23
+ Emission of values is defined as yielding back each line of output.
24
+
25
+ Lists and dicts are handled specially. Any scalar value is just passed to Python
26
+ ``str()``. Note that this means that null becomes "None" in our output.
27
+ """
28
+ if isinstance(item, list):
29
+ yield from emit_list(item)
30
+ elif isinstance(item, dict):
31
+ yield from emit_dict(item)
32
+ else:
33
+ yield str(item)
34
+
35
+
36
+ def emit_list(
37
+ elements: list[Scalar | NonScalar],
38
+ identifier: str | None = None,
39
+ ) -> t.Iterator[str]:
40
+ """
41
+ Given a list, and optionally some identifier used to tag the output, emit lines of
42
+ output.
43
+
44
+ Supports:
45
+ list[dict] , list[scalar] , and list[list | scalar]
46
+
47
+ If the input mixes dicts and non-dict values, this function will raise a ValueError.
48
+ """
49
+ # empty lists disappear in the output
50
+ if not elements:
51
+ return
52
+
53
+ # across these branches, mypy does not correctly narrow the type of `elements`
54
+ # so we need to type-ignore the argument type
55
+ if all(isinstance(item, dict) for item in elements):
56
+ yield from emit_list_of_dicts(
57
+ elements, # type: ignore[arg-type]
58
+ identifier=identifier,
59
+ )
60
+ elif any(isinstance(item, dict) for item in elements):
61
+ raise UnixFormattingError(
62
+ "Formatter cannot handle arrays which mix JSON objects "
63
+ "with other datatypes."
64
+ )
65
+
66
+ elif any(isinstance(item, list) for item in elements):
67
+ yield from emit_list_containing_lists(
68
+ elements, # type: ignore[arg-type]
69
+ identifier=identifier,
70
+ )
71
+ else:
72
+ yield from emit_scalar_list(
73
+ elements, # type: ignore[arg-type]
74
+ identifier=identifier,
75
+ )
76
+
77
+
78
+ def emit_scalar_list(
79
+ elements: list[Scalar], identifier: str | None = None
80
+ ) -> t.Iterator[str]:
81
+ """
82
+ Emit a list of scalars, with or without an identifier.
83
+
84
+ Given an identifier, each element is placed on a separate line of output:
85
+
86
+ >>> emit_scalar_list([1, 2], identifier="FOO")
87
+ FOO\t1
88
+ FOO\t2
89
+
90
+ Without an identifier, all elements are placed on the same line:
91
+
92
+ >>> emit_scalar_list([1, 2], identifier="FOO")
93
+ 1\t2
94
+ """
95
+ if identifier is not None:
96
+ for item in elements:
97
+ yield f"{identifier}\t{item}"
98
+ else:
99
+ yield "\t".join(str(item) for item in elements)
100
+
101
+
102
+ def emit_list_containing_lists(
103
+ elements: list[Scalar | list[Scalar | NonScalar]],
104
+ identifier: str | None = None,
105
+ ) -> t.Iterator[str]:
106
+ """
107
+ Emit a list which contains nested lists, potentially mixed with scalars.
108
+ First, the scalars are split off and emitted, then all of the nested lists are
109
+ emitted in order of appearance.
110
+ """
111
+ scalars: list[Scalar] = []
112
+ nested: list[list[Scalar | NonScalar]] = []
113
+ for item in elements:
114
+ if isinstance(item, list):
115
+ nested.append(item)
116
+ else:
117
+ scalars.append(item)
118
+
119
+ if scalars:
120
+ yield from emit_scalar_list(scalars)
121
+ for nested_list in nested:
122
+ yield from emit_list(nested_list, identifier=identifier)
123
+
124
+
125
+ def emit_list_of_dicts(
126
+ elements: list[dict[str, Scalar | NonScalar]], identifier: str | None = None
127
+ ) -> t.Iterator[str]:
128
+ keys = extract_scalar_keys(elements)
129
+ for item in elements:
130
+ yield from emit_dict(item, identifier=identifier, scalar_keys=keys)
131
+
132
+
133
+ def emit_dict(
134
+ item: dict[str, Scalar | NonScalar],
135
+ identifier: str | None = None,
136
+ scalar_keys: list[str] | None = None,
137
+ ) -> t.Iterator[str]:
138
+ if scalar_keys is None:
139
+ scalar_keys = extract_scalar_keys(item)
140
+ scalars, non_scalars = partition_dict(item, scalar_keys)
141
+
142
+ if scalars:
143
+ if identifier is not None:
144
+ yield identifier
145
+ yield "\t".join(str(s) for s in scalars)
146
+
147
+ for subkey, value in non_scalars:
148
+ if isinstance(value, list):
149
+ yield from emit_list(value, identifier=subkey.upper())
150
+ else:
151
+ yield from emit_dict(value, identifier=subkey.upper())
152
+
153
+
154
+ def partition_dict(
155
+ item: dict[str, Scalar | NonScalar], scalar_keys: list[str]
156
+ ) -> tuple[list[Scalar], list[tuple[str, NonScalar]]]:
157
+ """
158
+ Given a dict and a collection of keys for its scalar parts, split it into two lists
159
+ representing the scalar and non-scalar parts.
160
+ The non-scalar parts retain their keys.
161
+
162
+ This method assumes that the 'scalar_keys' provided are correct to the dict in
163
+ question.
164
+ """
165
+ scalars: list[Scalar] = []
166
+ non_scalars: list[tuple[str, NonScalar]] = []
167
+
168
+ non_scalar_keys = sorted(set(item.keys()) - set(scalar_keys))
169
+
170
+ for key in scalar_keys:
171
+ value = item.get(key)
172
+
173
+ # we are not guaranteed that the scalar keys really map to scalars
174
+ # but if they don't, formatting will break, so error early
175
+ if isinstance(value, (list, dict)):
176
+ raise UnixFormattingError(
177
+ "Error during UNIX formatting of response data. "
178
+ "Lists where key-value mappings are not uniformly scalar or non-scalar "
179
+ "are not supported."
180
+ )
181
+
182
+ scalars.append(str(value))
183
+
184
+ for key in non_scalar_keys:
185
+ value = item[key]
186
+
187
+ # converse of the above: we are not "guaranteed" that the non-scalar keys
188
+ # do not map to scalars on a heterogeneous list[dict] structure
189
+ #
190
+ # in practice, this is not reachable because `extract_scalar_keys()` prefers
191
+ # to categorize data as scalar
192
+ if not isinstance(value, (list, dict)):
193
+ raise UnixFormattingError(
194
+ "Error during UNIX formatting of response data. "
195
+ "Lists where key-value mappings are not uniformly scalar or non-scalar "
196
+ "are not supported."
197
+ )
198
+
199
+ non_scalars.append((key, value))
200
+
201
+ return scalars, non_scalars
202
+
203
+
204
+ def extract_scalar_keys(
205
+ element_or_elements: (
206
+ dict[str, Scalar | NonScalar] | list[dict[str, Scalar | NonScalar]]
207
+ ),
208
+ ) -> list[str]:
209
+ if isinstance(element_or_elements, dict):
210
+ elements: list[dict[str, Scalar | NonScalar]] = [element_or_elements]
211
+ else:
212
+ elements = element_or_elements
213
+
214
+ seen: set[str] = set()
215
+ for key, value in chain(*(item.items() for item in elements)):
216
+ if key in seen:
217
+ continue
218
+ if isinstance(value, (dict, list)):
219
+ continue
220
+ seen.add(key)
221
+ return sorted(seen)
@@ -8,7 +8,7 @@ import globus_sdk
8
8
  from globus_cli.types import JsonValue
9
9
 
10
10
  from ..base import Printer
11
- from .awscli_text import unix_display
11
+ from ._formatter import UnixFormattingError, emit_any_value
12
12
 
13
13
  DataObject = t.Union[JsonValue, globus_sdk.GlobusHTTPResponse]
14
14
 
@@ -25,15 +25,18 @@ class UnixPrinter(Printer[DataObject]):
25
25
  res = UnixPrinter.jmespath_preprocess(data)
26
26
 
27
27
  try:
28
- unix_display(res, stream=stream) # type: ignore[no-untyped-call]
28
+ for line in emit_any_value(res):
29
+ click.echo(line, file=stream)
30
+
29
31
  # Attr errors indicate that we got data which cannot be unix formatted
30
32
  # likely a scalar + non-scalar in an array, though there may be other cases
31
33
  # print good error and exit(2) (Count this as UsageError!)
32
- except AttributeError:
34
+ except UnixFormattingError as err:
33
35
  click.echo(
34
36
  "UNIX formatting of output failed."
37
+ f"\n{err}"
35
38
  "\n "
36
- "This usually means that data has a structure which cannot be "
39
+ "This means that data has a structure which cannot be "
37
40
  "handled by the UNIX formatter."
38
41
  "\n "
39
42
  "To avoid this error in the future, ensure that you query the "
@@ -7,7 +7,7 @@ if t.TYPE_CHECKING:
7
7
 
8
8
  # single source of truth for package version,
9
9
  # see https://packaging.python.org/en/latest/single_source_version/
10
- __version__ = "3.36.0"
10
+ __version__ = "3.37.0"
11
11
 
12
12
  # app name to send as part of SDK requests
13
13
  app_name = f"Globus CLI v{__version__}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: globus-cli
3
- Version: 3.36.0
3
+ Version: 3.37.0
4
4
  Summary: Globus CLI
5
5
  Author-email: Stephen Rosen <sirosen@globus.org>
6
6
  License-Expression: Apache-2.0
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Python: >=3.9
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
- Requires-Dist: globus-sdk==3.62.0
22
- Requires-Dist: click<9,>=8.1.4
21
+ Requires-Dist: globus-sdk==3.63.0
22
+ Requires-Dist: click<8.3,>=8.1.4
23
23
  Requires-Dist: jmespath==1.0.1
24
24
  Requires-Dist: packaging>=17.0
25
25
  Requires-Dist: typing_extensions>=4.0; python_version < "3.11"
@@ -53,6 +53,7 @@ src/globus_cli/commands/collection/create/__init__.py
53
53
  src/globus_cli/commands/collection/create/guest.py
54
54
  src/globus_cli/commands/collection/create/mapped.py
55
55
  src/globus_cli/commands/collection/role/__init__.py
56
+ src/globus_cli/commands/collection/role/delete.py
56
57
  src/globus_cli/commands/collection/role/list.py
57
58
  src/globus_cli/commands/collection/role/show.py
58
59
  src/globus_cli/commands/endpoint/__init__.py
@@ -270,5 +271,5 @@ src/globus_cli/termio/printers/json_printer.py
270
271
  src/globus_cli/termio/printers/record_printer.py
271
272
  src/globus_cli/termio/printers/table_printer.py
272
273
  src/globus_cli/termio/printers/unix_printer/__init__.py
273
- src/globus_cli/termio/printers/unix_printer/awscli_text.py
274
+ src/globus_cli/termio/printers/unix_printer/_formatter.py
274
275
  src/globus_cli/termio/printers/unix_printer/unix_printer.py
@@ -1,5 +1,5 @@
1
- globus-sdk==3.62.0
2
- click<9,>=8.1.4
1
+ globus-sdk==3.63.0
2
+ click<8.3,>=8.1.4
3
3
  jmespath==1.0.1
4
4
  packaging>=17.0
5
5
  requests<3.0.0,>=2.32.3
@@ -1,127 +0,0 @@
1
- # pulled from the AWSCLI and modified by Globus
2
- # note that this file has also been modified by auotfixers (e.g. black, pyupgrade)
3
-
4
- # Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License"). You
7
- # may not use this file except in compliance with the License. A copy of
8
- # the License is located at
9
- #
10
- # http://aws.amazon.com/apache2.0/
11
- #
12
- # or in the "license" file accompanying this file. This file is
13
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
14
- # ANY KIND, either express or implied. See the License for the specific
15
- # language governing permissions and limitations under the License.
16
-
17
- import errno
18
- import sys
19
-
20
-
21
- def _format_text(item, stream, identifier=None, scalar_keys=None):
22
- if isinstance(item, dict):
23
- _format_dict(scalar_keys, item, identifier, stream)
24
- elif isinstance(item, list):
25
- _format_list(item, identifier, stream)
26
- else:
27
- # If it's not a list or a dict, we just write the scalar
28
- # value out directly.
29
- stream.write(str(item))
30
- stream.write("\n")
31
-
32
-
33
- def _format_list(item, identifier, stream):
34
- if not item:
35
- return
36
- if any(isinstance(el, dict) for el in item):
37
- all_keys = _all_scalar_keys(item)
38
- for element in item:
39
- _format_text(
40
- element, stream=stream, identifier=identifier, scalar_keys=all_keys
41
- )
42
- elif any(isinstance(el, list) for el in item):
43
- scalar_elements, non_scalars = _partition_list(item)
44
- if scalar_elements:
45
- _format_scalar_list(scalar_elements, identifier, stream)
46
- for non_scalar in non_scalars:
47
- _format_text(non_scalar, stream=stream, identifier=identifier)
48
- else:
49
- _format_scalar_list(item, identifier, stream)
50
-
51
-
52
- def _partition_list(item):
53
- scalars = []
54
- non_scalars = []
55
- for element in item:
56
- if isinstance(element, (list, dict)):
57
- non_scalars.append(element)
58
- else:
59
- scalars.append(element)
60
- return scalars, non_scalars
61
-
62
-
63
- def _format_scalar_list(elements, identifier, stream):
64
- if identifier is not None:
65
- for item in elements:
66
- stream.write(f"{identifier.upper()}\t{item}\n")
67
- else:
68
- # For a bare list, just print the contents.
69
- stream.write("\t".join([str(item) for item in elements]))
70
- stream.write("\n")
71
-
72
-
73
- def _format_dict(scalar_keys, item, identifier, stream):
74
- scalars, non_scalars = _partition_dict(item, scalar_keys=scalar_keys)
75
- if scalars:
76
- if identifier is not None:
77
- scalars.insert(0, identifier.upper())
78
- stream.write("\t".join(scalars))
79
- stream.write("\n")
80
- for new_identifier, non_scalar in non_scalars:
81
- _format_text(item=non_scalar, stream=stream, identifier=new_identifier)
82
-
83
-
84
- def _all_scalar_keys(list_of_dicts):
85
- keys_seen = set()
86
- for item_dict in list_of_dicts:
87
- for key, value in item_dict.items():
88
- if not isinstance(value, (dict, list)):
89
- keys_seen.add(key)
90
- return sorted(keys_seen)
91
-
92
-
93
- def _partition_dict(item_dict, scalar_keys):
94
- # Given a dictionary, partition it into two list based on the
95
- # values associated with the keys.
96
- # {'foo': 'scalar', 'bar': 'scalar', 'baz': ['not, 'scalar']}
97
- # scalar = [('foo', 'scalar'), ('bar', 'scalar')]
98
- # non_scalar = [('baz', ['not', 'scalar'])]
99
- scalar = []
100
- non_scalar = []
101
- if scalar_keys is None:
102
- # scalar_keys can have more than just the keys in the item_dict,
103
- # but if user does not provide scalar_keys, we'll grab the keys
104
- # from the current item_dict
105
- for key, value in sorted(item_dict.items()):
106
- if isinstance(value, (dict, list)):
107
- non_scalar.append((key, value))
108
- else:
109
- scalar.append(str(value))
110
- else:
111
- for key in scalar_keys:
112
- scalar.append(str(item_dict.get(key, "")))
113
- remaining_keys = sorted(set(item_dict.keys()) - set(scalar_keys))
114
- for remaining_key in remaining_keys:
115
- non_scalar.append((remaining_key, item_dict[remaining_key]))
116
- return scalar, non_scalar
117
-
118
-
119
- def unix_display(data, stream):
120
- _format_text(data, stream or sys.stdout)
121
- try:
122
- sys.stdout.flush()
123
- except OSError as err:
124
- if err.errno is errno.EPIPE:
125
- pass
126
- else:
127
- raise
File without changes
File without changes
File without changes