nextmv 1.0.0.dev8__tar.gz → 1.0.0.dev9__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 (225) hide show
  1. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/PKG-INFO +3 -4
  2. nextmv-1.0.0.dev9/nextmv/__about__.py +1 -0
  3. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/_serialization.py +1 -1
  4. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/acceptance/create.py +12 -12
  5. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/community/clone.py +2 -1
  6. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/__init__.py +0 -2
  7. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_run.py +3 -10
  8. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/client.py +1 -1
  9. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/main.py +6 -4
  10. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/executor.py +3 -83
  11. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/geojson_handler.py +1 -1
  12. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/manifest.py +7 -11
  13. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/model.py +16 -13
  14. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/output.py +21 -57
  15. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/run.py +3 -12
  16. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/pyproject.toml +2 -6
  17. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cloud/app.yaml +0 -1
  18. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cloud/test_package.py +1 -1
  19. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_entrypoint/test_entrypoint.py +7 -8
  20. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_manifest.py +0 -1
  21. nextmv-1.0.0.dev8/nextmv/__about__.py +0 -1
  22. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/.gitignore +0 -0
  23. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/LICENSE +0 -0
  24. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/README.md +0 -0
  25. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/__entrypoint__.py +0 -0
  26. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/__init__.py +0 -0
  27. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/base_model.py +0 -0
  28. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/CONTRIBUTING.md +0 -0
  29. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/__init__.py +0 -0
  30. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/__init__.py +0 -0
  31. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/acceptance/__init__.py +0 -0
  32. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/acceptance/delete.py +0 -0
  33. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/acceptance/get.py +0 -0
  34. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/acceptance/list.py +0 -0
  35. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/acceptance/update.py +0 -0
  36. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/account/__init__.py +0 -0
  37. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/account/create.py +0 -0
  38. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/account/delete.py +0 -0
  39. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/account/get.py +0 -0
  40. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/account/update.py +0 -0
  41. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/__init__.py +0 -0
  42. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/create.py +0 -0
  43. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/delete.py +0 -0
  44. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/exists.py +0 -0
  45. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/get.py +0 -0
  46. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/list.py +0 -0
  47. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/push.py +0 -0
  48. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/app/update.py +0 -0
  49. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/__init__.py +0 -0
  50. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/create.py +0 -0
  51. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/delete.py +0 -0
  52. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/get.py +0 -0
  53. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/list.py +0 -0
  54. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/metadata.py +0 -0
  55. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/batch/update.py +0 -0
  56. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/data/__init__.py +0 -0
  57. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/data/upload.py +0 -0
  58. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/ensemble/__init__.py +0 -0
  59. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/ensemble/create.py +0 -0
  60. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/ensemble/delete.py +0 -0
  61. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/ensemble/get.py +0 -0
  62. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/ensemble/list.py +0 -0
  63. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/ensemble/update.py +0 -0
  64. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/input_set/__init__.py +0 -0
  65. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/input_set/create.py +0 -0
  66. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/input_set/get.py +0 -0
  67. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/input_set/list.py +0 -0
  68. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/input_set/update.py +0 -0
  69. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/__init__.py +0 -0
  70. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/create.py +0 -0
  71. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/delete.py +0 -0
  72. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/exists.py +0 -0
  73. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/get.py +0 -0
  74. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/list.py +0 -0
  75. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/instance/update.py +0 -0
  76. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/managed_input/__init__.py +0 -0
  77. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/managed_input/create.py +0 -0
  78. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/managed_input/delete.py +0 -0
  79. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/managed_input/get.py +0 -0
  80. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/managed_input/list.py +0 -0
  81. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/managed_input/update.py +0 -0
  82. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/__init__.py +0 -0
  83. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/cancel.py +0 -0
  84. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/create.py +0 -0
  85. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/get.py +0 -0
  86. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/input.py +0 -0
  87. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/list.py +0 -0
  88. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/logs.py +0 -0
  89. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/metadata.py +0 -0
  90. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/run/track.py +0 -0
  91. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/__init__.py +0 -0
  92. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/create.py +0 -0
  93. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/delete.py +0 -0
  94. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/get.py +0 -0
  95. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/list.py +0 -0
  96. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/metadata.py +0 -0
  97. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/scenario/update.py +0 -0
  98. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/secrets/__init__.py +0 -0
  99. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/secrets/create.py +0 -0
  100. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/secrets/delete.py +0 -0
  101. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/secrets/get.py +0 -0
  102. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/secrets/list.py +0 -0
  103. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/secrets/update.py +0 -0
  104. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/__init__.py +0 -0
  105. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/create.py +0 -0
  106. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/delete.py +0 -0
  107. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/get.py +0 -0
  108. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/list.py +0 -0
  109. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/metadata.py +0 -0
  110. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/start.py +0 -0
  111. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/stop.py +0 -0
  112. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/shadow/update.py +0 -0
  113. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/__init__.py +0 -0
  114. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/create.py +0 -0
  115. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/delete.py +0 -0
  116. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/get.py +0 -0
  117. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/list.py +0 -0
  118. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/metadata.py +0 -0
  119. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/start.py +0 -0
  120. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/stop.py +0 -0
  121. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/switchback/update.py +0 -0
  122. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/upload/__init__.py +0 -0
  123. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/upload/create.py +0 -0
  124. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/__init__.py +0 -0
  125. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/create.py +0 -0
  126. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/delete.py +0 -0
  127. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/exists.py +0 -0
  128. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/get.py +0 -0
  129. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/list.py +0 -0
  130. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/cloud/version/update.py +0 -0
  131. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/community/__init__.py +0 -0
  132. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/community/list.py +0 -0
  133. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/configuration/__init__.py +0 -0
  134. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/configuration/config.py +0 -0
  135. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/configuration/create.py +0 -0
  136. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/configuration/delete.py +0 -0
  137. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/configuration/list.py +0 -0
  138. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/confirm.py +0 -0
  139. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/main.py +0 -0
  140. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/message.py +0 -0
  141. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/options.py +0 -0
  142. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cli/version.py +0 -0
  143. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/__init__.py +0 -0
  144. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/acceptance_test.py +0 -0
  145. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/account.py +0 -0
  146. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_acceptance.py +0 -0
  147. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_batch_scenario.py +0 -0
  148. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_ensemble.py +0 -0
  149. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_input_set.py +0 -0
  150. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_instance.py +0 -0
  151. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_managed_input.py +0 -0
  152. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_secrets.py +0 -0
  153. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_shadow.py +0 -0
  154. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_switchback.py +0 -0
  155. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_utils.py +0 -0
  156. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/application/_version.py +0 -0
  157. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/assets.py +0 -0
  158. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/batch_experiment.py +0 -0
  159. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/ensemble.py +0 -0
  160. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/input_set.py +0 -0
  161. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/instance.py +0 -0
  162. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/integration.py +0 -0
  163. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/package.py +0 -0
  164. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/scenario.py +0 -0
  165. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/secrets.py +0 -0
  166. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/shadow.py +0 -0
  167. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/switchback.py +0 -0
  168. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/url.py +0 -0
  169. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/cloud/version.py +0 -0
  170. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/.gitignore +0 -0
  171. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/README.md +0 -0
  172. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/app.yaml +0 -0
  173. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/input.json +0 -0
  174. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/requirements.txt +0 -0
  175. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/src/__init__.py +0 -0
  176. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/default_app/src/visuals.py +0 -0
  177. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/deprecated.py +0 -0
  178. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/input.py +0 -0
  179. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/__init__.py +0 -0
  180. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/application.py +0 -0
  181. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/local.py +0 -0
  182. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/plotly_handler.py +0 -0
  183. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/local/runner.py +0 -0
  184. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/logger.py +0 -0
  185. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/options.py +0 -0
  186. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/polling.py +0 -0
  187. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/safe.py +0 -0
  188. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/nextmv/status.py +0 -0
  189. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/__init__.py +0 -0
  190. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cli/__init__.py +0 -0
  191. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cli/test_community.py +0 -0
  192. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cli/test_configuration.py +0 -0
  193. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cli/test_main.py +0 -0
  194. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cli/test_version.py +0 -0
  195. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cloud/__init__.py +0 -0
  196. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cloud/test_client.py +0 -0
  197. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cloud/test_instance.py +0 -0
  198. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/cloud/test_scenario.py +0 -0
  199. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/local/__init__.py +0 -0
  200. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/local/test_application.py +0 -0
  201. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/local/test_executor.py +0 -0
  202. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/local/test_runner.py +0 -0
  203. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/__init__.py +0 -0
  204. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options1.py +0 -0
  205. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options2.py +0 -0
  206. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options3.py +0 -0
  207. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options4.py +0 -0
  208. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options5.py +0 -0
  209. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options6.py +0 -0
  210. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/scripts/options7.py +0 -0
  211. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_base_model.py +0 -0
  212. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_entrypoint/__init__.py +0 -0
  213. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_input.py +0 -0
  214. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_inputs/test_data.csv +0 -0
  215. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_inputs/test_data.json +0 -0
  216. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_inputs/test_data.txt +0 -0
  217. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_logger.py +0 -0
  218. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_model.py +0 -0
  219. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_options.py +0 -0
  220. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_output.py +0 -0
  221. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_polling.py +0 -0
  222. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_run.py +0 -0
  223. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_safe.py +0 -0
  224. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_serialization.py +0 -0
  225. {nextmv-1.0.0.dev8 → nextmv-1.0.0.dev9}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextmv
3
- Version: 1.0.0.dev8
3
+ Version: 1.0.0.dev9
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/
@@ -229,8 +229,7 @@ Requires-Dist: plotly>=6.0.1; extra == 'all'
229
229
  Provides-Extra: dev
230
230
  Requires-Dist: build>=1.0.3; extra == 'dev'
231
231
  Requires-Dist: folium>=0.20.0; extra == 'dev'
232
- Requires-Dist: mlflow>=2.19.0; extra == 'dev'
233
- Requires-Dist: nextroute>=1.11.1; extra == 'dev'
232
+ Requires-Dist: mlflow>=3.9.0; extra == 'dev'
234
233
  Requires-Dist: openpyxl>=3.1.5; extra == 'dev'
235
234
  Requires-Dist: pandas>=2.2.3; extra == 'dev'
236
235
  Requires-Dist: plotly>=6.0.1; extra == 'dev'
@@ -241,7 +240,7 @@ Requires-Dist: ruff>=0.1.7; extra == 'dev'
241
240
  Requires-Dist: twine>=4.0.2; extra == 'dev'
242
241
  Requires-Dist: urllib3>=2.1.0; extra == 'dev'
243
242
  Provides-Extra: notebook
244
- Requires-Dist: mlflow>=2.19.0; extra == 'notebook'
243
+ Requires-Dist: mlflow>=3.9.0; extra == 'notebook'
245
244
  Description-Content-Type: text/markdown
246
245
 
247
246
  # Nextmv Python SDK
@@ -0,0 +1 @@
1
+ __version__ = "v1.0.0.dev9"
@@ -90,7 +90,7 @@ def _custom_serial(obj: Any) -> str:
90
90
  If the object type is not supported for serialization.
91
91
  """
92
92
 
93
- if isinstance(obj, datetime.datetime | datetime.date):
93
+ if isinstance(obj, (datetime.datetime, datetime.date)):
94
94
  return obj.isoformat()
95
95
 
96
96
  raise TypeError(f"Type {type(obj)} not serializable")
@@ -45,7 +45,7 @@ app = typer.Typer()
45
45
  - Multiple metrics as a [magenta]json[/magenta] array in a single --metrics flag.
46
46
 
47
47
  Each metric must have the following fields:
48
- - [magenta]field[/magenta]: Field of the metric to measure (e.g., "result.custom.unassigned").
48
+ - [magenta]field[/magenta]: Field of the metric to measure (e.g., "solution.objective").
49
49
  - [magenta]metric_type[/magenta]: Type of metric comparison. Allowed values: {enum_values(MetricType)}.
50
50
  - [magenta]params[/magenta]: Parameters of the metric comparison.
51
51
  - [magenta]operator[/magenta]: Comparison operator. Allowed values: {enum_values(Comparison)}.
@@ -71,8 +71,8 @@ app = typer.Typer()
71
71
  [bold][underline]Examples[/underline][/bold]
72
72
 
73
73
  - Create an acceptance test with a single metric.
74
- $ [green]METRIC='{{
75
- "field": "result.custom.unassigned",
74
+ $ [dim]METRIC='{{
75
+ "field": "solution.objective",
76
76
  "metric_type": "direct-comparison",
77
77
  "params": {{
78
78
  "operator": "lt",
@@ -85,8 +85,8 @@ app = typer.Typer()
85
85
  --metrics "$METRIC" --input-set-id input-set-123[/dim]
86
86
 
87
87
  - Create with multiple metrics by repeating the flag.
88
- $ [green]METRIC1='{{
89
- "field": "result.custom.unassigned",
88
+ $ [dim]METRIC1='{{
89
+ "field": "solution.objective",
90
90
  "metric_type": "direct-comparison",
91
91
  "params": {{
92
92
  "operator": "lt",
@@ -95,7 +95,7 @@ app = typer.Typer()
95
95
  "statistic": "mean"
96
96
  }}'
97
97
  METRIC2='{{
98
- "field": "run.duration",
98
+ "field": "statistics.run.duration",
99
99
  "metric_type": "direct-comparison",
100
100
  "params": {{
101
101
  "operator": "le",
@@ -110,7 +110,7 @@ app = typer.Typer()
110
110
  - Create with multiple metrics in a single [magenta]json[/magenta] array.
111
111
  $ [dim]METRICS='[
112
112
  {{
113
- "field": "result.custom.unassigned",
113
+ "field": "solution.objective",
114
114
  "metric_type": "direct-comparison",
115
115
  "params": {{
116
116
  "operator": "lt",
@@ -119,7 +119,7 @@ app = typer.Typer()
119
119
  "statistic": "mean"
120
120
  }},
121
121
  {{
122
- "field": "run.duration",
122
+ "field": "statistics.run.duration",
123
123
  "metric_type": "direct-comparison",
124
124
  "params": {{
125
125
  "operator": "le",
@@ -133,8 +133,8 @@ app = typer.Typer()
133
133
  --metrics "$METRICS" --input-set-id input-set-123[/dim]
134
134
 
135
135
  - Create an acceptance test and wait for it to complete.
136
- $ [green]METRIC='{{
137
- "field": "result.custom.unassigned",
136
+ $ [dim]METRIC='{{
137
+ "field": "solution.objective",
138
138
  "metric_type": "direct-comparison",
139
139
  "params": {{
140
140
  "operator": "lt",
@@ -147,8 +147,8 @@ app = typer.Typer()
147
147
  --metrics "$METRIC" --input-set-id input-set-123 --wait[/dim]
148
148
 
149
149
  - Create an acceptance test and save the results to a file, waiting for completion.
150
- $ [green]METRIC='{{
151
- "field": "result.custom.unassigned",
150
+ $ [dim]METRIC='{{
151
+ "field": "solution.objective",
152
152
  "metric_type": "direct-comparison",
153
153
  "params": {{
154
154
  "operator": "lt",
@@ -119,7 +119,7 @@ def clone(
119
119
  # Extract the tarball to a temporary directory to handle nested structure
120
120
  with tempfile.TemporaryDirectory() as temp_dir:
121
121
  with tarfile.open(downloaded_object, "r:gz") as tar:
122
- tar.extractall(path=temp_dir)
122
+ tar.extractall(path=temp_dir, filter=None)
123
123
 
124
124
  # Find the extracted directory (typically the app name)
125
125
  extracted_items = os.listdir(temp_dir)
@@ -270,3 +270,4 @@ def download_object(file: str, path: str, output_dir: str, output_file: str, pro
270
270
  f.write(response.content)
271
271
 
272
272
  return file_name
273
+ return file_name
@@ -867,8 +867,6 @@ class Application(
867
867
  output_config = multi_config["output_configuration"] = {}
868
868
  if content.multi_file.output.statistics:
869
869
  output_config["statistics_path"] = content.multi_file.output.statistics
870
- if content.multi_file.output.metrics:
871
- output_config["metrics_path"] = content.multi_file.output.metrics
872
870
  if content.multi_file.output.assets:
873
871
  output_config["assets_path"] = content.multi_file.output.assets
874
872
  if content.multi_file.output.solutions:
@@ -21,14 +21,7 @@ from nextmv.cloud.url import DownloadURL
21
21
  from nextmv.input import Input, InputFormat
22
22
  from nextmv.logger import log
23
23
  from nextmv.options import Options
24
- from nextmv.output import (
25
- ASSETS_KEY,
26
- STATISTICS_KEY,
27
- Asset,
28
- Output,
29
- OutputFormat,
30
- Statistics,
31
- )
24
+ from nextmv.output import ASSETS_KEY, STATISTICS_KEY, Asset, Output, OutputFormat, Statistics
32
25
  from nextmv.polling import DEFAULT_POLLING_OPTIONS, PollingOptions, poll
33
26
  from nextmv.run import (
34
27
  ExternalRunResult,
@@ -642,7 +635,7 @@ class ApplicationRunMixin:
642
635
  temp_tar_path = os.path.join(tmpdirname, f"{run_id}.tar.gz")
643
636
  with open(temp_tar_path, "wb") as f:
644
637
  f.write(download_response.content)
645
- shutil.unpack_archive(temp_tar_path, output_dir_path)
638
+ shutil.unpack_archive(temp_tar_path, output_dir_path, filter=None)
646
639
 
647
640
  return
648
641
 
@@ -1294,7 +1287,7 @@ class ApplicationRunMixin:
1294
1287
  temp_tar_path = os.path.join(tmpdirname, f"{run_id}.tar.gz")
1295
1288
  with open(temp_tar_path, "wb") as f:
1296
1289
  f.write(download_response.content)
1297
- shutil.unpack_archive(temp_tar_path, output_dir_path)
1290
+ shutil.unpack_archive(temp_tar_path, output_dir_path, filter=None)
1298
1291
  else:
1299
1292
  result.output = download_response.json()
1300
1293
 
@@ -303,7 +303,7 @@ class Client:
303
303
  if data is not None:
304
304
  kwargs["data"] = data
305
305
  if payload is not None:
306
- if isinstance(payload, dict | list):
306
+ if isinstance(payload, (dict, list)):
307
307
  data = deflated_serialize_json(payload, json_configurations=json_configurations)
308
308
  kwargs["data"] = data
309
309
  else:
@@ -26,10 +26,12 @@ assets = create_visuals(name, input.data["radius"], input.data["distance"])
26
26
  output = nextmv.Output(
27
27
  options=options,
28
28
  solution={"message": message},
29
- metrics={
30
- "value": 1.23,
31
- "custom": {"message": message},
32
- },
29
+ statistics=nextmv.Statistics(
30
+ result=nextmv.ResultStatistics(
31
+ value=1.23,
32
+ custom={"message": message},
33
+ ),
34
+ ),
33
35
  assets=assets,
34
36
  )
35
37
  nextmv.write(output)
@@ -22,8 +22,6 @@ process_run_information
22
22
  Function to update run metadata including duration and status.
23
23
  process_run_logs
24
24
  Function to process and save run logs.
25
- process_run_metrics
26
- Function to process and save run metrics.
27
25
  process_run_statistics
28
26
  Function to process and save run statistics.
29
27
  process_run_assets
@@ -59,16 +57,7 @@ from nextmv.local.local import (
59
57
  )
60
58
  from nextmv.local.plotly_handler import handle_plotly_visual
61
59
  from nextmv.manifest import Manifest, ManifestType
62
- from nextmv.output import (
63
- ASSETS_KEY,
64
- METRICS_KEY,
65
- OUTPUTS_KEY,
66
- SOLUTIONS_KEY,
67
- STATISTICS_KEY,
68
- Asset,
69
- OutputFormat,
70
- VisualSchema,
71
- )
60
+ from nextmv.output import ASSETS_KEY, OUTPUTS_KEY, SOLUTIONS_KEY, STATISTICS_KEY, Asset, OutputFormat, VisualSchema
72
61
  from nextmv.status import StatusV2
73
62
 
74
63
 
@@ -316,7 +305,7 @@ def process_run_output(
316
305
  ) -> None:
317
306
  """
318
307
  Processes the result of the subprocess run. This function is in charge of
319
- handling the run results, including solutions, statistics, metrics, logs, assets,
308
+ handling the run results, including solutions, statistics, logs, assets,
320
309
  and visuals.
321
310
 
322
311
  Parameters
@@ -358,13 +347,6 @@ def process_run_output(
358
347
  result=result,
359
348
  stdout_output=stdout_output,
360
349
  )
361
- process_run_metrics(
362
- temp_run_outputs_dir=temp_run_outputs_dir,
363
- outputs_dir=outputs_dir,
364
- stdout_output=stdout_output,
365
- temp_src=temp_src,
366
- manifest=manifest,
367
- )
368
350
  process_run_statistics(
369
351
  temp_run_outputs_dir=temp_run_outputs_dir,
370
352
  outputs_dir=outputs_dir,
@@ -517,65 +499,6 @@ def process_run_logs(
517
499
 
518
500
  f.write(std_err)
519
501
 
520
- def process_run_metrics(
521
- temp_run_outputs_dir: str,
522
- outputs_dir: str,
523
- stdout_output: str | dict[str, Any],
524
- temp_src: str,
525
- manifest: Manifest,
526
- ) -> None:
527
- """
528
- Processes the metrics of the run. Checks for an outputs/metrics folder
529
- or custom metrics file location from manifest. If found, copies to run
530
- directory. Otherwise, attempts to extract metrics from stdout.
531
-
532
- Parameters
533
- ----------
534
- temp_run_outputs_dir : str
535
- The path to the temporary outputs directory.
536
- outputs_dir : str
537
- The path to the outputs directory in the run directory.
538
- stdout_output : Union[str, dict[str, Any]]
539
- The stdout output of the run, either as raw string or parsed dictionary.
540
- temp_src : str
541
- The path to the temporary source directory.
542
- manifest : Manifest
543
- The application manifest containing configuration and custom paths.
544
- """
545
-
546
- metrics_dst = os.path.join(outputs_dir, METRICS_KEY)
547
- os.makedirs(metrics_dst, exist_ok=True)
548
- metrics_file = f"{METRICS_KEY}.json"
549
-
550
- # Check for custom location in manifest and override metrics_src if needed.
551
- if (
552
- manifest.configuration is not None
553
- and manifest.configuration.content is not None
554
- and manifest.configuration.content.format == OutputFormat.MULTI_FILE
555
- and manifest.configuration.content.multi_file is not None
556
- ):
557
- metrics_src_file = os.path.join(temp_src, manifest.configuration.content.multi_file.output.metrics)
558
-
559
- # If the custom metrics file exists, copy it to the metrics destination
560
- if os.path.exists(metrics_src_file) and os.path.isfile(metrics_src_file):
561
- metrics_dst_file = os.path.join(metrics_dst, metrics_file)
562
- shutil.copy2(metrics_src_file, metrics_dst_file)
563
- return
564
-
565
- metrics_src = os.path.join(temp_run_outputs_dir, METRICS_KEY)
566
- if os.path.exists(metrics_src) and os.path.isdir(metrics_src):
567
- shutil.copytree(metrics_src, metrics_dst, dirs_exist_ok=True)
568
- return
569
-
570
- if not isinstance(stdout_output, dict):
571
- return
572
-
573
- if METRICS_KEY not in stdout_output:
574
- return
575
-
576
- with open(os.path.join(metrics_dst, metrics_file), "w") as f:
577
- metrics = {METRICS_KEY: stdout_output[METRICS_KEY]}
578
- json.dump(metrics, f, indent=2)
579
502
 
580
503
  def process_run_statistics(
581
504
  temp_run_outputs_dir: str,
@@ -585,9 +508,6 @@ def process_run_statistics(
585
508
  manifest: Manifest,
586
509
  ) -> None:
587
510
  """
588
- !!! warning
589
- `process_run_statistics` is deprecated, use `process_run_metrics` instead.
590
-
591
511
  Processes the statistics of the run. Checks for an outputs/statistics folder
592
512
  or custom statistics file location from manifest. If found, copies to run
593
513
  directory. Otherwise, attempts to extract statistics from stdout.
@@ -928,7 +848,7 @@ def _copy_new_or_modified_files( # noqa: C901
928
848
  This function identifies files that are either new (not present in the original
929
849
  source) or have been modified (different content, checksum, or modification time)
930
850
  compared to the original source. It excludes files that exist in specified
931
- exclusion directories to avoid copying input data, statistics, metrics, or assets as
851
+ exclusion directories to avoid copying input data, statistics, or assets as
932
852
  solution outputs.
933
853
 
934
854
  Parameters
@@ -111,7 +111,7 @@ def extract_coordinates(coords, all_coords) -> None:
111
111
  like Polygons and MultiPolygons
112
112
  """
113
113
  if isinstance(coords, list):
114
- if len(coords) == 2 and isinstance(coords[0], int | float) and isinstance(coords[1], int | float):
114
+ if len(coords) == 2 and isinstance(coords[0], (int, float)) and isinstance(coords[1], (int, float)):
115
115
  # This is a coordinate pair [lon, lat]
116
116
  all_coords.append(coords)
117
117
  else:
@@ -829,9 +829,7 @@ class ManifestContentMultiFileOutput(BaseModel):
829
829
  Parameters
830
830
  ----------
831
831
  statistics : Optional[str], default=""
832
- Deprecated: Use `metrics` instead. The path to the statistics file.
833
- metrics : Optional[str], default=""
834
- The path to the metrics file.
832
+ The path to the statistics file.
835
833
  assets : Optional[str], default=""
836
834
  The path to the assets file.
837
835
  solutions : Optional[str], default=""
@@ -841,18 +839,16 @@ class ManifestContentMultiFileOutput(BaseModel):
841
839
  --------
842
840
  >>> from nextmv import ManifestContentMultiFileOutput
843
841
  >>> output_config = ManifestContentMultiFileOutput(
844
- ... metrics="my-outputs/metrics.json",
842
+ ... statistics="my-outputs/statistics.json",
845
843
  ... assets="my-outputs/assets.json",
846
844
  ... solutions="my-outputs/solutions/"
847
845
  ... )
848
- >>> output_config.metrics
849
- 'my-outputs/metrics.json'
846
+ >>> output_config.statistics
847
+ 'my-outputs/statistics.json'
850
848
  """
851
849
 
852
850
  statistics: str | None = ""
853
- """Deprecated: Use `metrics` instead. The path to the statistics file."""
854
- metrics: str | None = ""
855
- """The path to the metrics file."""
851
+ """The path to the statistics file."""
856
852
  assets: str | None = ""
857
853
  """The path to the assets file."""
858
854
  solutions: str | None = ""
@@ -882,7 +878,7 @@ class ManifestContentMultiFile(BaseModel):
882
878
  >>> multi_file_config = ManifestContentMultiFile(
883
879
  ... input=ManifestContentMultiFileInput(path="data/input/"),
884
880
  ... output=ManifestContentMultiFileOutput(
885
- ... metrics="my-outputs/metrics.json",
881
+ ... statistics="my-outputs/statistics.json",
886
882
  ... assets="my-outputs/assets.json",
887
883
  ... solutions="my-outputs/solutions/"
888
884
  ... )
@@ -923,7 +919,7 @@ class ManifestContent(BaseModel):
923
919
  ... multi_file=ManifestContentMultiFile(
924
920
  ... input=ManifestContentMultiFileInput(path="data/input/"),
925
921
  ... output=ManifestContentMultiFileOutput(
926
- ... metrics="my-outputs/metrics.json",
922
+ ... statistics="my-outputs/statistics.json",
927
923
  ... assets="my-outputs/assets.json",
928
924
  ... solutions="my-outputs/solutions/"
929
925
  ... )
@@ -84,6 +84,9 @@ def _custom_showwarning(message, category, filename, lineno, file=None, line=Non
84
84
  if "mlflow/pyfunc/__init__.py" in filename:
85
85
  return
86
86
 
87
+ if "/mlflow/tracing/provider.py" in filename:
88
+ return
89
+
87
90
  _original_showwarning(message, category, filename, lineno, file, line)
88
91
 
89
92
 
@@ -195,7 +198,7 @@ class Model:
195
198
  ... return nextmv.Output(
196
199
  ... options=input.options,
197
200
  ... solution=nextroute_output.solutions[0].to_dict(),
198
- ... metrics=nextroute_output.metrics.to_dict(),
201
+ ... statistics=nextroute_output.statistics.to_dict(),
199
202
  ... )
200
203
  """
201
204
 
@@ -234,7 +237,7 @@ class Model:
234
237
  ... return Output(
235
238
  ... options=input.options,
236
239
  ... solution=result,
237
- ... metrics={"processing_time": 0.5}
240
+ ... statistics={"processing_time": 0.5}
238
241
  ... )
239
242
  """
240
243
 
@@ -288,7 +291,6 @@ class Model:
288
291
  ) from e
289
292
 
290
293
  finally:
291
- from mlflow.models import infer_signature
292
294
  from mlflow.pyfunc import PythonModel, save_model
293
295
 
294
296
  class MLFlowModel(PythonModel):
@@ -342,12 +344,13 @@ class Model:
342
344
 
343
345
  _cleanup_python_model(model_dir, configuration, verbose=False)
344
346
 
345
- signature = None
346
- if configuration.options is not None:
347
- options_dict = configuration.options.to_dict()
348
- signature = infer_signature(
349
- params=options_dict,
350
- )
347
+ # signature = None
348
+ # if configuration.options is not None:
349
+ # options_dict = configuration.options.to_dict()
350
+ # signature = infer_signature(
351
+ # model_input={},
352
+ # params=options_dict,
353
+ # )
351
354
 
352
355
  # We use mlflow to save the model to the local filesystem, to be able to
353
356
  # load it later on.
@@ -356,7 +359,7 @@ class Model:
356
359
  path=model_path, # Customize the name of the model location.
357
360
  infer_code_paths=True, # Makes the imports portable.
358
361
  python_model=MLFlowModel(),
359
- signature=signature, # Allows us to work with our own `Options` class.
362
+ # signature=signature, # Allows us to work with our own `Options` class.
360
363
  )
361
364
 
362
365
  # Create an auxiliary requirements file with the model dependencies.
@@ -415,9 +418,9 @@ def _cleanup_python_model(
415
418
  if os.path.exists(model_path):
416
419
  shutil.rmtree(model_path)
417
420
 
418
- mlruns_path = os.path.join(model_dir, "mlruns")
419
- if os.path.exists(mlruns_path):
420
- shutil.rmtree(mlruns_path)
421
+ mlflow_db_path = os.path.join(model_dir, "mlflow.db")
422
+ if os.path.exists(mlflow_db_path):
423
+ os.remove(mlflow_db_path)
421
424
 
422
425
  requirements_file = os.path.join(model_dir, _REQUIREMENTS_FILE)
423
426
  if os.path.exists(requirements_file):