artefacts-cli 0.16.0__tar.gz → 0.16.2__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 (176) hide show
  1. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/CHANGELOG.md +5 -1
  2. {artefacts_cli-0.16.0/artefacts_cli.egg-info → artefacts_cli-0.16.2}/PKG-INFO +1 -1
  3. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_containers.py +3 -3
  4. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_project.py +2 -7
  5. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/config.py +24 -4
  6. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/__init__.py +1 -1
  7. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/docker_cm.py +3 -3
  8. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/version.py +3 -3
  9. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2/artefacts_cli.egg-info}/PKG-INFO +1 -1
  10. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/SOURCES.txt +1 -0
  11. artefacts_cli-0.16.2/scripts/dev_version.py +28 -0
  12. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_app_containers.py +1 -1
  13. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_config.py +38 -0
  14. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/.coveragerc +0 -0
  15. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/.pyre_configuration +0 -0
  16. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/README.md +0 -0
  17. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/README_INTERNAL.md +0 -0
  18. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/__init__.py +0 -0
  19. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/__init__.py +0 -0
  20. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/__init__.py +0 -0
  21. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/default/__init__.py +0 -0
  22. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/default/get_artifact.py +0 -0
  23. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/__init__.py +0 -0
  24. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/list_frameworks.py +0 -0
  25. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/framework/list_simulators.py +0 -0
  26. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/__init__.py +0 -0
  27. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/api_project_new_job.py +0 -0
  28. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_artifact_downloads.py +0 -0
  29. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_job_by_commit.py +0 -0
  30. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/get_job_test_results.py +0 -0
  31. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/post_update_job_results.py +0 -0
  32. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/job/put_update_job_results.py +0 -0
  33. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/__init__.py +0 -0
  34. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/api_project_info.py +0 -0
  35. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/create_remote.py +0 -0
  36. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/get_badge.py +0 -0
  37. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/get_config.py +0 -0
  38. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/get_last_jobs.py +0 -0
  39. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/project/upload_source.py +0 -0
  40. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/__init__.py +0 -0
  41. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/api_create_project.py +0 -0
  42. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/projects/api_list_projects.py +0 -0
  43. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/run/__init__.py +0 -0
  44. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/run/create_job_run.py +0 -0
  45. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/run/submit_run_results.py +0 -0
  46. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/user/__init__.py +0 -0
  47. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/api/user/get_user_organizations.py +0 -0
  48. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/client.py +0 -0
  49. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/errors.py +0 -0
  50. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/__init__.py +0 -0
  51. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/artifact_response.py +0 -0
  52. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/blob.py +0 -0
  53. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_new_job.py +0 -0
  54. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_project.py +0 -0
  55. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote.py +0 -0
  56. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response.py +0 -0
  57. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response_blob_upload_urls.py +0 -0
  58. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/create_remote_response_upload_urls.py +0 -0
  59. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/error.py +0 -0
  60. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/error_errors.py +0 -0
  61. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/framework.py +0 -0
  62. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/frameworks_list.py +0 -0
  63. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/get_artifact_downloads_response.py +0 -0
  64. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/job.py +0 -0
  65. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/last_jobs_response.py +0 -0
  66. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/list_projects_response.py +0 -0
  67. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/presigned_url.py +0 -0
  68. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/presigned_url_fields.py +0 -0
  69. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/project.py +0 -0
  70. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/register_run.py +0 -0
  71. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/register_run_tests_item.py +0 -0
  72. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/scenario_map_response.py +0 -0
  73. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/simulator.py +0 -0
  74. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/simulators_list.py +0 -0
  75. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results.py +0 -0
  76. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_metrics.py +0 -0
  77. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_response.py +0 -0
  78. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_response_upload_urls.py +0 -0
  79. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_tests_item.py +0 -0
  80. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/submit_run_results_uploads.py +0 -0
  81. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/update_job_results.py +0 -0
  82. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/upload_source_response.py +0 -0
  83. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/upload_source_response_upload_urls.py +0 -0
  84. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/models/user_organizations_response.py +0 -0
  85. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/api/types.py +0 -0
  86. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/__init__.py +0 -0
  87. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app.py +0 -0
  88. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_auth.py +0 -0
  89. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_containers.pyi +0 -0
  90. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/app_experimental.py +0 -0
  91. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/__init__.py +0 -0
  92. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/filetree_classifyer.py +0 -0
  93. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/hash_cache.py +0 -0
  94. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/helpers.py +0 -0
  95. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/blob/types.py +0 -0
  96. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/constants.py +0 -0
  97. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/docker_utils.py +0 -0
  98. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/containers/utils.py +0 -0
  99. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/core/__init__.py +0 -0
  100. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/core/code_environment.py +0 -0
  101. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/doctor.py +0 -0
  102. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/download.py +0 -0
  103. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/errors.py +0 -0
  104. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/i18n.py +0 -0
  105. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/art.pot +0 -0
  106. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/base.pot +0 -0
  107. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/click.pot +0 -0
  108. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/locales/ja_JP/LC_MESSAGES/artefacts.po +0 -0
  109. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/logger.py +0 -0
  110. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/reporter.py +0 -0
  111. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/__init__.py +0 -0
  112. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/base_runner.py +0 -0
  113. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/launch_test_runner.py +0 -0
  114. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/runners/pytest_runner.py +0 -0
  115. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/shell_completion.py +0 -0
  116. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/templates/sample_config.yaml +0 -0
  117. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/__init__.py +0 -0
  118. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/api.py +0 -0
  119. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/auth.py +0 -0
  120. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/click_net_watch.py +0 -0
  121. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/common.py +0 -0
  122. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/config.py +0 -0
  123. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/formatting.py +0 -0
  124. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/junit.py +0 -0
  125. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/parameters.py +0 -0
  126. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/proc_tree_tracker.py +0 -0
  127. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/ros/__init__.py +0 -0
  128. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/ros/bagparser.py +0 -0
  129. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/cli/utils/ros/rosbags.py +0 -0
  130. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts/copava/__init__.py +0 -0
  131. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts.yaml +0 -0
  132. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/dependency_links.txt +0 -0
  133. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/entry_points.txt +0 -0
  134. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/requires.txt +0 -0
  135. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/artefacts_cli.egg-info/top_level.txt +0 -0
  136. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/bin/release +0 -0
  137. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/infra-tests/test_run_remote.yaml +0 -0
  138. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/infra-tests/turtlesim2/launch_turtle.py +0 -0
  139. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/infra-tests/turtlesim2/sample_node.py +0 -0
  140. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/pyproject.toml +0 -0
  141. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/pytest.ini +0 -0
  142. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/scripts/whats_latest.rb +0 -0
  143. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/setup.cfg +0 -0
  144. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/__init__.py +0 -0
  145. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/__init__.py +0 -0
  146. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/blob/__init__.py +0 -0
  147. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/blob/test_compression.py +0 -0
  148. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/blob/test_dir_crawl.py +0 -0
  149. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/containers/__init__.py +0 -0
  150. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/containers/test_docker.py +0 -0
  151. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/containers/test_utils.py +0 -0
  152. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/core/test_code_environment.py +0 -0
  153. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_app_auth.py +0 -0
  154. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_app_project.py +0 -0
  155. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_cli.py +0 -0
  156. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_config_validation.py +0 -0
  157. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_download.py +0 -0
  158. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_init.py +0 -0
  159. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_other.py +0 -0
  160. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_parameters.py +0 -0
  161. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_pytest.py +0 -0
  162. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_reporter.py +0 -0
  163. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_ros2.py +0 -0
  164. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_signals.py +0 -0
  165. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_utils.py +0 -0
  166. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_utils_ros.py +0 -0
  167. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_warp.py +0 -0
  168. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/cli/test_warp_run.py +0 -0
  169. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/conftest.py +0 -0
  170. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/artefacts-env-param.yaml +0 -0
  171. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/artefacts.yaml.template +0 -0
  172. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/artefacts_deprecated.yaml +0 -0
  173. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/bad_launch_test.py +0 -0
  174. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/sample_pytest_file.py +0 -0
  175. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/fixtures/test_junit.xml +0 -0
  176. {artefacts_cli-0.16.0 → artefacts_cli-0.16.2}/tests/utils/docker_mock.py +0 -0
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.16.0] - 2026-04-08
11
+
10
12
  ### Added
11
13
 
12
14
  - New command `artefacts download` to list and download artifacts from job runs (#347)
@@ -299,7 +301,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
299
301
  - Local metrics errors do not block publication of results.
300
302
  - Introduction of Black formatting.
301
303
 
302
- [unreleased]: https://github.com/art-e-fact/artefacts-client/compare/0.14.0...HEAD
304
+ [unreleased]: https://github.com/art-e-fact/artefacts-client/compare/0.16.0...HEAD
305
+ [0.16.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.16.0
306
+ [0.15.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.15.0
303
307
  [0.14.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.14.0
304
308
  [0.13.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.13.0
305
309
  [0.12.0]: https://github.com/art-e-fact/artefacts-client/releases/tag/0.12.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: artefacts_cli
3
- Version: 0.16.0
3
+ Version: 0.16.2
4
4
  Author-email: FD <fabian@artefacts.com>, AGC <alejandro@artefacts.com>, TN <tomo@artefacts.com>, EP <eric@artefacts.com>
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/art-e-fact/artefacts-client
@@ -259,8 +259,8 @@ def run(
259
259
 
260
260
  api_conf = APIConf(project, __version__, jobname)
261
261
  api_key = api_conf.api_key
262
- bearer_token = api_conf.bearer_token
263
- if bearer_token is None and not is_valid_api_key(api_key):
262
+ access_token = api_conf.access_token
263
+ if access_token is None and not is_valid_api_key(api_key):
264
264
  raise click.ClickException(
265
265
  localise(
266
266
  "Invalid API key for {project}: A key must be a non-empty string".format(
@@ -280,7 +280,7 @@ def run(
280
280
  # Hidden settings primarily useful to Artefacts developers
281
281
  api_url=os.environ.get("ARTEFACTS_API_URL", DEFAULT_API_URL),
282
282
  api_key=api_key,
283
- bearer_token=bearer_token,
283
+ access_token=access_token,
284
284
  engine_args=list(engine_args),
285
285
  code_state=code_env.get_state(),
286
286
  code_reference=code_env.get_reference(),
@@ -170,13 +170,8 @@ def create_project_cmd(name: str):
170
170
  data = response.parsed
171
171
  click.secho(localise("Project created!"), fg="green", bold=True)
172
172
  click.echo()
173
- click.echo(
174
- localise(" Organization: {org}").format(org=data.project.organization)
175
- )
176
- click.echo(
177
- localise(" Project: {project}").format(project=data.project.name)
178
- )
179
- click.echo(localise(" API Key: {key}").format(key=data.api_key))
173
+ click.echo(localise(" Organization: {org}").format(org=data.organization))
174
+ click.echo(localise(" Project: {project}").format(project=data.name))
180
175
  click.echo()
181
176
  click.echo(localise("Add this to your artefacts.yaml:"))
182
177
  click.secho(f" project: {org}/{project_name}", fg="cyan")
@@ -48,17 +48,20 @@ class APIConf:
48
48
  profile = {}
49
49
 
50
50
  self.api_url = get_artefacts_api_url(profile)
51
+ access_token_from_env = os.environ.get("ARTEFACTS_ACCESS_TOKEN")
51
52
 
52
53
  # Check for OAuth access token first (from `artefacts login`).
53
- # ARTEFACTS_BEARER_TOKEN is injected by the host when running in-container.
54
- oauth_token = os.environ.get("ARTEFACTS_BEARER_TOKEN") or get_access_token()
54
+ # ARTEFACTS_ACCESS_TOKEN is injected by the host when running in-container.
55
+ oauth_token = access_token_from_env or get_access_token()
55
56
  if oauth_token:
56
57
  auth_type = "Bearer"
57
- self.bearer_token = oauth_token
58
+ self.access_token = oauth_token
59
+ self._refreshable_access_auth = access_token_from_env is None
58
60
  self.headers = {"Authorization": f"{auth_type} {oauth_token}"}
59
61
  self.api_key = None
60
62
  else:
61
- self.bearer_token = None
63
+ self.access_token = None
64
+ self._refreshable_access_auth = False
62
65
  # Fall back to API key
63
66
  self.api_key = os.environ.get("ARTEFACTS_KEY", profile.get("ApiKey", None))
64
67
 
@@ -156,7 +159,22 @@ class APIConf:
156
159
  ),
157
160
  )
158
161
 
162
+ def _refresh_access_auth(self) -> None:
163
+ if not self._refreshable_access_auth:
164
+ return
165
+
166
+ token = get_access_token()
167
+ if not token or token == self.access_token:
168
+ return
169
+
170
+ self.access_token = token
171
+ self.headers["Authorization"] = f"Bearer {token}"
172
+ self.client = self.client.with_headers(
173
+ {"Authorization": self.headers["Authorization"]}
174
+ )
175
+
159
176
  def sdk(self, cmd, handle_errors: bool = True, **cmd_kwargs) -> SdkResponse:
177
+ self._refresh_access_auth()
160
178
  try:
161
179
  response = cmd.sync_detailed(client=self.client, **cmd_kwargs)
162
180
 
@@ -217,6 +235,7 @@ class APIConf:
217
235
 
218
236
  @contextmanager
219
237
  def _api(self):
238
+ self._refresh_access_auth()
220
239
  try:
221
240
  yield self.session
222
241
  except ConnectionError as e:
@@ -389,6 +408,7 @@ class APIConf:
389
408
  without the context extras (as this returns and so exits
390
409
  the context).
391
410
  """
411
+ self._refresh_access_auth()
392
412
  return partial(
393
413
  getattr(self.session, verb),
394
414
  headers=self.headers,
@@ -43,7 +43,7 @@ class CMgr:
43
43
  jobname: Optional[str] = None,
44
44
  artefacts_dir: Union[str, Path] = Path("~/.artefacts").expanduser(),
45
45
  api_url: str = DEFAULT_API_URL,
46
- bearer_token: Optional[str] = None,
46
+ access_token: Optional[str] = None,
47
47
  with_gui: bool = False,
48
48
  ) -> Tuple[Any, Iterator]:
49
49
  """
@@ -79,7 +79,7 @@ class DockerManager(CMgr):
79
79
  artefacts_dir: Union[str, Path] = Path("~/.artefacts").expanduser(),
80
80
  api_url: str = DEFAULT_API_URL,
81
81
  api_key: Optional[str] = None,
82
- bearer_token: Optional[str] = None,
82
+ access_token: Optional[str] = None,
83
83
  with_gui: bool = False,
84
84
  engine_args: Optional[list] = None,
85
85
  code_state: Optional[str] = None,
@@ -101,8 +101,8 @@ class DockerManager(CMgr):
101
101
  if description:
102
102
  env["ARTEFACTS_DESCRIPTION"] = description
103
103
 
104
- if bearer_token:
105
- env["ARTEFACTS_BEARER_TOKEN"] = bearer_token
104
+ if access_token:
105
+ env["ARTEFACTS_ACCESS_TOKEN"] = access_token
106
106
  else:
107
107
  env["ARTEFACTS_KEY"] = api_key or self._get_artefacts_api_key(
108
108
  project, artefacts_dir
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.16.0'
22
- __version_tuple__ = version_tuple = (0, 16, 0)
21
+ __version__ = version = '0.16.2'
22
+ __version_tuple__ = version_tuple = (0, 16, 2)
23
23
 
24
- __commit_id__ = commit_id = 'ged8814f21'
24
+ __commit_id__ = commit_id = 'gabcf69e03'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: artefacts_cli
3
- Version: 0.16.0
3
+ Version: 0.16.2
4
4
  Author-email: FD <fabian@artefacts.com>, AGC <alejandro@artefacts.com>, TN <tomo@artefacts.com>, EP <eric@artefacts.com>
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/art-e-fact/artefacts-client
@@ -135,6 +135,7 @@ bin/release
135
135
  infra-tests/test_run_remote.yaml
136
136
  infra-tests/turtlesim2/launch_turtle.py
137
137
  infra-tests/turtlesim2/sample_node.py
138
+ scripts/dev_version.py
138
139
  scripts/whats_latest.rb
139
140
  tests/__init__.py
140
141
  tests/conftest.py
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env python
2
+
3
+ """
4
+ Script to print the current development release version to stdout
5
+
6
+ Aimed at being used in shell scripts, typically CI on GHA.
7
+
8
+ Logic:
9
+ * Use x.y.z semver
10
+ * Return x.(y+1).0
11
+ * Never save anything (SISO approach, aka idempotent)
12
+
13
+ Example:
14
+ 0.16.1.dev12 -> 0.17.0
15
+ 0.16.1-pre.2+build.4 -> 0.17.0
16
+ 0.16.1 -> 0.17.0
17
+ 0.16.0 -> 0.17.0
18
+ """
19
+
20
+ from setuptools_scm import get_version
21
+ import semver
22
+
23
+ last_known = get_version()
24
+ last_known = last_known.split(".")
25
+ v = ".".join(last_known[0:3])
26
+ v = semver.Version.parse(v)
27
+
28
+ print(f"{v.major}.{v.minor + 1}.0.{'.'.join(last_known[3:])}")
@@ -58,4 +58,4 @@ def test_container_run_with_oauth_token(
58
58
  assert result.exit_code == 0
59
59
  handler.run.assert_called_once()
60
60
  assert handler.run.call_args.kwargs["api_key"] is None
61
- assert handler.run.call_args.kwargs["bearer_token"] == "test-token"
61
+ assert handler.run.call_args.kwargs["access_token"] == "test-token"
@@ -228,3 +228,41 @@ def test_put_invalid_json_error_converted_to_click_error(
228
228
  )
229
229
  with pytest.raises(ClickException, match=expected):
230
230
  sut.update("url", "id", None)
231
+
232
+
233
+ def test_sdk_refreshes_access_token_before_request(
234
+ monkeypatch, mocker, valid_project_settings
235
+ ):
236
+ tokens = iter(["stale-token", "fresh-token"])
237
+ monkeypatch.setattr("artefacts.cli.config.get_access_token", lambda: next(tokens))
238
+
239
+ response = mocker.Mock()
240
+ response.status_code = 200
241
+ command = mocker.Mock()
242
+ command.sync_detailed.return_value = response
243
+
244
+ sut = APIConf(valid_project_settings["full_project_name"], "test_version")
245
+ sut.sdk(command)
246
+
247
+ assert sut.headers["Authorization"] == "Bearer fresh-token"
248
+ assert command.sync_detailed.call_args.kwargs["client"]._headers[
249
+ "Authorization"
250
+ ] == ("Bearer fresh-token")
251
+
252
+
253
+ def test_sdk_keeps_env_access_token(monkeypatch, mocker, valid_project_settings):
254
+ monkeypatch.setenv("ARTEFACTS_ACCESS_TOKEN", "env-token")
255
+ monkeypatch.setattr("artefacts.cli.config.get_access_token", lambda: "fresh-token")
256
+
257
+ response = mocker.Mock()
258
+ response.status_code = 200
259
+ command = mocker.Mock()
260
+ command.sync_detailed.return_value = response
261
+
262
+ sut = APIConf(valid_project_settings["full_project_name"], "test_version")
263
+ sut.sdk(command)
264
+
265
+ assert sut.headers["Authorization"] == "Bearer env-token"
266
+ assert command.sync_detailed.call_args.kwargs["client"]._headers[
267
+ "Authorization"
268
+ ] == ("Bearer env-token")
File without changes
File without changes