nextmv 1.4.1.dev1__tar.gz → 1.4.1.dev3__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 (398) hide show
  1. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/CONTRIBUTING.md +1 -1
  2. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/PKG-INFO +1 -1
  3. nextmv-1.4.1.dev3/nextmv/__about__.py +1 -0
  4. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/account/create.py +3 -3
  5. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/account/get.py +2 -2
  6. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/create.py +2 -2
  7. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/exists.py +2 -2
  8. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/get.py +2 -2
  9. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/list.py +2 -2
  10. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/app/create.py +2 -2
  11. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/app/list.py +2 -2
  12. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/subscription/create.py +2 -2
  13. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/subscription/list.py +2 -2
  14. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/create.py +3 -3
  15. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/get.py +2 -2
  16. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/community/clone.py +2 -2
  17. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/community/list.py +1 -2
  18. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/configuration/config.py +5 -70
  19. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/_helpers.py +2 -3
  20. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/__init__.py +9 -2
  21. nextmv-1.4.1.dev3/nextmv/cloud/client.py +856 -0
  22. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cli/test_mcp.py +327 -218
  23. nextmv-1.4.1.dev3/tests/cloud/test_client.py +351 -0
  24. nextmv-1.4.1.dev1/nextmv/__about__.py +0 -1
  25. nextmv-1.4.1.dev1/nextmv/cloud/client.py +0 -506
  26. nextmv-1.4.1.dev1/tests/cloud/test_client.py +0 -35
  27. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/.gitignore +0 -0
  28. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/.python-version +0 -0
  29. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/LICENSE +0 -0
  30. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/README.md +0 -0
  31. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/__entrypoint__.py +0 -0
  32. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/__init__.py +0 -0
  33. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/_serialization.py +0 -0
  34. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/account.py +0 -0
  35. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/base_model.py +0 -0
  36. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/__init__.py +0 -0
  37. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/__init__.py +0 -0
  38. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/acceptance/__init__.py +0 -0
  39. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/acceptance/create.py +0 -0
  40. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/acceptance/delete.py +0 -0
  41. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/acceptance/get.py +0 -0
  42. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/acceptance/list.py +0 -0
  43. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/acceptance/update.py +0 -0
  44. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/account/__init__.py +0 -0
  45. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/account/delete.py +0 -0
  46. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/account/update.py +0 -0
  47. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/__init__.py +0 -0
  48. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/delete.py +0 -0
  49. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/push.py +0 -0
  50. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/app/update.py +0 -0
  51. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/__init__.py +0 -0
  52. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/create.py +0 -0
  53. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/delete.py +0 -0
  54. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/get.py +0 -0
  55. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/list.py +0 -0
  56. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/metadata.py +0 -0
  57. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/batch/update.py +0 -0
  58. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/data/__init__.py +0 -0
  59. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/data/upload.py +0 -0
  60. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/ensemble/__init__.py +0 -0
  61. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/ensemble/create.py +0 -0
  62. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/ensemble/delete.py +0 -0
  63. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/ensemble/get.py +0 -0
  64. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/ensemble/list.py +0 -0
  65. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/ensemble/update.py +0 -0
  66. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/input_set/__init__.py +0 -0
  67. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/input_set/create.py +0 -0
  68. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/input_set/delete.py +0 -0
  69. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/input_set/get.py +0 -0
  70. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/input_set/list.py +0 -0
  71. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/input_set/update.py +0 -0
  72. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/__init__.py +0 -0
  73. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/create.py +0 -0
  74. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/delete.py +0 -0
  75. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/exists.py +0 -0
  76. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/get.py +0 -0
  77. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/list.py +0 -0
  78. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/instance/update.py +0 -0
  79. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/managed_input/__init__.py +0 -0
  80. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/managed_input/create.py +0 -0
  81. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/managed_input/delete.py +0 -0
  82. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/managed_input/get.py +0 -0
  83. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/managed_input/list.py +0 -0
  84. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/managed_input/update.py +0 -0
  85. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/__init__.py +0 -0
  86. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/app/__init__.py +0 -0
  87. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/app/get.py +0 -0
  88. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/app/update.py +0 -0
  89. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/subscription/__init__.py +0 -0
  90. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/subscription/delete.py +0 -0
  91. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/subscription/get.py +0 -0
  92. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/version/__init__.py +0 -0
  93. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/version/create.py +0 -0
  94. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/version/get.py +0 -0
  95. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/version/list.py +0 -0
  96. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/marketplace/version/update.py +0 -0
  97. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/__init__.py +0 -0
  98. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/cancel.py +0 -0
  99. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/create.py +0 -0
  100. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/delete.py +0 -0
  101. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/get.py +0 -0
  102. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/input.py +0 -0
  103. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/list.py +0 -0
  104. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/logs.py +0 -0
  105. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/metadata.py +0 -0
  106. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/run/track.py +0 -0
  107. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/__init__.py +0 -0
  108. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/create.py +0 -0
  109. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/delete.py +0 -0
  110. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/get.py +0 -0
  111. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/list.py +0 -0
  112. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/metadata.py +0 -0
  113. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/scenario/update.py +0 -0
  114. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/secrets/__init__.py +0 -0
  115. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/secrets/create.py +0 -0
  116. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/secrets/delete.py +0 -0
  117. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/secrets/get.py +0 -0
  118. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/secrets/list.py +0 -0
  119. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/secrets/update.py +0 -0
  120. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/__init__.py +0 -0
  121. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/create.py +0 -0
  122. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/delete.py +0 -0
  123. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/get.py +0 -0
  124. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/list.py +0 -0
  125. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/metadata.py +0 -0
  126. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/start.py +0 -0
  127. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/stop.py +0 -0
  128. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/shadow/update.py +0 -0
  129. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/__init__.py +0 -0
  130. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/delete.py +0 -0
  131. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/disable.py +0 -0
  132. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/domain/__init__.py +0 -0
  133. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/domain/delete.py +0 -0
  134. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/enable.py +0 -0
  135. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/sso/update.py +0 -0
  136. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/__init__.py +0 -0
  137. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/create.py +0 -0
  138. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/delete.py +0 -0
  139. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/get.py +0 -0
  140. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/list.py +0 -0
  141. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/metadata.py +0 -0
  142. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/start.py +0 -0
  143. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/stop.py +0 -0
  144. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/switchback/update.py +0 -0
  145. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/upload/__init__.py +0 -0
  146. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/upload/create.py +0 -0
  147. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/__init__.py +0 -0
  148. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/create.py +0 -0
  149. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/delete.py +0 -0
  150. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/exists.py +0 -0
  151. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/get.py +0 -0
  152. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/list.py +0 -0
  153. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/cloud/version/update.py +0 -0
  154. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/community/__init__.py +0 -0
  155. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/configuration/__init__.py +0 -0
  156. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/configuration/create.py +0 -0
  157. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/configuration/delete.py +0 -0
  158. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/configuration/list.py +0 -0
  159. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/init.py +0 -0
  160. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/__init__.py +0 -0
  161. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/__init__.py +0 -0
  162. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/delete.py +0 -0
  163. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/get.py +0 -0
  164. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/list.py +0 -0
  165. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/register.py +0 -0
  166. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/registered.py +0 -0
  167. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/sync.py +0 -0
  168. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/app/update.py +0 -0
  169. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/__init__.py +0 -0
  170. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/create.py +0 -0
  171. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/get.py +0 -0
  172. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/input.py +0 -0
  173. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/list.py +0 -0
  174. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/logs.py +0 -0
  175. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/metadata.py +0 -0
  176. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/local/run/visuals.py +0 -0
  177. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/main.py +0 -0
  178. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/manifest/__init__.py +0 -0
  179. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/manifest/init.py +0 -0
  180. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/manifest/validate.py +0 -0
  181. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/__init__.py +0 -0
  182. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/serve.py +0 -0
  183. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/server.py +0 -0
  184. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/WORKFLOW.md +0 -0
  185. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/__init__.py +0 -0
  186. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/acceptance.py +0 -0
  187. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/account.py +0 -0
  188. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/app.py +0 -0
  189. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/batch.py +0 -0
  190. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/community.py +0 -0
  191. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/ensemble.py +0 -0
  192. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/guide.py +0 -0
  193. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/input_set.py +0 -0
  194. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/instance.py +0 -0
  195. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/local.py +0 -0
  196. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/managed_input.py +0 -0
  197. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/profile.py +0 -0
  198. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/run.py +0 -0
  199. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/scenario.py +0 -0
  200. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/secrets.py +0 -0
  201. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/shadow.py +0 -0
  202. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/sso.py +0 -0
  203. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/switchback.py +0 -0
  204. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/mcp/tools/version.py +0 -0
  205. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/message.py +0 -0
  206. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/options.py +0 -0
  207. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cli/version.py +0 -0
  208. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/__init__.py +0 -0
  209. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/acceptance_test.py +0 -0
  210. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/account.py +0 -0
  211. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_acceptance.py +0 -0
  212. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_batch_scenario.py +0 -0
  213. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_ensemble.py +0 -0
  214. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_input_set.py +0 -0
  215. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_instance.py +0 -0
  216. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_managed_input.py +0 -0
  217. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_run.py +0 -0
  218. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_secrets.py +0 -0
  219. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_shadow.py +0 -0
  220. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_switchback.py +0 -0
  221. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_utils.py +0 -0
  222. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/application/_version.py +0 -0
  223. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/assets.py +0 -0
  224. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/batch_experiment.py +0 -0
  225. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/community.py +0 -0
  226. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/ensemble.py +0 -0
  227. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/input_set.py +0 -0
  228. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/instance.py +0 -0
  229. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/integration.py +0 -0
  230. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/marketplace.py +0 -0
  231. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/package.py +0 -0
  232. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/scenario.py +0 -0
  233. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/secrets.py +0 -0
  234. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/shadow.py +0 -0
  235. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/sso.py +0 -0
  236. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/switchback.py +0 -0
  237. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/url.py +0 -0
  238. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/cloud/version.py +0 -0
  239. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/content_format.py +0 -0
  240. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/.gitignore +0 -0
  241. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/README.md +0 -0
  242. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/app.yaml +0 -0
  243. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/input.json +0 -0
  244. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/main.py +0 -0
  245. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/requirements.txt +0 -0
  246. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/src/__init__.py +0 -0
  247. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/default_app/src/visuals.py +0 -0
  248. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/deprecated.py +0 -0
  249. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/input.py +0 -0
  250. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/__init__.py +0 -0
  251. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/application.py +0 -0
  252. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/executor.py +0 -0
  253. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/geojson_handler.py +0 -0
  254. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/local.py +0 -0
  255. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/plotly_handler.py +0 -0
  256. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/registry.py +0 -0
  257. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/local/runner.py +0 -0
  258. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/logger.py +0 -0
  259. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/manifest.py +0 -0
  260. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/model.py +0 -0
  261. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/options.py +0 -0
  262. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/output.py +0 -0
  263. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/polling.py +0 -0
  264. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/run.py +0 -0
  265. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/safe.py +0 -0
  266. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/status.py +0 -0
  267. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/binary_json_app.yaml +0 -0
  268. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/binary_multi-file_app.yaml +0 -0
  269. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_app.yaml +0 -0
  270. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_hello-world/.gitignore +0 -0
  271. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_hello-world/README.md +0 -0
  272. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_hello-world/app.yaml +0 -0
  273. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_hello-world/go.mod +0 -0
  274. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_hello-world/input.json +0 -0
  275. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_json_hello-world/main.go +0 -0
  276. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_app.yaml +0 -0
  277. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_hello-world/.gitignore +0 -0
  278. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_hello-world/README.md +0 -0
  279. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_hello-world/app.yaml +0 -0
  280. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_hello-world/go.mod +0 -0
  281. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_hello-world/inputs/input.json +0 -0
  282. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/go_multi-file_hello-world/main.go +0 -0
  283. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_app.yaml +0 -0
  284. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_hello-world/.gitignore +0 -0
  285. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_hello-world/Main.java +0 -0
  286. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_hello-world/README.md +0 -0
  287. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_hello-world/app.yaml +0 -0
  288. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_hello-world/input.json +0 -0
  289. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_json_hello-world/pom.xml +0 -0
  290. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_app.yaml +0 -0
  291. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_hello-world/.gitignore +0 -0
  292. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_hello-world/Main.java +0 -0
  293. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_hello-world/README.md +0 -0
  294. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_hello-world/app.yaml +0 -0
  295. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_hello-world/inputs/input.json +0 -0
  296. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/java_multi-file_hello-world/pom.xml +0 -0
  297. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_app.yaml +0 -0
  298. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/.gitignore +0 -0
  299. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/README.md +0 -0
  300. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/app.yaml +0 -0
  301. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/input.json +0 -0
  302. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/main.py +0 -0
  303. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/requirements.txt +0 -0
  304. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_class-assign/visualizations.py +0 -0
  305. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/.gitignore +0 -0
  306. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/README.md +0 -0
  307. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/allocation/README.md +0 -0
  308. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/allocation/app.yaml +0 -0
  309. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/allocation/input.json +0 -0
  310. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/allocation/main.py +0 -0
  311. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/allocation/requirements.txt +0 -0
  312. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/allocation/visuals.py +0 -0
  313. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/workflow/README.md +0 -0
  314. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/workflow/app.yaml +0 -0
  315. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/workflow/input.json +0 -0
  316. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/workflow/main.py +0 -0
  317. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/workflow/requirements.txt +0 -0
  318. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_demand-alloc/workflow/visuals.py +0 -0
  319. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_hello-world/.gitignore +0 -0
  320. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_hello-world/README.md +0 -0
  321. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_hello-world/app.yaml +0 -0
  322. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_hello-world/input.json +0 -0
  323. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_hello-world/main.py +0 -0
  324. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_json_hello-world/requirements.txt +0 -0
  325. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_app.yaml +0 -0
  326. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/.gitignore +0 -0
  327. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/README.md +0 -0
  328. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/app.yaml +0 -0
  329. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/inputs/input.json +0 -0
  330. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/main.py +0 -0
  331. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/requirements.txt +0 -0
  332. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_class-assign/visualizations.py +0 -0
  333. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/README.md +0 -0
  334. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/allocation/README.md +0 -0
  335. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/allocation/app.yaml +0 -0
  336. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/allocation/input.json +0 -0
  337. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/allocation/main.py +0 -0
  338. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/allocation/requirements.txt +0 -0
  339. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/allocation/visuals.py +0 -0
  340. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/.gitignore +0 -0
  341. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/README.md +0 -0
  342. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/app.yaml +0 -0
  343. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/inputs/input.json +0 -0
  344. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/main.py +0 -0
  345. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/requirements.txt +0 -0
  346. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_demand-alloc/workflow/visuals.py +0 -0
  347. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_hello-world/.gitignore +0 -0
  348. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_hello-world/README.md +0 -0
  349. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_hello-world/app.yaml +0 -0
  350. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_hello-world/inputs/input.json +0 -0
  351. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_hello-world/main.py +0 -0
  352. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/nextmv/templates/python_multi-file_hello-world/requirements.txt +0 -0
  353. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/pyproject.toml +0 -0
  354. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/__init__.py +0 -0
  355. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cli/__init__.py +0 -0
  356. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cli/test_configuration.py +0 -0
  357. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cli/test_main.py +0 -0
  358. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cli/test_version.py +0 -0
  359. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cloud/__init__.py +0 -0
  360. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cloud/app.yaml +0 -0
  361. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cloud/test_instance.py +0 -0
  362. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cloud/test_package.py +0 -0
  363. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/cloud/test_scenario.py +0 -0
  364. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/integration/__init__.py +0 -0
  365. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/integration/cloud/__init__.py +0 -0
  366. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/integration/cloud/test_integration_cloud.py +0 -0
  367. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/integration/cloud/test_integration_marketplace.py +0 -0
  368. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/local/__init__.py +0 -0
  369. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/local/test_application.py +0 -0
  370. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/local/test_executor.py +0 -0
  371. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/local/test_registry.py +0 -0
  372. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/local/test_runner.py +0 -0
  373. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/__init__.py +0 -0
  374. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options1.py +0 -0
  375. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options2.py +0 -0
  376. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options3.py +0 -0
  377. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options4.py +0 -0
  378. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options5.py +0 -0
  379. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options6.py +0 -0
  380. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/scripts/options7.py +0 -0
  381. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_base_model.py +0 -0
  382. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_entrypoint/__init__.py +0 -0
  383. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_entrypoint/test_entrypoint.py +0 -0
  384. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_input.py +0 -0
  385. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_inputs/test_data.csv +0 -0
  386. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_inputs/test_data.json +0 -0
  387. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_inputs/test_data.txt +0 -0
  388. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_logger.py +0 -0
  389. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_manifest.py +0 -0
  390. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_model.py +0 -0
  391. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_options.py +0 -0
  392. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_output.py +0 -0
  393. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_polling.py +0 -0
  394. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_run.py +0 -0
  395. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_safe.py +0 -0
  396. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_serialization.py +0 -0
  397. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/tests/test_version.py +0 -0
  398. {nextmv-1.4.1.dev1 → nextmv-1.4.1.dev3}/uv.lock +0 -0
@@ -586,7 +586,7 @@ to use it.
586
586
  $ [dim]nextmv cloud app get --app-id hare-app --output app.json[/dim]
587
587
  """
588
588
 
589
- client = build_client(profile)
589
+ client = Client(profile=profile)
590
590
  in_progress("Getting application...")
591
591
 
592
592
  cloud_app = Application.get(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextmv
3
- Version: 1.4.1.dev1
3
+ Version: 1.4.1.dev3
4
4
  Summary: The all-purpose Python SDK for Nextmv
5
5
  Project-URL: Homepage, https://www.nextmv.io
6
6
  Project-URL: Documentation, https://nextmv-py.docs.nextmv.io/en/latest/nextmv/
@@ -0,0 +1 @@
1
+ __version__ = "v1.4.1.dev3"
@@ -6,10 +6,10 @@ from typing import Annotated
6
6
 
7
7
  import typer
8
8
 
9
- from nextmv.cli.configuration.config import build_client
10
9
  from nextmv.cli.message import in_progress, print_json
11
10
  from nextmv.cli.options import ProfileOption
12
11
  from nextmv.cloud.account import Account
12
+ from nextmv.cloud.client import Client
13
13
 
14
14
  # Set up subcommand application.
15
15
  app = typer.Typer()
@@ -70,7 +70,7 @@ def create(
70
70
  --admins "thumper@forestmail.com,flopsy@warren.io"[/dim]
71
71
  """
72
72
 
73
- cloud_client = build_client(profile)
73
+ client = Client(profile=profile)
74
74
  in_progress(msg="Creating account...")
75
75
 
76
76
  admin_list = []
@@ -82,5 +82,5 @@ def create(
82
82
  for sub_admin in sub_admins:
83
83
  admin_list.append(sub_admin.strip())
84
84
 
85
- account = Account.new(client=cloud_client, name=name, admins=admin_list)
85
+ account = Account.new(client=client, name=name, admins=admin_list)
86
86
  print_json(account.to_dict())
@@ -7,10 +7,10 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, print_json, success
12
11
  from nextmv.cli.options import AccountIDOption, ProfileOption
13
12
  from nextmv.cloud.account import Account
13
+ from nextmv.cloud.client import Client
14
14
 
15
15
  # Set up subcommand application.
16
16
  app = typer.Typer()
@@ -46,7 +46,7 @@ def get(
46
46
  $ [dim]nextmv cloud account get --account-id cottontail-couriers --output account.json[/dim]
47
47
  """
48
48
 
49
- client = build_client(profile)
49
+ client = Client(profile=profile)
50
50
  in_progress(msg="Getting account...")
51
51
 
52
52
  cloud_account = Account.get(
@@ -6,10 +6,10 @@ from typing import Annotated
6
6
 
7
7
  import typer
8
8
 
9
- from nextmv.cli.configuration.config import build_client
10
9
  from nextmv.cli.message import in_progress, print_json
11
10
  from nextmv.cli.options import ProfileOption
12
11
  from nextmv.cloud.application import Application
12
+ from nextmv.cloud.client import Client
13
13
 
14
14
  # Set up subcommand application.
15
15
  app = typer.Typer()
@@ -121,7 +121,7 @@ def create(
121
121
  --default-experiment-instance experiment-v1[/dim]
122
122
  """
123
123
 
124
- client = build_client(profile)
124
+ client = Client(profile=profile)
125
125
  if exist_ok:
126
126
  in_progress(msg="Creating or getting application...")
127
127
  else:
@@ -4,10 +4,10 @@ This module defines the cloud app exists command for the Nextmv CLI.
4
4
 
5
5
  import typer
6
6
 
7
- from nextmv.cli.configuration.config import build_client
8
7
  from nextmv.cli.message import in_progress, print_json
9
8
  from nextmv.cli.options import AppIDOption, ProfileOption
10
9
  from nextmv.cloud.application import Application
10
+ from nextmv.cloud.client import Client
11
11
 
12
12
  # Set up subcommand application.
13
13
  app = typer.Typer()
@@ -34,7 +34,7 @@ def exists(
34
34
  $ [dim]nextmv cloud app exists --app-id hare-app --profile hare[/dim]
35
35
  """
36
36
 
37
- client = build_client(profile)
37
+ client = Client(profile=profile)
38
38
  in_progress(msg="Checking if application exists...")
39
39
 
40
40
  ok = Application.exists(
@@ -7,10 +7,10 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, print_json, success
12
11
  from nextmv.cli.options import AppIDOption, ProfileOption
13
12
  from nextmv.cloud.application import Application
13
+ from nextmv.cloud.client import Client
14
14
 
15
15
  # Set up subcommand application.
16
16
  app = typer.Typer()
@@ -46,7 +46,7 @@ def get(
46
46
  $ [dim]nextmv cloud app get --app-id hare-app --output app.json[/dim]
47
47
  """
48
48
 
49
- client = build_client(profile)
49
+ client = Client(profile=profile)
50
50
  in_progress(msg="Getting application...")
51
51
 
52
52
  cloud_app = Application.get(client=client, id=app_id)
@@ -7,10 +7,10 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, print_json, success
12
11
  from nextmv.cli.options import ProfileOption
13
12
  from nextmv.cloud.application import list_applications
13
+ from nextmv.cloud.client import Client
14
14
 
15
15
  # Set up subcommand application.
16
16
  app = typer.Typer()
@@ -44,7 +44,7 @@ def list(
44
44
  $ [dim]nextmv cloud app list --output apps.json[/dim]
45
45
  """
46
46
 
47
- client = build_client(profile)
47
+ client = Client(profile=profile)
48
48
  in_progress(msg="Listing applications...")
49
49
 
50
50
  cloud_apps = list_applications(client)
@@ -6,9 +6,9 @@ from typing import Annotated
6
6
 
7
7
  import typer
8
8
 
9
- from nextmv.cli.configuration.config import build_client
10
9
  from nextmv.cli.message import in_progress, print_json
11
10
  from nextmv.cli.options import ProfileOption
11
+ from nextmv.cloud.client import Client
12
12
  from nextmv.cloud.marketplace import MarketplaceApplication
13
13
 
14
14
  # Set up subcommand application.
@@ -128,7 +128,7 @@ def create(
128
128
  --features "real-time optimization"[/dim]
129
129
  """
130
130
 
131
- client = build_client(profile)
131
+ client = Client(profile=profile)
132
132
  in_progress(msg="Creating application...")
133
133
  marketplace_app = MarketplaceApplication.new(
134
134
  client=client,
@@ -7,9 +7,9 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, print_json, success
12
11
  from nextmv.cli.options import ProfileOption
12
+ from nextmv.cloud.client import Client
13
13
  from nextmv.cloud.marketplace import list_marketplace_applications
14
14
 
15
15
  # Set up subcommand application.
@@ -60,7 +60,7 @@ def list(
60
60
  $ [dim]nextmv cloud marketplace app list --output apps.json[/dim]
61
61
  """
62
62
 
63
- client = build_client(profile)
63
+ client = Client(profile=profile)
64
64
  in_progress(msg="Listing applications...")
65
65
 
66
66
  mkt_apps = list_marketplace_applications(client, partner_id)
@@ -6,9 +6,9 @@ from typing import Annotated
6
6
 
7
7
  import typer
8
8
 
9
- from nextmv.cli.configuration.config import build_client
10
9
  from nextmv.cli.message import in_progress, print_json
11
10
  from nextmv.cli.options import ProfileOption
11
+ from nextmv.cloud.client import Client
12
12
  from nextmv.cloud.marketplace import MarketplaceSubscription
13
13
 
14
14
  # Set up subcommand application.
@@ -48,7 +48,7 @@ def create(
48
48
  --profile hare[/dim]
49
49
  """
50
50
 
51
- client = build_client(profile)
51
+ client = Client(profile=profile)
52
52
  in_progress(msg="Creating subscription...")
53
53
  subscription = MarketplaceSubscription.new(client, subscription_id)
54
54
  print_json(subscription.to_dict())
@@ -7,9 +7,9 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, print_json, success
12
11
  from nextmv.cli.options import ProfileOption
12
+ from nextmv.cloud.client import Client
13
13
  from nextmv.cloud.marketplace import list_marketplace_subscriptions
14
14
 
15
15
  # Set up subcommand application.
@@ -44,7 +44,7 @@ def list(
44
44
  $ [dim]nextmv cloud marketplace subscription list --output subscriptions.json[/dim]
45
45
  """
46
46
 
47
- client = build_client(profile)
47
+ client = Client(profile=profile)
48
48
  in_progress(msg="Listing subscriptions...")
49
49
 
50
50
  subscriptions = list_marketplace_subscriptions(client)
@@ -7,9 +7,9 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, success
12
11
  from nextmv.cli.options import ProfileOption
12
+ from nextmv.cloud.client import Client
13
13
  from nextmv.cloud.sso import SSOConfiguration
14
14
 
15
15
  # Set up subcommand application.
@@ -99,11 +99,11 @@ def create(
99
99
  if stdin is not None:
100
100
  metadata_document = stdin
101
101
 
102
- cloud_client = build_client(profile)
102
+ client = Client(profile=profile)
103
103
  in_progress(msg="Creating configuration...")
104
104
 
105
105
  SSOConfiguration.new(
106
- client=cloud_client,
106
+ client=client,
107
107
  allow_non_domain_users=allow_non_domain_users,
108
108
  enabled=enabled,
109
109
  metadata_url=metadata_url,
@@ -7,9 +7,9 @@ from typing import Annotated
7
7
 
8
8
  import typer
9
9
 
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cli.message import in_progress, print_json, success
12
11
  from nextmv.cli.options import ProfileOption
12
+ from nextmv.cloud.client import Client
13
13
  from nextmv.cloud.sso import SSOConfiguration
14
14
 
15
15
  # Set up subcommand application.
@@ -44,7 +44,7 @@ def get(
44
44
  $ [dim]nextmv cloud sso get --output sso_config.json[/dim]
45
45
  """
46
46
 
47
- client = build_client(profile)
47
+ client = Client(profile=profile)
48
48
  in_progress(msg="Getting SSO configuration...")
49
49
 
50
50
  sso_config = SSOConfiguration.get(client)
@@ -6,9 +6,9 @@ from typing import Annotated
6
6
 
7
7
  import typer
8
8
 
9
- from nextmv.cli.configuration.config import build_client
10
9
  from nextmv.cli.message import error
11
10
  from nextmv.cli.options import ProfileOption
11
+ from nextmv.cloud.client import Client
12
12
  from nextmv.cloud.community import clone_community_app
13
13
 
14
14
  # Set up subcommand application.
@@ -77,7 +77,7 @@ def clone(
77
77
  if version is not None and version == "":
78
78
  error("The --version flag cannot be an empty string.")
79
79
 
80
- client = build_client(profile)
80
+ client = Client(profile=profile)
81
81
  clone_community_app(
82
82
  client=client,
83
83
  app=app,
@@ -9,7 +9,6 @@ import typer
9
9
  from rich.console import Console
10
10
  from rich.table import Table
11
11
 
12
- from nextmv.cli.configuration.config import build_client
13
12
  from nextmv.cli.message import error
14
13
  from nextmv.cli.options import ProfileOption
15
14
  from nextmv.cloud.client import Client
@@ -62,7 +61,7 @@ def list(
62
61
  if app is not None and app == "":
63
62
  error("The --app flag cannot be an empty string.")
64
63
 
65
- client = build_client(profile)
64
+ client = Client(profile=profile)
66
65
  if flat and app is None:
67
66
  _apps_list(client)
68
67
  raise typer.Exit()
@@ -73,71 +73,6 @@ def non_profile_keys() -> set[str]:
73
73
  return {API_KEY_KEY, ENDPOINT_KEY}
74
74
 
75
75
 
76
- def build_client(profile: str | None = None) -> Client:
77
- """
78
- Builds a `cloud.Client` using the API key and endpoint for the given
79
- profile. If no profile is given, the default profile is used. If either the
80
- API key or endpoint is missing, an exception is raised. If the config is
81
- not available, an exception is raised.
82
-
83
- Parameters
84
- ----------
85
- profile : str | None
86
- The profile name to use. If None, the default profile is used.
87
-
88
- Returns
89
- -------
90
- Client
91
- A client configured with the API key and endpoint for the selected
92
- profile or the default configuration.
93
-
94
- Raises
95
- ------
96
- typer.Exit
97
- If no configuration is found, if the requested profile does not exist,
98
- or if the API key or endpoint (for either the selected profile or the
99
- default configuration) is not set or is empty.
100
- """
101
-
102
- config = load_config()
103
- if config == {}:
104
- error("No configuration found. Please run [code]nextmv configuration create[/code].")
105
-
106
- if profile is not None:
107
- if profile not in config:
108
- error(
109
- f"Profile [magenta]{profile}[/magenta] does not exist. "
110
- "Create it using [code]nextmv configuration create[/code] with the --profile option."
111
- )
112
-
113
- api_key = config[profile].get(API_KEY_KEY)
114
- if api_key is None or api_key == "":
115
- error(
116
- f"API key for profile [magenta]{profile}[/magenta] is not set or is empty. "
117
- "Set it using [code]nextmv configuration create[/code] with the --profile and --api-key options."
118
- )
119
-
120
- endpoint = config[profile].get(ENDPOINT_KEY)
121
- if endpoint is None or endpoint == "":
122
- error(
123
- f"Endpoint for profile [magenta]{profile}[/magenta] is not set or is empty. "
124
- "Please run [code]nextmv configuration create[/code]."
125
- )
126
- else:
127
- api_key = config.get(API_KEY_KEY)
128
- if api_key is None or api_key == "":
129
- error(
130
- "Default API key is not set or is empty. "
131
- "Please run [code]nextmv configuration create[/code] with the --api-key option."
132
- )
133
-
134
- endpoint = config.get(ENDPOINT_KEY)
135
- if endpoint is None or endpoint == "":
136
- error("Default endpoint is not set or is empty. Please run [code]nextmv configuration create[/code].")
137
-
138
- return Client(api_key=api_key, url=f"https://{endpoint}")
139
-
140
-
141
76
  def build_cloud_app(app_id: str, profile: str | None = None) -> tuple[cloud.Application, bool]:
142
77
  """
143
78
  Builds a `cloud.Application` using the given application ID and the API
@@ -163,7 +98,7 @@ def build_cloud_app(app_id: str, profile: str | None = None) -> tuple[cloud.Appl
163
98
  If the application does not exist.
164
99
  """
165
100
 
166
- client = build_client(profile)
101
+ client = Client(profile=profile)
167
102
  exists = cloud.Application.exists(client=client, id=app_id)
168
103
  if exists:
169
104
  return cloud.Application(client=client, id=app_id), False
@@ -213,7 +148,7 @@ def build_marketplace_app(app_id: str, partner_id: str, profile: str | None = No
213
148
  If the marketplace application does not exist.
214
149
  """
215
150
 
216
- client = build_client(profile)
151
+ client = Client(profile=profile)
217
152
  try:
218
153
  return MarketplaceApplication.get(
219
154
  client=client,
@@ -253,7 +188,7 @@ def build_marketplace_subscription(subscription_id: str, profile: str | None = N
253
188
  If the marketplace subscription does not exist.
254
189
  """
255
190
 
256
- client = build_client(profile)
191
+ client = Client(profile=profile)
257
192
  try:
258
193
  return MarketplaceSubscription.get(client=client, subscription_id=subscription_id)
259
194
  except Exception as e:
@@ -286,7 +221,7 @@ def build_account(account_id: str | None = None, profile: str | None = None) ->
286
221
  If the configuration is invalid or missing.
287
222
  """
288
223
 
289
- client = build_client(profile)
224
+ client = Client(profile=profile)
290
225
 
291
226
  return Account(account_id=account_id, client=client)
292
227
 
@@ -312,7 +247,7 @@ def build_sso_config(profile: str | None = None) -> SSOConfiguration:
312
247
  If the configuration is invalid or missing.
313
248
  """
314
249
 
315
- client = build_client(profile)
250
+ client = Client(profile=profile)
316
251
 
317
252
  return SSOConfiguration(client=client)
318
253
 
@@ -7,7 +7,6 @@ import tempfile
7
7
  from typing import Any
8
8
 
9
9
  from nextmv import local
10
- from nextmv.cli.configuration.config import build_client
11
10
  from nextmv.cloud import Application, Client
12
11
  from nextmv.input import InputFormat
13
12
  from nextmv.local.executor import process_run_visuals
@@ -67,9 +66,9 @@ class ProfileSession:
67
66
 
68
67
  # Fall back to the CLI configuration file (~/.nextmv/config.yaml).
69
68
  try:
70
- # "default" means use top-level keys (profile=None in build_client).
69
+ # "default" means use top-level keys (profile=None in Client).
71
70
  p = None if resolved is None or resolved == "default" else resolved
72
- return build_client(profile=p)
71
+ return Client(profile=p)
73
72
  except Exception as e:
74
73
  raise ValueError(
75
74
  f"Could not build a Nextmv client: {e}. Either set the "
@@ -198,8 +198,15 @@ class Application(
198
198
  """Last update timestamp of the application."""
199
199
 
200
200
  # SDK-specific attributes for convenience when using methods.
201
- client: Client = Field(exclude=True)
202
- """Client to use for interacting with the Nextmv Cloud API."""
201
+ client: Client = Field(exclude=True, default_factory=Client)
202
+ """
203
+ Client to use for interacting with the Nextmv Cloud API.
204
+
205
+ This attribute is optional, and if not provided, it will be initialized
206
+ with a default `Client` instance. We suggest that you read the docstrings
207
+ on the `Client` class for more information about how to properly initialize
208
+ the client using your API key and other configurations.
209
+ """
203
210
  endpoint: str = Field(exclude=True, default="v1/applications/{id}")
204
211
  """Base endpoint for the application."""
205
212
  experiments_endpoint: str = Field(exclude=True, default="{base}/experiments")