cloudsmith-cli 1.28.0__tar.gz → 1.29.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/PKG-INFO +37 -8
  2. cloudsmith_cli-1.28.0/cloudsmith_cli.egg-info/PKG-INFO → cloudsmith_cli-1.29.0/README.md +29 -55
  3. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/check.py +1 -3
  4. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/list_.py +25 -2
  5. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metadata.py +9 -3
  6. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/push.py +7 -4
  7. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/repos.py +5 -7
  8. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/validators.py +2 -2
  9. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/metadata.py +37 -93
  10. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/packages.py +2 -0
  11. cloudsmith_cli-1.29.0/cloudsmith_cli/core/api/v2.py +96 -0
  12. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/__init__.py +4 -0
  13. cloudsmith_cli-1.29.0/cloudsmith_cli/core/credentials/oidc/detectors/buildkite.py +54 -0
  14. cloudsmith_cli-1.29.0/cloudsmith_cli/core/credentials/oidc/detectors/gcp.py +193 -0
  15. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/keyring.py +4 -6
  16. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/ratelimits.py +1 -1
  17. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/session.py +10 -1
  18. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/sso.py +3 -3
  19. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/rc.py +1 -2
  20. cloudsmith_cli-1.29.0/cloudsmith_cli/data/VERSION +1 -0
  21. cloudsmith_cli-1.28.0/README.md → cloudsmith_cli-1.29.0/cloudsmith_cli.egg-info/PKG-INFO +84 -2
  22. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/SOURCES.txt +3 -0
  23. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/requires.txt +7 -3
  24. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/pyproject.toml +8 -7
  25. cloudsmith_cli-1.28.0/cloudsmith_cli/data/VERSION +0 -1
  26. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/LICENSE +0 -0
  27. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/MANIFEST.in +0 -0
  28. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/__init__.py +0 -0
  29. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/__main__.py +0 -0
  30. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/__init__.py +0 -0
  31. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/command.py +0 -0
  32. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/__init__.py +0 -0
  33. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/auth.py +0 -0
  34. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/copy.py +0 -0
  35. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/__init__.py +0 -0
  36. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/cargo.py +0 -0
  37. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/docker.py +0 -0
  38. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/generic.py +0 -0
  39. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/manage.py +0 -0
  40. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/pnpm.py +0 -0
  41. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/credential_helper/terraform.py +0 -0
  42. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/delete.py +0 -0
  43. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/dependencies.py +0 -0
  44. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/docs.py +0 -0
  45. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/domains.py +0 -0
  46. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/download.py +0 -0
  47. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/entitlements.py +0 -0
  48. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/help_.py +0 -0
  49. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/login.py +0 -0
  50. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/logout.py +0 -0
  51. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/main.py +0 -0
  52. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/mcp.py +0 -0
  53. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/__init__.py +0 -0
  54. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/command.py +0 -0
  55. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/entitlements.py +0 -0
  56. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/metrics/packages.py +0 -0
  57. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/move.py +0 -0
  58. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/__init__.py +0 -0
  59. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/command.py +0 -0
  60. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/deny.py +0 -0
  61. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/license.py +0 -0
  62. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/policy/vulnerability.py +0 -0
  63. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quarantine.py +0 -0
  64. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/__init__.py +0 -0
  65. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/command.py +0 -0
  66. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/history.py +0 -0
  67. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/quota/quota.py +0 -0
  68. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/registry.py +0 -0
  69. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/resync.py +0 -0
  70. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/status.py +0 -0
  71. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/tags.py +0 -0
  72. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/tokens.py +0 -0
  73. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/update.py +0 -0
  74. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/upstream.py +0 -0
  75. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/vulnerabilities.py +0 -0
  76. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/commands/whoami.py +0 -0
  77. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/config.py +0 -0
  78. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/decorators.py +0 -0
  79. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/dsc_parser.py +0 -0
  80. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/exceptions.py +0 -0
  81. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/metadata_common.py +0 -0
  82. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/saml.py +0 -0
  83. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/table.py +0 -0
  84. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/types.py +0 -0
  85. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/utils.py +0 -0
  86. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/cli/webserver.py +0 -0
  87. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/conftest.py +0 -0
  88. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/__init__.py +0 -0
  89. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/__init__.py +0 -0
  90. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/distros.py +0 -0
  91. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/entitlements.py +0 -0
  92. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/exceptions.py +0 -0
  93. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/files.py +0 -0
  94. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/init.py +0 -0
  95. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/metrics.py +0 -0
  96. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/orgs.py +0 -0
  97. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/quota.py +0 -0
  98. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/rates.py +0 -0
  99. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/repos.py +0 -0
  100. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/status.py +0 -0
  101. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/upstreams.py +0 -0
  102. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/user.py +0 -0
  103. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/version.py +0 -0
  104. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/api/vulnerabilities.py +0 -0
  105. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/cache_utils.py +0 -0
  106. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/config.py +0 -0
  107. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/__init__.py +0 -0
  108. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/chain.py +0 -0
  109. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/models.py +0 -0
  110. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/__init__.py +0 -0
  111. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/cache.py +0 -0
  112. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/aws.py +0 -0
  113. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/azure_devops.py +0 -0
  114. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/base.py +0 -0
  115. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/bitbucket_pipelines.py +0 -0
  116. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/circleci.py +0 -0
  117. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/generic.py +0 -0
  118. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/github_actions.py +0 -0
  119. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/detectors/gitlab_ci.py +0 -0
  120. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/oidc/exchange.py +0 -0
  121. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/provider.py +0 -0
  122. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/__init__.py +0 -0
  123. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/cli_flag.py +0 -0
  124. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/credentials_file.py +0 -0
  125. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/env_var.py +0 -0
  126. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/keyring_provider.py +0 -0
  127. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/credentials/providers/oidc_provider.py +0 -0
  128. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/download.py +0 -0
  129. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/installation.py +0 -0
  130. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/macos_keychain.py +0 -0
  131. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/mcp/__init__.py +0 -0
  132. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/mcp/data.py +0 -0
  133. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/mcp/server.py +0 -0
  134. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/pagination.py +0 -0
  135. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/rest.py +0 -0
  136. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/self_update.py +0 -0
  137. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/update_check.py +0 -0
  138. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/utils.py +0 -0
  139. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/core/version.py +0 -0
  140. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/__init__.py +0 -0
  141. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/backends.py +0 -0
  142. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/cargo/__init__.py +0 -0
  143. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/cargo/installer.py +0 -0
  144. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/cargo/runtime.py +0 -0
  145. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/common.py +0 -0
  146. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/custom_domains.py +0 -0
  147. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/default_domains.py +0 -0
  148. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/docker/__init__.py +0 -0
  149. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/docker/installer.py +0 -0
  150. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/docker/runtime.py +0 -0
  151. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/generic.py +0 -0
  152. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/launchers.py +0 -0
  153. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/__init__.py +0 -0
  154. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/installer.py +0 -0
  155. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/pnpm/runtime.py +0 -0
  156. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/__init__.py +0 -0
  157. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/installer.py +0 -0
  158. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/runtime.py +0 -0
  159. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/credential_helpers/terraform/terraformrc.py +0 -0
  160. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/data/config.ini +0 -0
  161. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/data/credentials.ini +0 -0
  162. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/__init__.py +0 -0
  163. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/auth_error.html +0 -0
  164. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/auth_success.html +0 -0
  165. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/templates/auth_two_factor.html +0 -0
  166. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli/wrapper.py +0 -0
  167. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/dependency_links.txt +0 -0
  168. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/entry_points.txt +0 -0
  169. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/cloudsmith_cli.egg-info/top_level.txt +0 -0
  170. {cloudsmith_cli-1.28.0 → cloudsmith_cli-1.29.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudsmith-cli
3
- Version: 1.28.0
3
+ Version: 1.29.0
4
4
  Summary: Cloudsmith Command-Line Interface (CLI)
5
5
  Author-email: Cloudsmith Ltd <support@cloudsmith.io>
6
6
  License-Expression: Apache-2.0
@@ -12,7 +12,6 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: Intended Audience :: System Administrators
13
13
  Classifier: Operating System :: POSIX :: Linux
14
14
  Classifier: Programming Language :: Python
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
@@ -20,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.14
20
19
  Classifier: Topic :: Internet
21
20
  Classifier: Topic :: System :: Systems Administration
22
21
  Classifier: Topic :: Utilities
23
- Requires-Python: >=3.10.0
22
+ Requires-Python: >=3.11.0
24
23
  Description-Content-Type: text/markdown
25
24
  License-File: LICENSE
26
25
  Requires-Dist: certifi>=2024.7.4
@@ -29,15 +28,15 @@ Requires-Dist: click-configfile>=0.2.3
29
28
  Requires-Dist: click-didyoumean>=0.0.3
30
29
  Requires-Dist: click-spinner>=0.1.7
31
30
  Requires-Dist: json5>=0.9.0
32
- Requires-Dist: cloudsmith-api<3.0,>=2.0.31
31
+ Requires-Dist: cloudsmith-api<3.0,>=2.0.38
33
32
  Requires-Dist: keyring>=25.4.1
34
33
  Requires-Dist: keyrings-alt>=5.0.2
35
34
  Requires-Dist: keyrings-cryptfile>=1.3.9
36
35
  Requires-Dist: cryptography>=50.0.0
37
- Requires-Dist: mcp==2.2.0
36
+ Requires-Dist: mcp==2.3.0
38
37
  Requires-Dist: pydantic-settings>=2.14.2
39
38
  Requires-Dist: PyJWT[crypto]>=2.13.0
40
- Requires-Dist: python-toon==0.1.3
39
+ Requires-Dist: python-toon==0.2.0
41
40
  Requires-Dist: requests>=2.18.4
42
41
  Requires-Dist: requests_toolbelt>=1.0.0
43
42
  Requires-Dist: rich>=13.0.0
@@ -47,8 +46,11 @@ Requires-Dist: urllib3>=2.5
47
46
  Requires-Dist: tomlkit>=0.15.0
48
47
  Provides-Extra: aws
49
48
  Requires-Dist: boto3[crt]>=1.26.0; extra == "aws"
49
+ Provides-Extra: gcp
50
+ Requires-Dist: google-auth>=2.40.0; extra == "gcp"
50
51
  Provides-Extra: all
51
52
  Requires-Dist: boto3[crt]>=1.26.0; extra == "all"
53
+ Requires-Dist: google-auth>=2.40.0; extra == "all"
52
54
  Dynamic: license-file
53
55
 
54
56
  # Cloudsmith Command Line Interface (CLI)
@@ -232,6 +234,29 @@ pip install cloudsmith-cli[aws]
232
234
 
233
235
  This installs `boto3[crt]` for AWS credential chain support, STS token generation, and AWS SSO compatibility.
234
236
 
237
+ #### GCP OIDC Support
238
+
239
+ For Google Cloud environments (GCE, Cloud Run, GKE, Cloud Functions, App Engine, Cloud Build), install with the `gcp` extra to enable automatic credential discovery:
240
+
241
+ ```
242
+ pip install cloudsmith-cli[gcp]
243
+ ```
244
+
245
+ This installs `google-auth` for Application Default Credentials (ADC) resolution and OIDC ID token generation. It works with an attached Google Cloud service account, a service-account key supplied through `GOOGLE_APPLICATION_CREDENTIALS`, or service-account impersonation configured locally:
246
+
247
+ ```sh
248
+ gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
249
+ cloudsmith whoami --workspace=YOUR_WORKSPACE --oidc-service-slug=YOUR_SERVICE --oidc-detector-order=gcp
250
+ ```
251
+
252
+ Configure a Cloudsmith OIDC provider to trust `https://accounts.google.com`, the service account's numeric unique ID as the subject, and audience `cloudsmith` (override with `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE`). Local impersonation requires the Service Account Token Creator role on the target service account and the IAM Service Account Credentials API enabled.
253
+
254
+ On workloads with a metadata identity endpoint, the CLI requests an ID token directly. If that endpoint returns HTTP 404 (as on some Cloud Build environments), it uses IAM `generateIdToken` for the same attached service account. This fallback requires the IAM Service Account Credentials API and `iam.serviceAccounts.getOpenIdToken` on that account; the Service Account OpenID Connect Identity Token Creator role grants this permission. Permission and transport failures are reported, not treated as a missing endpoint.
255
+
256
+ A plain `gcloud auth application-default login` user session cannot mint an ID token for an arbitrary audience. To use it, set `--oidc-audience` to the session's OAuth client ID and configure Cloudsmith to trust that audience and user subject; otherwise use service-account impersonation. `gcloud auth login` alone does not configure ADC. Other ADC types, including direct external-account federation, are skipped rather than incorrectly treated as ID-token-capable credentials.
257
+
258
+ See Google's [Authenticate with auth libraries](https://docs.cloud.google.com/iam/docs/authenticate-with-auth-libraries#authenticate-standard) guide for credential discovery.
259
+
235
260
  #### All Optional Features
236
261
 
237
262
  To install all optional dependencies:
@@ -240,7 +265,7 @@ To install all optional dependencies:
240
265
  pip install cloudsmith-cli[all]
241
266
  ```
242
267
 
243
- **Note:** If you don't install the AWS extra, the AWS OIDC detector will gracefully skip itself with no errors.
268
+ **Note:** If you don't install the AWS or GCP extra, the corresponding OIDC detector will gracefully skip itself with no errors.
244
269
 
245
270
  #### Bitbucket Pipelines OIDC Support
246
271
 
@@ -261,6 +286,10 @@ See the [Bitbucket Pipelines OIDC documentation](https://support.atlassian.com/b
261
286
 
262
287
  In CircleCI, OIDC credential discovery works out of the box with no extra dependencies — the CLI reads the token from the `CIRCLE_OIDC_TOKEN_V2` (preferred) or `CIRCLE_OIDC_TOKEN` environment variable that CircleCI injects into every job. The Cloudsmith OIDC provider must expect the audience CircleCI mints, which is your CircleCI organization UUID. See the [Cloudsmith CircleCI integration guide](https://docs.cloudsmith.com/integrations/integrating-with-circleci).
263
288
 
289
+ #### Buildkite OIDC Support
290
+
291
+ In Buildkite, OIDC credential discovery works out of the box with no extra dependencies — the CLI requests a token for the current job through `buildkite-agent oidc request-token`. By default it requests the `cloudsmith` audience; use `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE` if your Cloudsmith OIDC provider expects a different audience. See the [Buildkite OIDC documentation](https://buildkite.com/docs/pipelines/security/oidc).
292
+
264
293
  #### Azure DevOps OIDC Support
265
294
 
266
295
  In Azure DevOps Pipelines, OIDC credential discovery works out of the box with no extra dependencies — the CLI fetches an OIDC token from the `SYSTEM_OIDCREQUESTURI` endpoint using the pipeline's `SYSTEM_ACCESSTOKEN`. Make sure `SYSTEM_ACCESSTOKEN` is mapped into the step's environment. The Cloudsmith OIDC provider must expect the audience `api://AzureADTokenExchange`, which Azure DevOps always mints (any requested audience is ignored). See the [Cloudsmith Azure DevOps integration guide](https://docs.cloudsmith.com/integrations/integrating-with-azure-devops).
@@ -295,7 +324,7 @@ By default the CLI tries each detector in a fixed priority order and uses the fi
295
324
  - **Disable a detector** — set `CLOUDSMITH_OIDC_<DETECTOR>_DISABLED=true` to skip it entirely. Only the literal value `true` (case-insensitive) disables; anything else leaves the detector enabled. For example, `CLOUDSMITH_OIDC_AWS_DISABLED=true` skips the AWS detector so an explicitly-set `CLOUDSMITH_OIDC_TOKEN` is picked up by the generic detector instead.
296
325
  - **Reorder evaluation** — use `--oidc-detector-order` (or the `CLOUDSMITH_OIDC_DETECTOR_ORDER` environment variable) with a comma-separated list of detector ids to control both which detectors are considered and the order they are tried in (first match wins). Ids not listed are skipped; unrecognised ids are ignored with a warning. For example, `--oidc-detector-order=generic,aws` tries the generic detector first and considers only those two.
297
326
 
298
- When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `circleci`, `generic`, `github`, `gitlab`.
327
+ When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `buildkite`, `circleci`, `gcp`, `generic`, `github`, `gitlab`.
299
328
 
300
329
  Both controls can also be set in `config.ini`, under `[default]` or a profile section:
301
330
 
@@ -1,56 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: cloudsmith-cli
3
- Version: 1.28.0
4
- Summary: Cloudsmith Command-Line Interface (CLI)
5
- Author-email: Cloudsmith Ltd <support@cloudsmith.io>
6
- License-Expression: Apache-2.0
7
- Project-URL: Homepage, https://github.com/cloudsmith-io/cloudsmith-cli
8
- Keywords: cloudsmith,cli,devops
9
- Classifier: Development Status :: 5 - Production/Stable
10
- Classifier: Environment :: Console
11
- Classifier: Intended Audience :: Developers
12
- Classifier: Intended Audience :: System Administrators
13
- Classifier: Operating System :: POSIX :: Linux
14
- Classifier: Programming Language :: Python
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Programming Language :: Python :: 3.11
17
- Classifier: Programming Language :: Python :: 3.12
18
- Classifier: Programming Language :: Python :: 3.13
19
- Classifier: Programming Language :: Python :: 3.14
20
- Classifier: Topic :: Internet
21
- Classifier: Topic :: System :: Systems Administration
22
- Classifier: Topic :: Utilities
23
- Requires-Python: >=3.10.0
24
- Description-Content-Type: text/markdown
25
- License-File: LICENSE
26
- Requires-Dist: certifi>=2024.7.4
27
- Requires-Dist: click!=8.3.0,>=8.2
28
- Requires-Dist: click-configfile>=0.2.3
29
- Requires-Dist: click-didyoumean>=0.0.3
30
- Requires-Dist: click-spinner>=0.1.7
31
- Requires-Dist: json5>=0.9.0
32
- Requires-Dist: cloudsmith-api<3.0,>=2.0.31
33
- Requires-Dist: keyring>=25.4.1
34
- Requires-Dist: keyrings-alt>=5.0.2
35
- Requires-Dist: keyrings-cryptfile>=1.3.9
36
- Requires-Dist: cryptography>=50.0.0
37
- Requires-Dist: mcp==2.2.0
38
- Requires-Dist: pydantic-settings>=2.14.2
39
- Requires-Dist: PyJWT[crypto]>=2.13.0
40
- Requires-Dist: python-toon==0.1.3
41
- Requires-Dist: requests>=2.18.4
42
- Requires-Dist: requests_toolbelt>=1.0.0
43
- Requires-Dist: rich>=13.0.0
44
- Requires-Dist: semver>=2.7.9
45
- Requires-Dist: starlette>=1.3.1
46
- Requires-Dist: urllib3>=2.5
47
- Requires-Dist: tomlkit>=0.15.0
48
- Provides-Extra: aws
49
- Requires-Dist: boto3[crt]>=1.26.0; extra == "aws"
50
- Provides-Extra: all
51
- Requires-Dist: boto3[crt]>=1.26.0; extra == "all"
52
- Dynamic: license-file
53
-
54
1
  # Cloudsmith Command Line Interface (CLI)
55
2
 
56
3
  [![Latest Version @ Cloudsmith](https://api-prd.cloudsmith.io/badges/version/cloudsmith/cli/python/cloudsmith-cli/latest/xf=bdist_wheel;xn=cloudsmith-cli;xv=py2.py3/?render=true)](https://cloudsmith.io/~cloudsmith/repos/cli/packages/detail/python/cloudsmith-cli/latest/xf=bdist_wheel;xn=cloudsmith-cli;xv=py2.py3/)
@@ -232,6 +179,29 @@ pip install cloudsmith-cli[aws]
232
179
 
233
180
  This installs `boto3[crt]` for AWS credential chain support, STS token generation, and AWS SSO compatibility.
234
181
 
182
+ #### GCP OIDC Support
183
+
184
+ For Google Cloud environments (GCE, Cloud Run, GKE, Cloud Functions, App Engine, Cloud Build), install with the `gcp` extra to enable automatic credential discovery:
185
+
186
+ ```
187
+ pip install cloudsmith-cli[gcp]
188
+ ```
189
+
190
+ This installs `google-auth` for Application Default Credentials (ADC) resolution and OIDC ID token generation. It works with an attached Google Cloud service account, a service-account key supplied through `GOOGLE_APPLICATION_CREDENTIALS`, or service-account impersonation configured locally:
191
+
192
+ ```sh
193
+ gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL
194
+ cloudsmith whoami --workspace=YOUR_WORKSPACE --oidc-service-slug=YOUR_SERVICE --oidc-detector-order=gcp
195
+ ```
196
+
197
+ Configure a Cloudsmith OIDC provider to trust `https://accounts.google.com`, the service account's numeric unique ID as the subject, and audience `cloudsmith` (override with `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE`). Local impersonation requires the Service Account Token Creator role on the target service account and the IAM Service Account Credentials API enabled.
198
+
199
+ On workloads with a metadata identity endpoint, the CLI requests an ID token directly. If that endpoint returns HTTP 404 (as on some Cloud Build environments), it uses IAM `generateIdToken` for the same attached service account. This fallback requires the IAM Service Account Credentials API and `iam.serviceAccounts.getOpenIdToken` on that account; the Service Account OpenID Connect Identity Token Creator role grants this permission. Permission and transport failures are reported, not treated as a missing endpoint.
200
+
201
+ A plain `gcloud auth application-default login` user session cannot mint an ID token for an arbitrary audience. To use it, set `--oidc-audience` to the session's OAuth client ID and configure Cloudsmith to trust that audience and user subject; otherwise use service-account impersonation. `gcloud auth login` alone does not configure ADC. Other ADC types, including direct external-account federation, are skipped rather than incorrectly treated as ID-token-capable credentials.
202
+
203
+ See Google's [Authenticate with auth libraries](https://docs.cloud.google.com/iam/docs/authenticate-with-auth-libraries#authenticate-standard) guide for credential discovery.
204
+
235
205
  #### All Optional Features
236
206
 
237
207
  To install all optional dependencies:
@@ -240,7 +210,7 @@ To install all optional dependencies:
240
210
  pip install cloudsmith-cli[all]
241
211
  ```
242
212
 
243
- **Note:** If you don't install the AWS extra, the AWS OIDC detector will gracefully skip itself with no errors.
213
+ **Note:** If you don't install the AWS or GCP extra, the corresponding OIDC detector will gracefully skip itself with no errors.
244
214
 
245
215
  #### Bitbucket Pipelines OIDC Support
246
216
 
@@ -261,6 +231,10 @@ See the [Bitbucket Pipelines OIDC documentation](https://support.atlassian.com/b
261
231
 
262
232
  In CircleCI, OIDC credential discovery works out of the box with no extra dependencies — the CLI reads the token from the `CIRCLE_OIDC_TOKEN_V2` (preferred) or `CIRCLE_OIDC_TOKEN` environment variable that CircleCI injects into every job. The Cloudsmith OIDC provider must expect the audience CircleCI mints, which is your CircleCI organization UUID. See the [Cloudsmith CircleCI integration guide](https://docs.cloudsmith.com/integrations/integrating-with-circleci).
263
233
 
234
+ #### Buildkite OIDC Support
235
+
236
+ In Buildkite, OIDC credential discovery works out of the box with no extra dependencies — the CLI requests a token for the current job through `buildkite-agent oidc request-token`. By default it requests the `cloudsmith` audience; use `--oidc-audience` or `CLOUDSMITH_OIDC_AUDIENCE` if your Cloudsmith OIDC provider expects a different audience. See the [Buildkite OIDC documentation](https://buildkite.com/docs/pipelines/security/oidc).
237
+
264
238
  #### Azure DevOps OIDC Support
265
239
 
266
240
  In Azure DevOps Pipelines, OIDC credential discovery works out of the box with no extra dependencies — the CLI fetches an OIDC token from the `SYSTEM_OIDCREQUESTURI` endpoint using the pipeline's `SYSTEM_ACCESSTOKEN`. Make sure `SYSTEM_ACCESSTOKEN` is mapped into the step's environment. The Cloudsmith OIDC provider must expect the audience `api://AzureADTokenExchange`, which Azure DevOps always mints (any requested audience is ignored). See the [Cloudsmith Azure DevOps integration guide](https://docs.cloudsmith.com/integrations/integrating-with-azure-devops).
@@ -295,7 +269,7 @@ By default the CLI tries each detector in a fixed priority order and uses the fi
295
269
  - **Disable a detector** — set `CLOUDSMITH_OIDC_<DETECTOR>_DISABLED=true` to skip it entirely. Only the literal value `true` (case-insensitive) disables; anything else leaves the detector enabled. For example, `CLOUDSMITH_OIDC_AWS_DISABLED=true` skips the AWS detector so an explicitly-set `CLOUDSMITH_OIDC_TOKEN` is picked up by the generic detector instead.
296
270
  - **Reorder evaluation** — use `--oidc-detector-order` (or the `CLOUDSMITH_OIDC_DETECTOR_ORDER` environment variable) with a comma-separated list of detector ids to control both which detectors are considered and the order they are tried in (first match wins). Ids not listed are skipped; unrecognised ids are ignored with a warning. For example, `--oidc-detector-order=generic,aws` tries the generic detector first and considers only those two.
297
271
 
298
- When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `circleci`, `generic`, `github`, `gitlab`.
272
+ When both are set, the order list defines the candidate set and sequence, then the `*_DISABLED` flags are applied on top — so a disabled detector is always skipped even if it appears in the order list. Detector ids are: `aws`, `azure_devops`, `bitbucket`, `buildkite`, `circleci`, `gcp`, `generic`, `github`, `gitlab`.
299
273
 
300
274
  Both controls can also be set in `config.ini`, under `[default]` or a profile section:
301
275
 
@@ -127,6 +127,4 @@ def service(ctx, opts):
127
127
  click.secho("(up-to-date)", fg="green")
128
128
 
129
129
  click.echo()
130
- click.secho(
131
- "The API library used by this CLI tool seems to be up-to-date.", fg="green"
132
- )
130
+ click.secho("The API library used by this CLI tool is up-to-date.", fg="green")
@@ -157,8 +157,20 @@ def entitlements_(*args, **kwargs): # pylint: disable=missing-docstring
157
157
  ),
158
158
  help=("Sort packages by field. Prefix with '-' for descending order."),
159
159
  )
160
+ @click.option(
161
+ "--include-connected",
162
+ is_flag=True,
163
+ default=False,
164
+ help=(
165
+ "Include packages from active connected repositories and show the "
166
+ "origin repository of each package. Download URLs (e.g. cdn_url, "
167
+ "signature_url) point at the requesting repository, not the origin."
168
+ ),
169
+ )
160
170
  @click.pass_context
161
- def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
171
+ def packages(
172
+ ctx, opts, owner_repo, page, page_size, query, sort, include_connected, page_all
173
+ ):
162
174
  """
163
175
  List packages for a repository.
164
176
 
@@ -231,6 +243,7 @@ def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
231
243
  repo=repo,
232
244
  query=query,
233
245
  sort=sort,
246
+ include_connected=include_connected,
234
247
  )
235
248
 
236
249
  if not use_stderr:
@@ -240,6 +253,7 @@ def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
240
253
  return
241
254
 
242
255
  headers = ["Name", "Version", "Status", "Owner / Repository (Identifier)"]
256
+ sorted_packages = sorted(packages_, key=itemgetter("namespace", "slug"))
243
257
  rows = [
244
258
  [
245
259
  click.style(_get_package_name(package), fg="cyan"),
@@ -251,8 +265,12 @@ def packages(ctx, opts, owner_repo, page, page_size, query, sort, page_all):
251
265
  slug=click.style(package["slug"], fg="green"),
252
266
  ),
253
267
  ]
254
- for package in sorted(packages_, key=itemgetter("namespace", "slug"))
268
+ for package in sorted_packages
255
269
  ]
270
+ if include_connected:
271
+ headers.append("Origin Repository")
272
+ for row, package in zip(rows, sorted_packages):
273
+ row.append(click.style(_get_origin_repository(package), fg="magenta"))
256
274
 
257
275
  if packages_:
258
276
  click.echo()
@@ -317,3 +335,8 @@ def _get_package_status(package):
317
335
  def _get_package_version(package):
318
336
  """Get the version for a package (if any)."""
319
337
  return package["version"] or "None"
338
+
339
+
340
+ def _get_origin_repository(package):
341
+ """Get the repository that a package physically lives in."""
342
+ return package["origin_repository"] or package["repository"]
@@ -183,7 +183,9 @@ def list_metadata(
183
183
  slug_perm = api_get_package_slug_perm(
184
184
  owner=owner, repo=repo, identifier=package
185
185
  )
186
- entry = api_get_metadata(slug_perm, metadata_slug_perm)
186
+ entry = api_get_metadata(
187
+ slug_perm, metadata_slug_perm, credential=opts.credential
188
+ )
187
189
 
188
190
  click.secho("OK", fg="green", err=use_stderr)
189
191
  _print_metadata_entry(opts, entry)
@@ -208,6 +210,7 @@ def list_metadata(
208
210
  page=page,
209
211
  page_size=page_size,
210
212
  package_slug_perm=slug_perm,
213
+ credential=opts.credential,
211
214
  source_kind=source_kind,
212
215
  classification=classification,
213
216
  )
@@ -328,6 +331,7 @@ def add_metadata(
328
331
  )
329
332
  entry = api_create_metadata(
330
333
  slug_perm,
334
+ credential=opts.credential,
331
335
  content=metadata.content,
332
336
  content_type=metadata.content_type,
333
337
  source_identity=metadata.source_identity,
@@ -434,7 +438,9 @@ def update_metadata(
434
438
  slug_perm = api_get_package_slug_perm(
435
439
  owner=owner, repo=repo, identifier=package
436
440
  )
437
- entry = api_update_metadata(slug_perm, metadata_slug_perm, **patch_kwargs)
441
+ entry = api_update_metadata(
442
+ slug_perm, metadata_slug_perm, credential=opts.credential, **patch_kwargs
443
+ )
438
444
 
439
445
  click.secho("OK", fg="green", err=use_stderr)
440
446
  _print_metadata_entry(opts, entry)
@@ -496,7 +502,7 @@ def remove_metadata(ctx, opts, owner_repo_package, metadata_slug_perm, yes):
496
502
  slug_perm = api_get_package_slug_perm(
497
503
  owner=owner, repo=repo, identifier=package
498
504
  )
499
- api_delete_metadata(slug_perm, metadata_slug_perm)
505
+ api_delete_metadata(slug_perm, metadata_slug_perm, credential=opts.credential)
500
506
 
501
507
  click.secho("OK", fg="green", err=use_stderr)
502
508
 
@@ -7,7 +7,7 @@ import math
7
7
  import os
8
8
  import shlex
9
9
  import time
10
- from datetime import datetime, timezone
10
+ from datetime import UTC, datetime
11
11
 
12
12
  import click
13
13
 
@@ -300,7 +300,9 @@ def validate_metadata_payload(
300
300
 
301
301
  try:
302
302
  with maybe_spinner(opts):
303
- api_validate_metadata(content=content, content_type=content_type)
303
+ api_validate_metadata(
304
+ credential=opts.credential, content=content, content_type=content_type
305
+ )
304
306
  except ApiException as exc:
305
307
  http_status = getattr(exc, "status", None)
306
308
  detail = (
@@ -385,6 +387,7 @@ def attach_metadata_to_package(
385
387
  with maybe_spinner(opts):
386
388
  entry = api_create_metadata(
387
389
  slug_perm,
390
+ credential=opts.credential,
388
391
  content=content,
389
392
  content_type=content_type,
390
393
  source_identity=source_identity,
@@ -681,7 +684,7 @@ def wait_for_package_sync(
681
684
  fg="cyan",
682
685
  )
683
686
 
684
- start = datetime.now(tz=timezone.utc)
687
+ start = datetime.now(tz=UTC)
685
688
  context_msg = "Failed to synchronise file!"
686
689
  with handle_api_exceptions(
687
690
  ctx, opts=opts, context_msg=context_msg, reraise_on_error=skip_errors
@@ -738,7 +741,7 @@ def wait_for_package_sync(
738
741
  if left > 0:
739
742
  pb.update(left)
740
743
 
741
- end = datetime.now(tz=timezone.utc)
744
+ end = datetime.now(tz=UTC)
742
745
  seconds = (end - start).total_seconds()
743
746
 
744
747
  click.echo(err=use_stderr)
@@ -16,27 +16,25 @@ from .main import main
16
16
  def print_repositories(opts, data, page_info=None, show_list_info=True, page_all=False):
17
17
  """Print repositories as a table or output in another format."""
18
18
  headers = [
19
- "Name",
19
+ "Owner / Repository (Identifier)",
20
20
  "Type",
21
21
  "Packages",
22
22
  "Groups",
23
23
  "Downloads",
24
24
  "Size",
25
- "Owner / Repository (Identifier)",
26
25
  ]
27
26
 
28
27
  rows = [
29
28
  [
30
- click.style(repo["name"], fg="cyan"),
29
+ "{owner_slug}/{slug}".format(
30
+ owner_slug=click.style(repo["namespace"], fg="magenta"),
31
+ slug=click.style(repo["slug"], fg="green"),
32
+ ),
31
33
  click.style(repo["repository_type_str"], fg="yellow"),
32
34
  click.style(str(repo["package_count"]), fg="blue"),
33
35
  click.style(str(repo["package_group_count"]), fg="blue"),
34
36
  click.style(str(repo["num_downloads"]), fg="blue"),
35
37
  click.style(str(repo["size_str"]), fg="blue"),
36
- "{owner_slug}/{slug}".format(
37
- owner_slug=click.style(repo["namespace"], fg="magenta"),
38
- slug=click.style(repo["slug"], fg="green"),
39
- ),
40
38
  ]
41
39
  for repo in sorted(data, key=itemgetter("namespace", "slug"))
42
40
  ]
@@ -2,7 +2,7 @@
2
2
 
3
3
  import base64
4
4
  import re
5
- from datetime import datetime, timezone
5
+ from datetime import UTC, datetime
6
6
  from urllib.parse import urlsplit
7
7
 
8
8
  import click
@@ -299,7 +299,7 @@ def validate_optional_timestamp(ctx, param, value):
299
299
  try:
300
300
  return (
301
301
  datetime.strptime(value, "%Y-%m-%dT%H:%M:%SZ")
302
- .replace(tzinfo=timezone.utc)
302
+ .replace(tzinfo=UTC)
303
303
  .replace(hour=0, minute=0, second=0)
304
304
  )
305
305
  except ValueError: