nextmv 1.2.3.dev2__tar.gz → 1.2.3.dev4__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.2.3.dev2 → nextmv-1.2.3.dev4}/PKG-INFO +1 -1
- nextmv-1.2.3.dev4/nextmv/__about__.py +1 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/_helpers.py +18 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/local.py +53 -124
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/run.py +41 -8
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cli/test_mcp.py +112 -0
- nextmv-1.2.3.dev2/nextmv/__about__.py +0 -1
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/.python-version +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/CONTRIBUTING.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/LICENSE +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/__entrypoint__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/_serialization.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/base_model.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/acceptance/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/account/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/exists.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/push.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/app/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/metadata.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/batch/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/data/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/data/upload.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/ensemble/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/input_set/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/exists.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/instance/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/managed_input/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/app/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/subscription/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/marketplace/version/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/cancel.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/input.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/logs.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/metadata.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/run/track.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/metadata.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/scenario/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/secrets/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/metadata.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/start.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/stop.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/shadow/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/disable.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/domain/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/domain/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/enable.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/sso/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/metadata.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/start.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/stop.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/switchback/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/upload/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/upload/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/exists.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/cloud/version/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/community/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/community/clone.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/community/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/config.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/configuration/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/init.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/delete.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/register.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/registered.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/sync.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/app/update.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/create.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/get.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/input.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/list.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/logs.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/metadata.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/local/run/visuals.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/main.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/init.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/manifest/validate.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/serve.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/server.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/acceptance.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/account.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/app.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/batch.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/community.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/ensemble.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/input_set.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/instance.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/managed_input.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/profile.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/scenario.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/secrets.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/shadow.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/sso.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/switchback.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/mcp/tools/version.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/message.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/options.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cli/version.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/acceptance_test.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/account.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_acceptance.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_batch_scenario.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_ensemble.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_input_set.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_instance.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_managed_input.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_run.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_secrets.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_shadow.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_switchback.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_utils.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/application/_version.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/assets.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/batch_experiment.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/client.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/community.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/ensemble.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/input_set.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/instance.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/integration.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/marketplace.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/package.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/scenario.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/secrets.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/shadow.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/sso.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/switchback.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/url.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/cloud/version.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/content_format.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/main.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/requirements.txt +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/src/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/default_app/src/visuals.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/deprecated.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/input.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/application.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/executor.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/geojson_handler.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/local.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/plotly_handler.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/registry.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/local/runner.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/logger.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/manifest.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/model.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/options.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/output.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/polling.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/run.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/safe.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/status.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/binary_json_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/binary_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/go.mod +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_json_template/main.go +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/go.mod +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/inputs/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/go_multi-file_template/main.go +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/Main.java +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_json_template/pom.xml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/Main.java +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/inputs/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/java_multi-file_template/pom.xml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/main.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_json_template/requirements.txt +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/.gitignore +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/README.md +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/inputs/input.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/main.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/nextmv/templates/python_multi-file_template/requirements.txt +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/pyproject.toml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cli/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cli/test_configuration.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cli/test_main.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cli/test_version.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cloud/app.yaml +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cloud/test_client.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cloud/test_instance.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cloud/test_package.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/cloud/test_scenario.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/integration/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/integration/cloud/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/integration/cloud/test_integration_cloud.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/integration/cloud/test_integration_marketplace.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/local/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/local/test_application.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/local/test_executor.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/local/test_registry.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/local/test_runner.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options1.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options2.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options3.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options4.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options5.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options6.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/scripts/options7.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_base_model.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_entrypoint/__init__.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_entrypoint/test_entrypoint.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_input.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.csv +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.json +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_inputs/test_data.txt +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_logger.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_manifest.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_model.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_options.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_output.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_polling.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_run.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_safe.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_serialization.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/tests/test_version.py +0 -0
- {nextmv-1.2.3.dev2 → nextmv-1.2.3.dev4}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "v1.2.3.dev4"
|
|
@@ -73,6 +73,24 @@ def _get_local_app(app_dir: str, app_id: str | None = None) -> local.Application
|
|
|
73
73
|
return app
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _build_run_configuration(content_format: str | None):
|
|
77
|
+
"""Build a RunConfiguration for the given content format string, or None."""
|
|
78
|
+
|
|
79
|
+
if content_format is None:
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
from nextmv.input import InputFormat
|
|
83
|
+
from nextmv.run import Format, FormatInput, RunConfiguration
|
|
84
|
+
|
|
85
|
+
config = RunConfiguration()
|
|
86
|
+
config.format = Format(
|
|
87
|
+
format_input=FormatInput(
|
|
88
|
+
input_type=InputFormat(content_format),
|
|
89
|
+
),
|
|
90
|
+
)
|
|
91
|
+
return config
|
|
92
|
+
|
|
93
|
+
|
|
76
94
|
def _save_to_file(data: Any, prefix: str) -> str:
|
|
77
95
|
"""Serialize data to a temp JSON file and return a message with the path.
|
|
78
96
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"""MCP tools for local application management."""
|
|
2
2
|
|
|
3
|
-
import json
|
|
4
3
|
import os
|
|
5
|
-
import subprocess
|
|
6
|
-
import tempfile
|
|
7
4
|
from typing import Any
|
|
8
5
|
|
|
9
6
|
from mcp.server.fastmcp import FastMCP
|
|
@@ -20,103 +17,6 @@ def _local_run_dir(app_dir: str, run_id: str) -> str:
|
|
|
20
17
|
return os.path.join(app_dir, NEXTMV_DIR, RUNS_KEY, run_id)
|
|
21
18
|
|
|
22
19
|
|
|
23
|
-
def _run_via_cli(
|
|
24
|
-
app_dir: str,
|
|
25
|
-
input_data: dict[str, Any],
|
|
26
|
-
run_options: dict[str, str] | None = None,
|
|
27
|
-
wait: bool = False,
|
|
28
|
-
) -> str:
|
|
29
|
-
"""Execute a local run via ``uv run nextmv local run create``.
|
|
30
|
-
|
|
31
|
-
This invokes the Nextmv CLI through ``uv``, which ensures that
|
|
32
|
-
the application's ``requirements.txt`` dependencies are installed
|
|
33
|
-
and available at runtime (unlike calling the SDK directly with
|
|
34
|
-
``sys.executable``).
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
app_dir: Absolute path to the local application directory.
|
|
38
|
-
input_data: The input data (JSON object) for the run.
|
|
39
|
-
run_options: Optional solver options passed as ``--options key=value``.
|
|
40
|
-
wait: If True, blocks until the run completes (``--wait``).
|
|
41
|
-
|
|
42
|
-
Returns:
|
|
43
|
-
The run ID (parsed from the CLI's JSON stdout output).
|
|
44
|
-
|
|
45
|
-
Raises:
|
|
46
|
-
RuntimeError: If the CLI process exits with a non-zero return code.
|
|
47
|
-
"""
|
|
48
|
-
|
|
49
|
-
# Write input to a temp file so the CLI can read it via --input.
|
|
50
|
-
fd, input_path = tempfile.mkstemp(suffix=".json", prefix="mcp_local_input_")
|
|
51
|
-
try:
|
|
52
|
-
with os.fdopen(fd, "w") as fh:
|
|
53
|
-
json.dump(input_data, fh)
|
|
54
|
-
|
|
55
|
-
cmd: list[str] = [
|
|
56
|
-
"uv", "run", "nextmv",
|
|
57
|
-
"local", "run", "create",
|
|
58
|
-
"--app-src", os.path.abspath(app_dir),
|
|
59
|
-
"--input", input_path,
|
|
60
|
-
]
|
|
61
|
-
|
|
62
|
-
if run_options:
|
|
63
|
-
for key, value in run_options.items():
|
|
64
|
-
cmd.extend(["--options", f"{key}={value}"])
|
|
65
|
-
|
|
66
|
-
if wait:
|
|
67
|
-
cmd.append("--wait")
|
|
68
|
-
|
|
69
|
-
result = subprocess.run(
|
|
70
|
-
cmd,
|
|
71
|
-
capture_output=True,
|
|
72
|
-
text=True,
|
|
73
|
-
check=False,
|
|
74
|
-
env=os.environ,
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
if result.returncode != 0:
|
|
78
|
-
stderr = result.stderr.strip()
|
|
79
|
-
raise RuntimeError(
|
|
80
|
-
f"nextmv local run create failed (exit {result.returncode}): {stderr}"
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
# The CLI prints JSON with a "run_id" key to stdout when not
|
|
84
|
-
# waiting, or the full result when waiting.
|
|
85
|
-
stdout = result.stdout.strip()
|
|
86
|
-
try:
|
|
87
|
-
parsed = json.loads(stdout)
|
|
88
|
-
if isinstance(parsed, dict) and "run_id" in parsed:
|
|
89
|
-
return parsed["run_id"]
|
|
90
|
-
except json.JSONDecodeError:
|
|
91
|
-
pass
|
|
92
|
-
|
|
93
|
-
# When --wait is used the CLI may print the run_id via a
|
|
94
|
-
# success message to stderr. Fall back to extracting the
|
|
95
|
-
# run_id from the run directory listing.
|
|
96
|
-
from nextmv.local.local import NEXTMV_DIR, RUNS_KEY
|
|
97
|
-
|
|
98
|
-
runs_dir = os.path.join(
|
|
99
|
-
os.path.abspath(app_dir), NEXTMV_DIR, RUNS_KEY,
|
|
100
|
-
)
|
|
101
|
-
if os.path.isdir(runs_dir):
|
|
102
|
-
entries = sorted(
|
|
103
|
-
os.listdir(runs_dir),
|
|
104
|
-
key=lambda d: os.path.getmtime(
|
|
105
|
-
os.path.join(runs_dir, d)
|
|
106
|
-
),
|
|
107
|
-
)
|
|
108
|
-
if entries:
|
|
109
|
-
return entries[-1]
|
|
110
|
-
|
|
111
|
-
raise RuntimeError(
|
|
112
|
-
f"Could not determine run_id from CLI output: {stdout}"
|
|
113
|
-
)
|
|
114
|
-
finally:
|
|
115
|
-
# Clean up the temp input file.
|
|
116
|
-
if os.path.exists(input_path):
|
|
117
|
-
os.unlink(input_path)
|
|
118
|
-
|
|
119
|
-
|
|
120
20
|
def _local_run_input_impl(
|
|
121
21
|
app_dir: str,
|
|
122
22
|
run_id: str,
|
|
@@ -155,30 +55,47 @@ def _local_run_logs_impl(
|
|
|
155
55
|
|
|
156
56
|
def local_run(
|
|
157
57
|
app_dir: str,
|
|
158
|
-
input: dict[str, Any],
|
|
58
|
+
input: dict[str, Any] | None = None,
|
|
59
|
+
input_dir_path: str | None = None,
|
|
60
|
+
content_format: str | None = None,
|
|
159
61
|
run_options: dict[str, str] | None = None,
|
|
160
62
|
) -> str:
|
|
161
63
|
"""Run a local Nextmv application and wait for the result.
|
|
162
64
|
|
|
163
|
-
Executes the application
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
65
|
+
Executes the application using the Nextmv SDK and polls until the
|
|
66
|
+
run completes. The result is stored in the local run directory at
|
|
67
|
+
``{app_dir}/.nextmv/runs/{run_id}/``. Use file-reading tools to
|
|
68
|
+
inspect the result file.
|
|
69
|
+
|
|
70
|
+
For JSON apps, provide ``input`` as a JSON object. For multi-file
|
|
71
|
+
or CSV archive apps, provide ``input_dir_path`` pointing to a
|
|
72
|
+
directory of input files and set ``content_format`` accordingly
|
|
73
|
+
(e.g. ``"multi-file"`` or ``"csv-archive"``).
|
|
168
74
|
|
|
169
75
|
Args:
|
|
170
76
|
app_dir: Absolute path to the local application directory
|
|
171
77
|
containing an app.yaml manifest.
|
|
172
|
-
input: The input data (JSON object) for the
|
|
78
|
+
input: The input data (JSON object) for the run. Used for
|
|
79
|
+
JSON apps. Ignored when ``input_dir_path`` is provided.
|
|
80
|
+
input_dir_path: Path to a directory containing input files.
|
|
81
|
+
Use for multi-file or CSV archive apps. When provided,
|
|
82
|
+
``content_format`` must also be set.
|
|
83
|
+
content_format: Content format of the input. Required when
|
|
84
|
+
``input_dir_path`` is set. Allowed values:
|
|
85
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
173
86
|
run_options: Optional solver options passed to the application,
|
|
174
87
|
e.g. ``{"solve.duration": "10s"}``.
|
|
175
88
|
"""
|
|
176
89
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
90
|
+
app = _helpers._get_local_app(app_dir=app_dir)
|
|
91
|
+
config = _helpers._build_run_configuration(content_format)
|
|
92
|
+
if input_dir_path is not None:
|
|
93
|
+
run_id = app.new_run(input_dir_path=input_dir_path, options=run_options, configuration=config)
|
|
94
|
+
else:
|
|
95
|
+
run_id = app.new_run(input=input, options=run_options, configuration=config)
|
|
96
|
+
app.run_result_with_polling(
|
|
97
|
+
run_id=run_id,
|
|
98
|
+
polling_options=default_polling_options(),
|
|
182
99
|
)
|
|
183
100
|
run_dir = _local_run_dir(app_dir, run_id)
|
|
184
101
|
result_path = os.path.join(run_dir, f"{run_id}.json")
|
|
@@ -190,30 +107,42 @@ def local_run(
|
|
|
190
107
|
|
|
191
108
|
def local_run_submit(
|
|
192
109
|
app_dir: str,
|
|
193
|
-
input: dict[str, Any],
|
|
110
|
+
input: dict[str, Any] | None = None,
|
|
111
|
+
input_dir_path: str | None = None,
|
|
112
|
+
content_format: str | None = None,
|
|
194
113
|
run_options: dict[str, str] | None = None,
|
|
195
114
|
) -> str:
|
|
196
115
|
"""Submit a local run without waiting for completion.
|
|
197
116
|
|
|
198
|
-
Executes the application
|
|
199
|
-
|
|
200
|
-
``
|
|
201
|
-
|
|
117
|
+
Executes the application using the Nextmv SDK and returns the run
|
|
118
|
+
ID immediately. Use ``local_run_poll_result`` or
|
|
119
|
+
``local_run_status`` to check on the run later.
|
|
120
|
+
|
|
121
|
+
For JSON apps, provide ``input`` as a JSON object. For multi-file
|
|
122
|
+
or CSV archive apps, provide ``input_dir_path`` pointing to a
|
|
123
|
+
directory of input files and set ``content_format`` accordingly
|
|
124
|
+
(e.g. ``"multi-file"`` or ``"csv-archive"``).
|
|
202
125
|
|
|
203
126
|
Args:
|
|
204
127
|
app_dir: Absolute path to the local application directory
|
|
205
128
|
containing an app.yaml manifest.
|
|
206
|
-
input: The input data (JSON object) for the run.
|
|
129
|
+
input: The input data (JSON object) for the run. Used for
|
|
130
|
+
JSON apps. Ignored when ``input_dir_path`` is provided.
|
|
131
|
+
input_dir_path: Path to a directory containing input files.
|
|
132
|
+
Use for multi-file or CSV archive apps. When provided,
|
|
133
|
+
``content_format`` must also be set.
|
|
134
|
+
content_format: Content format of the input. Required when
|
|
135
|
+
``input_dir_path`` is set. Allowed values:
|
|
136
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
207
137
|
run_options: Optional solver options passed to the application,
|
|
208
138
|
e.g. ``{"solve.duration": "10s"}``.
|
|
209
139
|
"""
|
|
210
140
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
)
|
|
141
|
+
app = _helpers._get_local_app(app_dir=app_dir)
|
|
142
|
+
config = _helpers._build_run_configuration(content_format)
|
|
143
|
+
if input_dir_path is not None:
|
|
144
|
+
return app.new_run(input_dir_path=input_dir_path, options=run_options, configuration=config)
|
|
145
|
+
return app.new_run(input=input, options=run_options, configuration=config)
|
|
217
146
|
|
|
218
147
|
|
|
219
148
|
def local_run_status(
|
|
@@ -45,7 +45,9 @@ def register(mcp: FastMCP) -> None:
|
|
|
45
45
|
@mcp.tool()
|
|
46
46
|
def cloud_run(
|
|
47
47
|
app_id: str,
|
|
48
|
-
input: dict[str, Any],
|
|
48
|
+
input: dict[str, Any] | None = None,
|
|
49
|
+
input_dir_path: str | None = None,
|
|
50
|
+
content_format: str | None = None,
|
|
49
51
|
instance_id: str | None = None,
|
|
50
52
|
run_options: dict[str, str] | None = None,
|
|
51
53
|
managed_input_id: str | None = None,
|
|
@@ -57,10 +59,22 @@ def register(mcp: FastMCP) -> None:
|
|
|
57
59
|
statistics) to a local temp file. Use file-reading tools to
|
|
58
60
|
inspect the contents.
|
|
59
61
|
|
|
62
|
+
For JSON apps, provide ``input`` as a JSON object. For
|
|
63
|
+
multi-file or CSV archive apps, provide ``input_dir_path``
|
|
64
|
+
pointing to a local directory of input files and set
|
|
65
|
+
``content_format`` accordingly (e.g. ``"multi-file"``).
|
|
66
|
+
|
|
60
67
|
Args:
|
|
61
68
|
app_id: The application ID.
|
|
62
|
-
input: The input data (JSON object) for the
|
|
63
|
-
|
|
69
|
+
input: The input data (JSON object) for the run. Used for
|
|
70
|
+
JSON apps. Ignored when ``input_dir_path`` or
|
|
71
|
+
``managed_input_id`` is provided.
|
|
72
|
+
input_dir_path: Path to a local directory containing input
|
|
73
|
+
files. Use for multi-file or CSV archive apps. When
|
|
74
|
+
provided, ``content_format`` must also be set.
|
|
75
|
+
content_format: Content format of the input. Required when
|
|
76
|
+
``input_dir_path`` is set. Allowed values:
|
|
77
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
64
78
|
instance_id: Instance to run against. Uses the application's
|
|
65
79
|
default instance if omitted.
|
|
66
80
|
run_options: Solver options passed to the application, e.g.
|
|
@@ -70,8 +84,11 @@ def register(mcp: FastMCP) -> None:
|
|
|
70
84
|
"""
|
|
71
85
|
|
|
72
86
|
app = _helpers._get_app(app_id)
|
|
87
|
+
config = _helpers._build_run_configuration(content_format)
|
|
73
88
|
result = app.new_run_with_result(
|
|
74
89
|
input=input,
|
|
90
|
+
input_dir_path=input_dir_path,
|
|
91
|
+
configuration=config,
|
|
75
92
|
instance_id=instance_id,
|
|
76
93
|
run_options=run_options or {},
|
|
77
94
|
polling_options=default_polling_options(),
|
|
@@ -82,7 +99,9 @@ def register(mcp: FastMCP) -> None:
|
|
|
82
99
|
@mcp.tool()
|
|
83
100
|
def cloud_run_submit(
|
|
84
101
|
app_id: str,
|
|
85
|
-
input: dict[str, Any],
|
|
102
|
+
input: dict[str, Any] | None = None,
|
|
103
|
+
input_dir_path: str | None = None,
|
|
104
|
+
content_format: str | None = None,
|
|
86
105
|
instance_id: str | None = None,
|
|
87
106
|
run_options: dict[str, str] | None = None,
|
|
88
107
|
managed_input_id: str | None = None,
|
|
@@ -92,10 +111,22 @@ def register(mcp: FastMCP) -> None:
|
|
|
92
111
|
Returns the run ID immediately. Use ``cloud_run_status`` or
|
|
93
112
|
``cloud_run_result`` to check on the run later.
|
|
94
113
|
|
|
114
|
+
For JSON apps, provide ``input`` as a JSON object. For
|
|
115
|
+
multi-file or CSV archive apps, provide ``input_dir_path``
|
|
116
|
+
pointing to a local directory of input files and set
|
|
117
|
+
``content_format`` accordingly (e.g. ``"multi-file"``).
|
|
118
|
+
|
|
95
119
|
Args:
|
|
96
120
|
app_id: The application ID.
|
|
97
|
-
input: The input data (JSON object) for the run.
|
|
98
|
-
when ``
|
|
121
|
+
input: The input data (JSON object) for the run. Used for
|
|
122
|
+
JSON apps. Ignored when ``input_dir_path`` or
|
|
123
|
+
``managed_input_id`` is provided.
|
|
124
|
+
input_dir_path: Path to a local directory containing input
|
|
125
|
+
files. Use for multi-file or CSV archive apps. When
|
|
126
|
+
provided, ``content_format`` must also be set.
|
|
127
|
+
content_format: Content format of the input. Required when
|
|
128
|
+
``input_dir_path`` is set. Allowed values:
|
|
129
|
+
``"multi-file"``, ``"csv-archive"``, ``"json"``.
|
|
99
130
|
instance_id: Instance to run against. Uses the application's
|
|
100
131
|
default instance if omitted.
|
|
101
132
|
run_options: Solver options passed to the application, e.g.
|
|
@@ -105,13 +136,15 @@ def register(mcp: FastMCP) -> None:
|
|
|
105
136
|
"""
|
|
106
137
|
|
|
107
138
|
app = _helpers._get_app(app_id)
|
|
108
|
-
|
|
139
|
+
config = _helpers._build_run_configuration(content_format)
|
|
140
|
+
return app.new_run(
|
|
109
141
|
input=input,
|
|
142
|
+
input_dir_path=input_dir_path,
|
|
143
|
+
configuration=config,
|
|
110
144
|
instance_id=instance_id,
|
|
111
145
|
options=run_options or {},
|
|
112
146
|
managed_input_id=managed_input_id,
|
|
113
147
|
)
|
|
114
|
-
return run_id
|
|
115
148
|
|
|
116
149
|
@mcp.tool()
|
|
117
150
|
def cloud_run_status(app_id: str, run_id: str) -> dict[str, Any]:
|
|
@@ -931,3 +931,115 @@ class TestBugFixes(unittest.TestCase):
|
|
|
931
931
|
run_numbers = [r["run_number"] for r in runs]
|
|
932
932
|
self.assertEqual(run_numbers, ["1", "2"])
|
|
933
933
|
|
|
934
|
+
|
|
935
|
+
class TestMultiFileRunSupport(unittest.TestCase):
|
|
936
|
+
"""Tests for multi-file run support in local and cloud run tools."""
|
|
937
|
+
|
|
938
|
+
def test_build_run_configuration_none(self):
|
|
939
|
+
"""_build_run_configuration returns None when content_format is None."""
|
|
940
|
+
from nextmv.cli.mcp.tools._helpers import _build_run_configuration
|
|
941
|
+
|
|
942
|
+
self.assertIsNone(_build_run_configuration(None))
|
|
943
|
+
|
|
944
|
+
def test_build_run_configuration_multi_file(self):
|
|
945
|
+
"""_build_run_configuration builds a RunConfiguration for 'multi-file'."""
|
|
946
|
+
from nextmv.cli.mcp.tools._helpers import _build_run_configuration
|
|
947
|
+
from nextmv.input import InputFormat
|
|
948
|
+
|
|
949
|
+
config = _build_run_configuration("multi-file")
|
|
950
|
+
self.assertIsNotNone(config)
|
|
951
|
+
self.assertEqual(
|
|
952
|
+
config.format.format_input.input_type,
|
|
953
|
+
InputFormat.MULTI_FILE,
|
|
954
|
+
)
|
|
955
|
+
|
|
956
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_local_app")
|
|
957
|
+
def test_local_run_submit_json_input(self, mock_get_local_app):
|
|
958
|
+
"""local_run_submit passes input dict to new_run for JSON apps."""
|
|
959
|
+
from nextmv.cli.mcp.server import create_server
|
|
960
|
+
|
|
961
|
+
mock_app = MagicMock()
|
|
962
|
+
mock_app.new_run.return_value = "run-123"
|
|
963
|
+
mock_get_local_app.return_value = mock_app
|
|
964
|
+
|
|
965
|
+
server = create_server()
|
|
966
|
+
tool = server._tool_manager._tools["local_run_submit"]
|
|
967
|
+
asyncio.run(tool.run({
|
|
968
|
+
"app_dir": "/some/app",
|
|
969
|
+
"input": {"stops": []},
|
|
970
|
+
}))
|
|
971
|
+
mock_app.new_run.assert_called_once()
|
|
972
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
973
|
+
self.assertEqual(call_kwargs["input"], {"stops": []})
|
|
974
|
+
self.assertIsNone(call_kwargs.get("input_dir_path"))
|
|
975
|
+
self.assertIsNone(call_kwargs.get("configuration"))
|
|
976
|
+
|
|
977
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_local_app")
|
|
978
|
+
def test_local_run_submit_multifile_input(self, mock_get_local_app):
|
|
979
|
+
"""local_run_submit passes input_dir_path + configuration for multi-file apps."""
|
|
980
|
+
from nextmv.cli.mcp.server import create_server
|
|
981
|
+
from nextmv.input import InputFormat
|
|
982
|
+
|
|
983
|
+
mock_app = MagicMock()
|
|
984
|
+
mock_app.new_run.return_value = "run-456"
|
|
985
|
+
mock_get_local_app.return_value = mock_app
|
|
986
|
+
|
|
987
|
+
server = create_server()
|
|
988
|
+
tool = server._tool_manager._tools["local_run_submit"]
|
|
989
|
+
asyncio.run(tool.run({
|
|
990
|
+
"app_dir": "/some/app",
|
|
991
|
+
"input_dir_path": "/some/input-dir",
|
|
992
|
+
"content_format": "multi-file",
|
|
993
|
+
}))
|
|
994
|
+
mock_app.new_run.assert_called_once()
|
|
995
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
996
|
+
self.assertEqual(call_kwargs["input_dir_path"], "/some/input-dir")
|
|
997
|
+
config = call_kwargs.get("configuration")
|
|
998
|
+
self.assertIsNotNone(config)
|
|
999
|
+
self.assertEqual(config.format.format_input.input_type, InputFormat.MULTI_FILE)
|
|
1000
|
+
|
|
1001
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_app")
|
|
1002
|
+
def test_cloud_run_submit_json_input(self, mock_get_app):
|
|
1003
|
+
"""cloud_run_submit passes input dict to new_run for JSON apps."""
|
|
1004
|
+
from nextmv.cli.mcp.server import create_server
|
|
1005
|
+
|
|
1006
|
+
mock_app = MagicMock()
|
|
1007
|
+
mock_app.new_run.return_value = "run-789"
|
|
1008
|
+
mock_get_app.return_value = mock_app
|
|
1009
|
+
|
|
1010
|
+
server = create_server()
|
|
1011
|
+
tool = server._tool_manager._tools["cloud_run_submit"]
|
|
1012
|
+
asyncio.run(tool.run({
|
|
1013
|
+
"app_id": "my-app",
|
|
1014
|
+
"input": {"stops": []},
|
|
1015
|
+
}))
|
|
1016
|
+
mock_app.new_run.assert_called_once()
|
|
1017
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
1018
|
+
self.assertEqual(call_kwargs["input"], {"stops": []})
|
|
1019
|
+
self.assertIsNone(call_kwargs.get("input_dir_path"))
|
|
1020
|
+
self.assertIsNone(call_kwargs.get("configuration"))
|
|
1021
|
+
|
|
1022
|
+
@patch("nextmv.cli.mcp.tools._helpers._get_app")
|
|
1023
|
+
def test_cloud_run_submit_multifile_input(self, mock_get_app):
|
|
1024
|
+
"""cloud_run_submit passes input_dir_path + configuration for multi-file apps."""
|
|
1025
|
+
from nextmv.cli.mcp.server import create_server
|
|
1026
|
+
from nextmv.input import InputFormat
|
|
1027
|
+
|
|
1028
|
+
mock_app = MagicMock()
|
|
1029
|
+
mock_app.new_run.return_value = "run-mf-1"
|
|
1030
|
+
mock_get_app.return_value = mock_app
|
|
1031
|
+
|
|
1032
|
+
server = create_server()
|
|
1033
|
+
tool = server._tool_manager._tools["cloud_run_submit"]
|
|
1034
|
+
asyncio.run(tool.run({
|
|
1035
|
+
"app_id": "my-app",
|
|
1036
|
+
"input_dir_path": "/some/input-dir",
|
|
1037
|
+
"content_format": "multi-file",
|
|
1038
|
+
}))
|
|
1039
|
+
mock_app.new_run.assert_called_once()
|
|
1040
|
+
call_kwargs = mock_app.new_run.call_args[1]
|
|
1041
|
+
self.assertEqual(call_kwargs["input_dir_path"], "/some/input-dir")
|
|
1042
|
+
config = call_kwargs.get("configuration")
|
|
1043
|
+
self.assertIsNotNone(config)
|
|
1044
|
+
self.assertEqual(config.format.format_input.input_type, InputFormat.MULTI_FILE)
|
|
1045
|
+
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "v1.2.3.dev2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|