mammoth-cli 2.2.97__tar.gz → 2.2.99__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.
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/PKG-INFO +2 -2
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/app.py +22 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-embed.md +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/dashboard.py +21 -3
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/file.py +15 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/schema.py +20 -2
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/_common.py +39 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/data_read.py +2 -31
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/export.py +2 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/workspace.py +9 -4
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/errors/envelope.py +2 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/normalize.py +3 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/invocation.py +3 -0
- mammoth_cli-2.2.99/mammoth_cli/runtime/reveal.py +21 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/strict.py +3 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/verify.py +8 -2
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/argspec.py +5 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/input_fields.py +7 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/mapping.py +44 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/pyproject.toml +2 -2
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/dashboard.yaml +3 -3
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/view.yaml +12 -14
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/compiled/commands.json +6 -6
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/compiled/sdk-methods.json +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/sdk-methods.yaml +1 -1
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/.gitignore +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/LICENSE +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/README.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capabilities.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-published.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/how.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/run.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/_lazy.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/capabilities.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/help_summaries.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/how.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/resolve.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/run.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/aggregate.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/checks.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/column_checks.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/columns.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/derivatives.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/explore.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/export_dataset.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/export_specialized.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/formatting.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/join_check.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/lifecycle.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/listing.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/pipeline.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/settle.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/upload.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_drivers.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_explore.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_forecast.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/keyring_backend.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/oauth.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/oauth_loopback.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/limitations.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/next_commands.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/recipes.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/compact.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/embed_pool.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/labels.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/linecapture.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/local_paths.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/locked_files.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/next_commands.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/opens.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/shared.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/token_scope.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/view_dataset_cache.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/append_blank_columns.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/column_type_guard.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_figures.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/delete_check.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_card_edit.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_cards.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_to_figure.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_to_image.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/field_enums.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/folder_ids.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/held_change.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/job_outcome.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/local_files.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/paging.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/period_analysis.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/poll.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/read_memo.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/schema_diff.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/suggest.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/view_analysis.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/view_variants.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/capabilities.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/collection.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/how.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/resolve.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/run.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/token.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/compiled/openapi-operations.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/server-status.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.99
|
|
4
4
|
Summary: Command-line interface for the Mammoth Analytics platform
|
|
5
5
|
Project-URL: homepage, https://mammoth.io
|
|
6
6
|
Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
|
|
@@ -19,7 +19,7 @@ Requires-Python: <3.15,>=3.12
|
|
|
19
19
|
Requires-Dist: certifi>=2026.10.19
|
|
20
20
|
Requires-Dist: jsonschema>=4.20
|
|
21
21
|
Requires-Dist: keyring<26,>=25.7
|
|
22
|
-
Requires-Dist: mammoth-io<0.9,>=0.8.
|
|
22
|
+
Requires-Dist: mammoth-io<0.9,>=0.8.50
|
|
23
23
|
Requires-Dist: platformdirs<5,>=4.10
|
|
24
24
|
Requires-Dist: pydantic<3,>=2.12.5
|
|
25
25
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -1209,6 +1209,7 @@ def _execute(invocation: Invocation) -> None:
|
|
|
1209
1209
|
from mammoth_cli.runtime.new_data import with_new_data_path
|
|
1210
1210
|
from mammoth_cli.runtime.next_commands import with_next_commands
|
|
1211
1211
|
from mammoth_cli.runtime.opens import with_opens
|
|
1212
|
+
from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
|
|
1212
1213
|
from mammoth_cli.runtime.strict import validate_extra_args
|
|
1213
1214
|
|
|
1214
1215
|
if invocation.profile is None:
|
|
@@ -1219,6 +1220,12 @@ def _execute(invocation: Invocation) -> None:
|
|
|
1219
1220
|
extra_args=[arg for arg in invocation.extra_args if arg != FULL_FLAG],
|
|
1220
1221
|
full_output=True,
|
|
1221
1222
|
)
|
|
1223
|
+
if invocation.command_id in REVEAL_COMMANDS and REVEAL_FLAG in invocation.extra_args:
|
|
1224
|
+
invocation = replace(
|
|
1225
|
+
invocation,
|
|
1226
|
+
extra_args=[arg for arg in invocation.extra_args if arg != REVEAL_FLAG],
|
|
1227
|
+
reveal_secrets=True,
|
|
1228
|
+
)
|
|
1222
1229
|
|
|
1223
1230
|
def producer() -> tuple[Any, dict[str, Any]]:
|
|
1224
1231
|
refuse_hand_crafted_write(invocation.command_id)
|
|
@@ -1508,6 +1515,13 @@ def _command_help(command_id: str, record: dict[str, Any] | None) -> str | None:
|
|
|
1508
1515
|
"The result is compact: ids, checks, verify and a canvas summary. "
|
|
1509
1516
|
f"Pass {FULL_FLAG} for the complete response."
|
|
1510
1517
|
)
|
|
1518
|
+
from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
|
|
1519
|
+
|
|
1520
|
+
if command_id in REVEAL_COMMANDS:
|
|
1521
|
+
parts.append(
|
|
1522
|
+
"The credential in the result is masked. Pass "
|
|
1523
|
+
f"{REVEAL_FLAG} to print it; it is shown only once."
|
|
1524
|
+
)
|
|
1511
1525
|
return "\n\n".join(parts) or None
|
|
1512
1526
|
|
|
1513
1527
|
|
|
@@ -1546,7 +1560,14 @@ def _short_type(type_name: str) -> str:
|
|
|
1546
1560
|
if "condition." in text:
|
|
1547
1561
|
return "condition"
|
|
1548
1562
|
# Drop each dotted module path but keep the brackets around it (``list[a.b.C]``).
|
|
1549
|
-
|
|
1563
|
+
text = re.sub(r"(?:\w+\.)+(\w+)", r"\1", " | ".join(p.strip() for p in text.split("|")))
|
|
1564
|
+
if len(text) <= _SHORT_TYPE_MAX:
|
|
1565
|
+
return text
|
|
1566
|
+
# Cut at a word, never inside one: a clipped value ('par) reads as a real one.
|
|
1567
|
+
return text[: _SHORT_TYPE_MAX - 4].rsplit(" ", 1)[0] + " ..."
|
|
1568
|
+
|
|
1569
|
+
|
|
1570
|
+
_SHORT_TYPE_MAX = 60
|
|
1550
1571
|
|
|
1551
1572
|
|
|
1552
1573
|
def _command_records() -> list[dict[str, Any]]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.2.
|
|
3
|
+
version: 2.2.99
|
|
4
4
|
description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines (join, merge, pivot, filter, clean), dashboards, exports, and handoffs."
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -36,7 +36,7 @@ Status on release: untried; no live run recorded.
|
|
|
36
36
|
|
|
37
37
|
Run: `mammoth dashboard embed lifetime set`. Exact input fields: `mammoth schema get dashboard.embed.lifetime.set`.
|
|
38
38
|
|
|
39
|
-
Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl":
|
|
39
|
+
Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl": 900}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
40
40
|
|
|
41
41
|
Result: `DashboardEmbedLifetimeSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
42
42
|
|
|
@@ -638,7 +638,7 @@ Run: `mammoth dashboard live-chart create`. Exact input fields: `mammoth schema
|
|
|
638
638
|
|
|
639
639
|
Example: `mammoth dashboard live-chart create --input '{"body": {"params": {"view_id": 1, "figure": {}, "title": "Revenue report"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
640
640
|
|
|
641
|
-
Result: `DashboardLiveChartCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `
|
|
641
|
+
Result: `DashboardLiveChartCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `start_or_wait`.
|
|
642
642
|
|
|
643
643
|
Status on release: untried; no live run recorded.
|
|
644
644
|
|
|
@@ -570,7 +570,7 @@ Status on release: ran once on CLI 2.0.14 — write sweep 2026-09-18: exit 0 on
|
|
|
570
570
|
|
|
571
571
|
Run: `mammoth view export download`. Exact input fields: `mammoth schema get view.export.download`.
|
|
572
572
|
|
|
573
|
-
Example: `mammoth view export download 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
573
|
+
Example: `mammoth view export download 123 --input '{"file_type": "xml"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
574
574
|
|
|
575
575
|
Result: `ViewExportDownloadResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
|
|
576
576
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"""Handlers for the ``dashboard`` command family (workspace-scoped, no project).
|
|
2
2
|
|
|
3
3
|
Dashboards are identified either by an integer ``dashboard_id`` (most commands)
|
|
4
|
-
or by a share ``url`` slug (the ``*-by-url`` commands).
|
|
5
|
-
|
|
4
|
+
or by a share ``url`` slug (the ``*-by-url`` commands). The few backing SDK
|
|
5
|
+
methods that take a ``project_id`` (a new board's project) get an explicit
|
|
6
|
+
``--project``; no other handler resolves or forwards one.
|
|
6
7
|
Every handler dispatches through the generic
|
|
7
8
|
:meth:`~mammoth_cli.services.protocol.MammothService.call` seam to the public
|
|
8
9
|
SDK method named by the command's reviewed manifest ``sdk_symbol``.
|
|
@@ -15,6 +16,7 @@ from pathlib import Path
|
|
|
15
16
|
from typing import Any, Literal, cast
|
|
16
17
|
|
|
17
18
|
from mammoth.api import agents as agents_api
|
|
19
|
+
from mammoth.api import dashboards as dashboards_api
|
|
18
20
|
from mammoth.exceptions import MammothValidationError
|
|
19
21
|
from pydantic import ValidationError
|
|
20
22
|
|
|
@@ -31,6 +33,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
31
33
|
CliError,
|
|
32
34
|
)
|
|
33
35
|
from mammoth_cli.manifest.loader import command_by_id
|
|
36
|
+
from mammoth_cli.output.normalize import Revealed, normalize
|
|
34
37
|
from mammoth_cli.runtime import embedded, parents
|
|
35
38
|
from mammoth_cli.runtime.confirm import (
|
|
36
39
|
POLICY_CONFIRM_TARGET,
|
|
@@ -40,6 +43,7 @@ from mammoth_cli.runtime.confirm import (
|
|
|
40
43
|
enforce_confirmation,
|
|
41
44
|
)
|
|
42
45
|
from mammoth_cli.runtime.invocation import Invocation
|
|
46
|
+
from mammoth_cli.runtime.reveal import REVEAL_COMMANDS
|
|
43
47
|
from mammoth_cli.runtime.session import open_service, require_project, resolved_project
|
|
44
48
|
from mammoth_cli.services.argspec import arg_spec
|
|
45
49
|
from mammoth_cli.services.board_values import board_values, dashboard_link
|
|
@@ -896,6 +900,7 @@ _SDK_RULES: dict[str, Callable[[dict[str, Any]], None]] = {
|
|
|
896
900
|
"agent.turn.rate": lambda k: agents_api.check_rating(
|
|
897
901
|
str(k.get("rating") or ""), k.get("comment")
|
|
898
902
|
),
|
|
903
|
+
"dashboard.embed.lifetime.set": lambda k: dashboards_api.check_token_ttl(k.get("token_ttl")),
|
|
899
904
|
}
|
|
900
905
|
|
|
901
906
|
#: What the confirmation (and its refusal) names, where the command id alone would hide
|
|
@@ -924,6 +929,8 @@ _HANDLE_KEPT = frozenset(
|
|
|
924
929
|
"dashboard.figure.rows",
|
|
925
930
|
"dashboard.published.drill",
|
|
926
931
|
"dashboard.published.rows",
|
|
932
|
+
# The bake job's result does not name the chart; the handle's dashboard_id does.
|
|
933
|
+
"dashboard.live-chart.create",
|
|
927
934
|
}
|
|
928
935
|
)
|
|
929
936
|
|
|
@@ -990,6 +997,15 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
|
|
|
990
997
|
)
|
|
991
998
|
|
|
992
999
|
_check_sdk_rules(invocation.command_id, kwargs)
|
|
1000
|
+
if (
|
|
1001
|
+
invocation.project is not None
|
|
1002
|
+
and spec is not None
|
|
1003
|
+
and "project_id" not in kwargs
|
|
1004
|
+
and any(field.name == "project_id" for field in spec.fields)
|
|
1005
|
+
):
|
|
1006
|
+
# ``--project`` names the project a new board belongs to (live-chart create,
|
|
1007
|
+
# template apply, v3 generate); without it the server picks the source's.
|
|
1008
|
+
kwargs["project_id"] = invocation.project
|
|
993
1009
|
|
|
994
1010
|
policy = str(record.get("confirmation") or POLICY_NONE)
|
|
995
1011
|
target = next((str(value) for value in positionals.values()), None)
|
|
@@ -1005,7 +1021,7 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
|
|
|
1005
1021
|
invocation, policy=policy, action=action, target=str(auth.workspace_id)
|
|
1006
1022
|
)
|
|
1007
1023
|
data = service.call(_symbol(invocation), **kwargs)
|
|
1008
|
-
handle = data
|
|
1024
|
+
handle = data.model_dump(mode="json") if hasattr(data, "model_dump") else data
|
|
1009
1025
|
data = _resolve_job(service, invocation, data)
|
|
1010
1026
|
if invocation.command_id in _HANDLE_KEPT and isinstance(handle, dict):
|
|
1011
1027
|
# The job's results are keyed by descriptor id; the handle says which
|
|
@@ -1019,6 +1035,8 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
|
|
|
1019
1035
|
if invocation.command_id in _VALUED_COMMANDS:
|
|
1020
1036
|
data = _with_board_values(service, auth, positionals, data)
|
|
1021
1037
|
forget(service)
|
|
1038
|
+
if invocation.reveal_secrets and invocation.command_id in REVEAL_COMMANDS:
|
|
1039
|
+
data = Revealed(normalize(data, redact_secrets=False))
|
|
1022
1040
|
return data, _meta(invocation, auth.workspace_id)
|
|
1023
1041
|
|
|
1024
1042
|
|
|
@@ -464,6 +464,15 @@ def _dataset_status(service: Any, dataset_id: int) -> tuple[str, dict[str, Any]
|
|
|
464
464
|
)
|
|
465
465
|
|
|
466
466
|
|
|
467
|
+
#: An upload whose job finished without making any dataset.
|
|
468
|
+
NO_DATASET_STATUS = "no_dataset"
|
|
469
|
+
_NO_DATASET_MESSAGE = (
|
|
470
|
+
"The file was uploaded but no dataset was made from it. A PDF waits in the file list "
|
|
471
|
+
"as action_needed until its tables are extracted, which the CLI cannot do yet; do that "
|
|
472
|
+
"in the Mammoth app. Do not upload the file again."
|
|
473
|
+
)
|
|
474
|
+
|
|
475
|
+
|
|
467
476
|
def _upload_result(
|
|
468
477
|
value: Any, read_status: Callable[[int], tuple[str, dict[str, Any] | None, str | None]]
|
|
469
478
|
) -> dict[str, Any]:
|
|
@@ -505,6 +514,12 @@ def _upload_result(
|
|
|
505
514
|
result: dict[str, Any] = {"status": overall, "dataset_ids": ids, "datasets": datasets}
|
|
506
515
|
if len(ids) == 1:
|
|
507
516
|
result["dataset_id"] = ids[0]
|
|
517
|
+
if not ids:
|
|
518
|
+
# A PDF ends the upload job in ``action_needed`` with no dataset: its
|
|
519
|
+
# tables must be picked first (#255), so nothing here is ready.
|
|
520
|
+
result["status"] = NO_DATASET_STATUS
|
|
521
|
+
result["message"] = _NO_DATASET_MESSAGE
|
|
522
|
+
result["next_command"] = "mammoth file list"
|
|
508
523
|
return result
|
|
509
524
|
|
|
510
525
|
|
|
@@ -723,7 +723,16 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
723
723
|
"workflow.save-cancel-step": "cancel one step of a running workflow save stop a save step",
|
|
724
724
|
"view.export.runs": "export run history past runs of an export rows sent errors when it ran",
|
|
725
725
|
"view.export.rest-fill": "propose REST API export settings from an API docs page url",
|
|
726
|
-
"
|
|
726
|
+
"workspace.user.list": (
|
|
727
|
+
"list users members of the workspace or of one project with --project, their roles "
|
|
728
|
+
"and status, who has access, my role in a project"
|
|
729
|
+
),
|
|
730
|
+
# What was done to the view and what depends on it; column statistics are
|
|
731
|
+
# ``view data profile``.
|
|
732
|
+
"view.summary": (
|
|
733
|
+
"summary of what a dataview has had done to it and where it goes: pipeline steps "
|
|
734
|
+
"actions exports dashboards dependencies downstream, row and column counts"
|
|
735
|
+
),
|
|
727
736
|
"workspace.export-hosts.get": "hosts exports may send data to allowed export hosts policy",
|
|
728
737
|
"workspace.export-hosts.set": "restrict or allow the hosts exports may send data to",
|
|
729
738
|
"dashboard.email-updates.list": "email updates on dashboards I subscribe to in the workspace",
|
|
@@ -1228,11 +1237,16 @@ def _accepted_fields(record: dict[str, Any]) -> list[dict[str, Any]] | None:
|
|
|
1228
1237
|
tuple(str(item) for item in record.get("operation_ids", []))
|
|
1229
1238
|
)
|
|
1230
1239
|
path_fields = local_path_fields(record["command_id"], record.get("positionals", []))
|
|
1240
|
+
# A field an optional positional fills (``view summary VIEW_ID [DATASET_ID]``) is
|
|
1241
|
+
# resolved by the command when both are omitted, as the input schema says.
|
|
1242
|
+
fallbacks = {
|
|
1243
|
+
item.falls_back_to_field for item in contract.positionals if item.falls_back_to_field
|
|
1244
|
+
}
|
|
1231
1245
|
return [
|
|
1232
1246
|
{
|
|
1233
1247
|
"name": field.name,
|
|
1234
1248
|
"type": field.type_name,
|
|
1235
|
-
"required": field.required,
|
|
1249
|
+
"required": field.required and field.name not in fallbacks,
|
|
1236
1250
|
"enum": field.enum_values,
|
|
1237
1251
|
"default": field.default_value if field.has_default else None,
|
|
1238
1252
|
"schema": (
|
|
@@ -2359,6 +2373,10 @@ def _inline_call_detail(entries: list[dict[str, Any]]) -> None:
|
|
|
2359
2373
|
record = command_by_id(entry["command_id"])
|
|
2360
2374
|
if record is None:
|
|
2361
2375
|
continue
|
|
2376
|
+
entry["positionals"] = [
|
|
2377
|
+
{key: item[key] for key in ("name", "metavar", "type", "required")}
|
|
2378
|
+
for item in _positionals(entry["command_id"])
|
|
2379
|
+
]
|
|
2362
2380
|
fields = _compact_accepted_fields(record)
|
|
2363
2381
|
if fields is not None:
|
|
2364
2382
|
entry["accepted_fields"] = fields
|
|
@@ -9,6 +9,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
9
9
|
CODE_INVALID_ARGUMENT,
|
|
10
10
|
CODE_MISSING_ARGUMENT,
|
|
11
11
|
CODE_MISSING_FIELD,
|
|
12
|
+
CODE_RESOURCE_NOT_FOUND,
|
|
12
13
|
CODE_SDK_SYMBOL_UNRESOLVED,
|
|
13
14
|
EXIT_USAGE,
|
|
14
15
|
CliError,
|
|
@@ -188,6 +189,38 @@ def _view_parent_dataset_id(service: Any, invocation: Invocation, view_id: int)
|
|
|
188
189
|
return dataset_id
|
|
189
190
|
|
|
190
191
|
|
|
192
|
+
def _explain_swapped_ids(
|
|
193
|
+
service: Any, error: CliError, invocation: Invocation, view_id: int, dataset_id: int
|
|
194
|
+
) -> None:
|
|
195
|
+
"""Raise a clear refusal when a not-found call was given DATASET_ID then VIEW_ID.
|
|
196
|
+
|
|
197
|
+
The arguments are ``VIEW_ID [DATASET_ID]``; passing them the other way round
|
|
198
|
+
only produces a bare 404. If the first number is really a view of the second,
|
|
199
|
+
say so. Any other outcome leaves the original error to be re-raised.
|
|
200
|
+
"""
|
|
201
|
+
if error.code != CODE_RESOURCE_NOT_FOUND:
|
|
202
|
+
return
|
|
203
|
+
try:
|
|
204
|
+
parent = int(service.call(_FIND_DATASET_SYMBOL, dataview_id=dataset_id))
|
|
205
|
+
except CliError:
|
|
206
|
+
return
|
|
207
|
+
if parent != view_id:
|
|
208
|
+
return
|
|
209
|
+
raise CliError(
|
|
210
|
+
code=CODE_INVALID_ARGUMENT,
|
|
211
|
+
message=(
|
|
212
|
+
f"{view_id} is a dataset id and {dataset_id} is its view; "
|
|
213
|
+
"the order is VIEW_ID DATASET_ID"
|
|
214
|
+
),
|
|
215
|
+
exit_status=EXIT_USAGE,
|
|
216
|
+
hint=(
|
|
217
|
+
f"Run it again as: mammoth {invocation.command_path} {dataset_id} {view_id}"
|
|
218
|
+
" (same options)"
|
|
219
|
+
),
|
|
220
|
+
details={"view_id": dataset_id, "dataset_id": view_id},
|
|
221
|
+
) from error
|
|
222
|
+
|
|
223
|
+
|
|
191
224
|
def _verified_dataset_id(
|
|
192
225
|
service: Any, invocation: Invocation, view_id: int, document: dict[str, Any]
|
|
193
226
|
) -> int:
|
|
@@ -199,7 +232,12 @@ def _verified_dataset_id(
|
|
|
199
232
|
explicit = _int_positional_at(invocation, 1, "dataset id")
|
|
200
233
|
if explicit is None and document.get(_DATASET_ID_FIELD) is not None:
|
|
201
234
|
explicit = _int_field(document[_DATASET_ID_FIELD], _DATASET_ID_FIELD)
|
|
202
|
-
|
|
235
|
+
try:
|
|
236
|
+
real = _view_parent_dataset_id(service, invocation, view_id)
|
|
237
|
+
except CliError as exc:
|
|
238
|
+
if explicit is not None:
|
|
239
|
+
_explain_swapped_ids(service, exc, invocation, view_id, explicit)
|
|
240
|
+
raise
|
|
203
241
|
if explicit is not None:
|
|
204
242
|
_check_parent_matches(view_id, explicit, real)
|
|
205
243
|
return real
|
|
@@ -6,10 +6,10 @@ from typing import Any
|
|
|
6
6
|
|
|
7
7
|
from mammoth_cli.commands.view._common import (
|
|
8
8
|
_COLUMNS_KEY,
|
|
9
|
-
_FIND_DATASET_SYMBOL,
|
|
10
9
|
_QUERY_DATA_SYMBOL,
|
|
11
10
|
_ROWS_KEY,
|
|
12
11
|
HandlerResult,
|
|
12
|
+
_explain_swapped_ids,
|
|
13
13
|
_forward_optional,
|
|
14
14
|
_int_field,
|
|
15
15
|
_page_offset,
|
|
@@ -27,8 +27,6 @@ from mammoth_cli.commands.view.columns import (
|
|
|
27
27
|
_compile_query_filters,
|
|
28
28
|
)
|
|
29
29
|
from mammoth_cli.errors.envelope import (
|
|
30
|
-
CODE_INVALID_ARGUMENT,
|
|
31
|
-
CODE_RESOURCE_NOT_FOUND,
|
|
32
30
|
EXIT_USAGE,
|
|
33
31
|
CliError,
|
|
34
32
|
)
|
|
@@ -66,7 +64,7 @@ def view_data_get(invocation: Invocation) -> HandlerResult:
|
|
|
66
64
|
service, invocation, auth.workspace_id, dataset_id, view_id, project_id
|
|
67
65
|
)
|
|
68
66
|
except CliError as exc:
|
|
69
|
-
_explain_swapped_ids(service, exc, view_id, dataset_id)
|
|
67
|
+
_explain_swapped_ids(service, exc, invocation, view_id, dataset_id)
|
|
70
68
|
raise
|
|
71
69
|
mapping, types, _currencies = _profile_of_info(info)
|
|
72
70
|
kwargs: dict[str, Any] = {
|
|
@@ -199,33 +197,6 @@ def _close_last_page(data: Any, offset: Any) -> Any:
|
|
|
199
197
|
return closed
|
|
200
198
|
|
|
201
199
|
|
|
202
|
-
def _explain_swapped_ids(service: Any, error: CliError, view_id: int, dataset_id: int) -> None:
|
|
203
|
-
"""Raise a clear refusal when a not-found read was given DATASET_ID then VIEW_ID.
|
|
204
|
-
|
|
205
|
-
The arguments are ``VIEW_ID [DATASET_ID]``; passing them the other way round
|
|
206
|
-
only produces a bare 404. If the first number is really a view of the second,
|
|
207
|
-
say so. Any other outcome leaves the original error to be re-raised.
|
|
208
|
-
"""
|
|
209
|
-
if error.code != CODE_RESOURCE_NOT_FOUND:
|
|
210
|
-
return
|
|
211
|
-
try:
|
|
212
|
-
parent = int(service.call(_FIND_DATASET_SYMBOL, dataview_id=dataset_id))
|
|
213
|
-
except CliError:
|
|
214
|
-
return
|
|
215
|
-
if parent != view_id:
|
|
216
|
-
return
|
|
217
|
-
raise CliError(
|
|
218
|
-
code=CODE_INVALID_ARGUMENT,
|
|
219
|
-
message=(
|
|
220
|
-
f"{view_id} is a dataset id and {dataset_id} is its view; "
|
|
221
|
-
"the order is VIEW_ID DATASET_ID"
|
|
222
|
-
),
|
|
223
|
-
exit_status=EXIT_USAGE,
|
|
224
|
-
hint=f"Run it again as: mammoth view data get {dataset_id} {view_id}",
|
|
225
|
-
details={"view_id": dataset_id, "dataset_id": view_id},
|
|
226
|
-
) from error
|
|
227
|
-
|
|
228
|
-
|
|
229
200
|
#: Rows a plain ``view data get`` returns unless ``limit`` says otherwise.
|
|
230
201
|
_DATA_GET_DEFAULT_LIMIT = 50
|
|
231
202
|
|
|
@@ -87,7 +87,7 @@ def view_export_csv(invocation: Invocation) -> HandlerResult:
|
|
|
87
87
|
def view_export_download(invocation: Invocation) -> HandlerResult:
|
|
88
88
|
"""Download a dataview to a local file as csv, xlsx, json, ndjson, xml, yaml or parquet.
|
|
89
89
|
|
|
90
|
-
Same as ``view export csv`` otherwise: ``--input '{"
|
|
90
|
+
Same as ``view export csv`` otherwise: ``--input '{"file_type": "xlsx", "output_path":
|
|
91
91
|
"out.xlsx"}'``; the default name carries the format's extension; an existing file is not
|
|
92
92
|
replaced unless ``--overwrite``; embedded, the signed download URL is returned instead.
|
|
93
93
|
"""
|
|
@@ -251,6 +251,7 @@ def view_export_rest_fill(invocation: Invocation) -> HandlerResult:
|
|
|
251
251
|
|
|
252
252
|
Mammoth's server fetches ``docs_url`` and reads it to propose the form values (never
|
|
253
253
|
credentials). Nothing is configured or sent: the result is a suggestion to review.
|
|
254
|
+
It always waits for the job, for at most ``--job-timeout`` seconds.
|
|
254
255
|
"""
|
|
255
256
|
project_id = require_project(invocation)
|
|
256
257
|
dataview_id = _require_int_positional_at(invocation, 0, "dataview id")
|
|
@@ -202,9 +202,11 @@ def workspace_get(invocation: Invocation) -> HandlerResult:
|
|
|
202
202
|
def workspace_list(invocation: Invocation) -> HandlerResult:
|
|
203
203
|
"""List accessible workspaces."""
|
|
204
204
|
document = invocation.load_input() or {}
|
|
205
|
-
|
|
205
|
+
kwargs: dict[str, Any] = {"limit": int(document.get("limit", 100))}
|
|
206
|
+
if document.get("fields") is not None:
|
|
207
|
+
kwargs["fields"] = str(document["fields"])
|
|
206
208
|
with open_service(invocation) as (service, auth):
|
|
207
|
-
data = service.call(_symbol(invocation),
|
|
209
|
+
data = service.call(_symbol(invocation), **kwargs)
|
|
208
210
|
return data, _meta(invocation, auth.workspace_id)
|
|
209
211
|
|
|
210
212
|
|
|
@@ -353,11 +355,14 @@ def workspace_user_list(invocation: Invocation) -> HandlerResult:
|
|
|
353
355
|
"""List users in the client's own workspace, with their roles and status.
|
|
354
356
|
|
|
355
357
|
Asks for the backend's ``__full`` field set unless ``--input`` names another,
|
|
356
|
-
so each user carries ``user_roles`` and ``status``.
|
|
358
|
+
so each user carries ``user_roles`` and ``status``. An explicit ``--project``
|
|
359
|
+
keeps only that project's members (a saved default project does not).
|
|
357
360
|
"""
|
|
358
361
|
document = invocation.load_input() or {}
|
|
359
362
|
kwargs: dict[str, Any] = {"fields": _USER_LIST_FIELDS}
|
|
360
|
-
_forward_optional(document, kwargs, ("fields",
|
|
363
|
+
_forward_optional(document, kwargs, ("fields",))
|
|
364
|
+
if invocation.project is not None:
|
|
365
|
+
kwargs["project_id"] = invocation.project
|
|
361
366
|
with open_service(invocation) as (service, auth):
|
|
362
367
|
data = service.call(_symbol(invocation), **kwargs)
|
|
363
368
|
return data, _meta(invocation, auth.workspace_id)
|
|
@@ -59,6 +59,7 @@ CODE_CONFIRMATION_REQUIRED = "confirmation_required"
|
|
|
59
59
|
CODE_CONFIRMATION_DECLINED = "confirmation_declined"
|
|
60
60
|
CODE_AUTHENTICATION_FAILED = "authentication_failed"
|
|
61
61
|
CODE_AUTHORIZATION_REQUIRED = "authorization_required"
|
|
62
|
+
CODE_PLAN_LIMIT = "plan_limit"
|
|
62
63
|
CODE_CONFLICT = "conflict"
|
|
63
64
|
CODE_RETRYABLE = "retryable_error"
|
|
64
65
|
CODE_OUTCOME_UNKNOWN = "outcome_unknown"
|
|
@@ -111,6 +112,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
111
112
|
"feature_unavailable": "Mammoth no longer offers this feature.",
|
|
112
113
|
"export_failed": "The export ran but ended in an error.",
|
|
113
114
|
"export_not_found": "No export run was found for that request.",
|
|
115
|
+
"plan_limit": "The workspace's plan or usage limit doesn't allow this.",
|
|
114
116
|
"pin_not_recorded": "The version pin could not be saved, so nothing was changed.",
|
|
115
117
|
"has_dependents": "Other items still depend on this, so it was not deleted.",
|
|
116
118
|
"delete_not_applied": "The delete was accepted but the item is still there.",
|
|
@@ -223,7 +223,9 @@ def normalize(value: Any, *, redact_secrets: bool = True) -> Any:
|
|
|
223
223
|
result: dict[str, Any] = {}
|
|
224
224
|
for key in sorted(value, key=str):
|
|
225
225
|
str_key = str(key)
|
|
226
|
-
|
|
226
|
+
# A boolean (``has_signing_secret``) only says whether a credential
|
|
227
|
+
# exists; it never is one.
|
|
228
|
+
if redact_secrets and _is_secret_key(str_key) and not isinstance(value[key], bool):
|
|
227
229
|
result[str_key] = REDACTED
|
|
228
230
|
else:
|
|
229
231
|
result[str_key] = normalize(value[key], redact_secrets=redact_secrets)
|
|
@@ -91,6 +91,9 @@ class Invocation:
|
|
|
91
91
|
#: ``--full`` on a compacted dashboard write: return the whole response
|
|
92
92
|
#: (:mod:`mammoth_cli.runtime.compact`).
|
|
93
93
|
full_output: bool = False
|
|
94
|
+
#: ``--reveal`` on a command that returns a once-shown credential: print it
|
|
95
|
+
#: unmasked (:mod:`mammoth_cli.runtime.reveal`).
|
|
96
|
+
reveal_secrets: bool = False
|
|
94
97
|
#: ``last_modified_time`` of each export on the view, read before a pipeline write;
|
|
95
98
|
#: verify waits for one to move (the backend re-validates exports after the run).
|
|
96
99
|
exports_before: dict[int, str] | None = field(default=None, repr=False, compare=False)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""``--reveal`` on the commands whose result is a credential the API shows once.
|
|
2
|
+
|
|
3
|
+
``dashboard embed secret rotate`` returns the new workspace signing secret and
|
|
4
|
+
``dashboard embed preview-token create`` a token for the embed simulator. Key
|
|
5
|
+
redaction masks both (``secret``, ``token``), which leaves a rotation with no
|
|
6
|
+
usable secret. They stay masked by default, so a log or a shared transcript
|
|
7
|
+
never holds them; ``--reveal`` prints them, the way ``client-app create`` shows
|
|
8
|
+
its token.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
REVEAL_FLAG = "--reveal"
|
|
14
|
+
|
|
15
|
+
#: The commands that print their credential when given ``--reveal``.
|
|
16
|
+
REVEAL_COMMANDS = frozenset(
|
|
17
|
+
{
|
|
18
|
+
"dashboard.embed.secret.rotate",
|
|
19
|
+
"dashboard.embed.preview-token.create",
|
|
20
|
+
}
|
|
21
|
+
)
|
|
@@ -39,6 +39,7 @@ from typing import Any
|
|
|
39
39
|
|
|
40
40
|
from mammoth_cli.errors.envelope import EXIT_USAGE, CliError
|
|
41
41
|
from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG
|
|
42
|
+
from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
|
|
42
43
|
from mammoth_cli.services.argspec import FieldSpec
|
|
43
44
|
from mammoth_cli.services.command_contract import (
|
|
44
45
|
resolve_command_contract,
|
|
@@ -61,6 +62,8 @@ COMMAND_FLAGS: dict[str, frozenset[str]] = {
|
|
|
61
62
|
"run": frozenset({"--continue"}),
|
|
62
63
|
# The compacted dashboard writes: --full returns the whole response.
|
|
63
64
|
**{command_id: frozenset({FULL_FLAG}) for command_id in COMPACT_COMMANDS},
|
|
65
|
+
# A once-shown credential is masked unless --reveal asks for it.
|
|
66
|
+
**{command_id: frozenset({REVEAL_FLAG}) for command_id in REVEAL_COMMANDS},
|
|
64
67
|
}
|
|
65
68
|
|
|
66
69
|
CODE_UNKNOWN_OPTION = "unknown_option"
|
|
@@ -93,6 +93,8 @@ _UNSETTLED_REASON = (
|
|
|
93
93
|
|
|
94
94
|
#: A write the CLI skipped because it would change nothing (see ``view transform``).
|
|
95
95
|
_NO_CHANGE_STATUS = "no_change"
|
|
96
|
+
#: ``file upload``'s status when its job made no dataset (``commands.file.NO_DATASET_STATUS``).
|
|
97
|
+
_NO_DATASET_STATUS = "no_dataset"
|
|
96
98
|
|
|
97
99
|
|
|
98
100
|
def with_verify(data: Any, invocation: Invocation | None = None) -> Any:
|
|
@@ -351,7 +353,7 @@ def _verify_and_reason(
|
|
|
351
353
|
``reason`` is set whenever ``verified`` is ``False`` (a failure or a
|
|
352
354
|
no-op) and for a staged draft; it is ``None`` for an ordinary success.
|
|
353
355
|
A failure never sets ``needs_user`` -- see :func:`_needs_user`, which
|
|
354
|
-
covers only the
|
|
356
|
+
covers only the outcomes serious enough to interrupt the caller.
|
|
355
357
|
"""
|
|
356
358
|
if data.get("changed") is False:
|
|
357
359
|
message = data.get("message")
|
|
@@ -431,7 +433,7 @@ def _needs_user(
|
|
|
431
433
|
rows_before: int | None,
|
|
432
434
|
rows_after: int | None,
|
|
433
435
|
) -> str | None:
|
|
434
|
-
"""The
|
|
436
|
+
"""The few outcomes worth interrupting the caller for.
|
|
435
437
|
|
|
436
438
|
``needs_user`` means "a serious outcome the user must hear about before
|
|
437
439
|
anything is built on it" -- never "something went wrong that you can
|
|
@@ -443,6 +445,10 @@ def _needs_user(
|
|
|
443
445
|
"""
|
|
444
446
|
if not verified:
|
|
445
447
|
return None
|
|
448
|
+
if data.get("status") == _NO_DATASET_STATUS:
|
|
449
|
+
# An upload that made no dataset (a PDF awaiting table extraction).
|
|
450
|
+
message = data.get("message")
|
|
451
|
+
return message if isinstance(message, str) else "The upload made no dataset."
|
|
446
452
|
if rows_after == 0 and isinstance(rows_before, int) and rows_before > 0:
|
|
447
453
|
return f"The change left the view with no rows (was {rows_before})."
|
|
448
454
|
join_check = data.get("join_check")
|
|
@@ -70,10 +70,14 @@ class FieldSpec:
|
|
|
70
70
|
|
|
71
71
|
@property
|
|
72
72
|
def enum_values(self) -> list[str] | None:
|
|
73
|
-
"""The member values, if this field's type is a string enum."""
|
|
73
|
+
"""The member values, if this field's type is a string enum or a ``Literal`` of them."""
|
|
74
74
|
target = self.resolved_type
|
|
75
75
|
if isinstance(target, type) and issubclass(target, enum.Enum):
|
|
76
76
|
return [member.value for member in target]
|
|
77
|
+
if get_origin(target) is typing.Literal:
|
|
78
|
+
values = get_args(target)
|
|
79
|
+
if values and all(isinstance(value, str) for value in values):
|
|
80
|
+
return list(values)
|
|
77
81
|
return None
|
|
78
82
|
|
|
79
83
|
@property
|
|
@@ -62,6 +62,9 @@ _HANDLER_OWNED_FIELDS: dict[str, frozenset[str]] = {
|
|
|
62
62
|
# ``job get`` is an immediate status read; only wait commands implement
|
|
63
63
|
# the CLI's timeout/polling behavior.
|
|
64
64
|
"job.get": frozenset({"timeout"}),
|
|
65
|
+
# ``view export rest-fill`` always waits for its job, bounded by ``--job-timeout``
|
|
66
|
+
# (``--return-running`` hands back the running job); the SDK's own switches are not inputs.
|
|
67
|
+
"view.export.rest-fill": frozenset({"wait", "timeout"}),
|
|
65
68
|
# ``PipelineAPI.get_draft_status`` carries a legacy ``dataset_id`` alongside
|
|
66
69
|
# the ``dataview_id`` the handler forwards from the view positional; the
|
|
67
70
|
# handler never reads it, so it must not be advertised as an --input field.
|
|
@@ -105,6 +108,10 @@ _EXAMPLE_INPUT_HINTS: dict[str, dict[str, Any]] = {
|
|
|
105
108
|
# bare ``<field>``: the values are the ones the API documents (OpenAPI enums, or
|
|
106
109
|
# the SDK method's own docstring/validator), so each example is a call that works.
|
|
107
110
|
"agent.message.set-request-kind": {"request_kind": "ask"},
|
|
111
|
+
# The sampled 1 is outside the server's 60..3600 seconds (#283).
|
|
112
|
+
"dashboard.embed.lifetime.set": {"token_ttl": 900},
|
|
113
|
+
# The format is the point of this command; csv has its own (#282).
|
|
114
|
+
"view.export.download": {"file_type": "xml"},
|
|
108
115
|
"support.plan.update-entitlements": {"values": {"dashboardBranding": "no_branding"}},
|
|
109
116
|
# Server-master routes: drill, rows behind a mark, describe-a-chart, chart types,
|
|
110
117
|
# file routing and connector drafts.
|