nextmv 1.0.0.dev7__py3-none-any.whl → 1.0.0.dev9__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.
- nextmv/__about__.py +1 -1
- nextmv/cli/cloud/app/push.py +15 -15
- nextmv/cli/cloud/input_set/__init__.py +0 -2
- nextmv/cli/cloud/run/create.py +9 -4
- nextmv/cli/cloud/shadow/stop.py +2 -14
- nextmv/cli/cloud/switchback/stop.py +2 -14
- nextmv/cli/community/clone.py +198 -11
- nextmv/cli/community/list.py +116 -46
- nextmv/cloud/__init__.py +0 -4
- nextmv/cloud/application/__init__.py +198 -1
- nextmv/cloud/application/_acceptance.py +8 -13
- nextmv/cloud/application/_input_set.py +6 -42
- nextmv/cloud/application/_run.py +2 -2
- nextmv/cloud/application/_shadow.py +3 -9
- nextmv/cloud/application/_switchback.py +2 -11
- nextmv/cloud/batch_experiment.py +1 -3
- nextmv/cloud/integration.py +4 -7
- nextmv/cloud/shadow.py +0 -25
- nextmv/cloud/switchback.py +0 -2
- nextmv/model.py +14 -11
- nextmv/options.py +1 -1
- {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev9.dist-info}/METADATA +3 -6
- {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev9.dist-info}/RECORD +26 -28
- nextmv/cli/cloud/input_set/delete.py +0 -67
- nextmv/cloud/community.py +0 -441
- {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev9.dist-info}/WHEEL +0 -0
- {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev9.dist-info}/entry_points.txt +0 -0
- {nextmv-1.0.0.dev7.dist-info → nextmv-1.0.0.dev9.dist-info}/licenses/LICENSE +0 -0
nextmv/cloud/application/_run.py
CHANGED
|
@@ -635,7 +635,7 @@ class ApplicationRunMixin:
|
|
|
635
635
|
temp_tar_path = os.path.join(tmpdirname, f"{run_id}.tar.gz")
|
|
636
636
|
with open(temp_tar_path, "wb") as f:
|
|
637
637
|
f.write(download_response.content)
|
|
638
|
-
shutil.unpack_archive(temp_tar_path, output_dir_path)
|
|
638
|
+
shutil.unpack_archive(temp_tar_path, output_dir_path, filter=None)
|
|
639
639
|
|
|
640
640
|
return
|
|
641
641
|
|
|
@@ -1287,7 +1287,7 @@ class ApplicationRunMixin:
|
|
|
1287
1287
|
temp_tar_path = os.path.join(tmpdirname, f"{run_id}.tar.gz")
|
|
1288
1288
|
with open(temp_tar_path, "wb") as f:
|
|
1289
1289
|
f.write(download_response.content)
|
|
1290
|
-
shutil.unpack_archive(temp_tar_path, output_dir_path)
|
|
1290
|
+
shutil.unpack_archive(temp_tar_path, output_dir_path, filter=None)
|
|
1291
1291
|
else:
|
|
1292
1292
|
result.output = download_response.json()
|
|
1293
1293
|
|
|
@@ -4,7 +4,7 @@ Application mixin for managing shadow tests.
|
|
|
4
4
|
|
|
5
5
|
from typing import TYPE_CHECKING
|
|
6
6
|
|
|
7
|
-
from nextmv.cloud.shadow import ShadowTest, ShadowTestMetadata, StartEvents,
|
|
7
|
+
from nextmv.cloud.shadow import ShadowTest, ShadowTestMetadata, StartEvents, TerminationEvents
|
|
8
8
|
from nextmv.run import Run
|
|
9
9
|
from nextmv.safe import safe_id
|
|
10
10
|
|
|
@@ -248,7 +248,7 @@ class ApplicationShadowMixin:
|
|
|
248
248
|
endpoint=f"{self.experiments_endpoint}/shadow/{shadow_test_id}/start",
|
|
249
249
|
)
|
|
250
250
|
|
|
251
|
-
def stop_shadow_test(self: "Application", shadow_test_id: str
|
|
251
|
+
def stop_shadow_test(self: "Application", shadow_test_id: str) -> None:
|
|
252
252
|
"""
|
|
253
253
|
Stop a shadow test. The test should already have started before using
|
|
254
254
|
this method.
|
|
@@ -257,22 +257,16 @@ class ApplicationShadowMixin:
|
|
|
257
257
|
----------
|
|
258
258
|
shadow_test_id : str
|
|
259
259
|
ID of the shadow test to stop.
|
|
260
|
-
|
|
261
|
-
Intent for stopping the shadow test.
|
|
260
|
+
|
|
262
261
|
Raises
|
|
263
262
|
------
|
|
264
263
|
requests.HTTPError
|
|
265
264
|
If the response status code is not 2xx.
|
|
266
265
|
"""
|
|
267
266
|
|
|
268
|
-
payload = {
|
|
269
|
-
"intent": intent.value,
|
|
270
|
-
}
|
|
271
|
-
|
|
272
267
|
_ = self.client.request(
|
|
273
268
|
method="PUT",
|
|
274
269
|
endpoint=f"{self.experiments_endpoint}/shadow/{shadow_test_id}/stop",
|
|
275
|
-
payload=payload,
|
|
276
270
|
)
|
|
277
271
|
|
|
278
272
|
def update_shadow_test(
|
|
@@ -5,7 +5,6 @@ Application mixin for managing switchback tests.
|
|
|
5
5
|
from datetime import datetime
|
|
6
6
|
from typing import TYPE_CHECKING
|
|
7
7
|
|
|
8
|
-
from nextmv.cloud.shadow import StopIntent
|
|
9
8
|
from nextmv.cloud.switchback import SwitchbackTest, SwitchbackTestMetadata, TestComparisonSingle
|
|
10
9
|
from nextmv.run import Run
|
|
11
10
|
from nextmv.safe import safe_id
|
|
@@ -217,7 +216,7 @@ class ApplicationSwitchbackMixin:
|
|
|
217
216
|
payload = {
|
|
218
217
|
"id": switchback_test_id,
|
|
219
218
|
"name": name,
|
|
220
|
-
"comparison": comparison
|
|
219
|
+
"comparison": comparison,
|
|
221
220
|
"generate_random_plan": {
|
|
222
221
|
"unit_duration_minutes": unit_duration_minutes,
|
|
223
222
|
"units": units,
|
|
@@ -258,7 +257,7 @@ class ApplicationSwitchbackMixin:
|
|
|
258
257
|
endpoint=f"{self.experiments_endpoint}/switchback/{switchback_test_id}/start",
|
|
259
258
|
)
|
|
260
259
|
|
|
261
|
-
def stop_switchback_test(self: "Application", switchback_test_id: str
|
|
260
|
+
def stop_switchback_test(self: "Application", switchback_test_id: str) -> None:
|
|
262
261
|
"""
|
|
263
262
|
Stop a switchback test. The test should already have started before using
|
|
264
263
|
this method.
|
|
@@ -268,23 +267,15 @@ class ApplicationSwitchbackMixin:
|
|
|
268
267
|
switchback_test_id : str
|
|
269
268
|
ID of the switchback test to stop.
|
|
270
269
|
|
|
271
|
-
intent : StopIntent
|
|
272
|
-
Intent for stopping the switchback test.
|
|
273
|
-
|
|
274
270
|
Raises
|
|
275
271
|
------
|
|
276
272
|
requests.HTTPError
|
|
277
273
|
If the response status code is not 2xx.
|
|
278
274
|
"""
|
|
279
275
|
|
|
280
|
-
payload = {
|
|
281
|
-
"intent": intent.value,
|
|
282
|
-
}
|
|
283
|
-
|
|
284
276
|
_ = self.client.request(
|
|
285
277
|
method="PUT",
|
|
286
278
|
endpoint=f"{self.experiments_endpoint}/switchback/{switchback_test_id}/stop",
|
|
287
|
-
payload=payload,
|
|
288
279
|
)
|
|
289
280
|
|
|
290
281
|
def update_switchback_test(
|
nextmv/cloud/batch_experiment.py
CHANGED
|
@@ -30,9 +30,7 @@ class ExperimentStatus(str, Enum):
|
|
|
30
30
|
|
|
31
31
|
You can import the `ExperimentStatus` class directly from `cloud`:
|
|
32
32
|
|
|
33
|
-
```python
|
|
34
|
-
from nextmv.cloud import ExperimentStatus
|
|
35
|
-
```
|
|
33
|
+
```python from nextmv.cloud import ExperimentStatus ```
|
|
36
34
|
|
|
37
35
|
This enum represents the comprehensive set of possible states for an
|
|
38
36
|
experiment in Nextmv Cloud.
|
nextmv/cloud/integration.py
CHANGED
|
@@ -225,12 +225,12 @@ class Integration(BaseModel):
|
|
|
225
225
|
def new( # noqa: C901
|
|
226
226
|
cls,
|
|
227
227
|
client: Client,
|
|
228
|
+
name: str,
|
|
228
229
|
integration_type: IntegrationType | str,
|
|
229
230
|
exec_types: list[ManifestType | str],
|
|
230
231
|
provider: IntegrationProvider | str,
|
|
231
232
|
provider_config: dict[str, Any],
|
|
232
233
|
integration_id: str | None = None,
|
|
233
|
-
name: str | None = None,
|
|
234
234
|
description: str | None = None,
|
|
235
235
|
is_global: bool = False,
|
|
236
236
|
application_ids: list[str] | None = None,
|
|
@@ -243,6 +243,8 @@ class Integration(BaseModel):
|
|
|
243
243
|
----------
|
|
244
244
|
client : Client
|
|
245
245
|
Client to use for interacting with the Nextmv Cloud API.
|
|
246
|
+
name : str
|
|
247
|
+
The name of the integration.
|
|
246
248
|
integration_type : IntegrationType | str
|
|
247
249
|
The type of the integration. Please refer to the `IntegrationType`
|
|
248
250
|
enum for possible values.
|
|
@@ -257,9 +259,6 @@ class Integration(BaseModel):
|
|
|
257
259
|
integration_id : str, optional
|
|
258
260
|
The unique identifier of the integration. If not provided,
|
|
259
261
|
it will be generated automatically.
|
|
260
|
-
name : str | None, optional
|
|
261
|
-
The name of the integration. If not provided, the integration ID
|
|
262
|
-
will be used as the name.
|
|
263
262
|
description : str, optional
|
|
264
263
|
An optional description of the integration.
|
|
265
264
|
is_global : bool, optional, default=False
|
|
@@ -303,10 +302,8 @@ class Integration(BaseModel):
|
|
|
303
302
|
elif not is_global and application_ids is None:
|
|
304
303
|
raise ValueError("A non-global integration must have specific application IDs.")
|
|
305
304
|
|
|
306
|
-
if integration_id is None
|
|
305
|
+
if integration_id is None:
|
|
307
306
|
integration_id = safe_id("integration")
|
|
308
|
-
if name is None or name == "":
|
|
309
|
-
name = integration_id
|
|
310
307
|
|
|
311
308
|
if exist_ok:
|
|
312
309
|
try:
|
nextmv/cloud/shadow.py
CHANGED
|
@@ -19,7 +19,6 @@ ShadowTest
|
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
from datetime import datetime
|
|
22
|
-
from enum import Enum
|
|
23
22
|
from typing import Any
|
|
24
23
|
|
|
25
24
|
from pydantic import AliasChoices, Field
|
|
@@ -228,27 +227,3 @@ class ShadowTest(BaseModel):
|
|
|
228
227
|
"""Grouped distributional summaries of the shadow test."""
|
|
229
228
|
runs: list[Run] | None = None
|
|
230
229
|
"""List of runs in the shadow test."""
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
class StopIntent(str, Enum):
|
|
234
|
-
"""
|
|
235
|
-
Intent for stopping a shadow test.
|
|
236
|
-
|
|
237
|
-
You can import the `StopIntent` class directly from `cloud`:
|
|
238
|
-
|
|
239
|
-
```python
|
|
240
|
-
from nextmv.cloud import StopIntent
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
Attributes
|
|
244
|
-
----------
|
|
245
|
-
complete : str
|
|
246
|
-
The test is marked as complete.
|
|
247
|
-
cancel : str
|
|
248
|
-
The test is canceled.
|
|
249
|
-
"""
|
|
250
|
-
|
|
251
|
-
complete = "complete"
|
|
252
|
-
"""The test is marked as complete."""
|
|
253
|
-
cancel = "cancel"
|
|
254
|
-
"""The test is canceled."""
|
nextmv/cloud/switchback.py
CHANGED
|
@@ -45,8 +45,6 @@ class TestComparisonSingle(BaseModel):
|
|
|
45
45
|
ID of the candidate instance for comparison.
|
|
46
46
|
"""
|
|
47
47
|
|
|
48
|
-
__test__ = False # Prevents pytest from collecting this class as a test case
|
|
49
|
-
|
|
50
48
|
baseline_instance_id: str
|
|
51
49
|
"""ID of the baseline instance for comparison."""
|
|
52
50
|
candidate_instance_id: str
|
nextmv/model.py
CHANGED
|
@@ -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
|
|
|
@@ -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
|
-
|
|
348
|
-
|
|
349
|
-
|
|
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
|
-
|
|
419
|
-
if os.path.exists(
|
|
420
|
-
|
|
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):
|
nextmv/options.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextmv
|
|
3
|
-
Version: 1.0.0.
|
|
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,21 +229,18 @@ 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>=
|
|
233
|
-
Requires-Dist: nextpipe>=0.6.0; extra == 'dev'
|
|
234
|
-
Requires-Dist: nextroute>=1.11.1; extra == 'dev'
|
|
232
|
+
Requires-Dist: mlflow>=3.9.0; extra == 'dev'
|
|
235
233
|
Requires-Dist: openpyxl>=3.1.5; extra == 'dev'
|
|
236
234
|
Requires-Dist: pandas>=2.2.3; extra == 'dev'
|
|
237
235
|
Requires-Dist: plotly>=6.0.1; extra == 'dev'
|
|
238
236
|
Requires-Dist: pydantic>=2.5.2; extra == 'dev'
|
|
239
|
-
Requires-Dist: pytest>=9.0.2; extra == 'dev'
|
|
240
237
|
Requires-Dist: pyyaml>=6.0.1; extra == 'dev'
|
|
241
238
|
Requires-Dist: requests>=2.31.0; extra == 'dev'
|
|
242
239
|
Requires-Dist: ruff>=0.1.7; extra == 'dev'
|
|
243
240
|
Requires-Dist: twine>=4.0.2; extra == 'dev'
|
|
244
241
|
Requires-Dist: urllib3>=2.1.0; extra == 'dev'
|
|
245
242
|
Provides-Extra: notebook
|
|
246
|
-
Requires-Dist: mlflow>=
|
|
243
|
+
Requires-Dist: mlflow>=3.9.0; extra == 'notebook'
|
|
247
244
|
Description-Content-Type: text/markdown
|
|
248
245
|
|
|
249
246
|
# Nextmv Python SDK
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
nextmv/__about__.py,sha256=
|
|
1
|
+
nextmv/__about__.py,sha256=VlLsZkZ0zjltxAYOr-XbXribwiPhO-YMZ5Qymsv1Se0,28
|
|
2
2
|
nextmv/__entrypoint__.py,sha256=XMT-ds1f2Yc6KoI2C0YEH-rJj5gVLfJMqUdRfcA3_KQ,1070
|
|
3
3
|
nextmv/__init__.py,sha256=LwpGBSiV0UG13zKHO2N3Ikb7bCMV08Gfbl6Cp80b_2g,3813
|
|
4
4
|
nextmv/_serialization.py,sha256=jYitMS1MU8ldsmObT-K_8V8P2Wx69tnDiEHCCgPGun4,2834
|
|
@@ -7,8 +7,8 @@ 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
9
|
nextmv/manifest.py,sha256=v9En9zMZVKZn6G_HThoKUZowMtZr5hxzwWiK9wkVHPU,49023
|
|
10
|
-
nextmv/model.py,sha256=
|
|
11
|
-
nextmv/options.py,sha256=
|
|
10
|
+
nextmv/model.py,sha256=GWzg9eWtTKjZqsQNvMPWdv5BLLb63Ied_q2koXxiCxM,15066
|
|
11
|
+
nextmv/options.py,sha256=3BnnuAoiFD6qr0EMYv1VgAXarDjLb-t7OpC1IpsnS1M,29648
|
|
12
12
|
nextmv/output.py,sha256=MbmI7t8p2LhKD1T--IZnsHvIuFY_TM8wTNCdLQVWs2A,54356
|
|
13
13
|
nextmv/polling.py,sha256=fwnAxmfpuBg4d6pi53TRTyyefdpf-cHLoTG6trAu-QA,11048
|
|
14
14
|
nextmv/run.py,sha256=8tkRQexJC8JN7IkLlhpwEW5pEudxwDq2sC_PImfwReI,54126
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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,42 +124,41 @@ 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=
|
|
129
|
-
nextmv/cli/community/list.py,sha256=
|
|
127
|
+
nextmv/cli/community/clone.py,sha256=C9ujRTBpL7fbgpBjIALsNjzYh5T-8weHOzkV1bsuiLU,9236
|
|
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=
|
|
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=
|
|
138
|
+
nextmv/cloud/batch_experiment.py,sha256=thS94-ZdMR7Em5TeGN5UtnIDHmhzqld_U49SODyhrPU,10537
|
|
140
139
|
nextmv/cloud/client.py,sha256=Yj4FE4GKsLHkYijAYXcotlyNfhAWANMuWetHXsYPg1M,18101
|
|
141
|
-
nextmv/cloud/community.py,sha256=LSiKF5agLTHFbW5fBAv-m3MsWm3XuROpw4_KkPpwtZM,13060
|
|
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=
|
|
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=
|
|
150
|
-
nextmv/cloud/switchback.py,sha256=
|
|
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=
|
|
154
|
-
nextmv/cloud/application/_acceptance.py,sha256=
|
|
151
|
+
nextmv/cloud/application/__init__.py,sha256=XmRdxE-pMUGdOG8tCblQUAtb9q5F_9Xdh3SoGk-Nj2Q,40221
|
|
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=
|
|
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
|
|
158
|
+
nextmv/cloud/application/_run.py,sha256=-cAnkqiZ1rP37XbV8xH_R89wvMZpDzBFzSi684GgErA,53895
|
|
161
159
|
nextmv/cloud/application/_secrets.py,sha256=hWhPAyY8aDF8zlEz9opPNLrFOYtp-COFqG_jgOZ6VxI,9476
|
|
162
|
-
nextmv/cloud/application/_shadow.py,sha256=
|
|
163
|
-
nextmv/cloud/application/_switchback.py,sha256=
|
|
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
|
|
@@ -178,8 +176,8 @@ nextmv/local/geojson_handler.py,sha256=7FavJdkUonop-yskjis0x3qFGB8A5wZyoBUblw-bV
|
|
|
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.
|
|
182
|
-
nextmv-1.0.0.
|
|
183
|
-
nextmv-1.0.0.
|
|
184
|
-
nextmv-1.0.0.
|
|
185
|
-
nextmv-1.0.0.
|
|
179
|
+
nextmv-1.0.0.dev9.dist-info/METADATA,sha256=401CvhCVmExbub4P0bcQU64MItlTOaSq5VTcVSyD0ss,16433
|
|
180
|
+
nextmv-1.0.0.dev9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
181
|
+
nextmv-1.0.0.dev9.dist-info/entry_points.txt,sha256=bH7kXUt_IOLpeW_O7Z-J2gALs2YYJ4CmWuzS8MdK6uY,48
|
|
182
|
+
nextmv-1.0.0.dev9.dist-info/licenses/LICENSE,sha256=ZIbK-sSWA-OZprjNbmJAglYRtl5_K4l9UwAV3PGJAPc,11349
|
|
183
|
+
nextmv-1.0.0.dev9.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
|
-
)
|