nextmv 1.0.0.dev7__py3-none-any.whl → 1.0.0.dev8__py3-none-any.whl

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 (37) hide show
  1. nextmv/__about__.py +1 -1
  2. nextmv/_serialization.py +1 -1
  3. nextmv/cli/cloud/acceptance/create.py +12 -12
  4. nextmv/cli/cloud/app/push.py +15 -15
  5. nextmv/cli/cloud/input_set/__init__.py +0 -2
  6. nextmv/cli/cloud/run/create.py +9 -4
  7. nextmv/cli/cloud/shadow/stop.py +2 -14
  8. nextmv/cli/cloud/switchback/stop.py +2 -14
  9. nextmv/cli/community/clone.py +197 -11
  10. nextmv/cli/community/list.py +116 -46
  11. nextmv/cloud/__init__.py +0 -4
  12. nextmv/cloud/application/__init__.py +200 -1
  13. nextmv/cloud/application/_acceptance.py +8 -13
  14. nextmv/cloud/application/_input_set.py +6 -42
  15. nextmv/cloud/application/_run.py +8 -1
  16. nextmv/cloud/application/_shadow.py +3 -9
  17. nextmv/cloud/application/_switchback.py +2 -11
  18. nextmv/cloud/batch_experiment.py +1 -3
  19. nextmv/cloud/client.py +1 -1
  20. nextmv/cloud/integration.py +4 -7
  21. nextmv/cloud/shadow.py +0 -25
  22. nextmv/cloud/switchback.py +0 -2
  23. nextmv/default_app/main.py +4 -6
  24. nextmv/local/executor.py +83 -3
  25. nextmv/local/geojson_handler.py +1 -1
  26. nextmv/manifest.py +11 -7
  27. nextmv/model.py +2 -2
  28. nextmv/options.py +1 -1
  29. nextmv/output.py +57 -21
  30. nextmv/run.py +12 -3
  31. {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev8.dist-info}/METADATA +1 -3
  32. {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev8.dist-info}/RECORD +35 -37
  33. nextmv/cli/cloud/input_set/delete.py +0 -67
  34. nextmv/cloud/community.py +0 -441
  35. {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev8.dist-info}/WHEEL +0 -0
  36. {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev8.dist-info}/entry_points.txt +0 -0
  37. {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev8.dist-info}/licenses/LICENSE +0 -0
nextmv/output.py CHANGED
@@ -8,9 +8,9 @@ destinations.
8
8
  Classes
9
9
  -------
10
10
  RunStatistics
11
- Statistics about a general run.
11
+ Deprecated: Statistics about a general run.
12
12
  ResultStatistics
13
- Statistics about a specific result.
13
+ Deprecated: Statistics about a specific result.
14
14
  DataPoint
15
15
  A data point representing a 2D coordinate.
16
16
  Series
@@ -18,7 +18,10 @@ Series
18
18
  SeriesData
19
19
  Data container for multiple series of data points.
20
20
  Statistics
21
- Complete statistics container for a solution, including run metrics and result data.
21
+ Deprecated: Use metrics instead. Complete statistics container for a
22
+ solution, including run metrics and result data.
23
+ Metrics
24
+ Metrics container for a solution.
22
25
  OutputFormat
23
26
  Enumeration of supported output formats.
24
27
  SolutionFile
@@ -46,7 +49,9 @@ Attributes
46
49
  ASSETS_KEY : str
47
50
  Assets key constant used for identifying assets in the run output.
48
51
  STATISTICS_KEY : str
49
- Statistics key constant used for identifying statistics in the run output.
52
+ Deprecated: Use METRICS_KEY instead. Statistics key constant used for identifying statistics in the run output.
53
+ METRICS_KEY : str
54
+ Metrics key constant used for identifying metrics in the run output.
50
55
  SOLUTIONS_KEY : str
51
56
  Solutions key constant used for identifying solutions in the run output.
52
57
  OUTPUTS_KEY : str
@@ -75,7 +80,11 @@ Assets key constant used for identifying assets in the run output.
75
80
  """
76
81
  STATISTICS_KEY = "statistics"
77
82
  """
78
- Statistics key constant used for identifying statistics in the run output.
83
+ Deprecated: Use METRICS_KEY instead. Statistics key constant used for identifying statistics in the run output.
84
+ """
85
+ METRICS_KEY = "metrics"
86
+ """
87
+ Metrics key constant used for identifying metrics in the run output.
79
88
  """
80
89
  SOLUTIONS_KEY = "solutions"
81
90
  """
@@ -89,7 +98,7 @@ Outputs key constant used for identifying outputs in the run output.
89
98
 
90
99
  class RunStatistics(BaseModel):
91
100
  """
92
- Statistics about a general run.
101
+ Deprecated: Statistics about a general run.
93
102
 
94
103
  You can import the `RunStatistics` class directly from `nextmv`:
95
104
 
@@ -129,7 +138,7 @@ class RunStatistics(BaseModel):
129
138
 
130
139
  class ResultStatistics(BaseModel):
131
140
  """
132
- Statistics about a specific result.
141
+ Deprecated: Statistics about a specific result.
133
142
 
134
143
  You can import the `ResultStatistics` class directly from `nextmv`:
135
144
 
@@ -169,7 +178,7 @@ class ResultStatistics(BaseModel):
169
178
 
170
179
  class DataPoint(BaseModel):
171
180
  """
172
- A data point representing a 2D coordinate.
181
+ Deprecated: A data point representing a 2D coordinate.
173
182
 
174
183
  You can import the `DataPoint` class directly from `nextmv`:
175
184
 
@@ -202,7 +211,7 @@ class DataPoint(BaseModel):
202
211
 
203
212
  class Series(BaseModel):
204
213
  """
205
- A series of data points for visualization or analysis.
214
+ Deprecated: A series of data points for visualization or analysis.
206
215
 
207
216
  You can import the `Series` class directly from `nextmv`:
208
217
 
@@ -236,7 +245,7 @@ class Series(BaseModel):
236
245
 
237
246
  class SeriesData(BaseModel):
238
247
  """
239
- Data container for multiple series of data points.
248
+ Deprecated: Data container for multiple series of data points.
240
249
 
241
250
  You can import the `SeriesData` class directly from `nextmv`:
242
251
 
@@ -271,6 +280,9 @@ class SeriesData(BaseModel):
271
280
 
272
281
  class Statistics(BaseModel):
273
282
  """
283
+ !!! warning
284
+ `Statistics` is deprecated, use `Metrics` instead.
285
+
274
286
  Complete statistics container for a solution, including run metrics and
275
287
  result data.
276
288
 
@@ -877,7 +889,9 @@ class Output:
877
889
  The solution to the decision problem. The type must match the
878
890
  `output_format`. Default is None.
879
891
  statistics : Optional[Union[Statistics, dict[str, Any]]], optional
880
- Statistics of the solution. Default is None.
892
+ Deprecated: Use Metrics instead. Statistics of the solution. Default is None.
893
+ metrics : Optional[dict[str, Any]], optional
894
+ Metrics of the solution. Default is None.
881
895
  csv_configurations : Optional[dict[str, Any]], optional
882
896
  Configuration for writing CSV files. Default is None.
883
897
  json_configurations : Optional[dict[str, Any]], optional
@@ -916,17 +930,16 @@ class Output:
916
930
  Examples
917
931
  --------
918
932
  >>> from nextmv.output import Output, OutputFormat, Statistics, RunStatistics
919
- >>> run_stats = RunStatistics(duration=30.0, iterations=100)
920
- >>> stats = Statistics(run=run_stats)
933
+ >>> metrics = {"duration": 30.0, "iterations": 100}
921
934
  >>> solution = {"routes": [{"vehicle": 1, "stops": [1, 2, 3]}, {"vehicle": 2, "stops": [4, 5]}]}
922
935
  >>> output = Output(
923
936
  ... output_format=OutputFormat.JSON,
924
937
  ... solution=solution,
925
- ... statistics=stats,
938
+ ... metrics=metrics,
926
939
  ... json_configurations={"indent": 4}
927
940
  ... )
928
941
  >>> output_dict = output.to_dict()
929
- >>> "solution" in output_dict and "statistics" in output_dict
942
+ >>> "solution" in output_dict and "metrics" in output_dict
930
943
  True
931
944
  """
932
945
 
@@ -969,11 +982,16 @@ class Output:
969
982
  """
970
983
  statistics: Statistics | dict[str, Any] | None = None
971
984
  """
985
+ Deprecated: Use Metrics instead.
972
986
  Statistics of the solution. These statistics can be of type `Statistics` or a
973
987
  simple dictionary. If the statistics are of type `Statistics`, they will be
974
988
  serialized to a dictionary using the `to_dict` method. If they are a
975
- dictionary, they will be used as is. If the statistics are not provided, an
976
- empty dictionary will be used.
989
+ dictionary, they will be used as is.
990
+ """
991
+ metrics: dict[str, Any] | None = None
992
+ """
993
+ Metrics of the solution. These metrics should be provided as a simple or
994
+ nested dictionary.
977
995
  """
978
996
  csv_configurations: dict[str, Any] | None = None
979
997
  """
@@ -1088,7 +1106,7 @@ class Output:
1088
1106
  # Statistics need to end up as a dict, so we achieve that based on the
1089
1107
  # type of statistics that were used to create the class.
1090
1108
  if self.statistics is None:
1091
- statistics = {}
1109
+ statistics = None
1092
1110
  elif isinstance(self.statistics, Statistics):
1093
1111
  statistics = self.statistics.to_dict()
1094
1112
  elif isinstance(self.statistics, dict):
@@ -1098,6 +1116,18 @@ class Output:
1098
1116
  f"unsupported statistics type: {type(self.statistics)}, supported types are `Statistics` or `dict`"
1099
1117
  )
1100
1118
 
1119
+ if self.metrics is None:
1120
+ metrics = None
1121
+ elif isinstance(self.metrics, dict):
1122
+ metrics = self.metrics
1123
+ else:
1124
+ raise TypeError(f"unsupported metrics type: {type(self.metrics)}, supported type is `dict`")
1125
+
1126
+ # if both metrics and statistics are None, set statistics to an
1127
+ # empty dict for backward compatibility
1128
+ if statistics is None and metrics is None:
1129
+ statistics = {}
1130
+
1101
1131
  # Assets need to end up as a list of dicts, so we achieve that based on
1102
1132
  # the type of each asset in the list.
1103
1133
  assets = []
@@ -1117,10 +1147,16 @@ class Output:
1117
1147
  output_dict = {
1118
1148
  "options": options,
1119
1149
  "solution": self.solution if self.solution is not None else {},
1120
- STATISTICS_KEY: statistics,
1121
1150
  ASSETS_KEY: assets,
1122
1151
  }
1123
1152
 
1153
+ # Only include statistics in output if it's not None
1154
+ if statistics is not None:
1155
+ output_dict[STATISTICS_KEY] = statistics
1156
+
1157
+ if metrics is not None:
1158
+ output_dict[METRICS_KEY] = metrics
1159
+
1124
1160
  # Add the auxiliary configurations to the output dictionary if they are
1125
1161
  # defined and not empty.
1126
1162
  if (
@@ -1193,9 +1229,9 @@ class LocalOutputWriter(OutputWriter):
1193
1229
 
1194
1230
  Examples
1195
1231
  --------
1196
- >>> from nextmv.output import LocalOutputWriter, Output, Statistics
1232
+ >>> from nextmv.output import LocalOutputWriter, Output, Metrics
1197
1233
  >>> writer = LocalOutputWriter()
1198
- >>> output = Output(solution={"result": 42}, statistics=Statistics())
1234
+ >>> output = Output(solution={"result": 42}, metrics={"time": 1.23})
1199
1235
  >>> # Write to stdout
1200
1236
  >>> writer.write(output, path=None)
1201
1237
  >>> # Write to a file
nextmv/run.py CHANGED
@@ -434,6 +434,9 @@ class RunInfoStatistics(BaseModel):
434
434
  """List of statistics indicators."""
435
435
 
436
436
 
437
+ RunInfoMetrics = RunInfoStatistics
438
+
439
+
437
440
  class OptionsSummaryItem(BaseModel):
438
441
  """
439
442
  Summary item for options used in a run.
@@ -529,7 +532,9 @@ class Run(BaseModel):
529
532
  experiment_id : str, optional
530
533
  ID of the experiment associated with the run. Defaults to None.
531
534
  statistics : RunInfoStatistics, optional
532
- Statistics of the run. Defaults to None.
535
+ Deprecated: Statistics of the run. Defaults to None.
536
+ metrics: RunInfoMetrics, optional
537
+ Metrics of the run. Defaults to None.
533
538
  input_id : str, optional
534
539
  ID of the input associated with the run. Defaults to None.
535
540
  option_set : str, optional
@@ -603,7 +608,9 @@ class Run(BaseModel):
603
608
  experiment_id: str | None = None
604
609
  """ID of the experiment associated with the run."""
605
610
  statistics: RunInfoStatistics | None = None
606
- """Statistics of the run."""
611
+ """Deprecated: Statistics of the run."""
612
+ metrics: RunInfoMetrics | None = None
613
+ """Metrics of the run."""
607
614
  input_id: str | None = None
608
615
  """ID of the input associated with the run."""
609
616
  option_set: str | None = None
@@ -677,7 +684,9 @@ class Metadata(BaseModel):
677
684
  status_v2: StatusV2
678
685
  """Status of the run."""
679
686
  statistics: dict[str, Any] | None = None
680
- """User defined statistics of the run."""
687
+ """Deprecated: User defined statistics of the run."""
688
+ metrics: dict[str, Any] | None = None
689
+ """User defined metrics of the run."""
681
690
 
682
691
  def run_is_finalized(self) -> bool:
683
692
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextmv
3
- Version: 1.0.0.dev7
3
+ Version: 1.0.0.dev8
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/
@@ -230,13 +230,11 @@ Provides-Extra: dev
230
230
  Requires-Dist: build>=1.0.3; extra == 'dev'
231
231
  Requires-Dist: folium>=0.20.0; extra == 'dev'
232
232
  Requires-Dist: mlflow>=2.19.0; extra == 'dev'
233
- Requires-Dist: nextpipe>=0.6.0; extra == 'dev'
234
233
  Requires-Dist: nextroute>=1.11.1; extra == 'dev'
235
234
  Requires-Dist: openpyxl>=3.1.5; extra == 'dev'
236
235
  Requires-Dist: pandas>=2.2.3; extra == 'dev'
237
236
  Requires-Dist: plotly>=6.0.1; extra == 'dev'
238
237
  Requires-Dist: pydantic>=2.5.2; extra == 'dev'
239
- Requires-Dist: pytest>=9.0.2; extra == 'dev'
240
238
  Requires-Dist: pyyaml>=6.0.1; extra == 'dev'
241
239
  Requires-Dist: requests>=2.31.0; extra == 'dev'
242
240
  Requires-Dist: ruff>=0.1.7; extra == 'dev'
@@ -1,17 +1,17 @@
1
- nextmv/__about__.py,sha256=Fz6mkeJ5B6FYwEl4VTeOlcxzHJMSpJh63kWjeWhwUrs,28
1
+ nextmv/__about__.py,sha256=gaYHqa3kcC-a8tfZv6Hq1-xsB1kwSym282AsDr7hgq8,28
2
2
  nextmv/__entrypoint__.py,sha256=XMT-ds1f2Yc6KoI2C0YEH-rJj5gVLfJMqUdRfcA3_KQ,1070
3
3
  nextmv/__init__.py,sha256=LwpGBSiV0UG13zKHO2N3Ikb7bCMV08Gfbl6Cp80b_2g,3813
4
- nextmv/_serialization.py,sha256=jYitMS1MU8ldsmObT-K_8V8P2Wx69tnDiEHCCgPGun4,2834
4
+ nextmv/_serialization.py,sha256=fT-GXiy9cNo7D2KL1blZcsAaQHHgkEVTI_JvXIFlWZc,2833
5
5
  nextmv/base_model.py,sha256=kPFqE-c_3LcEy8fY0qDrJk_gbPYgSKtetRMby71oxE8,2298
6
6
  nextmv/deprecated.py,sha256=U1YD-vie0dEVWFJgIwOuinxACHsyiEIQpfrt95ykhlg,1651
7
7
  nextmv/input.py,sha256=iONLkXhcIXRCJVPNVkJdivh47A399VMepsSxNZByX2I,37649
8
8
  nextmv/logger.py,sha256=kNIbu46MisrzYe4T0hNMpWfRTKKacDVvbtQcNys_c_E,2513
9
- nextmv/manifest.py,sha256=v9En9zMZVKZn6G_HThoKUZowMtZr5hxzwWiK9wkVHPU,49023
10
- nextmv/model.py,sha256=9g-pAUg8E--CyUFU39J7e4MZcj0WrWtgIqfwGmoF7UA,14998
11
- nextmv/options.py,sha256=PZtw2SIK48gkjzbJwMN6nfXm_3Utaa_ZUd23Y1XxS2Q,29657
12
- nextmv/output.py,sha256=MbmI7t8p2LhKD1T--IZnsHvIuFY_TM8wTNCdLQVWs2A,54356
9
+ nextmv/manifest.py,sha256=VoZo7cGKGCdmcxDu5ECTZPY67J4LAUxBu6gmhgXVWRY,49216
10
+ nextmv/model.py,sha256=uthHjRCrC1b9OCoyQ_n-2_nfP1bFu-nMiUxYhmLf0SI,14989
11
+ nextmv/options.py,sha256=3BnnuAoiFD6qr0EMYv1VgAXarDjLb-t7OpC1IpsnS1M,29648
12
+ nextmv/output.py,sha256=7ioVUlsQiQP9MeR6baUXs9C-5q6jcBteu1DUNExcHCw,55707
13
13
  nextmv/polling.py,sha256=fwnAxmfpuBg4d6pi53TRTyyefdpf-cHLoTG6trAu-QA,11048
14
- nextmv/run.py,sha256=8tkRQexJC8JN7IkLlhpwEW5pEudxwDq2sC_PImfwReI,54126
14
+ nextmv/run.py,sha256=o6_nSPOYwGCsCaqmYYAwrtCLE_aJuqy5NHFRfXYE7TI,54440
15
15
  nextmv/safe.py,sha256=VAK4fGEurbLNji4Pg5Okga5XQSbI4aI9JJf95_68Z20,3867
16
16
  nextmv/status.py,sha256=VqmOgxiEK89Y88ZUxZPfUXmY0HqvN28Lc1PDt0-9PLw,1600
17
17
  nextmv/cli/CONTRIBUTING.md,sha256=xM_skfI1WPh2UtZ1axbB8AfOLJ3LZk8YhQpZY4qtSqw,21911
@@ -23,7 +23,7 @@ nextmv/cli/options.py,sha256=ymd6Y7_ZQkln35nHw3pLnFpqivgmJfuYAnyizmEuonc,6887
23
23
  nextmv/cli/version.py,sha256=VRbfNpUvCFYPcphr-F3Ph4Z4UwtVis4keyVFHj1JISw,681
24
24
  nextmv/cli/cloud/__init__.py,sha256=pywNNBy_poHaKn3_oIZRR9DDE8w3u65KvLpnX6S0BQI,1886
25
25
  nextmv/cli/cloud/acceptance/__init__.py,sha256=v4U1m6z5zI8mQpmIE4kFeEYOsaDxnGRnRj2j5I6WueI,711
26
- nextmv/cli/cloud/acceptance/create.py,sha256=Mtiy7fMBU5Ay_hxb2DXxdaM2XvR_QDbldtyjQIAaelQ,14582
26
+ nextmv/cli/cloud/acceptance/create.py,sha256=lc1EYydsIuxr2qiQ_0W7po8DnPIfXSYR-5cm_6ddYGA,14604
27
27
  nextmv/cli/cloud/acceptance/delete.py,sha256=julZ6Bs6YcsmyuE00yPjPScIRz4QteNt-GUR4J2Hp_I,2260
28
28
  nextmv/cli/cloud/acceptance/get.py,sha256=pb3hRdIiynTi4K7xDNCMJE7bW46FE-X3EoAQU8kQJjE,3438
29
29
  nextmv/cli/cloud/acceptance/list.py,sha256=9tTV4B2lgDqNxDnaNXkHxeh7jUQuAu9GQJsEKJ_NqIo,1881
@@ -39,7 +39,7 @@ nextmv/cli/cloud/app/delete.py,sha256=HLgDx4eMf_LYyGC8aQxuvNrhOfnWmDuutPjk4ywILa
39
39
  nextmv/cli/cloud/app/exists.py,sha256=gd9pmR1Oq_cCjaTNB82PmJtDYowrb17vBfQYjoh6E9Q,1258
40
40
  nextmv/cli/cloud/app/get.py,sha256=_v_7PrUniaaRvHclBA02V-UVcbVe1eFixGU6CeXA4m4,1765
41
41
  nextmv/cli/cloud/app/list.py,sha256=AI1VNNueYfzwuSAFlf-vXbZEY-th5BrzXZgn-3uusFo,1653
42
- nextmv/cli/cloud/app/push.py,sha256=OsI9cTM1EuSqxKZFTgGZ9V15lTNQkdQDpN_lCSpEPpw,15756
42
+ nextmv/cli/cloud/app/push.py,sha256=mbGThAgmfxO2JqfXq8HXAdRT81b55MBfCGaDtSJQsUM,15624
43
43
  nextmv/cli/cloud/app/update.py,sha256=4Mp8Zf40K1hdHO3KT9Md3piBWqzracfpWtujJfbPocM,4070
44
44
  nextmv/cli/cloud/batch/__init__.py,sha256=-_UjmvrQItACUY_BQ_cOffNJixNHAb4vH_pew25sJ3o,774
45
45
  nextmv/cli/cloud/batch/create.py,sha256=T70sjvvTxXxRpC4COFZFU5ei6ylS5MWLg6VLP3SjIso,15465
@@ -56,9 +56,8 @@ nextmv/cli/cloud/ensemble/delete.py,sha256=C1xmISSaUhtsV94w2z2rzhenp2mm9E0GXHy4d
56
56
  nextmv/cli/cloud/ensemble/get.py,sha256=-4crRjI8MF8meq5uUhUR3q39lK4EIsvpzaODfGvwx3k,2135
57
57
  nextmv/cli/cloud/ensemble/list.py,sha256=zm7TfBM5HH_8I-r4U219AbmQadET96kw1MrsjwARSAM,1887
58
58
  nextmv/cli/cloud/ensemble/update.py,sha256=5AeuhY-CytzON1FFoEijBlo1T9oHvkq3mxV9I3qCeLA,3383
59
- nextmv/cli/cloud/input_set/__init__.py,sha256=qDyIc0JJm1oU9tyt9MgjkJL6VKXSFCySPTKKHqfLHCM,957
59
+ nextmv/cli/cloud/input_set/__init__.py,sha256=wyt0LX9xqcGDrb-rPx-MN0WQA7o9jZnK2CpShfrki3o,867
60
60
  nextmv/cli/cloud/input_set/create.py,sha256=nJWsaj-fPXS8rwIbh13_wXc9SitDA4ByIHhlBS51GHo,5661
61
- nextmv/cli/cloud/input_set/delete.py,sha256=8-cJtgcgh_kK0K7AtHZmYSCvTmxwtyQIhWcmt6aYAZI,2125
62
61
  nextmv/cli/cloud/input_set/get.py,sha256=MvMD6tmMA_ui4MVCwRkOnmU0WySJmSJX7x2Q-x_xXwA,1916
63
62
  nextmv/cli/cloud/input_set/list.py,sha256=7I0F1rs19bY9d_V2TjEFxHCbHq3bNV_mO0Fd9qJ58IY,1896
64
63
  nextmv/cli/cloud/input_set/update.py,sha256=P5b94m08hGMAGr455fH-Cd1yryeMC15r1YfmJEt2NSw,4144
@@ -77,7 +76,7 @@ nextmv/cli/cloud/managed_input/list.py,sha256=6l4zJPVErmooobteBn05RmoXHgvI0RBt_L
77
76
  nextmv/cli/cloud/managed_input/update.py,sha256=E1ddfQ9VJ7SgG8V6kkRYbgKhS4vDyv06WePNbLEXUsE,3191
78
77
  nextmv/cli/cloud/run/__init__.py,sha256=KyonwVd5lfweaq-cIpPuRAzHFrK0slfqJsIjsT_p4PU,1102
79
78
  nextmv/cli/cloud/run/cancel.py,sha256=d7aQQQmek_i3P2cDmpOohLiwSjWxfKEiVAvBnNYAmuE,1259
80
- nextmv/cli/cloud/run/create.py,sha256=39D4VdcfYRioziIy-qjLDSs-_dhSavrkmzcltUfgz3M,19526
79
+ nextmv/cli/cloud/run/create.py,sha256=eGjlYCWGf_57Qlqbaok-iLzcLmHAaCZor6TskhMabPk,19706
81
80
  nextmv/cli/cloud/run/get.py,sha256=bUczN6a1SV3wkW0uUPfQdO3i13BF51udixmuyiicdi8,7826
82
81
  nextmv/cli/cloud/run/input.py,sha256=QEdDnKxEmucUwPPRAqh1VuErw5rKaAwXOHrmJESP-k0,3171
83
82
  nextmv/cli/cloud/run/list.py,sha256=z3286Q0Aznz-qAvanCB03rXjCfGPk84A32t8AqTC2Cs,2563
@@ -104,7 +103,7 @@ nextmv/cli/cloud/shadow/get.py,sha256=8NmXl2romVPGfS9KP4G2Sv4SuSZKgRx85GZ4ClwTqW
104
103
  nextmv/cli/cloud/shadow/list.py,sha256=aVFa3FAzfcUsMlD0hYgZwhoF75GQkaNDHrrq82qqylQ,1810
105
104
  nextmv/cli/cloud/shadow/metadata.py,sha256=vHJYVDXXHwiqQrG0J0D_aRP--b47UfEgJwJOXqfskSo,2161
106
105
  nextmv/cli/cloud/shadow/start.py,sha256=SkDYSfyQLdfHJKCOzc4CW6MVO7YBWCZCOAoGBzqSFhI,1464
107
- nextmv/cli/cloud/shadow/stop.py,sha256=WNg73nHkQ6Mo7hdg3qfSXQBkd77iKPfRIdSSJxTHhTY,1706
106
+ nextmv/cli/cloud/shadow/stop.py,sha256=gb6UuNf-HNCaACKzdAix1pr8oMn-A1SQJEFUXrOr228,1333
108
107
  nextmv/cli/cloud/shadow/update.py,sha256=l7_gODO9fXYGOLzFMJmIVpT5Jku9XQAo2PI5x3AP4xU,2880
109
108
  nextmv/cli/cloud/switchback/__init__.py,sha256=jYeujjbqvqRGIgvC0wr3I6zavw1az7IS8jiJsAlH-z4,981
110
109
  nextmv/cli/cloud/switchback/create.py,sha256=lEboNjN1ZFbuOCFmK2ADIRH-pIENc80NcR809rDOY3I,5085
@@ -113,7 +112,7 @@ nextmv/cli/cloud/switchback/get.py,sha256=GQKzaW4jCfV21DyZ5vDNrkFH2Tw1pR8Zv_71ji
113
112
  nextmv/cli/cloud/switchback/list.py,sha256=wrXXA9aMLLcq_6WFk-dy9RopE57dFZb7TxlWdRx9G94,1882
114
113
  nextmv/cli/cloud/switchback/metadata.py,sha256=WDhK-AVKEJQ38WhPZqPOgemHt-PI__r6sIEBFQtKxVw,2287
115
114
  nextmv/cli/cloud/switchback/start.py,sha256=N9Bci8DmCQW8XUm93Rhj30TCf_YvK6N5qxZXMpW2X1I,1535
116
- nextmv/cli/cloud/switchback/stop.py,sha256=pOasfThNCB3GXDNz4TPyJ5DNnMf3vLin6lAh1XoAk-Y,1774
115
+ nextmv/cli/cloud/switchback/stop.py,sha256=xEF2JqDhOhxzli79qqwIGVJiNW14BnfEbfc70sXF7dE,1397
117
116
  nextmv/cli/cloud/switchback/update.py,sha256=pILZUbqlIM6l1mrbVPtks6CGcgre5829sSnD2yMZd-0,3000
118
117
  nextmv/cli/cloud/upload/__init__.py,sha256=khOl6NxkPd4KEqN0xMdxzmST-Ct3Vr_xk8zbMvbrLl8,511
119
118
  nextmv/cli/cloud/upload/create.py,sha256=vRTHCeh7cbB9JSAMUCpcdQrzQ1od5FiFiNdPPh7sFqw,1216
@@ -125,61 +124,60 @@ nextmv/cli/cloud/version/get.py,sha256=eGbka3TG8UJE150h22rn0BUqTi1xRE7roVDj6yJvn
125
124
  nextmv/cli/cloud/version/list.py,sha256=sKdHgyowLG1jyUEtu87yCPC5_2-0i3VDEgfmvb-bBn0,1770
126
125
  nextmv/cli/cloud/version/update.py,sha256=mEUYXGHLGkiEGH31KK6jDDfviHEhVCdLjLQL_5u0vLk,2869
127
126
  nextmv/cli/community/__init__.py,sha256=t2l6adm9Km6hSvSFzeKHTQzacVSnwjx4wpj2kqee5nM,612
128
- nextmv/cli/community/clone.py,sha256=_I1C58pKmfAHdl-8eaZDeaxZm2Rnp2en8PCPdflAse4,2912
129
- nextmv/cli/community/list.py,sha256=1ZdkwbWluJqZWVEAI0XVpB-mEQNnulsL2oPjavdMl-c,5754
127
+ nextmv/cli/community/clone.py,sha256=qXDgsMfAnAcZvP9kOp-O4rqj0qw0zueg9BgWl71DqpA,9202
128
+ nextmv/cli/community/list.py,sha256=ad7qPPaNh29tj_ggR4lJnRkMTgWstHQFV90sqdiWcdA,7440
130
129
  nextmv/cli/configuration/__init__.py,sha256=7oryF4PKkORh8bcdgbN2k36rZrFpJsM7Xfq_J4-MkFs,516
131
130
  nextmv/cli/configuration/config.py,sha256=t43ubCcbfbpfq9HvkVb2WQY9V47lrLEP0KvsWfjOJ8Y,6667
132
131
  nextmv/cli/configuration/create.py,sha256=aDj6wFl6_RRMmvCLTNIeCcFotNOGoupso785M46nh2Y,2668
133
132
  nextmv/cli/configuration/delete.py,sha256=3l1Mx8ATCwoiggbYBjG0ArmYSbS_GlJ5cCCymG2CEhU,1935
134
133
  nextmv/cli/configuration/list.py,sha256=HIZvDJQW5B0-o_ZqQHuxRw7N_VmxqYM46fucKCvo1zw,2208
135
- nextmv/cloud/__init__.py,sha256=IW9fdg3QgusJGAU4VVEu5qkCidzalyYf4wjC1T14rnQ,4183
134
+ nextmv/cloud/__init__.py,sha256=watvsgucVgOCIlwrmnvIxW8lyUfEerhDzOn-Zp-dl1I,3954
136
135
  nextmv/cloud/acceptance_test.py,sha256=H34lvccJzN1URpnhrHstcVxgvq1s2iCymiKIPBHcToY,25828
137
136
  nextmv/cloud/account.py,sha256=X2xQjzhgEdKR0eypH8lWKUOwDISjJSd5SwOwEnpfTVk,13573
138
137
  nextmv/cloud/assets.py,sha256=alw634ub-DR0CHQXZy_ObeGvQthPXFLdgzgbvbH1SGY,1376
139
- nextmv/cloud/batch_experiment.py,sha256=flwP5pbBio-ilAbopj8DdSWOlxGbct1IOElsgcyVN8U,10545
140
- nextmv/cloud/client.py,sha256=Yj4FE4GKsLHkYijAYXcotlyNfhAWANMuWetHXsYPg1M,18101
141
- nextmv/cloud/community.py,sha256=LSiKF5agLTHFbW5fBAv-m3MsWm3XuROpw4_KkPpwtZM,13060
138
+ nextmv/cloud/batch_experiment.py,sha256=thS94-ZdMR7Em5TeGN5UtnIDHmhzqld_U49SODyhrPU,10537
139
+ nextmv/cloud/client.py,sha256=FGyzpwPBXMiiT4Jr2DLvWzzhjQ64AdadPDACaCuIDGM,18100
142
140
  nextmv/cloud/ensemble.py,sha256=_hKPjSLtuGH1xGG70ZBsmY_IL5XinZqVHHwBxtX9Omw,8570
143
141
  nextmv/cloud/input_set.py,sha256=wsLmMI1C7BslWDN5j1RnVUA8z54-Hq1eLG9bkzyqafo,4187
144
142
  nextmv/cloud/instance.py,sha256=rLrgNNvNyC6hZtjxIfTR2Luylmbh2emJIZVCy_hTJZ4,5495
145
- nextmv/cloud/integration.py,sha256=ce8TWOw_xIXxf8tzqHNriPmJ2dRA9v2EZSXnWZEvWVk,18314
143
+ nextmv/cloud/integration.py,sha256=S4BNX3GFGNA1SXDWaRAUeS0hW6XkYXWSdWXX-s-x_nA,18112
146
144
  nextmv/cloud/package.py,sha256=88XSJ15QGcHboNJAw2hGowiLKBu2O2nV5ZieZFx7XDI,17133
147
145
  nextmv/cloud/scenario.py,sha256=1_4PI9ehYaSonEe_l59cFhZNmqQ_brXXP6-mVq9i8a8,14183
148
146
  nextmv/cloud/secrets.py,sha256=fA5cX0jfTsPVZWV7433wzETGlXpWRLHGswuObx9e6FQ,6820
149
- nextmv/cloud/shadow.py,sha256=U-s9alkDS3wmYCEVDKEvuceveWOZOiF7rkH4_8eKdNk,7711
150
- nextmv/cloud/switchback.py,sha256=6e4J5zCewgGaitB5iJiO3u6BPHcAlzdAB5WU8j2b4K8,7427
147
+ nextmv/cloud/shadow.py,sha256=DWJfFkwlbULdl988A1HkOsyQGq0l9xtLT8Q-ZzsepH0,7214
148
+ nextmv/cloud/switchback.py,sha256=AGA0LDMu7sHndczy2TrcZghn_ZRnTGlBDmGRZG34dZY,7344
151
149
  nextmv/cloud/url.py,sha256=Fz70ywkWdCLmP21ZBmJwZi5kDbjpmsX_VlwVF_xQeHg,1836
152
150
  nextmv/cloud/version.py,sha256=5_S7_pWUVBFbvAArku20eK7S645GJcHtgE2OpXLdSzQ,5300
153
- nextmv/cloud/application/__init__.py,sha256=x9khEFlWUdupBxzMuSyrCftopNtrK64LTTEaCRSRwyM,32712
154
- nextmv/cloud/application/_acceptance.py,sha256=PEkf9cDunK40UNw96QBhpJpH5SOFLZMtmnyX84uAo9k,13974
151
+ nextmv/cloud/application/__init__.py,sha256=E1Q-WIly_PiNg1ynMynA81SwX88Q6uH_lqWKtQQX0tg,40369
152
+ nextmv/cloud/application/_acceptance.py,sha256=ZwbVkur3-1fwM_L4F8ZUqrNaIdHgYGxKd3utoOCWjSc,13679
155
153
  nextmv/cloud/application/_batch_scenario.py,sha256=cSsX5vPOkm91UqRBPIcqlOvQ0iojwt4sQKYGZEE7x6k,28479
156
154
  nextmv/cloud/application/_ensemble.py,sha256=05l9uR0hTnW8nQjhRzjd2TPfvCoaAqNddWP-aVRL5rg,7666
157
- nextmv/cloud/application/_input_set.py,sha256=BXleeHOClCkwOh53vG6F_561XzAo_XgrHfGmNbJxIds,8131
155
+ nextmv/cloud/application/_input_set.py,sha256=m7PKqhR3evdE_a_RER1L6iKwftlaxTiRd1JQvgCepUU,7069
158
156
  nextmv/cloud/application/_instance.py,sha256=Jjig8NI1jXNyBQoYj7JOfS0JFmw5jJdKLfi82fqBYgo,8386
159
157
  nextmv/cloud/application/_managed_input.py,sha256=zaWqGpe8Y5XWheroAqZSo-xNHfn2MKblNwRUbQVXBRM,6694
160
- nextmv/cloud/application/_run.py,sha256=4lrxyQCUGJszdiYNGynYg6RXBPqjQ4tFcDmxH9dfSXY,53869
158
+ nextmv/cloud/application/_run.py,sha256=LgSKm537F0ej-LTsMVmabkyOBtFnaHjvAdInnPzL6UI,53898
161
159
  nextmv/cloud/application/_secrets.py,sha256=hWhPAyY8aDF8zlEz9opPNLrFOYtp-COFqG_jgOZ6VxI,9476
162
- nextmv/cloud/application/_shadow.py,sha256=ck1v0yBuayGnlLlq5pEIwNQOE3wU29m9jsx8II7MxqQ,9327
163
- nextmv/cloud/application/_switchback.py,sha256=MbB9MVlBUeQkm_xekRC56bgEdcIFKmFnLPtfMXGLItI,9994
160
+ nextmv/cloud/application/_shadow.py,sha256=8uH0Zr-9czef2BhshYLzc0yBQhIcIdBYTCIiUS1ru44,9123
161
+ nextmv/cloud/application/_switchback.py,sha256=MapHkquya7SeyNnEVIy7E7Um_9VuMH7XiB7FFxZx6Po,9743
164
162
  nextmv/cloud/application/_utils.py,sha256=GqksGBHCV2sc-itL6hlWnncUJjIxhw6LH3pOjs4M-us,1643
165
163
  nextmv/cloud/application/_version.py,sha256=o1jVLfoKJNCs-32P7hkL1IGba8Eb1hnT6vnaZpyc0dk,8543
166
164
  nextmv/default_app/.gitignore,sha256=gsfnfXMYNt-YTroh5hAzauwBZoPDJ6D_fB17rMSnIko,8
167
165
  nextmv/default_app/README.md,sha256=hW3zWcYzxhYfof-pThaN1Fkx93GT8tTUVRhx15edBis,662
168
166
  nextmv/default_app/app.yaml,sha256=TKjKnuoK0SDpouB_AS7TQmE_8HZbQYjmwFvhzFL1xpc,382
169
167
  nextmv/default_app/input.json,sha256=zgvbKL3boB0WIU6-9mEU3ZWBddQ5cQ0vhgmDwDyz4hE,63
170
- nextmv/default_app/main.py,sha256=gG-1JIvKXPCkm4JV46PcXxsQTAefwPXQbdPxkSubhf0,888
168
+ nextmv/default_app/main.py,sha256=j5L0itCyXKl3ezgkaS0cToLHzSl26Ah-PYr0gvxizxU,815
171
169
  nextmv/default_app/requirements.txt,sha256=wRE_HkYYWzCGnYZ2NuatHXul4gCHvU3iUAdsxtzpYiA,29
172
170
  nextmv/default_app/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
171
  nextmv/default_app/src/visuals.py,sha256=WYK_YBnLmYo3TpVev1CpoNCuW5R7hk9QIkeCmvMn1Fs,1014
174
172
  nextmv/local/__init__.py,sha256=6BsoqlK4dw6X11_uKzz9gBPfxKpdiol2FYO8R3X73SE,116
175
173
  nextmv/local/application.py,sha256=SBOARPnffAH6q-S0GGPEjt0gYIXmeR-38-VcZMfhqKk,47745
176
- nextmv/local/executor.py,sha256=1qoynUCB9UDgXhjXKds0OGc8McAtAsQHJ0-QVWTJrQs,36562
177
- nextmv/local/geojson_handler.py,sha256=7FavJdkUonop-yskjis0x3qFGB8A5wZyoBUblw-bVhw,12540
174
+ nextmv/local/executor.py,sha256=BxR7QWb4RekeFphJ4rOvJs8fYZGIQfgWlc75b8I7GRU,39310
175
+ nextmv/local/geojson_handler.py,sha256=CVlW5iof-8AODudEQ-a_o6WHqAeULfQS7-oJHf1-sAQ,12538
178
176
  nextmv/local/local.py,sha256=cp56UpI8h19Ob6Jvb_Ni0ceXH5Vv3ET_iPTDe6ftq3Y,2617
179
177
  nextmv/local/plotly_handler.py,sha256=bLb50e3AkVr_W-F6S7lXfeRdN60mG2jk3UElNmhoMWU,1930
180
178
  nextmv/local/runner.py,sha256=bM1dFIAG4f9pEtbyevzkRa9nSppqTeD8naomNzJVBRU,8560
181
- nextmv-1.0.0.dev7.dist-info/METADATA,sha256=4Q4VmDr3z1sztAQ7YtA-6I4jYWnu1DyZaPrxNRXB0EM,16576
182
- nextmv-1.0.0.dev7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
183
- nextmv-1.0.0.dev7.dist-info/entry_points.txt,sha256=bH7kXUt_IOLpeW_O7Z-J2gALs2YYJ4CmWuzS8MdK6uY,48
184
- nextmv-1.0.0.dev7.dist-info/licenses/LICENSE,sha256=ZIbK-sSWA-OZprjNbmJAglYRtl5_K4l9UwAV3PGJAPc,11349
185
- nextmv-1.0.0.dev7.dist-info/RECORD,,
179
+ nextmv-1.0.0.dev8.dist-info/METADATA,sha256=f8DkOWUbGdeNNNBWcVrcHD7z0CAP9PgAWrDr6QOFK3Q,16484
180
+ nextmv-1.0.0.dev8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
181
+ nextmv-1.0.0.dev8.dist-info/entry_points.txt,sha256=bH7kXUt_IOLpeW_O7Z-J2gALs2YYJ4CmWuzS8MdK6uY,48
182
+ nextmv-1.0.0.dev8.dist-info/licenses/LICENSE,sha256=ZIbK-sSWA-OZprjNbmJAglYRtl5_K4l9UwAV3PGJAPc,11349
183
+ nextmv-1.0.0.dev8.dist-info/RECORD,,
@@ -1,67 +0,0 @@
1
- """
2
- This module defines the cloud input-set delete command for the Nextmv CLI.
3
- """
4
-
5
- from typing import Annotated
6
-
7
- import typer
8
-
9
- from nextmv.cli.configuration.config import build_app
10
- from nextmv.cli.confirm import get_confirmation
11
- from nextmv.cli.message import info, success
12
- from nextmv.cli.options import AppIDOption, InputSetIDOption, ProfileOption
13
-
14
- # Set up subcommand application.
15
- app = typer.Typer()
16
-
17
-
18
- @app.command()
19
- def delete(
20
- app_id: AppIDOption,
21
- input_set_id: InputSetIDOption,
22
- yes: Annotated[
23
- bool,
24
- typer.Option(
25
- "--yes",
26
- "-y",
27
- help="Agree to deletion confirmation prompt. Useful for non-interactive sessions.",
28
- ),
29
- ] = False,
30
- profile: ProfileOption = None,
31
- ) -> None:
32
- """
33
- Deletes a Nextmv Cloud input set.
34
-
35
- This action is permanent and cannot be undone. The input set and all
36
- associated data will be deleted. Use the --yes flag to skip the
37
- confirmation prompt.
38
-
39
- [bold][underline]Examples[/underline][/bold]
40
-
41
- - Delete the input set with the ID [magenta]hop-analysis[/magenta] from application
42
- [magenta]hare-app[/magenta].
43
- $ [dim]nextmv cloud input-set delete --app-id hare-app --input-set-id hop-analysis[/dim]
44
-
45
- - Delete the input set without confirmation prompt.
46
- $ [dim]nextmv cloud input-set delete --app-id hare-app --input-set-id carrot-routes --yes[/dim]
47
- """
48
-
49
- if not yes:
50
- confirm = get_confirmation(
51
- f"Are you sure you want to delete input set [magenta]{input_set_id}[/magenta] "
52
- f"from application [magenta]{app_id}[/magenta]? This action cannot be undone.",
53
- )
54
-
55
- if not confirm:
56
- info(
57
- msg=f"Input set [magenta]{input_set_id}[/magenta] will not be deleted.",
58
- emoji=":bulb:",
59
- )
60
- return
61
-
62
- cloud_app = build_app(app_id=app_id, profile=profile)
63
- cloud_app.delete_input_set(input_set_id=input_set_id)
64
- success(
65
- f"Input set [magenta]{input_set_id}[/magenta] deleted successfully "
66
- f"from application [magenta]{app_id}[/magenta]."
67
- )