nextmv 0.39.0.dev1__py3-none-any.whl → 1.0.0__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 (161) hide show
  1. nextmv/__about__.py +1 -1
  2. nextmv/__entrypoint__.py +1 -2
  3. nextmv/__init__.py +2 -4
  4. nextmv/cli/CONTRIBUTING.md +583 -0
  5. nextmv/cli/cloud/__init__.py +49 -0
  6. nextmv/cli/cloud/acceptance/__init__.py +27 -0
  7. nextmv/cli/cloud/acceptance/create.py +391 -0
  8. nextmv/cli/cloud/acceptance/delete.py +64 -0
  9. nextmv/cli/cloud/acceptance/get.py +103 -0
  10. nextmv/cli/cloud/acceptance/list.py +62 -0
  11. nextmv/cli/cloud/acceptance/update.py +95 -0
  12. nextmv/cli/cloud/account/__init__.py +28 -0
  13. nextmv/cli/cloud/account/create.py +83 -0
  14. nextmv/cli/cloud/account/delete.py +59 -0
  15. nextmv/cli/cloud/account/get.py +66 -0
  16. nextmv/cli/cloud/account/update.py +70 -0
  17. nextmv/cli/cloud/app/__init__.py +35 -0
  18. nextmv/cli/cloud/app/create.py +140 -0
  19. nextmv/cli/cloud/app/delete.py +57 -0
  20. nextmv/cli/cloud/app/exists.py +44 -0
  21. nextmv/cli/cloud/app/get.py +66 -0
  22. nextmv/cli/cloud/app/list.py +61 -0
  23. nextmv/cli/cloud/app/push.py +432 -0
  24. nextmv/cli/cloud/app/update.py +124 -0
  25. nextmv/cli/cloud/batch/__init__.py +29 -0
  26. nextmv/cli/cloud/batch/create.py +452 -0
  27. nextmv/cli/cloud/batch/delete.py +64 -0
  28. nextmv/cli/cloud/batch/get.py +104 -0
  29. nextmv/cli/cloud/batch/list.py +63 -0
  30. nextmv/cli/cloud/batch/metadata.py +66 -0
  31. nextmv/cli/cloud/batch/update.py +95 -0
  32. nextmv/cli/cloud/data/__init__.py +26 -0
  33. nextmv/cli/cloud/data/upload.py +162 -0
  34. nextmv/cli/cloud/ensemble/__init__.py +33 -0
  35. nextmv/cli/cloud/ensemble/create.py +413 -0
  36. nextmv/cli/cloud/ensemble/delete.py +63 -0
  37. nextmv/cli/cloud/ensemble/get.py +65 -0
  38. nextmv/cli/cloud/ensemble/list.py +63 -0
  39. nextmv/cli/cloud/ensemble/update.py +103 -0
  40. nextmv/cli/cloud/input_set/__init__.py +32 -0
  41. nextmv/cli/cloud/input_set/create.py +168 -0
  42. nextmv/cli/cloud/input_set/delete.py +64 -0
  43. nextmv/cli/cloud/input_set/get.py +63 -0
  44. nextmv/cli/cloud/input_set/list.py +63 -0
  45. nextmv/cli/cloud/input_set/update.py +123 -0
  46. nextmv/cli/cloud/instance/__init__.py +35 -0
  47. nextmv/cli/cloud/instance/create.py +289 -0
  48. nextmv/cli/cloud/instance/delete.py +61 -0
  49. nextmv/cli/cloud/instance/exists.py +39 -0
  50. nextmv/cli/cloud/instance/get.py +62 -0
  51. nextmv/cli/cloud/instance/list.py +60 -0
  52. nextmv/cli/cloud/instance/update.py +216 -0
  53. nextmv/cli/cloud/managed_input/__init__.py +31 -0
  54. nextmv/cli/cloud/managed_input/create.py +144 -0
  55. nextmv/cli/cloud/managed_input/delete.py +64 -0
  56. nextmv/cli/cloud/managed_input/get.py +63 -0
  57. nextmv/cli/cloud/managed_input/list.py +60 -0
  58. nextmv/cli/cloud/managed_input/update.py +97 -0
  59. nextmv/cli/cloud/run/__init__.py +37 -0
  60. nextmv/cli/cloud/run/cancel.py +37 -0
  61. nextmv/cli/cloud/run/create.py +524 -0
  62. nextmv/cli/cloud/run/get.py +199 -0
  63. nextmv/cli/cloud/run/input.py +86 -0
  64. nextmv/cli/cloud/run/list.py +80 -0
  65. nextmv/cli/cloud/run/logs.py +166 -0
  66. nextmv/cli/cloud/run/metadata.py +67 -0
  67. nextmv/cli/cloud/run/track.py +500 -0
  68. nextmv/cli/cloud/scenario/__init__.py +29 -0
  69. nextmv/cli/cloud/scenario/create.py +451 -0
  70. nextmv/cli/cloud/scenario/delete.py +61 -0
  71. nextmv/cli/cloud/scenario/get.py +102 -0
  72. nextmv/cli/cloud/scenario/list.py +63 -0
  73. nextmv/cli/cloud/scenario/metadata.py +67 -0
  74. nextmv/cli/cloud/scenario/update.py +93 -0
  75. nextmv/cli/cloud/secrets/__init__.py +33 -0
  76. nextmv/cli/cloud/secrets/create.py +206 -0
  77. nextmv/cli/cloud/secrets/delete.py +63 -0
  78. nextmv/cli/cloud/secrets/get.py +66 -0
  79. nextmv/cli/cloud/secrets/list.py +60 -0
  80. nextmv/cli/cloud/secrets/update.py +144 -0
  81. nextmv/cli/cloud/shadow/__init__.py +33 -0
  82. nextmv/cli/cloud/shadow/create.py +184 -0
  83. nextmv/cli/cloud/shadow/delete.py +64 -0
  84. nextmv/cli/cloud/shadow/get.py +61 -0
  85. nextmv/cli/cloud/shadow/list.py +63 -0
  86. nextmv/cli/cloud/shadow/metadata.py +66 -0
  87. nextmv/cli/cloud/shadow/start.py +43 -0
  88. nextmv/cli/cloud/shadow/stop.py +53 -0
  89. nextmv/cli/cloud/shadow/update.py +96 -0
  90. nextmv/cli/cloud/switchback/__init__.py +33 -0
  91. nextmv/cli/cloud/switchback/create.py +151 -0
  92. nextmv/cli/cloud/switchback/delete.py +64 -0
  93. nextmv/cli/cloud/switchback/get.py +62 -0
  94. nextmv/cli/cloud/switchback/list.py +63 -0
  95. nextmv/cli/cloud/switchback/metadata.py +68 -0
  96. nextmv/cli/cloud/switchback/start.py +43 -0
  97. nextmv/cli/cloud/switchback/stop.py +53 -0
  98. nextmv/cli/cloud/switchback/update.py +96 -0
  99. nextmv/cli/cloud/upload/__init__.py +22 -0
  100. nextmv/cli/cloud/upload/create.py +39 -0
  101. nextmv/cli/cloud/version/__init__.py +33 -0
  102. nextmv/cli/cloud/version/create.py +96 -0
  103. nextmv/cli/cloud/version/delete.py +61 -0
  104. nextmv/cli/cloud/version/exists.py +39 -0
  105. nextmv/cli/cloud/version/get.py +62 -0
  106. nextmv/cli/cloud/version/list.py +60 -0
  107. nextmv/cli/cloud/version/update.py +92 -0
  108. nextmv/cli/community/__init__.py +24 -0
  109. nextmv/cli/community/clone.py +86 -0
  110. nextmv/cli/community/list.py +200 -0
  111. nextmv/cli/configuration/__init__.py +23 -0
  112. nextmv/cli/configuration/config.py +228 -0
  113. nextmv/cli/configuration/create.py +94 -0
  114. nextmv/cli/configuration/delete.py +67 -0
  115. nextmv/cli/configuration/list.py +77 -0
  116. nextmv/cli/confirm.py +34 -0
  117. nextmv/cli/main.py +161 -3
  118. nextmv/cli/message.py +170 -0
  119. nextmv/cli/options.py +220 -0
  120. nextmv/cli/version.py +22 -2
  121. nextmv/cloud/__init__.py +17 -38
  122. nextmv/cloud/acceptance_test.py +20 -83
  123. nextmv/cloud/account.py +269 -30
  124. nextmv/cloud/application/__init__.py +898 -0
  125. nextmv/cloud/application/_acceptance.py +424 -0
  126. nextmv/cloud/application/_batch_scenario.py +845 -0
  127. nextmv/cloud/application/_ensemble.py +251 -0
  128. nextmv/cloud/application/_input_set.py +263 -0
  129. nextmv/cloud/application/_instance.py +289 -0
  130. nextmv/cloud/application/_managed_input.py +227 -0
  131. nextmv/cloud/application/_run.py +1393 -0
  132. nextmv/cloud/application/_secrets.py +294 -0
  133. nextmv/cloud/application/_shadow.py +320 -0
  134. nextmv/cloud/application/_switchback.py +332 -0
  135. nextmv/cloud/application/_utils.py +54 -0
  136. nextmv/cloud/application/_version.py +304 -0
  137. nextmv/cloud/batch_experiment.py +6 -2
  138. nextmv/cloud/community.py +446 -0
  139. nextmv/cloud/instance.py +11 -1
  140. nextmv/cloud/integration.py +8 -5
  141. nextmv/cloud/package.py +50 -9
  142. nextmv/cloud/shadow.py +254 -0
  143. nextmv/cloud/switchback.py +228 -0
  144. nextmv/deprecated.py +5 -3
  145. nextmv/input.py +20 -88
  146. nextmv/local/application.py +3 -15
  147. nextmv/local/runner.py +1 -1
  148. nextmv/model.py +50 -11
  149. nextmv/options.py +11 -256
  150. nextmv/output.py +0 -62
  151. nextmv/polling.py +54 -16
  152. nextmv/run.py +84 -37
  153. nextmv/status.py +1 -51
  154. {nextmv-0.39.0.dev1.dist-info → nextmv-1.0.0.dist-info}/METADATA +37 -11
  155. nextmv-1.0.0.dist-info/RECORD +185 -0
  156. nextmv-1.0.0.dist-info/entry_points.txt +2 -0
  157. nextmv/cloud/application.py +0 -4204
  158. nextmv-0.39.0.dev1.dist-info/RECORD +0 -55
  159. nextmv-0.39.0.dev1.dist-info/entry_points.txt +0 -2
  160. {nextmv-0.39.0.dev1.dist-info → nextmv-1.0.0.dist-info}/WHEEL +0 -0
  161. {nextmv-0.39.0.dev1.dist-info → nextmv-1.0.0.dist-info}/licenses/LICENSE +0 -0
nextmv/run.py CHANGED
@@ -53,7 +53,7 @@ from nextmv._serialization import serialize_json
53
53
  from nextmv.base_model import BaseModel
54
54
  from nextmv.input import Input, InputFormat
55
55
  from nextmv.output import Asset, Output, OutputFormat, Statistics
56
- from nextmv.status import Status, StatusV2
56
+ from nextmv.status import StatusV2
57
57
 
58
58
 
59
59
  def run_duration(start: datetime | float, end: datetime | float) -> int:
@@ -520,8 +520,6 @@ class Run(BaseModel):
520
520
  Class name for the execution of a job.
521
521
  runtime : str
522
522
  Runtime environment for the run.
523
- status : Status
524
- Deprecated, use status_v2 instead.
525
523
  status_v2 : StatusV2
526
524
  Status of the run.
527
525
  queuing_priority : int, optional
@@ -598,8 +596,6 @@ class Run(BaseModel):
598
596
  status_v2: StatusV2
599
597
  """Status of the run."""
600
598
 
601
- status: Status | None = None
602
- """Deprecated, use status_v2 instead."""
603
599
  queuing_priority: int | None = None
604
600
  """Priority of the run in the queue."""
605
601
  queuing_disabled: bool | None = None
@@ -656,8 +652,6 @@ class Metadata(BaseModel):
656
652
  Size of the output in bytes.
657
653
  format : Format
658
654
  Format of the input and output of the run.
659
- status : Status
660
- Deprecated: use status_v2.
661
655
  status_v2 : StatusV2
662
656
  Status of the run.
663
657
  """
@@ -682,11 +676,26 @@ class Metadata(BaseModel):
682
676
  """Format of the input and output of the run."""
683
677
  status_v2: StatusV2
684
678
  """Status of the run."""
685
- status: Status | None = None
686
- """Deprecated: use status_v2."""
687
679
  statistics: dict[str, Any] | None = None
688
680
  """User defined statistics of the run."""
689
681
 
682
+ def run_is_finalized(self) -> bool:
683
+ """
684
+ Checks if the run has reached a finalized state.
685
+
686
+ Returns
687
+ -------
688
+ bool
689
+ True if the run status is one of `succeeded`, `failed`, or
690
+ `canceled`. False otherwise.
691
+ """
692
+
693
+ return self.status_v2 in {
694
+ StatusV2.succeeded,
695
+ StatusV2.failed,
696
+ StatusV2.canceled,
697
+ }
698
+
690
699
 
691
700
  class SyncedRun(BaseModel):
692
701
  """
@@ -850,7 +859,6 @@ class RunInformation(BaseModel):
850
859
  run_type=RunTypeConfiguration(), # Default empty configuration
851
860
  execution_class="", # Not available in RunInformation
852
861
  runtime="", # Not available in RunInformation
853
- status=self.metadata.status,
854
862
  status_v2=self.metadata.status_v2,
855
863
  # Optional fields that are not available in RunInformation
856
864
  queuing_priority=None,
@@ -1031,6 +1039,43 @@ class RunLog(BaseModel):
1031
1039
  """Log of the run."""
1032
1040
 
1033
1041
 
1042
+ class TimestampedRunLog(BaseModel):
1043
+ """
1044
+ Timestamped log entry of a run.
1045
+
1046
+ You can import the `TimestampedRunLog` class directly from `nextmv`:
1047
+
1048
+ ```python
1049
+ from nextmv import TimestampedRunLog
1050
+ ```
1051
+
1052
+ Parameters
1053
+ ----------
1054
+ timestamp : datetime
1055
+ Timestamp of the log entry.
1056
+ log : str
1057
+ Log message.
1058
+
1059
+ Examples
1060
+ --------
1061
+ >>> from nextmv import TimestampedRunLog
1062
+ >>> from datetime import datetime
1063
+ >>> log_entry = TimestampedRunLog(
1064
+ ... timestamp=datetime(2023, 1, 1, 12, 0, 0),
1065
+ ... log="Optimization started"
1066
+ ... )
1067
+ >>> log_entry.timestamp
1068
+ datetime.datetime(2023, 1, 1, 12, 0)
1069
+ >>> log_entry.log
1070
+ 'Optimization started'
1071
+ """
1072
+
1073
+ timestamp: datetime
1074
+ """Timestamp of the log entry."""
1075
+ log: str
1076
+ """Log message."""
1077
+
1078
+
1034
1079
  class RunQueuing(BaseModel):
1035
1080
  """
1036
1081
  RunQueuing configuration for a run.
@@ -1395,8 +1440,8 @@ class TrackedRun:
1395
1440
  output : Output or dict[str, Any] or str, optional
1396
1441
  The output of the run being tracked. Please note that if the output
1397
1442
  format is JSON, then the output data must be JSON serializable. If both
1398
- `output` and `output_dir_path` are specified, the `output` is ignored, and
1399
- the files in the directory are used instead. Defaults to None.
1443
+ `output` and `output_dir_path` are specified, the `output` is ignored,
1444
+ and the files in the directory are used instead. Defaults to None.
1400
1445
  duration : int, optional
1401
1446
  The duration of the run being tracked, in milliseconds. This field is
1402
1447
  optional. Defaults to None.
@@ -1404,39 +1449,41 @@ class TrackedRun:
1404
1449
  An error message if the run failed. You should only specify this if the
1405
1450
  run failed (the `status` is `TrackedRunStatus.FAILED`), otherwise an
1406
1451
  exception will be raised. This field is optional. Defaults to None.
1407
- logs : list[str], optional
1408
- The logs of the run being tracked. Each element of the list is a line in
1409
- the log. This field is optional. Defaults to None.
1452
+ logs : str or list[str], optional
1453
+ The logs of the run being tracked. If the logs are provided as a list,
1454
+ each element of the list is a line in the log. This field is optional.
1455
+ Defaults to None.
1410
1456
  name : str, optional
1411
1457
  Optional name for the run being tracked. Defaults to None.
1412
1458
  description : str, optional
1413
1459
  Optional description for the run being tracked. Defaults to None.
1414
1460
  input_dir_path : str, optional
1415
1461
  Path to a directory containing input files. If specified, the calling
1416
- function will package the files in the directory into a tar file and upload
1417
- it as a large input. This is useful for non-JSON input formats, such as
1418
- when working with `CSV_ARCHIVE` or `MULTI_FILE`. If both `input` and
1419
- `input_dir_path` are specified, the `input` is ignored, and the files in
1420
- the directory are used instead. Defaults to None.
1462
+ function will package the files in the directory into a tar file and
1463
+ upload it as a large input. This is useful for non-JSON input formats,
1464
+ such as when working with `CSV_ARCHIVE` or `MULTI_FILE`. If both
1465
+ `input` and `input_dir_path` are specified, the `input` is ignored, and
1466
+ the files in the directory are used instead. Defaults to None.
1421
1467
  output_dir_path : str, optional
1422
1468
  Path to a directory containing output files. If specified, the calling
1423
- function will package the files in the directory into a tar file and upload
1424
- it as a large output. This is useful for non-JSON output formats, such as
1425
- when working with `CSV_ARCHIVE` or `MULTI_FILE`. If both `output` and
1426
- `output_dir_path` are specified, the `output` is ignored, and the files
1427
- are saved in the directory instead. Defaults to None.
1469
+ function will package the files in the directory into a tar file and
1470
+ upload it as a large output. This is useful for non-JSON output
1471
+ formats, such as when working with `CSV_ARCHIVE` or `MULTI_FILE`. If
1472
+ both `output` and `output_dir_path` are specified, the `output` is
1473
+ ignored, and the files are saved in the directory instead. Defaults to
1474
+ None.
1428
1475
  statistics : Statistics or dict[str, Any], optional
1429
1476
  Statistics of the run being tracked. Only use this field if you want to
1430
- track statistics for `CSV_ARCHIVE` or `MULTI_FILE` output formats. If you
1431
- are working with `JSON` or `TEXT` output formats, this field will be
1432
- ignored, as the statistics are extracted directly from the `output`.
1477
+ track statistics for `CSV_ARCHIVE` or `MULTI_FILE` output formats. If
1478
+ you are working with `JSON` or `TEXT` output formats, this field will
1479
+ be ignored, as the statistics are extracted directly from the `output`.
1433
1480
  This field is optional. Defaults to None.
1434
1481
  assets : list[Asset or dict[str, Any]], optional
1435
- Assets associated with the run being tracked. Only use this field if you
1436
- want to track assets for `CSV_ARCHIVE` or `MULTI_FILE` output formats.
1437
- If you are working with `JSON` or `TEXT` output formats, this field will
1438
- be ignored, as the assets are extracted directly from the `output`.
1439
- This field is optional. Defaults to None.
1482
+ Assets associated with the run being tracked. Only use this field if
1483
+ you want to track assets for `CSV_ARCHIVE` or `MULTI_FILE` output
1484
+ formats. If you are working with `JSON` or `TEXT` output formats, this
1485
+ field will be ignored, as the assets are extracted directly from the
1486
+ `output`. This field is optional. Defaults to None.
1440
1487
 
1441
1488
  Examples
1442
1489
  --------
@@ -1482,8 +1529,8 @@ class TrackedRun:
1482
1529
  ------
1483
1530
  ValueError
1484
1531
  If the status value is invalid, if an error message is provided for a
1485
- successful run, or if input/output formats are not JSON or
1486
- input/output dicts are not JSON serializable.
1532
+ successful run, or if input/output formats are not JSON or input/output
1533
+ dicts are not JSON serializable.
1487
1534
  """
1488
1535
 
1489
1536
  status: TrackedRunStatus
@@ -1508,8 +1555,8 @@ class TrackedRun:
1508
1555
  error: str | None = None
1509
1556
  """An error message if the run failed. You should only specify this if the
1510
1557
  run failed, otherwise an exception will be raised."""
1511
- logs: list[str] | None = None
1512
- """The logs of the run being tracked. Each element of the list is a line in
1558
+ logs: str | list[str] | None = None
1559
+ """The logs of the run being tracked. If a list, each element is a line in
1513
1560
  the log."""
1514
1561
  name: str | None = None
1515
1562
  """
nextmv/status.py CHANGED
@@ -2,13 +2,10 @@
2
2
  Provides status enums for Nextmv application runs.
3
3
 
4
4
  This module defines enumerations for representing the status of a run in a
5
- Nextmv application. It includes a deprecated `Status` enum and the current
6
- `StatusV2` enum.
5
+ Nextmv application.
7
6
 
8
7
  Classes
9
8
  -------
10
- Status
11
- Deprecated status of a run.
12
9
  StatusV2
13
10
  Represents the status of a run.
14
11
  """
@@ -16,53 +13,6 @@ StatusV2
16
13
  from enum import Enum
17
14
 
18
15
 
19
- class Status(str, Enum):
20
- """
21
- !!! warning
22
- `Status` is deprecated, use `StatusV2` instead.
23
-
24
- Status of a run.
25
-
26
- You can import the `Status` class directly from `nextmv`:
27
-
28
- ```python
29
- from nextmv import Status
30
- ```
31
-
32
- This enum represents the possible states of a run. It is deprecated and
33
- `StatusV2` should be used for new implementations.
34
-
35
- Attributes
36
- ----------
37
- failed : str
38
- Run failed.
39
- running : str
40
- Run is running.
41
- succeeded : str
42
- Run succeeded.
43
-
44
- Examples
45
- --------
46
- >>> from nextmv.cloud import Status
47
- >>> current_status = Status.running
48
- >>> if current_status == Status.succeeded:
49
- ... print("Run completed successfully.")
50
- ... elif current_status == Status.failed:
51
- ... print("Run failed.")
52
- ... else:
53
- ... print(f"Run is currently {current_status.value}.")
54
- Run is currently running.
55
-
56
- """
57
-
58
- failed = "failed"
59
- """Run failed."""
60
- running = "running"
61
- """Run is running."""
62
- succeeded = "succeeded"
63
- """Run succeeded."""
64
-
65
-
66
16
  class StatusV2(str, Enum):
67
17
  """
68
18
  Status of a run.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextmv
3
- Version: 0.39.0.dev1
3
+ Version: 1.0.0
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,19 +229,20 @@ 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'
233
+ Requires-Dist: nextpipe>=0.6.0; extra == 'dev'
234
234
  Requires-Dist: openpyxl>=3.1.5; extra == 'dev'
235
235
  Requires-Dist: pandas>=2.2.3; extra == 'dev'
236
236
  Requires-Dist: plotly>=6.0.1; extra == 'dev'
237
237
  Requires-Dist: pydantic>=2.5.2; extra == 'dev'
238
+ Requires-Dist: pytest>=9.0.2; extra == 'dev'
238
239
  Requires-Dist: pyyaml>=6.0.1; extra == 'dev'
239
240
  Requires-Dist: requests>=2.31.0; extra == 'dev'
240
241
  Requires-Dist: ruff>=0.1.7; extra == 'dev'
241
242
  Requires-Dist: twine>=4.0.2; extra == 'dev'
242
243
  Requires-Dist: urllib3>=2.1.0; extra == 'dev'
243
244
  Provides-Extra: notebook
244
- Requires-Dist: mlflow>=2.19.0; extra == 'notebook'
245
+ Requires-Dist: mlflow>=3.9.0; extra == 'notebook'
245
246
  Description-Content-Type: text/markdown
246
247
 
247
248
  # Nextmv Python SDK
@@ -267,20 +268,45 @@ Description-Content-Type: text/markdown
267
268
 
268
269
  Welcome to `nextmv`, the general Python SDK for the Nextmv Platform.
269
270
 
270
- 📖 To learn more about the `nextmv`, visit the [docs][docs].
271
+ 📖 To learn more about `nextmv`, visit the [docs][docs].
271
272
 
272
273
  ## Installation
273
274
 
274
- Requires Python `>=3.10`. Install using `pip`:
275
+ Requires Python `>=3.10`. Install using the Python package manager of your
276
+ choice:
275
277
 
276
- ```bash
277
- pip install nextmv
278
- ```
278
+ - `pip`
279
+
280
+ ```bash
281
+ pip install nextmv
282
+ ```
283
+
284
+ - `pipx`
285
+
286
+ ```bash
287
+ pipx install nextmv
288
+ ```
279
289
 
280
- Install all optional dependencies (recommended):
290
+ - `uv`
291
+
292
+ ```bash
293
+ uv tool install nextmv
294
+ ```
295
+
296
+ Install all optional dependencies (recommended) by specifying `"nextmv[all]"`
297
+ instead of just `"nextmv"`.
298
+
299
+ ## CLI
300
+
301
+ The Nextmv CLI is installed automatically with the SDK. To verify installation,
302
+ run:
281
303
 
282
304
  ```bash
283
- pip install "nextmv[all]"
305
+ nextmv --help
284
306
  ```
285
307
 
308
+ If you are contributing to the CLI, please make sure you read the [CLI
309
+ Contributing Guide][cli-contributing].
310
+
286
311
  [docs]: https://nextmv-py.docs.nextmv.io/en/latest/nextmv/
312
+ [cli-contributing]: nextmv/cli/CONTRIBUTING.md
@@ -0,0 +1,185 @@
1
+ nextmv/__about__.py,sha256=_5oYwFoY_vHiqADkmV3De2rfMp6jWWyt-4BuWGBBPqA,23
2
+ nextmv/__entrypoint__.py,sha256=XMT-ds1f2Yc6KoI2C0YEH-rJj5gVLfJMqUdRfcA3_KQ,1070
3
+ nextmv/__init__.py,sha256=LwpGBSiV0UG13zKHO2N3Ikb7bCMV08Gfbl6Cp80b_2g,3813
4
+ nextmv/_serialization.py,sha256=jYitMS1MU8ldsmObT-K_8V8P2Wx69tnDiEHCCgPGun4,2834
5
+ nextmv/base_model.py,sha256=kPFqE-c_3LcEy8fY0qDrJk_gbPYgSKtetRMby71oxE8,2298
6
+ nextmv/deprecated.py,sha256=U1YD-vie0dEVWFJgIwOuinxACHsyiEIQpfrt95ykhlg,1651
7
+ nextmv/input.py,sha256=iONLkXhcIXRCJVPNVkJdivh47A399VMepsSxNZByX2I,37649
8
+ nextmv/logger.py,sha256=kNIbu46MisrzYe4T0hNMpWfRTKKacDVvbtQcNys_c_E,2513
9
+ nextmv/manifest.py,sha256=v9En9zMZVKZn6G_HThoKUZowMtZr5hxzwWiK9wkVHPU,49023
10
+ nextmv/model.py,sha256=LxmWU8bPNlAap_9etPRydsgmgfH7Tgh0OXBLhIve7HY,16212
11
+ nextmv/options.py,sha256=PZtw2SIK48gkjzbJwMN6nfXm_3Utaa_ZUd23Y1XxS2Q,29657
12
+ nextmv/output.py,sha256=MbmI7t8p2LhKD1T--IZnsHvIuFY_TM8wTNCdLQVWs2A,54356
13
+ nextmv/polling.py,sha256=fwnAxmfpuBg4d6pi53TRTyyefdpf-cHLoTG6trAu-QA,11048
14
+ nextmv/run.py,sha256=8tkRQexJC8JN7IkLlhpwEW5pEudxwDq2sC_PImfwReI,54126
15
+ nextmv/safe.py,sha256=VAK4fGEurbLNji4Pg5Okga5XQSbI4aI9JJf95_68Z20,3867
16
+ nextmv/status.py,sha256=VqmOgxiEK89Y88ZUxZPfUXmY0HqvN28Lc1PDt0-9PLw,1600
17
+ nextmv/cli/CONTRIBUTING.md,sha256=5o6QgwqWXbE8pNigf0859oPYum8cy2lgCYFppoP8whc,22705
18
+ nextmv/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ nextmv/cli/confirm.py,sha256=1CBzH_StMerGmeJYPjm5AizhkKDDtrA-2_S4x0MmBE4,809
20
+ nextmv/cli/main.py,sha256=AwkIavXOAY-WmLA7F9eY2o6RWTOYHhgZiLs6WeqcB2E,5518
21
+ nextmv/cli/message.py,sha256=NWeCmpkA_IEDay3Fu3YjNN9eSi3p8e-Tw9wp1qAjfXI,3809
22
+ nextmv/cli/options.py,sha256=ymd6Y7_ZQkln35nHw3pLnFpqivgmJfuYAnyizmEuonc,6887
23
+ nextmv/cli/version.py,sha256=VRbfNpUvCFYPcphr-F3Ph4Z4UwtVis4keyVFHj1JISw,681
24
+ nextmv/cli/cloud/__init__.py,sha256=pywNNBy_poHaKn3_oIZRR9DDE8w3u65KvLpnX6S0BQI,1886
25
+ nextmv/cli/cloud/acceptance/__init__.py,sha256=v4U1m6z5zI8mQpmIE4kFeEYOsaDxnGRnRj2j5I6WueI,711
26
+ nextmv/cli/cloud/acceptance/create.py,sha256=Mtiy7fMBU5Ay_hxb2DXxdaM2XvR_QDbldtyjQIAaelQ,14582
27
+ nextmv/cli/cloud/acceptance/delete.py,sha256=htN7XqGudKhSrDpUwWhcb5VUp-sf4PTRZpqf5ObzAg8,2193
28
+ nextmv/cli/cloud/acceptance/get.py,sha256=pb3hRdIiynTi4K7xDNCMJE7bW46FE-X3EoAQU8kQJjE,3438
29
+ nextmv/cli/cloud/acceptance/list.py,sha256=9tTV4B2lgDqNxDnaNXkHxeh7jUQuAu9GQJsEKJ_NqIo,1881
30
+ nextmv/cli/cloud/acceptance/update.py,sha256=ZyhYlkA7Sp0WWMewV774elwvjFKhyg-7jIE9L1yeipU,2912
31
+ nextmv/cli/cloud/account/__init__.py,sha256=N3WqUHe48tBFWQ_I83EAgL_ng-y0tN6qHKROIMMxQhE,768
32
+ nextmv/cli/cloud/account/create.py,sha256=V8f2zlGryBHKR3TBI3A7t9MSSaS8GHMClYquGQXqRrQ,2876
33
+ nextmv/cli/cloud/account/delete.py,sha256=G6vblaHK21goNPIGRnTQyLDpZuPvRdMa5QEsZ566hF8,1828
34
+ nextmv/cli/cloud/account/get.py,sha256=KT0Cs2ZQtZV4D0efAjMIj47RSKSSsU3-1ZApH8oYzLU,1860
35
+ nextmv/cli/cloud/account/update.py,sha256=z_g_uEAgBJDcb0Kh80NbKTA7gycrJb6hHjJPVG9wEVw,2124
36
+ nextmv/cli/cloud/app/__init__.py,sha256=-ex_7C34XY1K3bU8hQ9vdnjJEzNamuuHNuK_cJSkHac,1037
37
+ nextmv/cli/cloud/app/create.py,sha256=JPVRFsnuN1ffvsAb1A6AbbRbkF6bLXjN6AqSoy7JY3c,4680
38
+ nextmv/cli/cloud/app/delete.py,sha256=5OaLFOnmwhaMOG2507ZsoyAMz_fvZi6BGFfzDFDvfE4,1682
39
+ nextmv/cli/cloud/app/exists.py,sha256=gd9pmR1Oq_cCjaTNB82PmJtDYowrb17vBfQYjoh6E9Q,1258
40
+ nextmv/cli/cloud/app/get.py,sha256=_v_7PrUniaaRvHclBA02V-UVcbVe1eFixGU6CeXA4m4,1765
41
+ nextmv/cli/cloud/app/list.py,sha256=AI1VNNueYfzwuSAFlf-vXbZEY-th5BrzXZgn-3uusFo,1653
42
+ nextmv/cli/cloud/app/push.py,sha256=GbyiVcf5U-lCGL_hy5Ya6ihnNFleYD8_rrg5PJ3oSOg,15369
43
+ nextmv/cli/cloud/app/update.py,sha256=4Mp8Zf40K1hdHO3KT9Md3piBWqzracfpWtujJfbPocM,4070
44
+ nextmv/cli/cloud/batch/__init__.py,sha256=-_UjmvrQItACUY_BQ_cOffNJixNHAb4vH_pew25sJ3o,774
45
+ nextmv/cli/cloud/batch/create.py,sha256=T70sjvvTxXxRpC4COFZFU5ei6ylS5MWLg6VLP3SjIso,15465
46
+ nextmv/cli/cloud/batch/delete.py,sha256=S_qmQi5l57maJ2sAJtS-ie5FFZh_KykdWbGHBeKil8E,2178
47
+ nextmv/cli/cloud/batch/get.py,sha256=t0yMITCeagJPDJee_b83a0JINiL3yLeWouLzBeWJCnE,3485
48
+ nextmv/cli/cloud/batch/list.py,sha256=ustDRT0-YNFcri80m32JaXynid0L5tDEN6cXzKqYTYo,1880
49
+ nextmv/cli/cloud/batch/metadata.py,sha256=GnQT5e_KiAH8yYnDk4njb7ejt5q4LYv3MJl1b6uXY1U,2216
50
+ nextmv/cli/cloud/batch/update.py,sha256=adFTpelbhJtEtqbY4ssU89g6R4g0jbC9qeN5mMfxgGY,2994
51
+ nextmv/cli/cloud/data/__init__.py,sha256=CZ_htB1sa25nJDugrAi-HbQsfNu-8of0yFAqgbmLG3o,761
52
+ nextmv/cli/cloud/data/upload.py,sha256=dVa5Xf0al8cTs1wRJlDXDQ210rpG9Jy0WA21H85iVis,5668
53
+ nextmv/cli/cloud/ensemble/__init__.py,sha256=CVcuxGpPyLeU1eDMBCk1eT0mYy-FWKiyboh1VWwZxfc,1056
54
+ nextmv/cli/cloud/ensemble/create.py,sha256=wO8vzEUqoEg_QHF_S3ljmbo_XulOKhvbeJg_atznDpw,14873
55
+ nextmv/cli/cloud/ensemble/delete.py,sha256=k44YxkyvppDFhMEFPEkMSc0nlNN7GXXIhy4ltIbdM9w,2168
56
+ nextmv/cli/cloud/ensemble/get.py,sha256=-4crRjI8MF8meq5uUhUR3q39lK4EIsvpzaODfGvwx3k,2135
57
+ nextmv/cli/cloud/ensemble/list.py,sha256=zm7TfBM5HH_8I-r4U219AbmQadET96kw1MrsjwARSAM,1887
58
+ nextmv/cli/cloud/ensemble/update.py,sha256=5AeuhY-CytzON1FFoEijBlo1T9oHvkq3mxV9I3qCeLA,3383
59
+ nextmv/cli/cloud/input_set/__init__.py,sha256=qDyIc0JJm1oU9tyt9MgjkJL6VKXSFCySPTKKHqfLHCM,957
60
+ nextmv/cli/cloud/input_set/create.py,sha256=nJWsaj-fPXS8rwIbh13_wXc9SitDA4ByIHhlBS51GHo,5661
61
+ nextmv/cli/cloud/input_set/delete.py,sha256=jPm_xcw5d4vPSrykgHRPqBONokyF9a8deDBN6cowxT8,2058
62
+ nextmv/cli/cloud/input_set/get.py,sha256=MvMD6tmMA_ui4MVCwRkOnmU0WySJmSJX7x2Q-x_xXwA,1916
63
+ nextmv/cli/cloud/input_set/list.py,sha256=7I0F1rs19bY9d_V2TjEFxHCbHq3bNV_mO0Fd9qJ58IY,1896
64
+ nextmv/cli/cloud/input_set/update.py,sha256=P5b94m08hGMAGr455fH-Cd1yryeMC15r1YfmJEt2NSw,4144
65
+ nextmv/cli/cloud/instance/__init__.py,sha256=UH46OH_xNpGGzIbUTMHBXZ7SLStikOhz1iC8lO2Nfjs,1111
66
+ nextmv/cli/cloud/instance/create.py,sha256=4gVp8K3yyJDUQ0NqHRl-quswH8XuF8kBMezC9feweJc,9640
67
+ nextmv/cli/cloud/instance/delete.py,sha256=k5HH5K3LAK645i4_so2EUxDNyGX5C97WG2UAp1yXVCI,1950
68
+ nextmv/cli/cloud/instance/exists.py,sha256=c3I8MU9efvc3YLwo-PUV7U4HiHgku-RZL_CQGWG2UTw,1320
69
+ nextmv/cli/cloud/instance/get.py,sha256=To5WFwLi8XmcT3yMA0ZTqwHFM1JBclTMtpuAMNiEXo0,1872
70
+ nextmv/cli/cloud/instance/list.py,sha256=df_gxIUz3COGwekbqg-hBDKLGVz8fV_FY3rRRb5iPZg,1791
71
+ nextmv/cli/cloud/instance/update.py,sha256=skrxC7oCOqND_U8EnyQT27YAuWEaqgUEpFzlx4Yn5g8,7327
72
+ nextmv/cli/cloud/managed_input/__init__.py,sha256=aS1YQ_nN92Z7-GG-geEiEABx_fq5nVS23Nii6W8uGbQ,940
73
+ nextmv/cli/cloud/managed_input/create.py,sha256=wHqGBiMSyxbpdu02KxF5srUcZA6t3MZqa3EmMWC_0eY,4868
74
+ nextmv/cli/cloud/managed_input/delete.py,sha256=guOqv0IkJZStyHwqfjiWdm-b1Dbs4NUBZikKv_7-NQs,2107
75
+ nextmv/cli/cloud/managed_input/get.py,sha256=Rl2RmSOmMUXy2XAiaKhgLwE8RvqF8crfmfY3PfxjlfE,2045
76
+ nextmv/cli/cloud/managed_input/list.py,sha256=6l4zJPVErmooobteBn05RmoXHgvI0RBt_Lnb-Z_rDYU,1896
77
+ nextmv/cli/cloud/managed_input/update.py,sha256=E1ddfQ9VJ7SgG8V6kkRYbgKhS4vDyv06WePNbLEXUsE,3191
78
+ nextmv/cli/cloud/run/__init__.py,sha256=KyonwVd5lfweaq-cIpPuRAzHFrK0slfqJsIjsT_p4PU,1102
79
+ nextmv/cli/cloud/run/cancel.py,sha256=d7aQQQmek_i3P2cDmpOohLiwSjWxfKEiVAvBnNYAmuE,1259
80
+ nextmv/cli/cloud/run/create.py,sha256=39D4VdcfYRioziIy-qjLDSs-_dhSavrkmzcltUfgz3M,19526
81
+ nextmv/cli/cloud/run/get.py,sha256=bUczN6a1SV3wkW0uUPfQdO3i13BF51udixmuyiicdi8,7826
82
+ nextmv/cli/cloud/run/input.py,sha256=QEdDnKxEmucUwPPRAqh1VuErw5rKaAwXOHrmJESP-k0,3171
83
+ nextmv/cli/cloud/run/list.py,sha256=z3286Q0Aznz-qAvanCB03rXjCfGPk84A32t8AqTC2Cs,2563
84
+ nextmv/cli/cloud/run/logs.py,sha256=GAaECn6Jw5iDv1408CjAWxLVOjaO_d6vL6OBe3OsjiQ,6076
85
+ nextmv/cli/cloud/run/metadata.py,sha256=R2vOndXVQ9U2fooZdL0rmKR3j5uimS-Z8ElS8zH8CIs,2284
86
+ nextmv/cli/cloud/run/track.py,sha256=xOGvv93popCf6HpaoGTXPSgm3s4kh5NNgGmQEWVI7gs,17867
87
+ nextmv/cli/cloud/scenario/__init__.py,sha256=lHblPFBIlCGjRzEw9VLEG8dPKoWRKyi88a2VYfXwqsM,792
88
+ nextmv/cli/cloud/scenario/create.py,sha256=JFaVucmznc_fo5o6PVTaDhWjtxtMBU1hCthJgpI8UoA,15524
89
+ nextmv/cli/cloud/scenario/delete.py,sha256=eHP3NnrGLqEPcwFrVY6aTPSHMIqVkE9MdE7XMILlvCE,2047
90
+ nextmv/cli/cloud/scenario/get.py,sha256=KVoY2fumrHIYl8vHYhHEdKQNkUukPMw4vKhMBMOTNBE,3414
91
+ nextmv/cli/cloud/scenario/list.py,sha256=uOfmwPDhwatqKxq0FxlmCcvObptGXd1_tQPnUwUtD2Q,1853
92
+ nextmv/cli/cloud/scenario/metadata.py,sha256=FKs-0s1AWqQ9EaYLifYx_uYr045jAWIfAm1V1eGjhz0,2210
93
+ nextmv/cli/cloud/scenario/update.py,sha256=41Z2T8T6dfm3iFVShFQL24F2bH72pyYtPMPDB5w8v-w,2924
94
+ nextmv/cli/cloud/secrets/__init__.py,sha256=-96-F6eccRH804CePGJDsDCnjD5LRdwvSRqmAbTdVjY,1056
95
+ nextmv/cli/cloud/secrets/create.py,sha256=iBaGmwAHrSjnGqFtqg_yarYglDNfsNBWVJvhhjwLWCQ,8146
96
+ nextmv/cli/cloud/secrets/delete.py,sha256=unpJFviXBwrvIzvvszPpJJca24c2KN7CKWB7nnJFhBk,2133
97
+ nextmv/cli/cloud/secrets/get.py,sha256=nacOWX_MUcHRImjMptQSTu8krtrrE38CZKYfYG5epEw,2150
98
+ nextmv/cli/cloud/secrets/list.py,sha256=3TxuHNnQqnNw8c8YigvXldpRMYwZts-ESmh07AqiXDk,1879
99
+ nextmv/cli/cloud/secrets/update.py,sha256=LuKDhnQ202NS2Gby8n46VsW7R8-82-zHJ7NU2R3hrXQ,5300
100
+ nextmv/cli/cloud/shadow/__init__.py,sha256=O9dqXZHOCRDzz7dI7ZWzUPxRGXfQXrQWQup2YLT6LTs,941
101
+ nextmv/cli/cloud/shadow/create.py,sha256=SnG42mZFhslfkuJdiw75cyXkKJbkzTDvnNGMTnvINpo,6598
102
+ nextmv/cli/cloud/shadow/delete.py,sha256=LgNtQG062XCt__KyuFFcN-1VejWqxSiyynzPZOAuPsE,2102
103
+ nextmv/cli/cloud/shadow/get.py,sha256=8NmXl2romVPGfS9KP4G2Sv4SuSZKgRx85GZ4ClwTqWc,1764
104
+ nextmv/cli/cloud/shadow/list.py,sha256=aVFa3FAzfcUsMlD0hYgZwhoF75GQkaNDHrrq82qqylQ,1810
105
+ nextmv/cli/cloud/shadow/metadata.py,sha256=vHJYVDXXHwiqQrG0J0D_aRP--b47UfEgJwJOXqfskSo,2161
106
+ nextmv/cli/cloud/shadow/start.py,sha256=SkDYSfyQLdfHJKCOzc4CW6MVO7YBWCZCOAoGBzqSFhI,1464
107
+ nextmv/cli/cloud/shadow/stop.py,sha256=WNg73nHkQ6Mo7hdg3qfSXQBkd77iKPfRIdSSJxTHhTY,1706
108
+ nextmv/cli/cloud/shadow/update.py,sha256=l7_gODO9fXYGOLzFMJmIVpT5Jku9XQAo2PI5x3AP4xU,2880
109
+ nextmv/cli/cloud/switchback/__init__.py,sha256=jYeujjbqvqRGIgvC0wr3I6zavw1az7IS8jiJsAlH-z4,981
110
+ nextmv/cli/cloud/switchback/create.py,sha256=lEboNjN1ZFbuOCFmK2ADIRH-pIENc80NcR809rDOY3I,5085
111
+ nextmv/cli/cloud/switchback/delete.py,sha256=W0TWsYw0MI23MbN8Oj6lQn7K7jEafY1dWW4HVMooyeY,2186
112
+ nextmv/cli/cloud/switchback/get.py,sha256=GQKzaW4jCfV21DyZ5vDNrkFH2Tw1pR8Zv_71jiMZ8UA,1863
113
+ nextmv/cli/cloud/switchback/list.py,sha256=wrXXA9aMLLcq_6WFk-dy9RopE57dFZb7TxlWdRx9G94,1882
114
+ nextmv/cli/cloud/switchback/metadata.py,sha256=WDhK-AVKEJQ38WhPZqPOgemHt-PI__r6sIEBFQtKxVw,2287
115
+ nextmv/cli/cloud/switchback/start.py,sha256=N9Bci8DmCQW8XUm93Rhj30TCf_YvK6N5qxZXMpW2X1I,1535
116
+ nextmv/cli/cloud/switchback/stop.py,sha256=pOasfThNCB3GXDNz4TPyJ5DNnMf3vLin6lAh1XoAk-Y,1774
117
+ nextmv/cli/cloud/switchback/update.py,sha256=pILZUbqlIM6l1mrbVPtks6CGcgre5829sSnD2yMZd-0,3000
118
+ nextmv/cli/cloud/upload/__init__.py,sha256=khOl6NxkPd4KEqN0xMdxzmST-Ct3Vr_xk8zbMvbrLl8,511
119
+ nextmv/cli/cloud/upload/create.py,sha256=vRTHCeh7cbB9JSAMUCpcdQrzQ1od5FiFiNdPPh7sFqw,1216
120
+ nextmv/cli/cloud/version/__init__.py,sha256=ATPKdKvQM-IambdwIcqB1GZzqLVpjn1ZQkz2E_RghzY,1016
121
+ nextmv/cli/cloud/version/create.py,sha256=ionmDnCtf0-6ql4QRlfU98q82rV70llAQ5nrqP-php4,3017
122
+ nextmv/cli/cloud/version/delete.py,sha256=F-USKuET_qxxZerO7aPGLBrvs31heVCCz1BvCLnPtn8,1924
123
+ nextmv/cli/cloud/version/exists.py,sha256=DAWP-3n_yaqqxtQAWBwhSziMYJifFEdydfOmsvCP92U,1298
124
+ nextmv/cli/cloud/version/get.py,sha256=eGbka3TG8UJE150h22rn0BUqTi1xRE7roVDj6yJvnRY,1839
125
+ nextmv/cli/cloud/version/list.py,sha256=sKdHgyowLG1jyUEtu87yCPC5_2-0i3VDEgfmvb-bBn0,1770
126
+ nextmv/cli/cloud/version/update.py,sha256=mEUYXGHLGkiEGH31KK6jDDfviHEhVCdLjLQL_5u0vLk,2869
127
+ nextmv/cli/community/__init__.py,sha256=FJRlBlIC4y-npgh9HNz2wezecq8vfsYWo2MAQdUj1UM,612
128
+ nextmv/cli/community/clone.py,sha256=_I1C58pKmfAHdl-8eaZDeaxZm2Rnp2en8PCPdflAse4,2912
129
+ nextmv/cli/community/list.py,sha256=Gf9E-wD-0GQcaTPGBNp8p_zX44UAL5bYG6LKroTKLCU,5807
130
+ nextmv/cli/configuration/__init__.py,sha256=7oryF4PKkORh8bcdgbN2k36rZrFpJsM7Xfq_J4-MkFs,516
131
+ nextmv/cli/configuration/config.py,sha256=t43ubCcbfbpfq9HvkVb2WQY9V47lrLEP0KvsWfjOJ8Y,6667
132
+ nextmv/cli/configuration/create.py,sha256=lTOxE-38BO7qed1I-wlJ8Ey1WHGMTPbGMozncW8xizM,2737
133
+ nextmv/cli/configuration/delete.py,sha256=-3IL0nh367D0NhIdPXOCCCAWhejABS8QIfOcoH_cW-M,1915
134
+ nextmv/cli/configuration/list.py,sha256=HIZvDJQW5B0-o_ZqQHuxRw7N_VmxqYM46fucKCvo1zw,2208
135
+ nextmv/cloud/__init__.py,sha256=IW9fdg3QgusJGAU4VVEu5qkCidzalyYf4wjC1T14rnQ,4183
136
+ nextmv/cloud/acceptance_test.py,sha256=H34lvccJzN1URpnhrHstcVxgvq1s2iCymiKIPBHcToY,25828
137
+ nextmv/cloud/account.py,sha256=X2xQjzhgEdKR0eypH8lWKUOwDISjJSd5SwOwEnpfTVk,13573
138
+ 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=mWZqQR4DqwZQ6BYQRQxPZyH39EW4CLNm6QG_L6HEyQ8,13123
142
+ nextmv/cloud/ensemble.py,sha256=_hKPjSLtuGH1xGG70ZBsmY_IL5XinZqVHHwBxtX9Omw,8570
143
+ nextmv/cloud/input_set.py,sha256=wsLmMI1C7BslWDN5j1RnVUA8z54-Hq1eLG9bkzyqafo,4187
144
+ nextmv/cloud/instance.py,sha256=rLrgNNvNyC6hZtjxIfTR2Luylmbh2emJIZVCy_hTJZ4,5495
145
+ nextmv/cloud/integration.py,sha256=ce8TWOw_xIXxf8tzqHNriPmJ2dRA9v2EZSXnWZEvWVk,18314
146
+ nextmv/cloud/package.py,sha256=88XSJ15QGcHboNJAw2hGowiLKBu2O2nV5ZieZFx7XDI,17133
147
+ nextmv/cloud/scenario.py,sha256=1_4PI9ehYaSonEe_l59cFhZNmqQ_brXXP6-mVq9i8a8,14183
148
+ 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
151
+ nextmv/cloud/url.py,sha256=Fz70ywkWdCLmP21ZBmJwZi5kDbjpmsX_VlwVF_xQeHg,1836
152
+ 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
155
+ nextmv/cloud/application/_batch_scenario.py,sha256=cSsX5vPOkm91UqRBPIcqlOvQ0iojwt4sQKYGZEE7x6k,28479
156
+ nextmv/cloud/application/_ensemble.py,sha256=05l9uR0hTnW8nQjhRzjd2TPfvCoaAqNddWP-aVRL5rg,7666
157
+ nextmv/cloud/application/_input_set.py,sha256=BXleeHOClCkwOh53vG6F_561XzAo_XgrHfGmNbJxIds,8131
158
+ nextmv/cloud/application/_instance.py,sha256=Jjig8NI1jXNyBQoYj7JOfS0JFmw5jJdKLfi82fqBYgo,8386
159
+ nextmv/cloud/application/_managed_input.py,sha256=zaWqGpe8Y5XWheroAqZSo-xNHfn2MKblNwRUbQVXBRM,6694
160
+ nextmv/cloud/application/_run.py,sha256=4lrxyQCUGJszdiYNGynYg6RXBPqjQ4tFcDmxH9dfSXY,53869
161
+ 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
164
+ nextmv/cloud/application/_utils.py,sha256=GqksGBHCV2sc-itL6hlWnncUJjIxhw6LH3pOjs4M-us,1643
165
+ nextmv/cloud/application/_version.py,sha256=o1jVLfoKJNCs-32P7hkL1IGba8Eb1hnT6vnaZpyc0dk,8543
166
+ nextmv/default_app/.gitignore,sha256=gsfnfXMYNt-YTroh5hAzauwBZoPDJ6D_fB17rMSnIko,8
167
+ nextmv/default_app/README.md,sha256=hW3zWcYzxhYfof-pThaN1Fkx93GT8tTUVRhx15edBis,662
168
+ nextmv/default_app/app.yaml,sha256=TKjKnuoK0SDpouB_AS7TQmE_8HZbQYjmwFvhzFL1xpc,382
169
+ nextmv/default_app/input.json,sha256=zgvbKL3boB0WIU6-9mEU3ZWBddQ5cQ0vhgmDwDyz4hE,63
170
+ nextmv/default_app/main.py,sha256=gG-1JIvKXPCkm4JV46PcXxsQTAefwPXQbdPxkSubhf0,888
171
+ nextmv/default_app/requirements.txt,sha256=wRE_HkYYWzCGnYZ2NuatHXul4gCHvU3iUAdsxtzpYiA,29
172
+ nextmv/default_app/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
+ nextmv/default_app/src/visuals.py,sha256=WYK_YBnLmYo3TpVev1CpoNCuW5R7hk9QIkeCmvMn1Fs,1014
174
+ nextmv/local/__init__.py,sha256=6BsoqlK4dw6X11_uKzz9gBPfxKpdiol2FYO8R3X73SE,116
175
+ 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
178
+ nextmv/local/local.py,sha256=cp56UpI8h19Ob6Jvb_Ni0ceXH5Vv3ET_iPTDe6ftq3Y,2617
179
+ nextmv/local/plotly_handler.py,sha256=bLb50e3AkVr_W-F6S7lXfeRdN60mG2jk3UElNmhoMWU,1930
180
+ nextmv/local/runner.py,sha256=bM1dFIAG4f9pEtbyevzkRa9nSppqTeD8naomNzJVBRU,8560
181
+ nextmv-1.0.0.dist-info/METADATA,sha256=rx3dIU5Ck2xzUi2mQ0FjmQgK8ZihJnEIlTRBbwVJKXE,16520
182
+ nextmv-1.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
183
+ nextmv-1.0.0.dist-info/entry_points.txt,sha256=bH7kXUt_IOLpeW_O7Z-J2gALs2YYJ4CmWuzS8MdK6uY,48
184
+ nextmv-1.0.0.dist-info/licenses/LICENSE,sha256=ZIbK-sSWA-OZprjNbmJAglYRtl5_K4l9UwAV3PGJAPc,11349
185
+ nextmv-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ nextmv = nextmv.cli.main:main