nextmv 1.1.0.dev0__tar.gz → 1.1.0.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nextmv-1.1.0.dev2/.python-version +1 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/PKG-INFO +2 -16
- nextmv-1.1.0.dev2/nextmv/__about__.py +1 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/_serialization.py +1 -1
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/acceptance/create.py +12 -12
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/track.py +31 -9
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/create.py +21 -6
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/delete.py +6 -6
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/update.py +6 -27
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/account.py +9 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/__init__.py +2 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_run.py +150 -92
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/client.py +1 -1
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/sso.py +53 -24
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/main.py +4 -6
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/application.py +13 -48
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/executor.py +84 -4
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/geojson_handler.py +1 -1
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/manifest.py +11 -7
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/model.py +2 -2
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/output.py +74 -25
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/run.py +39 -13
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/pyproject.toml +7 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cloud/app.yaml +1 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_entrypoint/test_entrypoint.py +1 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_manifest.py +1 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_options.py +36 -35
- nextmv-1.1.0.dev2/uv.lock +3091 -0
- nextmv-1.1.0.dev0/nextmv/__about__.py +0 -1
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/.gitignore +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/LICENSE +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/README.md +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/__entrypoint__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/base_model.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/CONTRIBUTING.md +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/acceptance/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/acceptance/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/acceptance/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/acceptance/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/acceptance/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/account/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/account/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/account/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/account/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/account/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/exists.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/push.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/app/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/metadata.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/batch/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/data/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/data/upload.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/ensemble/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/ensemble/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/ensemble/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/ensemble/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/ensemble/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/ensemble/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/input_set/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/input_set/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/input_set/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/input_set/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/input_set/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/input_set/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/exists.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/instance/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/managed_input/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/managed_input/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/managed_input/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/managed_input/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/managed_input/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/managed_input/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/cancel.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/input.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/logs.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/run/metadata.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/metadata.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/scenario/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/secrets/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/secrets/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/secrets/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/secrets/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/secrets/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/secrets/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/metadata.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/start.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/stop.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/shadow/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/disable.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/enable.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/sso/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/metadata.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/start.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/stop.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/switchback/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/upload/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/upload/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/exists.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/get.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/cloud/version/update.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/community/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/community/clone.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/community/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/configuration/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/configuration/config.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/configuration/create.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/configuration/delete.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/configuration/list.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/confirm.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/main.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/message.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/options.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cli/version.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/acceptance_test.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_acceptance.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_batch_scenario.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_ensemble.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_input_set.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_instance.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_managed_input.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_secrets.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_shadow.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_switchback.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_utils.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/application/_version.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/assets.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/batch_experiment.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/community.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/ensemble.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/input_set.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/instance.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/integration.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/package.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/scenario.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/secrets.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/shadow.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/switchback.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/url.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/cloud/version.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/.gitignore +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/README.md +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/app.yaml +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/input.json +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/requirements.txt +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/src/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/default_app/src/visuals.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/deprecated.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/input.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/local.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/plotly_handler.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/local/runner.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/logger.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/options.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/polling.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/safe.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/nextmv/status.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/README.md +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cli/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cli/test_configuration.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cli/test_main.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cli/test_version.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cloud/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cloud/test_client.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cloud/test_instance.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cloud/test_package.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/cloud/test_scenario.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/integration/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/integration/cloud/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/integration/cloud/test_integration_cloud.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/local/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/local/test_application.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/local/test_executor.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/local/test_runner.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options1.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options2.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options3.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options4.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options5.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options6.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/scripts/options7.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_base_model.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_entrypoint/__init__.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_input.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_inputs/test_data.csv +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_inputs/test_data.json +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_inputs/test_data.txt +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_logger.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_model.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_output.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_polling.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_run.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_safe.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_serialization.py +0 -0
- {nextmv-1.1.0.dev0 → nextmv-1.1.0.dev2}/tests/test_version.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextmv
|
|
3
|
-
Version: 1.1.0.
|
|
3
|
+
Version: 1.1.0.dev2
|
|
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/
|
|
@@ -218,6 +218,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
218
218
|
Classifier: Programming Language :: Python :: 3.12
|
|
219
219
|
Classifier: Programming Language :: Python :: 3.13
|
|
220
220
|
Requires-Python: >=3.10
|
|
221
|
+
Requires-Dist: pip>=26.0
|
|
221
222
|
Requires-Dist: pydantic>=2.5.2
|
|
222
223
|
Requires-Dist: pyyaml>=6.0.1
|
|
223
224
|
Requires-Dist: requests>=2.31.0
|
|
@@ -226,21 +227,6 @@ Requires-Dist: urllib3>=2.1.0
|
|
|
226
227
|
Provides-Extra: all
|
|
227
228
|
Requires-Dist: folium>=0.20.0; extra == 'all'
|
|
228
229
|
Requires-Dist: plotly>=6.0.1; extra == 'all'
|
|
229
|
-
Provides-Extra: dev
|
|
230
|
-
Requires-Dist: build>=1.0.3; extra == 'dev'
|
|
231
|
-
Requires-Dist: folium>=0.20.0; extra == 'dev'
|
|
232
|
-
Requires-Dist: mlflow>=3.9.0; extra == 'dev'
|
|
233
|
-
Requires-Dist: nextpipe>=0.6.0; extra == 'dev'
|
|
234
|
-
Requires-Dist: openpyxl>=3.1.5; extra == 'dev'
|
|
235
|
-
Requires-Dist: pandas>=2.2.3; extra == 'dev'
|
|
236
|
-
Requires-Dist: plotly>=6.0.1; extra == 'dev'
|
|
237
|
-
Requires-Dist: pydantic>=2.5.2; extra == 'dev'
|
|
238
|
-
Requires-Dist: pytest>=9.0.2; extra == 'dev'
|
|
239
|
-
Requires-Dist: pyyaml>=6.0.1; extra == 'dev'
|
|
240
|
-
Requires-Dist: requests>=2.31.0; extra == 'dev'
|
|
241
|
-
Requires-Dist: ruff>=0.1.7; extra == 'dev'
|
|
242
|
-
Requires-Dist: twine>=4.0.2; extra == 'dev'
|
|
243
|
-
Requires-Dist: urllib3>=2.1.0; extra == 'dev'
|
|
244
230
|
Provides-Extra: notebook
|
|
245
231
|
Requires-Dist: mlflow>=3.9.0; extra == 'notebook'
|
|
246
232
|
Description-Content-Type: text/markdown
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "v1.1.0.dev2"
|
|
@@ -90,7 +90,7 @@ def _custom_serial(obj: Any) -> str:
|
|
|
90
90
|
If the object type is not supported for serialization.
|
|
91
91
|
"""
|
|
92
92
|
|
|
93
|
-
if isinstance(obj,
|
|
93
|
+
if isinstance(obj, datetime.datetime | datetime.date):
|
|
94
94
|
return obj.isoformat()
|
|
95
95
|
|
|
96
96
|
raise TypeError(f"Type {type(obj)} not serializable")
|
|
@@ -45,7 +45,7 @@ app = typer.Typer()
|
|
|
45
45
|
- Multiple metrics as a [magenta]json[/magenta] array in a single --metrics flag.
|
|
46
46
|
|
|
47
47
|
Each metric must have the following fields:
|
|
48
|
-
- [magenta]field[/magenta]: Field of the metric to measure (e.g., "
|
|
48
|
+
- [magenta]field[/magenta]: Field of the metric to measure (e.g., "result.custom.unassigned").
|
|
49
49
|
- [magenta]metric_type[/magenta]: Type of metric comparison. Allowed values: {enum_values(MetricType)}.
|
|
50
50
|
- [magenta]params[/magenta]: Parameters of the metric comparison.
|
|
51
51
|
- [magenta]operator[/magenta]: Comparison operator. Allowed values: {enum_values(Comparison)}.
|
|
@@ -71,8 +71,8 @@ app = typer.Typer()
|
|
|
71
71
|
[bold][underline]Examples[/underline][/bold]
|
|
72
72
|
|
|
73
73
|
- Create an acceptance test with a single metric.
|
|
74
|
-
$ [
|
|
75
|
-
"field": "
|
|
74
|
+
$ [green]METRIC='{{
|
|
75
|
+
"field": "result.custom.unassigned",
|
|
76
76
|
"metric_type": "direct-comparison",
|
|
77
77
|
"params": {{
|
|
78
78
|
"operator": "lt",
|
|
@@ -85,8 +85,8 @@ app = typer.Typer()
|
|
|
85
85
|
--metrics "$METRIC" --input-set-id input-set-123[/dim]
|
|
86
86
|
|
|
87
87
|
- Create with multiple metrics by repeating the flag.
|
|
88
|
-
$ [
|
|
89
|
-
"field": "
|
|
88
|
+
$ [green]METRIC1='{{
|
|
89
|
+
"field": "result.custom.unassigned",
|
|
90
90
|
"metric_type": "direct-comparison",
|
|
91
91
|
"params": {{
|
|
92
92
|
"operator": "lt",
|
|
@@ -95,7 +95,7 @@ app = typer.Typer()
|
|
|
95
95
|
"statistic": "mean"
|
|
96
96
|
}}'
|
|
97
97
|
METRIC2='{{
|
|
98
|
-
"field": "
|
|
98
|
+
"field": "run.duration",
|
|
99
99
|
"metric_type": "direct-comparison",
|
|
100
100
|
"params": {{
|
|
101
101
|
"operator": "le",
|
|
@@ -110,7 +110,7 @@ app = typer.Typer()
|
|
|
110
110
|
- Create with multiple metrics in a single [magenta]json[/magenta] array.
|
|
111
111
|
$ [dim]METRICS='[
|
|
112
112
|
{{
|
|
113
|
-
"field": "
|
|
113
|
+
"field": "result.custom.unassigned",
|
|
114
114
|
"metric_type": "direct-comparison",
|
|
115
115
|
"params": {{
|
|
116
116
|
"operator": "lt",
|
|
@@ -119,7 +119,7 @@ app = typer.Typer()
|
|
|
119
119
|
"statistic": "mean"
|
|
120
120
|
}},
|
|
121
121
|
{{
|
|
122
|
-
"field": "
|
|
122
|
+
"field": "run.duration",
|
|
123
123
|
"metric_type": "direct-comparison",
|
|
124
124
|
"params": {{
|
|
125
125
|
"operator": "le",
|
|
@@ -133,8 +133,8 @@ app = typer.Typer()
|
|
|
133
133
|
--metrics "$METRICS" --input-set-id input-set-123[/dim]
|
|
134
134
|
|
|
135
135
|
- Create an acceptance test and wait for it to complete.
|
|
136
|
-
$ [
|
|
137
|
-
"field": "
|
|
136
|
+
$ [green]METRIC='{{
|
|
137
|
+
"field": "result.custom.unassigned",
|
|
138
138
|
"metric_type": "direct-comparison",
|
|
139
139
|
"params": {{
|
|
140
140
|
"operator": "lt",
|
|
@@ -147,8 +147,8 @@ app = typer.Typer()
|
|
|
147
147
|
--metrics "$METRIC" --input-set-id input-set-123 --wait[/dim]
|
|
148
148
|
|
|
149
149
|
- Create an acceptance test and save the results to a file, waiting for completion.
|
|
150
|
-
$ [
|
|
151
|
-
"field": "
|
|
150
|
+
$ [green]METRIC='{{
|
|
151
|
+
"field": "result.custom.unassigned",
|
|
152
152
|
"metric_type": "direct-comparison",
|
|
153
153
|
"params": {{
|
|
154
154
|
"operator": "lt",
|
|
@@ -124,11 +124,21 @@ def track(
|
|
|
124
124
|
statistics: Annotated[
|
|
125
125
|
str | None,
|
|
126
126
|
typer.Option(
|
|
127
|
-
help="
|
|
127
|
+
help="Deprecated: Use 'metrics' instead. The statistics of the run" \
|
|
128
|
+
" being tracked. A [magenta]json[/magenta] file to read the statistics from.",
|
|
128
129
|
metavar="STATISTICS_PATH",
|
|
129
130
|
rich_help_panel="Tracked run configuration",
|
|
130
131
|
),
|
|
131
132
|
] = None,
|
|
133
|
+
metrics: Annotated[
|
|
134
|
+
str | None,
|
|
135
|
+
typer.Option(
|
|
136
|
+
help="The metrics of the run being tracked. A [magenta]json[/magenta]"\
|
|
137
|
+
" file to read the metrics from.",
|
|
138
|
+
metavar="METRICS_PATH",
|
|
139
|
+
rich_help_panel="Tracked run configuration",
|
|
140
|
+
),
|
|
141
|
+
] = None,
|
|
132
142
|
# Options for run configuration.
|
|
133
143
|
instance_id: Annotated[
|
|
134
144
|
str | None,
|
|
@@ -159,9 +169,9 @@ def track(
|
|
|
159
169
|
path must be provided. If the content type is
|
|
160
170
|
[magenta]multi-file[/magenta], then a directory path must be provided.
|
|
161
171
|
|
|
162
|
-
Run logs, assets, and
|
|
163
|
-
--logs, --assets, and --
|
|
164
|
-
|
|
172
|
+
Run logs, assets, and metrics can be provided via files using the
|
|
173
|
+
--logs, --assets, and --metrics options, respectively. Assets and
|
|
174
|
+
metrics must be provided as [magenta]json[/magenta] files, while logs
|
|
165
175
|
must be provided as a utf-8 encoded text file.
|
|
166
176
|
|
|
167
177
|
[bold][underline]Examples[/underline][/bold]
|
|
@@ -183,11 +193,11 @@ def track(
|
|
|
183
193
|
$ [dim]nextmv cloud run track --app-id hare-app --status succeeded --input input.json \\
|
|
184
194
|
--output output.json --logs logs.log[/dim]
|
|
185
195
|
|
|
186
|
-
- Track a [magenta]successful[/magenta] [magenta]json[/magenta] run with assets and
|
|
196
|
+
- Track a [magenta]successful[/magenta] [magenta]json[/magenta] run with assets and metrics
|
|
187
197
|
from [magenta]json[/magenta] files, for an app with ID
|
|
188
198
|
[magenta]hare-app[/magenta].
|
|
189
199
|
$ [dim]nextmv cloud run track --app-id hare-app --status succeeded --input input.json \\
|
|
190
|
-
--output output.json --assets assets.json --
|
|
200
|
+
--output output.json --assets assets.json --metrics metrics.json[/dim]
|
|
191
201
|
|
|
192
202
|
- Track a [magenta]failed[/magenta] run with an error message, for an app with ID
|
|
193
203
|
[magenta]hare-app[/magenta].
|
|
@@ -215,7 +225,7 @@ def track(
|
|
|
215
225
|
- Track a [magenta]successful[/magenta] [magenta]json[/magenta] run with all available options,
|
|
216
226
|
for an app with ID [magenta]hare-app[/magenta].
|
|
217
227
|
$ [dim]nextmv cloud run track --app-id hare-app --status succeeded --input input.json \\
|
|
218
|
-
--output output.json --logs logs.log --assets assets.json --
|
|
228
|
+
--output output.json --logs logs.log --assets assets.json --metrics metrics.json \\
|
|
219
229
|
--name "Full run" --description "Complete example" --duration 10000 --instance-id burrow[/dim]
|
|
220
230
|
"""
|
|
221
231
|
|
|
@@ -251,6 +261,7 @@ def track(
|
|
|
251
261
|
assets=assets,
|
|
252
262
|
logs=logs,
|
|
253
263
|
statistics=statistics,
|
|
264
|
+
metrics=metrics,
|
|
254
265
|
)
|
|
255
266
|
|
|
256
267
|
# Actually track the run.
|
|
@@ -277,12 +288,13 @@ def build_tracked_run_input(
|
|
|
277
288
|
assets: str | None = None,
|
|
278
289
|
logs: str | None = None,
|
|
279
290
|
statistics: str | None = None,
|
|
291
|
+
metrics: str | None = None,
|
|
280
292
|
) -> TrackedRun:
|
|
281
293
|
"""
|
|
282
294
|
Builds the tracked run input for tracking a run. Starts by creating a
|
|
283
295
|
TrackedRun object with the provided status, duration, error message, name,
|
|
284
296
|
and description. Then resolves the input and output using helper functions.
|
|
285
|
-
Finally, it reads the assets, logs, and
|
|
297
|
+
Finally, it reads the assets, logs, and metrics from the provided file
|
|
286
298
|
paths, if any, and assigns them to the TrackedRun object.
|
|
287
299
|
|
|
288
300
|
Parameters
|
|
@@ -310,7 +322,9 @@ def build_tracked_run_input(
|
|
|
310
322
|
logs : str | None
|
|
311
323
|
The logs file path, if any.
|
|
312
324
|
statistics : str | None
|
|
313
|
-
The statistics file path, if any.
|
|
325
|
+
Deprecated: Use metrics. The statistics file path, if any.
|
|
326
|
+
metrics : str | None
|
|
327
|
+
The metrics file path, if any.
|
|
314
328
|
"""
|
|
315
329
|
tracked_run = TrackedRun(
|
|
316
330
|
status=TrackedRunStatus(status),
|
|
@@ -355,6 +369,14 @@ def build_tracked_run_input(
|
|
|
355
369
|
except json.JSONDecodeError as e:
|
|
356
370
|
error(f"Failed to parse statistics file [magenta]{statistics}[/magenta] as [magenta]json[/magenta]: {e}.")
|
|
357
371
|
|
|
372
|
+
# Handle the metrics, which should be a JSON file.
|
|
373
|
+
if metrics is not None and metrics != "":
|
|
374
|
+
try:
|
|
375
|
+
with open(metrics) as f:
|
|
376
|
+
tracked_run.metrics = json.load(f)
|
|
377
|
+
except json.JSONDecodeError as e:
|
|
378
|
+
error(f"Failed to parse metrics file [magenta]{metrics}[/magenta] as [magenta]json[/magenta]: {e}.")
|
|
379
|
+
|
|
358
380
|
return tracked_run
|
|
359
381
|
|
|
360
382
|
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
This module defines the cloud sso create command for the Nextmv CLI.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import sys
|
|
5
6
|
from typing import Annotated
|
|
6
7
|
|
|
7
8
|
import typer
|
|
8
9
|
|
|
9
10
|
from nextmv.cli.configuration.config import build_client
|
|
10
|
-
from nextmv.cli.message import in_progress,
|
|
11
|
+
from nextmv.cli.message import in_progress, success
|
|
11
12
|
from nextmv.cli.options import ProfileOption
|
|
12
13
|
from nextmv.cloud.sso import SSOConfiguration
|
|
13
14
|
|
|
@@ -48,7 +49,7 @@ def create(
|
|
|
48
49
|
typer.Option(
|
|
49
50
|
"--metadata-document",
|
|
50
51
|
"-d",
|
|
51
|
-
help="The SSO metadata document as a string.",
|
|
52
|
+
help="The SSO metadata document as a string or a path to a file containing the document.",
|
|
52
53
|
metavar="METADATA_DOCUMENT",
|
|
53
54
|
),
|
|
54
55
|
] = None,
|
|
@@ -60,8 +61,15 @@ def create(
|
|
|
60
61
|
SSO must be configured to enable managed accounts in your organization.
|
|
61
62
|
Please contact [link=https://www.nextmv.io/contact][bold]Nextmv support[/bold][/link] for assistance.
|
|
62
63
|
|
|
63
|
-
You must
|
|
64
|
-
|
|
64
|
+
You must use either the --metadata-url or --metadata-document option. When
|
|
65
|
+
working with the metadata document, you have three options:
|
|
66
|
+
|
|
67
|
+
- Pipe the document into the command via [magenta]stdin[/magenta].
|
|
68
|
+
- Provide the document as a string with --metadata-document.
|
|
69
|
+
- Provide a path to a file containing the document with --metadata-document.
|
|
70
|
+
|
|
71
|
+
You can use the [code]nextmv cloud sso get[/code] to get the newly-created
|
|
72
|
+
configuration after running this command.
|
|
65
73
|
|
|
66
74
|
[bold][underline]Examples[/underline][/bold]
|
|
67
75
|
|
|
@@ -79,19 +87,26 @@ def create(
|
|
|
79
87
|
- Create SSO configuration using a metadata document string.
|
|
80
88
|
$ [dim]nextmv cloud sso create --metadata-document "<EntityDescriptor ...</EntityDescriptor>"[/dim]
|
|
81
89
|
|
|
90
|
+
- Create SSO configuration using a metadata document file.
|
|
91
|
+
$ [dim]nextmv cloud sso create --metadata-document "/path/to/metadata_document.xml"[/dim]
|
|
92
|
+
|
|
82
93
|
- Create SSO configuration using the profile named [magenta]hare[/magenta].
|
|
83
94
|
$ [dim]nextmv cloud sso create --metadata-url "https://sso.cottontailcouriers.net/metadata" \\
|
|
84
95
|
--profile hare[/dim]
|
|
85
96
|
"""
|
|
86
97
|
|
|
98
|
+
stdin = sys.stdin.read().strip() if sys.stdin.isatty() is False else None
|
|
99
|
+
if stdin is not None:
|
|
100
|
+
metadata_document = stdin
|
|
101
|
+
|
|
87
102
|
cloud_client = build_client(profile)
|
|
88
103
|
in_progress(msg="Creating configuration...")
|
|
89
104
|
|
|
90
|
-
|
|
105
|
+
SSOConfiguration.new(
|
|
91
106
|
client=cloud_client,
|
|
92
107
|
allow_non_domain_users=allow_non_domain_users,
|
|
93
108
|
enabled=enabled,
|
|
94
109
|
metadata_url=metadata_url,
|
|
95
110
|
metadata_document=metadata_document,
|
|
96
111
|
)
|
|
97
|
-
|
|
112
|
+
success("SSO configuration created successfully.")
|
|
@@ -30,10 +30,9 @@ def delete(
|
|
|
30
30
|
"""
|
|
31
31
|
Deletes the SSO configuration.
|
|
32
32
|
|
|
33
|
-
You must have the [magenta]administrator[/magenta] role on the organization
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
flag to skip the confirmation prompt.
|
|
33
|
+
You must have the [magenta]administrator[/magenta] role on the organization
|
|
34
|
+
in order to delete it. Use the --yes flag to skip the confirmation prompt.
|
|
35
|
+
You can create a new SSO configuration again with [code]nextmv cloud sso create[/code].
|
|
37
36
|
|
|
38
37
|
[bold][underline]Examples[/underline][/bold]
|
|
39
38
|
|
|
@@ -46,7 +45,8 @@ def delete(
|
|
|
46
45
|
|
|
47
46
|
if not yes:
|
|
48
47
|
confirm = get_confirmation(
|
|
49
|
-
"Are you sure you want to delete the sso configuration?
|
|
48
|
+
"Are you sure you want to delete the sso configuration? "
|
|
49
|
+
"You can create it again with [code]nextmv cloud sso create[/code].",
|
|
50
50
|
)
|
|
51
51
|
|
|
52
52
|
if not confirm:
|
|
@@ -55,4 +55,4 @@ def delete(
|
|
|
55
55
|
|
|
56
56
|
sso_config = build_sso_config(profile)
|
|
57
57
|
sso_config.delete()
|
|
58
|
-
success("SSO configuration has been deleted.")
|
|
58
|
+
success("SSO configuration has been deleted. You can create it again with [code]nextmv cloud sso create[/code].")
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
This module defines the cloud sso update command for the Nextmv CLI.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
import json
|
|
6
5
|
from typing import Annotated
|
|
7
6
|
|
|
8
7
|
import typer
|
|
9
8
|
|
|
10
9
|
from nextmv.cli.configuration.config import build_sso_config
|
|
11
|
-
from nextmv.cli.message import
|
|
10
|
+
from nextmv.cli.message import success
|
|
12
11
|
from nextmv.cli.options import ProfileOption
|
|
13
12
|
|
|
14
13
|
# Set up subcommand application.
|
|
@@ -35,44 +34,24 @@ def update(
|
|
|
35
34
|
metavar="METADATA_DOCUMENT",
|
|
36
35
|
),
|
|
37
36
|
] = None,
|
|
38
|
-
output: Annotated[
|
|
39
|
-
str | None,
|
|
40
|
-
typer.Option(
|
|
41
|
-
"--output",
|
|
42
|
-
"-o",
|
|
43
|
-
help="Saves the updated SSO configuration information to this location.",
|
|
44
|
-
metavar="OUTPUT_PATH",
|
|
45
|
-
),
|
|
46
|
-
] = None,
|
|
47
37
|
profile: ProfileOption = None,
|
|
48
38
|
) -> None:
|
|
49
39
|
"""
|
|
50
40
|
Updates information of a Nextmv Cloud SSO configuration.
|
|
51
41
|
|
|
52
42
|
This command allows you to update the metadata URL or metadata document of
|
|
53
|
-
an existing SSO configuration.
|
|
43
|
+
an existing SSO configuration. You can use the [code]nextmv cloud sso
|
|
44
|
+
get[/code] to get the updated configuration after running this command.
|
|
54
45
|
|
|
55
46
|
[bold][underline]Examples[/underline][/bold]
|
|
56
47
|
|
|
57
48
|
- Update the SSO configuration with a new metadata URL.
|
|
58
49
|
$ [dim]nextmv cloud sso update --metadata-url "https://example.com/metadata.xml"[/dim]
|
|
59
50
|
|
|
60
|
-
- Update the SSO configuration with a new metadata document
|
|
61
|
-
[
|
|
62
|
-
$ [dim]nextmv cloud sso update --metadata-document "<xml>...</xml>" --output updated_sso_config.json[/dim]
|
|
51
|
+
- Update the SSO configuration with a new metadata document.
|
|
52
|
+
$ [dim]nextmv cloud sso update --metadata-document "<xml>...</xml>"[/dim]
|
|
63
53
|
"""
|
|
64
54
|
|
|
65
55
|
sso_config = build_sso_config(profile)
|
|
66
|
-
|
|
56
|
+
sso_config.update(metadata_url=metadata_url, metadata_document=metadata_document)
|
|
67
57
|
success("SSO configuration updated successfully.")
|
|
68
|
-
updated_config_dict = updated_config.to_dict()
|
|
69
|
-
|
|
70
|
-
if output is not None and output != "":
|
|
71
|
-
with open(output, "w") as f:
|
|
72
|
-
json.dump(updated_config_dict, f, indent=2)
|
|
73
|
-
|
|
74
|
-
success(msg=f"Updated SSO configuration information saved to [magenta]{output}[/magenta].")
|
|
75
|
-
|
|
76
|
-
return
|
|
77
|
-
|
|
78
|
-
print_json(updated_config_dict)
|
|
@@ -19,6 +19,7 @@ from datetime import datetime
|
|
|
19
19
|
|
|
20
20
|
from pydantic import AliasChoices, Field
|
|
21
21
|
|
|
22
|
+
from nextmv import deprecated
|
|
22
23
|
from nextmv.base_model import BaseModel
|
|
23
24
|
from nextmv.cloud.client import Client
|
|
24
25
|
from nextmv.status import StatusV2
|
|
@@ -378,6 +379,9 @@ class Account(BaseModel):
|
|
|
378
379
|
|
|
379
380
|
def queue(self) -> Queue:
|
|
380
381
|
"""
|
|
382
|
+
!!! warning
|
|
383
|
+
`Account.queue` is deprecated, use `Application.list_runs` with `status=StatusV2.queued` instead.
|
|
384
|
+
|
|
381
385
|
Get the queue of runs in the account.
|
|
382
386
|
|
|
383
387
|
Retrieves the current list of runs that are pending or being executed
|
|
@@ -404,6 +408,11 @@ class Account(BaseModel):
|
|
|
404
408
|
Run run-123: Daily Optimization - Status: RUNNING
|
|
405
409
|
Run run-456: Weekly Planning - Status: QUEUED
|
|
406
410
|
"""
|
|
411
|
+
deprecated(
|
|
412
|
+
name="Account.queue",
|
|
413
|
+
reason="`Account.queue` is deprecated, use `Application.list_runs` with `status=StatusV2.queued` instead",
|
|
414
|
+
)
|
|
415
|
+
|
|
407
416
|
response = self.client.request(
|
|
408
417
|
method="GET",
|
|
409
418
|
endpoint=self.account_endpoint + "/queue",
|
|
@@ -789,6 +789,8 @@ class Application(
|
|
|
789
789
|
output_config = multi_config["output_configuration"] = {}
|
|
790
790
|
if content.multi_file.output.statistics:
|
|
791
791
|
output_config["statistics_path"] = content.multi_file.output.statistics
|
|
792
|
+
if content.multi_file.output.metrics:
|
|
793
|
+
output_config["metrics_path"] = content.multi_file.output.metrics
|
|
792
794
|
if content.multi_file.output.assets:
|
|
793
795
|
output_config["assets_path"] = content.multi_file.output.assets
|
|
794
796
|
if content.multi_file.output.solutions:
|