sima-cli 2.1.17__tar.gz → 2.1.18__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 (215) hide show
  1. {sima_cli-2.1.17/sima_cli.egg-info → sima_cli-2.1.18}/PKG-INFO +1 -1
  2. {sima_cli-2.1.17 → sima_cli-2.1.18}/pyproject.toml +1 -1
  3. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/__version__.py +1 -1
  4. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/cli.py +119 -12
  5. sima_cli-2.1.18/sima_cli/cloudex/__init__.py +5 -0
  6. sima_cli-2.1.18/sima_cli/cloudex/client.py +886 -0
  7. sima_cli-2.1.18/sima_cli/cloudex/commands.py +422 -0
  8. sima_cli-2.1.18/sima_cli/cloudex/installer.py +164 -0
  9. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/device/commands.py +1 -1
  10. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/discover/discover.py +91 -9
  11. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/client.py +246 -18
  12. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/commands.py +114 -17
  13. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/rendering.py +213 -32
  14. sima_cli-2.1.18/sima_cli/network/network.py +636 -0
  15. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/install.py +3 -1
  16. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/neat.py +11 -0
  17. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/network_doctor.py +37 -2
  18. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/preinstall.py +123 -5
  19. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/utils.py +1 -1
  20. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/ab_state.py +32 -12
  21. sima_cli-2.1.18/sima_cli/update/host.py +231 -0
  22. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/netboot.py +675 -27
  23. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/netboot_artifacts.py +103 -14
  24. sima_cli-2.1.18/sima_cli/update/netboot_device.py +483 -0
  25. sima_cli-2.1.18/sima_cli/update/overlay.py +348 -0
  26. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/rootfs.py +5 -11
  27. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu.py +240 -11
  28. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu_artifacts.py +5 -5
  29. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/uboot_environment.py +54 -24
  30. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/updater.py +71 -16
  31. {sima_cli-2.1.17 → sima_cli-2.1.18/sima_cli.egg-info}/PKG-INFO +1 -1
  32. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/SOURCES.txt +16 -0
  33. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_ab_overlay.py +7 -8
  34. sima_cli-2.1.18/tests/unit/test_cli_update.py +150 -0
  35. sima_cli-2.1.18/tests/unit/test_cloudex_client.py +647 -0
  36. sima_cli-2.1.18/tests/unit/test_cloudex_commands.py +370 -0
  37. sima_cli-2.1.18/tests/unit/test_cloudex_installer.py +110 -0
  38. sima_cli-2.1.18/tests/unit/test_device_discovery_cloudex.py +113 -0
  39. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_emmc.py +18 -0
  40. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_generate_cli_markdown_docs.py +10 -8
  41. sima_cli-2.1.18/tests/unit/test_host_update.py +254 -0
  42. sima_cli-2.1.18/tests/unit/test_localized_docs_links.py +23 -0
  43. sima_cli-2.1.18/tests/unit/test_models.py +1187 -0
  44. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot.py +1 -0
  45. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_autoflash.py +2 -1
  46. sima_cli-2.1.18/tests/unit/test_netboot_device.py +658 -0
  47. sima_cli-2.1.18/tests/unit/test_netboot_images.py +344 -0
  48. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_mirror.py +11 -6
  49. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_trootctl.py +2 -1
  50. sima_cli-2.1.18/tests/unit/test_network_custom_static.py +271 -0
  51. sima_cli-2.1.18/tests/unit/test_network_safety.py +152 -0
  52. sima_cli-2.1.18/tests/unit/test_overlay.py +309 -0
  53. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_image_detection.py +56 -5
  54. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_model_compiler.py +1 -1
  55. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_network_doctor.py +36 -0
  56. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_preinstall.py +146 -0
  57. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu.py +391 -9
  58. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_mirror.py +18 -0
  59. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_uboot_environment.py +31 -0
  60. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_vscode_extension_pins.py +2 -1
  61. sima_cli-2.1.17/sima_cli/network/network.py +0 -307
  62. sima_cli-2.1.17/sima_cli/update/netboot_device.py +0 -177
  63. sima_cli-2.1.17/tests/unit/test_cli_update.py +0 -76
  64. sima_cli-2.1.17/tests/unit/test_models.py +0 -632
  65. sima_cli-2.1.17/tests/unit/test_netboot_device.py +0 -292
  66. {sima_cli-2.1.17 → sima_cli-2.1.18}/LICENSE +0 -0
  67. {sima_cli-2.1.17 → sima_cli-2.1.18}/MANIFEST.in +0 -0
  68. {sima_cli-2.1.17 → sima_cli-2.1.18}/README.md +0 -0
  69. {sima_cli-2.1.17 → sima_cli-2.1.18}/requirements.txt +0 -0
  70. {sima_cli-2.1.17 → sima_cli-2.1.18}/setup.cfg +0 -0
  71. {sima_cli-2.1.17 → sima_cli-2.1.18}/setup.py +0 -0
  72. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/__init__.py +0 -0
  73. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/__main__.py +0 -0
  74. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/app_zoo/__init__.py +0 -0
  75. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/app_zoo/app.py +0 -0
  76. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/app_zoo/commands.py +0 -0
  77. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/__init__.py +0 -0
  78. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/auth0.py +0 -0
  79. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/devportal.py +0 -0
  80. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/login.py +0 -0
  81. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/data/__init__.py +0 -0
  82. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/data/resources_internal.yaml +0 -0
  83. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/data/resources_public.yaml +0 -0
  84. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/__init__.py +0 -0
  85. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/device/__init__.py +0 -0
  86. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/mpk/__init__.py +0 -0
  87. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/mpk/commands.py +0 -0
  88. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/discover/__init__.py +0 -0
  89. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/discover/linuxll.py +0 -0
  90. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/download/__init__.py +0 -0
  91. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/download/downloader.py +0 -0
  92. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/__init__.py +0 -0
  93. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/compatibility.py +0 -0
  94. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/github_assets.py +0 -0
  95. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/hostdriver.py +0 -0
  96. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/metadata_info.py +0 -0
  97. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/metadata_installer.py +0 -0
  98. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/metadata_validator.py +0 -0
  99. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/optiview.py +0 -0
  100. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/package_builder.py +0 -0
  101. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/palette.py +0 -0
  102. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/registry.py +0 -0
  103. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/mla/__init__.py +0 -0
  104. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/mla/meminfo.py +0 -0
  105. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/model_zoo/__init__.py +0 -0
  106. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/model_zoo/model.py +0 -0
  107. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/__init__.py +0 -0
  108. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/network/__init__.py +0 -0
  109. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/playbooks/__init__.py +0 -0
  110. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/playbooks/commands.py +0 -0
  111. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/playbooks/manager.py +0 -0
  112. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/__init__.py +0 -0
  113. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/cmdexec.py +0 -0
  114. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/commands.py +0 -0
  115. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/config.py +0 -0
  116. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/docker_staging.py +0 -0
  117. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/linux_devkit_network.py +0 -0
  118. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/linux_shared_network.py +0 -0
  119. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/model_compiler.py +0 -0
  120. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/requirements.json +0 -0
  121. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/script.py +0 -0
  122. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/stop.py +0 -0
  123. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/uninstall.py +0 -0
  124. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/vscode_extensions.py +0 -0
  125. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/serial/__init__.py +0 -0
  126. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/serial/serial.py +0 -0
  127. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/storage/__init__.py +0 -0
  128. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/storage/nvme.py +0 -0
  129. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/storage/sdcard.py +0 -0
  130. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/__init__.py +0 -0
  131. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/bmaptool.py +0 -0
  132. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/bootimg.py +0 -0
  133. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/cleanlog.py +0 -0
  134. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/elxr.py +0 -0
  135. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/emmc.py +0 -0
  136. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/fast_upload.py +0 -0
  137. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/local.py +0 -0
  138. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/query.py +0 -0
  139. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/remote.py +0 -0
  140. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/staging.py +0 -0
  141. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu_certificate.py +0 -0
  142. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu_target.py +0 -0
  143. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/upgrade/__init__.py +0 -0
  144. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/upgrade/selfupdate.py +0 -0
  145. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/__init__.py +0 -0
  146. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/api_common.py +0 -0
  147. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/artifactory.py +0 -0
  148. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/common.py +0 -0
  149. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/config.py +0 -0
  150. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/config_loader.py +0 -0
  151. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/container_registries.py +0 -0
  152. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/deprecation.py +0 -0
  153. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/device_api.py +0 -0
  154. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/disk.py +0 -0
  155. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/docker.py +0 -0
  156. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/env.py +0 -0
  157. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/errors.py +0 -0
  158. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/mpk_api.py +0 -0
  159. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/net.py +0 -0
  160. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/network.py +0 -0
  161. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/pcie.py +0 -0
  162. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/pkg_update_check.py +0 -0
  163. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/serializers.py +0 -0
  164. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/services.py +0 -0
  165. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/tag.py +0 -0
  166. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/vulcan/__init__.py +0 -0
  167. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/vulcan/artifacts.py +0 -0
  168. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/vulcan/commands.py +0 -0
  169. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/dependency_links.txt +0 -0
  170. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/entry_points.txt +0 -0
  171. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/requires.txt +0 -0
  172. {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/top_level.txt +0 -0
  173. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/__init__.py +0 -0
  174. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/e2e/__init__.py +0 -0
  175. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/__init__.py +0 -0
  176. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_app_zoo.py +0 -0
  177. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_appzoo_commands.py +0 -0
  178. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_auth.py +0 -0
  179. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_auth0.py +0 -0
  180. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_bootimg_defaults.py +0 -0
  181. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_bootimg_recovery.py +0 -0
  182. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_cli.py +0 -0
  183. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_cli_stdio.py +0 -0
  184. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_cli_update_rerun.py +0 -0
  185. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_container_registries.py +0 -0
  186. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_deprecation.py +0 -0
  187. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_docker_utils.py +0 -0
  188. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_download.py +0 -0
  189. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_elxr_update.py +0 -0
  190. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_fast_upload.py +0 -0
  191. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware.py +0 -0
  192. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware_creation_order.py +0 -0
  193. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware_layout.py +0 -0
  194. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware_selector.py +0 -0
  195. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_install_stub.py +0 -0
  196. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_metadata_installer.py +0 -0
  197. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_metadata_validator.py +0 -0
  198. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_model_zoo.py +0 -0
  199. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_modelzoo_commands.py +0 -0
  200. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_ip_recovery.py +0 -0
  201. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_package_builder.py +0 -0
  202. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_palette_image_discovery.py +0 -0
  203. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_pcie.py +0 -0
  204. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_pkg_update_check.py +0 -0
  205. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_linux_shared_network.py +0 -0
  206. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_uninstall.py +0 -0
  207. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_selfupdate.py +0 -0
  208. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_skills_commands.py +0 -0
  209. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_skills_manager.py +0 -0
  210. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_certificate.py +0 -0
  211. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_errors.py +0 -0
  212. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_target.py +0 -0
  213. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_update_staging.py +0 -0
  214. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_utils.py +0 -0
  215. {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_vulcan.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sima-cli
3
- Version: 2.1.17
3
+ Version: 2.1.18
4
4
  Summary: CLI tool for SiMa Developer Portal to download models, firmware, and apps.
5
5
  Home-page: https://community.sima.ai/
6
6
  Author: SiMa.ai
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sima-cli"
7
- version = "2.1.17"
7
+ version = "2.1.18"
8
8
  description = "CLI tool for SiMa Developer Portal to download models, firmware, and apps."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -1,2 +1,2 @@
1
1
  # sima_cli/__version__.py
2
- __version__ = "2.1.17"
2
+ __version__ = "2.1.18"
@@ -2,12 +2,14 @@ import os
2
2
  import shutil
3
3
  import sys
4
4
  from contextlib import nullcontext, redirect_stdout
5
+ from pathlib import Path
5
6
  import click
6
7
  from rich.console import Console
7
8
  from rich.panel import Panel
8
9
  from rich.text import Text
9
10
  from sima_cli.utils.env import get_environment_type
10
11
  from sima_cli.update.updater import perform_update
12
+ from sima_cli.update.host import install_host_package
11
13
  from sima_cli.update.swu import handle_update
12
14
  from sima_cli.model_zoo.model import list_models, download_model, describe_model
13
15
  from sima_cli.app_zoo.app import list_apps, download_app, describe_app
@@ -40,6 +42,7 @@ from sima_cli.upgrade.selfupdate import register_selfupdate_command
40
42
  from sima_cli.playbooks import register_playbook_commands
41
43
  from sima_cli.vulcan import register_vulcan_commands
42
44
  from sima_cli.models import register_models_commands
45
+ from sima_cli.cloudex import register_cloudex_commands
43
46
  from sima_cli.vulcan.commands import (
44
47
  ENV_METAVAR,
45
48
  _environment_shortcut_options,
@@ -188,8 +191,8 @@ def main(ctx, internal, yes):
188
191
  internal = internal or os.getenv("SIMA_CLI_INTERNAL", "0") in ("1", "true", "yes")
189
192
  if internal:
190
193
  Console(stderr=True).print(Panel(
191
- "Pre-release software may be unstable. Use at your own risk.",
192
- title="Pre-release software", border_style="yellow",
194
+ Text("Pre-release software may be unstable. Use at your own risk.", style="yellow"),
195
+ title="Pre-release software", border_style="yellow", width=72,
193
196
  ))
194
197
  if ctx.meta.get('update_inspect'):
195
198
  ctx.ensure_object(dict)
@@ -213,6 +216,7 @@ register_sdk_commands(main)
213
216
  register_playbook_commands(main)
214
217
  register_vulcan_commands(main)
215
218
  register_models_commands(main)
219
+ register_cloudex_commands(main)
216
220
 
217
221
 
218
222
  # ----------------------
@@ -314,7 +318,7 @@ def download(ctx, url, dest):
314
318
  @click.option(
315
319
  "-y", "--yes",
316
320
  is_flag=True,
317
- help="Assume yes for update confirmation prompts."
321
+ help="Assume yes for update confirmation prompts and select the newest matching full-system build."
318
322
  )
319
323
  @click.option(
320
324
  "-p", "--passwd",
@@ -350,13 +354,14 @@ def download(ctx, url, dest):
350
354
  default=False,
351
355
  help="For eLxr updates, validate the update path and show the command without installing."
352
356
  )
353
- @click.option("--inspect", "inspect_state", is_flag=True, help="Show eLxr 3.0+ A/B slot state without updating (local or --ip).")
357
+ @click.option("--inspect", "inspect_state", is_flag=True, help="Show eLxr 3.0+ A/B slots and overlay customizations without updating (local or --ip).")
358
+ @click.option("--verbose", is_flag=True, help="Show detailed overlay file categories during eLxr 3.0+ inspection or update.")
354
359
  @click.option("--signing-cert", metavar="URL_OR_FILE", help="SWUpdate PEM verification certificate: HTTP(S) URL or local file. Defaults to the certificate for the selected channel when configured (eLxr 3.0+).")
355
360
  @click.option("--reboot", is_flag=True, help="Reboot after successful eLxr 3.0+ installation; verify remote boot health.")
356
361
  @click.pass_context
357
- def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force, troot_only, dryrun, inspect_state, reboot, signing_cert):
362
+ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force, troot_only, dryrun, inspect_state, verbose, reboot, signing_cert):
358
363
  """
359
- Update the software on a SiMa DevKit or remote SiMa device.
364
+ Update a SiMa DevKit, remote device, or Linux PCIe host.
360
365
 
361
366
  This command downloads and applies system software updates across
362
367
  different SiMa environments (Modalix, MLSoC/Davinci, headless images,
@@ -397,6 +402,9 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
397
402
 
398
403
  • Remote updates require an accessible IP address (``--ip``)
399
404
 
405
+ • PCIe host updates require Linux and ``-i/--internal``; omit the
406
+ version to choose from the available daily platform builds
407
+
400
408
  Typical Use Cases:
401
409
 
402
410
  • Updating a SiMa DevKit to the latest GA release
@@ -407,6 +415,8 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
407
415
 
408
416
  • Running updates from both the device itself or a host PC
409
417
 
418
+ • Installing a daily PCIe host package on a Linux development host
419
+
410
420
  \b
411
421
  Examples:
412
422
 
@@ -438,6 +448,14 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
438
448
 
439
449
  sima-cli -i update -y
440
450
 
451
+ # Select and install a PCIe host package from the daily build catalog (Linux only)
452
+
453
+ sima-cli -i update
454
+
455
+ # Or install a specific indexed daily platform build
456
+
457
+ sima-cli -i update -v 3.0.0_daily_develop_B1774
458
+
441
459
  # Update legacy eLxr (<3.0) from the public pre-release mirror without prompts
442
460
 
443
461
  sima-cli -y update -f -y
@@ -453,6 +471,30 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
453
471
  """
454
472
  # Prioritize explicit --version option over positional argument
455
473
  version_or_url = version_option or version_or_url
474
+ env_type, env_subtype = get_environment_type()
475
+ internal = ctx.obj.get("internal", False)
476
+ auto_confirm = yes or ctx.obj.get("yes", False)
477
+
478
+ device_update_options = (
479
+ dryrun
480
+ or troot_only
481
+ or inspect_state
482
+ or verbose
483
+ or reboot
484
+ or force
485
+ or signing_cert is not None
486
+ or flavor != "auto"
487
+ )
488
+ # A plain update with no remote target means installing the PCIe host
489
+ # package. Device-specific operations continue to the existing dispatcher.
490
+ if env_type == "host" and not ip and not device_update_options:
491
+ if env_subtype != "linux":
492
+ raise click.UsageError("PCIe host updates are only supported on Linux hosts.")
493
+ if not internal:
494
+ raise click.UsageError("Linux PCIe host updates require -i/--internal.")
495
+ install_host_package(version_or_url, auto_confirm=auto_confirm)
496
+ return
497
+
456
498
  is_elxr = is_devkit_running_elxr()
457
499
  if inspect_state and (version_or_url or dryrun or force or troot_only or reboot or signing_cert is not None or flavor != 'auto'):
458
500
  raise click.UsageError("--inspect cannot be combined with installation options.")
@@ -461,7 +503,7 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
461
503
  internal=ctx.obj.get("internal", False),
462
504
  auto_confirm=yes or ctx.obj.get("yes", False), dryrun=dryrun,
463
505
  signing_cert=signing_cert, reboot=reboot, inspect=inspect_state, force=force,
464
- troot_only=troot_only, flavor=flavor, local_elxr=is_elxr):
506
+ troot_only=troot_only, flavor=flavor, local_elxr=is_elxr, verbose=verbose):
465
507
  return
466
508
  except (click.ClickException, click.Abort):
467
509
  raise
@@ -598,17 +640,24 @@ def show_mla_memory_usage(ctx):
598
640
  # bootimg Command
599
641
  # ----------------------
600
642
  @main.command(name="bootimg")
601
- @click.option("-v", "--version", required=True, help="Firmware version to download and write (e.g., 1.6.0)")
643
+ @click.option("-v", "--version", required=False, help="Firmware version to download and write (e.g., 1.6.0)")
602
644
  @click.option("-b", "--boardtype", type=click.Choice(["modalix", "mlsoc"], case_sensitive=False), default="modalix", show_default=True, help="Target board type.")
603
645
  @click.option("-t", "--fwtype", type=click.Choice(["yocto", "elxr"], case_sensitive=False), default="elxr", show_default=True, help="Target firmware type.")
604
646
  @click.option("-n", "--netboot", is_flag=True, default=False, show_default=True, help="Prepare image for network boot and launch TFTP server.")
647
+ @click.option(
648
+ "--images",
649
+ type=click.Path(exists=True, file_okay=False, dir_okay=True, readable=True, path_type=Path),
650
+ help="Directory containing local netboot source images.",
651
+ )
652
+ @click.option("--delete-cache", is_flag=True, help="Delete the managed netboot cache after the session exits.")
605
653
  @click.option("-f", "--force", is_flag=True, help="Allow daily mirror fallback if Artifactory is unavailable (internal Modalix eLxr netboot only).")
606
654
  @click.option("--recovery", is_flag=True, help="Write eLxr Modalix recovery media for automatic eMMC recovery.")
607
655
  @click.option("--devkit", "--devkit-ip", "devkit_ip", required=False, help="DevKit IP for remote netboot; discover and select a DevKit when omitted.")
608
656
  @click.option("-r", "--rootfs", required=False, help="Custom root fs folders (internal use only)")
609
657
  @click.option("-a", "--autoflash", is_flag=True, default=False, show_default=True, help="Network boot the selected DevKit, then automatically flash its internal storage once SSH is ready.")
610
658
  @click.pass_context
611
- def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype, rootfs, recovery=False, force=False):
659
+ def bootimg_cmd(ctx, version, boardtype, netboot, images, delete_cache, devkit_ip,
660
+ autoflash, fwtype, rootfs, recovery=False, force=False):
612
661
  """
613
662
  Prepare a bootable image for the SiMa DevKit.
614
663
 
@@ -641,6 +690,17 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
641
690
 
642
691
  • Automating eMMC flashing over the network
643
692
 
693
+ Local Images and Cache:
694
+
695
+ • Use ``--images DIRECTORY`` to recursively discover local netboot
696
+ artifacts. eLxr requires a minimal TFTP archive and an eMMC
697
+ ``.img.gz``; Yocto requires a release archive.
698
+
699
+ • The supplied directory remains read-only. Prepared content is cached
700
+ under the platform temporary directory in ``sima-cli/netboot`` and is
701
+ reused by default. ``--delete-cache`` removes only the managed cache
702
+ entry after the session exits.
703
+
644
704
  \b
645
705
  Examples:
646
706
 
@@ -664,12 +724,28 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
664
724
 
665
725
  sima-cli bootimg -v 2.0.0 --netboot
666
726
 
727
+ # Prepare netboot from images already downloaded to a local directory
728
+
729
+ sima-cli bootimg --netboot --boardtype modalix --fwtype elxr --images /path/to/images
730
+
667
731
  # Prepare USB/SD recovery media that automatically recovers eMMC
668
732
 
669
733
  sima-cli bootimg -v 3.0.0 --recovery
670
734
 
671
735
  """
672
736
 
737
+ uses_netboot = netboot or autoflash
738
+ if images and not uses_netboot:
739
+ raise click.UsageError("--images requires --netboot or --autoflash.")
740
+ if delete_cache and not uses_netboot:
741
+ raise click.UsageError("--delete-cache requires --netboot or --autoflash.")
742
+ if images and version:
743
+ raise click.UsageError("--images and --version cannot be used together.")
744
+ if images and rootfs:
745
+ raise click.UsageError("--images and --rootfs cannot be used together.")
746
+ if not version and not images:
747
+ raise click.UsageError("Provide --version, or use --images for netboot.")
748
+
673
749
  if recovery:
674
750
  if netboot or autoflash or rootfs or devkit_ip:
675
751
  raise click.UsageError("--recovery cannot be combined with --netboot, --autoflash, --rootfs, or --devkit-ip.")
@@ -693,13 +769,23 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
693
769
  click.echo(f" 🔹 F/W Type : {fwtype}")
694
770
  click.echo(f" 🔹 F/W Flavor: headless")
695
771
  click.echo(f" 🔹 Custom RootFS: {rootfs}")
772
+ click.echo(f" 🔹 Local Images: {images}")
696
773
  click.echo(f" 🔹 DevKit IP : {devkit_ip}")
697
774
 
698
775
  try:
699
776
  boardtype = boardtype if boardtype != 'mlsoc' else 'davinci'
700
777
  if netboot or autoflash:
701
- setup_netboot(version, boardtype, internal, autoflash, flavor='headless', rootfs=rootfs, swtype=fwtype, allow_daily_fallback=force, devkit=devkit_ip)
702
- click.echo("✅ Netboot image prepared and TFTP server is running.")
778
+ netboot_options = {}
779
+ if images:
780
+ netboot_options["images"] = str(images)
781
+ if delete_cache:
782
+ netboot_options["delete_cache"] = True
783
+ setup_netboot(
784
+ version, boardtype, internal, autoflash, flavor='headless',
785
+ rootfs=rootfs, swtype=fwtype, allow_daily_fallback=force,
786
+ devkit=devkit_ip, **netboot_options,
787
+ )
788
+ click.echo("✅ Netboot session ended and the TFTP server is stopped.")
703
789
  else:
704
790
  write_image(version, boardtype, fwtype, internal, flavor='headless', recovery=recovery)
705
791
  click.echo("✅ Boot image successfully written.")
@@ -982,7 +1068,28 @@ def network_cmd(ctx):
982
1068
  """
983
1069
  Setup Network IP address on the DevKit
984
1070
 
985
- This command only works on the DevKit. It allows user to switch between DHCP and Static (Default addresses) IP.
1071
+ This command only works on the DevKit. Select an interface, then choose DHCP,
1072
+ Default Static IP, or Custom Static IP.
1073
+
1074
+ Custom Static IP prompts for an IPv4 address, such as 192.168.1.50, or an
1075
+ address with a subnet prefix, such as 192.168.1.50/24. A bare address uses
1076
+ the default static profile's prefix. Invalid addresses are rejected;
1077
+ leave the prompt blank to cancel.
1078
+
1079
+ Custom addresses are activated without changing the existing boot
1080
+ configuration. The default static settings are copied into a temporary
1081
+ custom profile with autoconnect disabled on NetworkManager, or a runtime
1082
+ configuration on systemd-networkd. After reboot, the board uses its
1083
+ existing startup configuration. Selecting DHCP or
1084
+ Default Static IP disables the custom configuration.
1085
+ DNS and other default static settings are inherited. If an inherited IPv4
1086
+ gateway is incompatible with the new address, enter a replacement gateway
1087
+ or leave it blank for no gateway. The default profile is not modified.
1088
+
1089
+ Network changes must be made from the DevKit serial console. SSH sessions,
1090
+ including commands launched through sudo, are rejected before configuration
1091
+ changes. A replacement custom profile is activated before the old one is
1092
+ removed.
986
1093
 
987
1094
  """
988
1095
  network_menu()
@@ -0,0 +1,5 @@
1
+ """Experimental CloudEx commands."""
2
+
3
+ from .commands import register_cloudex_commands
4
+
5
+ __all__ = ["register_cloudex_commands"]