mammoth-cli 2.2.98__tar.gz → 2.2.100__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.98 → mammoth_cli-2.2.100}/PKG-INFO +2 -2
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/app.py +9 -7
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +3 -4
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/doctor.py +40 -1
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/registry.py +11 -2
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/schema.py +56 -3
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/_common.py +39 -1
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/data_read.py +2 -31
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/compact.py +29 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/strict.py +4 -4
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/pyproject.toml +2 -2
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/view.yaml +10 -12
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/compiled/commands.json +3 -3
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/.gitignore +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/LICENSE +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/README.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capabilities.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-embed.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-published.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/how.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/run.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/_lazy.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/capabilities.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/help_summaries.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/how.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/resolve.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/run.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/aggregate.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/checks.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/column_checks.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/columns.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/derivatives.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/explore.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/export.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/export_dataset.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/export_specialized.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/formatting.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/join_check.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/lifecycle.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/listing.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/pipeline.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/settle.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/upload.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_drivers.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_explore.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_forecast.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/keyring_backend.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/oauth.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/oauth_loopback.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/limitations.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/next_commands.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/recipes.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/embed_pool.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/labels.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/linecapture.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/local_paths.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/locked_files.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/next_commands.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/opens.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/reveal.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/shared.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/token_scope.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/view_dataset_cache.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/append_blank_columns.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/column_type_guard.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_figures.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/delete_check.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_card_edit.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_cards.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_to_figure.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_to_image.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/field_enums.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/folder_ids.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/held_change.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/job_outcome.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/local_files.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/paging.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/period_analysis.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/poll.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/read_memo.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/schema_diff.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/suggest.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/view_analysis.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/view_variants.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/capabilities.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/collection.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/how.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/resolve.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/run.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/token.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/compiled/openapi-operations.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/compiled/sdk-methods.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/server-status.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/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.100
|
|
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.51
|
|
23
23
|
Requires-Dist: platformdirs<5,>=4.10
|
|
24
24
|
Requires-Dist: pydantic<3,>=2.12.5
|
|
25
25
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -1201,7 +1201,7 @@ def _execute(invocation: Invocation) -> None:
|
|
|
1201
1201
|
# resolving the mutable selected-profile pointer after an interrupt.
|
|
1202
1202
|
from mammoth_cli.context import profiles
|
|
1203
1203
|
from mammoth_cli.runtime import executor, validate
|
|
1204
|
-
from mammoth_cli.runtime.compact import
|
|
1204
|
+
from mammoth_cli.runtime.compact import FULL_FLAG, FULL_FLAG_COMMANDS, with_compact
|
|
1205
1205
|
from mammoth_cli.runtime.confirm import refuse_mismatched_confirm
|
|
1206
1206
|
from mammoth_cli.runtime.dataset_health import with_dataset_health
|
|
1207
1207
|
from mammoth_cli.runtime.intent_only import refuse_hand_crafted_write
|
|
@@ -1214,7 +1214,7 @@ def _execute(invocation: Invocation) -> None:
|
|
|
1214
1214
|
|
|
1215
1215
|
if invocation.profile is None:
|
|
1216
1216
|
invocation = replace(invocation, profile=profiles.get_selected(), profile_is_default=True)
|
|
1217
|
-
if invocation.command_id in
|
|
1217
|
+
if invocation.command_id in FULL_FLAG_COMMANDS and FULL_FLAG in invocation.extra_args:
|
|
1218
1218
|
invocation = replace(
|
|
1219
1219
|
invocation,
|
|
1220
1220
|
extra_args=[arg for arg in invocation.extra_args if arg != FULL_FLAG],
|
|
@@ -1508,8 +1508,12 @@ def _command_help(command_id: str, record: dict[str, Any] | None) -> str | None:
|
|
|
1508
1508
|
nested = nested_choices_help(command_id)
|
|
1509
1509
|
if nested:
|
|
1510
1510
|
parts.append(nested)
|
|
1511
|
-
from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG
|
|
1511
|
+
from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG, TRIMMED_READ_COMMANDS
|
|
1512
1512
|
|
|
1513
|
+
if command_id in TRIMMED_READ_COMMANDS:
|
|
1514
|
+
parts.append(
|
|
1515
|
+
f"The result leaves out detail you rarely need. Pass {FULL_FLAG} for all of it."
|
|
1516
|
+
)
|
|
1513
1517
|
if command_id in COMPACT_COMMANDS:
|
|
1514
1518
|
parts.append(
|
|
1515
1519
|
"The result is compact: ids, checks, verify and a canvas summary. "
|
|
@@ -1794,12 +1798,10 @@ def _load_top_level_group(name: str) -> Any:
|
|
|
1794
1798
|
# table to :func:`_command_help` so it cannot drift.
|
|
1795
1799
|
_ROOT_LEAF_HELP: dict[str, str] = {
|
|
1796
1800
|
"capabilities": (
|
|
1797
|
-
"List what the CLI cannot do yet, and what to do instead
|
|
1798
|
-
"\n\nExample: mammoth capabilities"
|
|
1801
|
+
"List what the CLI cannot do yet, and what to do instead.\n\nExample: mammoth capabilities"
|
|
1799
1802
|
),
|
|
1800
1803
|
"calc": (
|
|
1801
|
-
"Evaluate one arithmetic expression exactly
|
|
1802
|
-
"\n\nExample: mammoth calc '2063664 - 1917815'"
|
|
1804
|
+
"Evaluate one arithmetic expression exactly.\n\nExample: mammoth calc '2063664 - 1917815'"
|
|
1803
1805
|
),
|
|
1804
1806
|
"doctor": (
|
|
1805
1807
|
"Run environment and connectivity diagnostics."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.2.
|
|
3
|
+
version: 2.2.100
|
|
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
|
|
|
@@ -92,8 +92,7 @@ mammoth schema find "join two datasets; remove duplicates; build a dashboard"
|
|
|
92
92
|
| Deliver the rows | `view export csv`, `view export postgres`, `view export dataset` |
|
|
93
93
|
| Run something on a schedule or on new data (refresh, append, alert) | `automation create`: a condition (`at_specific_time`, new file in a folder, ...) and tasks (`run_data_retrieval`, `append_data`, `send_an_alert`, `pull_cloud_files`). `schedule create` only pulls a connector's data. An upload can't refresh; a URL dataset: `dataset refresh` on demand, never on a schedule; say so. Recipe: [recurring work](references/recipes/scheduling.md) |
|
|
94
94
|
|
|
95
|
-
Call a find result
|
|
96
|
-
`agent_example`. Before concluding the CLI cannot do something the web app
|
|
95
|
+
Call a find result from its `agent_example` and `accepted_fields`. Before concluding the CLI cannot do something the web app
|
|
97
96
|
does, run `mammoth capabilities` (known gaps) and check
|
|
98
97
|
`view transform --help` and "View settings, and what has no
|
|
99
98
|
command" in [about Mammoth](references/about-mammoth.md). Do not switch to
|
|
@@ -142,7 +141,7 @@ your report. If no column links the files, ask before you combine them.
|
|
|
142
141
|
- Ids are positionals; request fields are one `--input '{...}'` document;
|
|
143
142
|
no per-field flags (`project create NAME`, not `--name`).
|
|
144
143
|
- `COMMAND --help` lists input fields and allowed values; `schema find WORDS` inlines
|
|
145
|
-
`accepted_fields`/`agent_example` for top matches, else `schema get
|
|
144
|
+
`accepted_fields`/`agent_example` for top matches (`--full`: all), else `schema get
|
|
146
145
|
ID,ID` (one call; `--input '{"full": true}'` for all
|
|
147
146
|
fields); `schema list`/`schema list view` list families.
|
|
148
147
|
- Uploads return a **dataset** id; transforms, joins, exports and previews
|
|
@@ -18,9 +18,13 @@ from pathlib import Path
|
|
|
18
18
|
from typing import Any, cast
|
|
19
19
|
from urllib.parse import urlsplit
|
|
20
20
|
|
|
21
|
+
from mammoth.client import server_health
|
|
22
|
+
from mammoth.exceptions import MammothAPIError
|
|
23
|
+
|
|
21
24
|
from mammoth_cli import __version__
|
|
22
25
|
from mammoth_cli.context import credentials, profiles
|
|
23
|
-
from mammoth_cli.context.
|
|
26
|
+
from mammoth_cli.context.endpoint import resolve_base_url
|
|
27
|
+
from mammoth_cli.context.resolver import SERVER_PREFIX_ENV, ResolvedAuth, resolve_auth
|
|
24
28
|
from mammoth_cli.errors.envelope import CliError
|
|
25
29
|
from mammoth_cli.runtime import embedded, runlog, updates
|
|
26
30
|
from mammoth_cli.runtime.invocation import Invocation
|
|
@@ -41,6 +45,34 @@ def _check(name: str, ok: bool, detail: str) -> dict[str, Any]:
|
|
|
41
45
|
return {"name": name, "ok": ok, "detail": detail}
|
|
42
46
|
|
|
43
47
|
|
|
48
|
+
_SERVER_TIMEOUT_SECONDS = 10.0
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _server_base_url(profile_name: str, resolved: str | None) -> str:
|
|
52
|
+
"""The API base url to probe: the resolved one, else from env or profile, no login needed."""
|
|
53
|
+
if resolved is not None:
|
|
54
|
+
return resolved
|
|
55
|
+
prefix = os.environ.get(SERVER_PREFIX_ENV, "").strip() or None
|
|
56
|
+
if prefix is None:
|
|
57
|
+
record = profiles.get_profile(profile_name)
|
|
58
|
+
prefix = record.server_prefix if record is not None else None
|
|
59
|
+
return resolve_base_url(prefix)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _check_server(base_url: str, timeout: float = _SERVER_TIMEOUT_SECONDS) -> dict[str, Any]:
|
|
63
|
+
"""Probe the public ``/health`` route (no credentials) and report status and latency."""
|
|
64
|
+
try:
|
|
65
|
+
health = server_health(base_url, timeout)
|
|
66
|
+
except MammothAPIError as error:
|
|
67
|
+
return _check("server", False, str(error))
|
|
68
|
+
status = health["status_code"]
|
|
69
|
+
ok = 200 <= status < 300
|
|
70
|
+
detail = (
|
|
71
|
+
f"healthy in {health['latency_ms']} ms" if ok else f"HTTP {status} from {base_url}/health"
|
|
72
|
+
)
|
|
73
|
+
return {**_check("server", ok, detail), **health}
|
|
74
|
+
|
|
75
|
+
|
|
44
76
|
def _check_not_applicable(name: str) -> dict[str, Any]:
|
|
45
77
|
"""A check that has no meaning in an embedded call; it never fails doctor."""
|
|
46
78
|
return {
|
|
@@ -326,6 +358,13 @@ def doctor(invocation: Invocation) -> HandlerResult:
|
|
|
326
358
|
endpoint_detail = error.code
|
|
327
359
|
auth_error_code = error.code
|
|
328
360
|
checks.append(_check("endpoint", auth_ok, endpoint_detail))
|
|
361
|
+
try:
|
|
362
|
+
server_check = _check_server(
|
|
363
|
+
_server_base_url(profile_name, endpoint_detail if auth_ok else None)
|
|
364
|
+
)
|
|
365
|
+
except CliError as error:
|
|
366
|
+
server_check = _check("server", False, f"no server to probe: {error.code}")
|
|
367
|
+
checks.append(server_check)
|
|
329
368
|
|
|
330
369
|
connection_ok = False
|
|
331
370
|
connection_detail = "not attempted"
|
|
@@ -205,11 +205,19 @@ def _cap_inline_detail(result: dict[str, Any], keep: int) -> None:
|
|
|
205
205
|
entry.pop("agent_example", None)
|
|
206
206
|
|
|
207
207
|
|
|
208
|
+
def _find_output(result: dict[str, Any], invocation: Invocation) -> dict[str, Any]:
|
|
209
|
+
"""*result* cut to what picks and calls a command, unless ``--full``."""
|
|
210
|
+
from mammoth_cli.commands import schema as schema_cmd
|
|
211
|
+
|
|
212
|
+
return result if invocation.full_output else schema_cmd.trim_find_result(result)
|
|
213
|
+
|
|
214
|
+
|
|
208
215
|
def _schema_find(invocation: Invocation) -> HandlerResult:
|
|
209
216
|
from mammoth_cli.commands import schema as schema_cmd
|
|
217
|
+
from mammoth_cli.runtime.compact import FULL_FLAG
|
|
210
218
|
from mammoth_cli.runtime.strict import COMMAND_FLAGS
|
|
211
219
|
|
|
212
|
-
flags = COMMAND_FLAGS["schema.find"]
|
|
220
|
+
flags = COMMAND_FLAGS["schema.find"] - {FULL_FLAG}
|
|
213
221
|
words = [str(invocation.bound_input().get("query") or ""), *map(str, invocation.extra_args)]
|
|
214
222
|
if any(word in flags for word in words):
|
|
215
223
|
# 'schema find --unsupported [WORDS]': what the CLI cannot do yet.
|
|
@@ -221,7 +229,7 @@ def _schema_find(invocation: Invocation) -> HandlerResult:
|
|
|
221
229
|
if not query.strip():
|
|
222
230
|
raise _EMPTY_QUERY_ERROR
|
|
223
231
|
if ";" not in query:
|
|
224
|
-
return schema_cmd.find_schemas(query), {}
|
|
232
|
+
return _find_output(schema_cmd.find_schemas(query), invocation), {}
|
|
225
233
|
# Several goals in one call ("join customers onto orders; remove
|
|
226
234
|
# duplicate rows; build a dashboard"): run the existing single-goal
|
|
227
235
|
# search per goal instead of round-tripping once per goal.
|
|
@@ -245,6 +253,7 @@ def _schema_find(invocation: Invocation) -> HandlerResult:
|
|
|
245
253
|
# several candidates.
|
|
246
254
|
for result in results:
|
|
247
255
|
_cap_inline_detail(result, 1)
|
|
256
|
+
results = [_find_output(result, invocation) for result in results]
|
|
248
257
|
return {
|
|
249
258
|
"goals": [{"goal": goal, **result} for goal, result in zip(goals, results, strict=True)]
|
|
250
259
|
}, {}
|
|
@@ -530,8 +530,7 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
530
530
|
# complete periods and gives a range. Generic words (will, estimate, next,
|
|
531
531
|
# month) are left out: each would make other goals need this text to match.
|
|
532
532
|
"view.data.forecast": (
|
|
533
|
-
"forecast forecasts forecasting projection projections projected predict prediction "
|
|
534
|
-
"future"
|
|
533
|
+
"forecast forecasts forecasting projection projections projected predict prediction future"
|
|
535
534
|
),
|
|
536
535
|
# What a term means for one dataset (gap proposal P13): said once, used by
|
|
537
536
|
# every chat on it. "remember that churned means" is a definition, not a
|
|
@@ -1193,6 +1192,10 @@ _NO_MATCH_HINT_WITH_SUGGESTIONS = (
|
|
|
1193
1192
|
"No single command matched every word, but 'suggestions' lists the closest candidates "
|
|
1194
1193
|
"-- each with its own matched_terms. Try one of those before rephrasing."
|
|
1195
1194
|
)
|
|
1195
|
+
_NO_MATCH_HINT_PARTIAL = (
|
|
1196
|
+
"No single command matched every word; 'matches' lists the closest candidates "
|
|
1197
|
+
"(partial: true) -- each with its own matched_terms. Try one of those before rephrasing."
|
|
1198
|
+
)
|
|
1196
1199
|
_NO_MATCH_HINT_NO_SUGGESTIONS = (
|
|
1197
1200
|
"No command matched any word; try fewer or other words. 'mammoth view transform --help' "
|
|
1198
1201
|
"lists every data transformation (join, pivot, filter, dedupe, math, ...), and 'mammoth "
|
|
@@ -2215,7 +2218,9 @@ def _schema_common(record: dict[str, Any]) -> dict[str, Any]:
|
|
|
2215
2218
|
contract_level = (
|
|
2216
2219
|
"opaque_expert"
|
|
2217
2220
|
if record["command_id"] in _OPAQUE_EXPERT_COMMANDS
|
|
2218
|
-
else "partially_typed"
|
|
2221
|
+
else "partially_typed"
|
|
2222
|
+
if opaque_fields
|
|
2223
|
+
else "typed"
|
|
2219
2224
|
)
|
|
2220
2225
|
return {
|
|
2221
2226
|
"server_status": record.get("server_status", "served"),
|
|
@@ -2373,6 +2378,10 @@ def _inline_call_detail(entries: list[dict[str, Any]]) -> None:
|
|
|
2373
2378
|
record = command_by_id(entry["command_id"])
|
|
2374
2379
|
if record is None:
|
|
2375
2380
|
continue
|
|
2381
|
+
entry["positionals"] = [
|
|
2382
|
+
{key: item[key] for key in ("name", "metavar", "type", "required")}
|
|
2383
|
+
for item in _positionals(entry["command_id"])
|
|
2384
|
+
]
|
|
2376
2385
|
fields = _compact_accepted_fields(record)
|
|
2377
2386
|
if fields is not None:
|
|
2378
2387
|
entry["accepted_fields"] = fields
|
|
@@ -2608,6 +2617,50 @@ def find_schemas(
|
|
|
2608
2617
|
return result
|
|
2609
2618
|
|
|
2610
2619
|
|
|
2620
|
+
#: Keys of an inlined accepted field that a caller needs to fill it in; its
|
|
2621
|
+
#: nested JSON Schema is what ``schema get`` is for.
|
|
2622
|
+
_FIND_FIELD_KEYS = ("name", "type", "required", "enum")
|
|
2623
|
+
#: Entry keys a find leaves out unless ``--full``: ``schema get`` has them.
|
|
2624
|
+
_FIND_DROPPED_KEYS = ("full_schema_command", "known_restrictions", "matched_on")
|
|
2625
|
+
|
|
2626
|
+
|
|
2627
|
+
def _trim_find_entry(entry: dict[str, Any]) -> dict[str, Any]:
|
|
2628
|
+
"""One match cut to what picks and calls it: id, summary, safety class, example.
|
|
2629
|
+
|
|
2630
|
+
The command id is the key ``schema get`` takes for the rest.
|
|
2631
|
+
"""
|
|
2632
|
+
from mammoth_cli.app import _indexed_summary
|
|
2633
|
+
|
|
2634
|
+
trimmed = {key: value for key, value in entry.items() if key not in _FIND_DROPPED_KEYS}
|
|
2635
|
+
summary = _indexed_summary(entry["command_id"])
|
|
2636
|
+
if summary:
|
|
2637
|
+
trimmed["summary"] = summary
|
|
2638
|
+
if trimmed.get("server_status") == "served":
|
|
2639
|
+
del trimmed["server_status"]
|
|
2640
|
+
if "accepted_fields" in trimmed:
|
|
2641
|
+
trimmed["accepted_fields"] = [
|
|
2642
|
+
{key: field[key] for key in _FIND_FIELD_KEYS if field.get(key) is not None}
|
|
2643
|
+
for field in trimmed["accepted_fields"]
|
|
2644
|
+
]
|
|
2645
|
+
return trimmed
|
|
2646
|
+
|
|
2647
|
+
|
|
2648
|
+
def trim_find_result(result: dict[str, Any]) -> dict[str, Any]:
|
|
2649
|
+
"""The default ``schema find`` shape: trimmed entries, near misses listed once.
|
|
2650
|
+
|
|
2651
|
+
``suggestions`` repeated the partial ``matches`` entry for entry, so only
|
|
2652
|
+
``matches`` stays. ``--full`` returns the whole shape.
|
|
2653
|
+
"""
|
|
2654
|
+
trimmed = dict(result)
|
|
2655
|
+
trimmed["matches"] = [_trim_find_entry(entry) for entry in result["matches"]]
|
|
2656
|
+
if "suggestions" in trimmed:
|
|
2657
|
+
del trimmed["suggestions"]
|
|
2658
|
+
trimmed["hint"] = (
|
|
2659
|
+
_NO_MATCH_HINT_PARTIAL if trimmed["matches"] else _NO_MATCH_HINT_NO_SUGGESTIONS
|
|
2660
|
+
)
|
|
2661
|
+
return trimmed
|
|
2662
|
+
|
|
2663
|
+
|
|
2611
2664
|
def _browse(entries: list[dict[str, Any]]) -> dict[str, Any]:
|
|
2612
2665
|
"""The families behind *entries* and how to list each one in full: a keyword
|
|
2613
2666
|
find surfaces one way to do a thing, its family holds the siblings."""
|
|
@@ -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
|
|
|
@@ -32,6 +32,12 @@ COMPACT_COMMANDS = frozenset(
|
|
|
32
32
|
}
|
|
33
33
|
)
|
|
34
34
|
|
|
35
|
+
#: Reads trimmed by default; ``--full`` returns the old shape. ``schema find`` cuts
|
|
36
|
+
#: each match to what picks and calls it; ``canvas get`` leaves out null and empty fields.
|
|
37
|
+
TRIMMED_READ_COMMANDS = frozenset({"schema.find", "dashboard.canvas.get"})
|
|
38
|
+
#: Every command that takes ``--full``.
|
|
39
|
+
FULL_FLAG_COMMANDS = COMPACT_COMMANDS | TRIMMED_READ_COMMANDS
|
|
40
|
+
|
|
35
41
|
#: Keys left out in compact mode: the planner's working state, not a result.
|
|
36
42
|
_OMITTED_KEYS = ("plan", "specs")
|
|
37
43
|
#: Keys kept exactly as they are, nulls included.
|
|
@@ -87,6 +93,27 @@ def _null_only(original: Any, compacted: Any) -> bool:
|
|
|
87
93
|
return isinstance(original, dict) and bool(original) and compacted == {}
|
|
88
94
|
|
|
89
95
|
|
|
96
|
+
def _drop_nulls(value: Any) -> Any:
|
|
97
|
+
"""*value* without null fields at any depth, and without dicts that held only nulls.
|
|
98
|
+
|
|
99
|
+
An explicit ``[]``, ``{}`` or ``""`` stays: ``canvas save`` treats an absent or
|
|
100
|
+
null overlay as "keep the head's" and an explicit empty one as "clear it".
|
|
101
|
+
List items keep their place.
|
|
102
|
+
"""
|
|
103
|
+
if isinstance(value, list):
|
|
104
|
+
return [_drop_nulls(item) for item in value]
|
|
105
|
+
if not isinstance(value, dict):
|
|
106
|
+
return value
|
|
107
|
+
result: dict[str, Any] = {}
|
|
108
|
+
for key, item in value.items():
|
|
109
|
+
if item is None:
|
|
110
|
+
continue
|
|
111
|
+
pruned = _drop_nulls(item)
|
|
112
|
+
if not _null_only(item, pruned):
|
|
113
|
+
result[key] = pruned
|
|
114
|
+
return result
|
|
115
|
+
|
|
116
|
+
|
|
90
117
|
def _dashboard_id(invocation: Invocation, data: dict[str, Any]) -> Any:
|
|
91
118
|
for value in (invocation.positionals.get("dashboard_id"), data.get("dashboard_id")):
|
|
92
119
|
if isinstance(value, (int, str)) and str(value):
|
|
@@ -96,6 +123,8 @@ def _dashboard_id(invocation: Invocation, data: dict[str, Any]) -> Any:
|
|
|
96
123
|
|
|
97
124
|
def with_compact(invocation: Invocation, data: Any) -> Any:
|
|
98
125
|
"""``data`` compacted for a command in :data:`COMPACT_COMMANDS`, unless ``--full``."""
|
|
126
|
+
if invocation.command_id == "dashboard.canvas.get":
|
|
127
|
+
return data if invocation.full_output else _drop_nulls(data)
|
|
99
128
|
if (
|
|
100
129
|
invocation.command_id not in COMPACT_COMMANDS
|
|
101
130
|
or invocation.full_output
|
|
@@ -38,7 +38,7 @@ from collections.abc import Iterable, Mapping
|
|
|
38
38
|
from typing import Any
|
|
39
39
|
|
|
40
40
|
from mammoth_cli.errors.envelope import EXIT_USAGE, CliError
|
|
41
|
-
from mammoth_cli.runtime.compact import
|
|
41
|
+
from mammoth_cli.runtime.compact import FULL_FLAG, FULL_FLAG_COMMANDS
|
|
42
42
|
from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
|
|
43
43
|
from mammoth_cli.services.argspec import FieldSpec
|
|
44
44
|
from mammoth_cli.services.command_contract import (
|
|
@@ -57,11 +57,11 @@ NEGATIVE_NUMBER = re.compile(r"^-(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$")
|
|
|
57
57
|
#: Flags a few commands take in place of the ``--input`` field of the same name.
|
|
58
58
|
COMMAND_FLAGS: dict[str, frozenset[str]] = {
|
|
59
59
|
"schema.get": frozenset({"--full"}),
|
|
60
|
-
"schema.find": frozenset({"--unsupported"}),
|
|
61
60
|
# Keep going after a failed line instead of stopping at the first.
|
|
62
61
|
"run": frozenset({"--continue"}),
|
|
63
62
|
# The compacted dashboard writes: --full returns the whole response.
|
|
64
|
-
**{command_id: frozenset({FULL_FLAG}) for command_id in
|
|
63
|
+
**{command_id: frozenset({FULL_FLAG}) for command_id in FULL_FLAG_COMMANDS},
|
|
64
|
+
"schema.find": frozenset({"--unsupported", FULL_FLAG}),
|
|
65
65
|
# A once-shown credential is masked unless --reveal asks for it.
|
|
66
66
|
**{command_id: frozenset({REVEAL_FLAG}) for command_id in REVEAL_COMMANDS},
|
|
67
67
|
}
|
|
@@ -393,7 +393,7 @@ def _unknown_field_hint(command_id: str, document: dict[str, Any], accepted: lis
|
|
|
393
393
|
f"mammoth {command_id.replace('.', ' ')} ... --project {document['project_id']} "
|
|
394
394
|
"(or omit it to use the active project)."
|
|
395
395
|
)
|
|
396
|
-
return f"Accepted fields: {', '.join(accepted) or '(none)'
|
|
396
|
+
return f"Accepted fields: {', '.join(accepted) or '(none)'}."
|
|
397
397
|
|
|
398
398
|
|
|
399
399
|
def _sort_entry(entry: Any) -> Any:
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.2.
|
|
3
|
+
version = "2.2.100"
|
|
4
4
|
description = "Command-line interface for the Mammoth Analytics platform"
|
|
5
5
|
authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "LicenseRef-Proprietary"
|
|
8
8
|
requires-python = ">=3.12,<3.15"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"mammoth-io (>=0.8.
|
|
10
|
+
"mammoth-io (>=0.8.51,<0.9)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|
|
@@ -5449,8 +5449,7 @@ commands:
|
|
|
5449
5449
|
help: ID of the view to act on.
|
|
5450
5450
|
options: []
|
|
5451
5451
|
sdk_symbol: mammoth._mixins._text_ops.TextOpsMixin.substring
|
|
5452
|
-
sdk_conversion: 'CLI one-call op: View.substring with a first-word regex
|
|
5453
|
-
the step was staged; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
|
|
5452
|
+
sdk_conversion: 'CLI one-call op: View.substring with a first-word regex; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
|
|
5454
5453
|
request_model: ViewTransformFirstNameRequest
|
|
5455
5454
|
result_model: ViewTransformFirstNameResult
|
|
5456
5455
|
mutation_class: reversible_pipeline
|
|
@@ -5483,10 +5482,10 @@ commands:
|
|
|
5483
5482
|
undo_test: null
|
|
5484
5483
|
known_restrictions: 'Use for "extract the first name" or the first word of a text column. --input: "column"
|
|
5485
5484
|
(a TEXT column, required) and exactly one of "new_column" or "existing_column". Takes the text up
|
|
5486
|
-
to the first space. One call: if the view is in draft mode the step is staged
|
|
5487
|
-
|
|
5488
|
-
|
|
5489
|
-
|
|
5485
|
+
to the first space. One call: if the view is in draft mode the step is staged (status staged) and the
|
|
5486
|
+
draft stays unsubmitted, whether or not it already held staged steps; run view draft submit when
|
|
5487
|
+
that is intended. Outside draft mode the result waits on this step''s own run (run.transform_status
|
|
5488
|
+
DONE), not on the pipeline reading ready.'
|
|
5490
5489
|
reviewed_by: primary
|
|
5491
5490
|
- command_id: view.transform.generate-sql
|
|
5492
5491
|
command_path: view transform generate-sql
|
|
@@ -6330,8 +6329,7 @@ commands:
|
|
|
6330
6329
|
help: ID of the view to act on.
|
|
6331
6330
|
options: []
|
|
6332
6331
|
sdk_symbol: mammoth._mixins._math_ops.MathOpsMixin.math
|
|
6333
|
-
sdk_conversion: 'CLI one-call op: View.math with existing_column
|
|
6334
|
-
was staged; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
|
|
6332
|
+
sdk_conversion: 'CLI one-call op: View.math with existing_column; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
|
|
6335
6333
|
request_model: ViewTransformUpdateColumnRequest
|
|
6336
6334
|
result_model: ViewTransformUpdateColumnResult
|
|
6337
6335
|
mutation_class: reversible_pipeline
|
|
@@ -6365,9 +6363,9 @@ commands:
|
|
|
6365
6363
|
known_restrictions: 'Use to overwrite a numeric column with an expression over its own values ("add
|
|
6366
6364
|
5 to Cost"). --input: "column" (an existing column, required) and "expression" (required, as in view
|
|
6367
6365
|
transform math). Same as view transform math with existing_column set. One call: if the view is in
|
|
6368
|
-
draft mode the step is staged
|
|
6369
|
-
|
|
6370
|
-
|
|
6366
|
+
draft mode the step is staged (status staged) and the draft stays unsubmitted, whether or not it already
|
|
6367
|
+
held staged steps; run view draft submit when that is intended. Outside draft mode the result waits
|
|
6368
|
+
on this step''s own run (run.transform_status DONE), not on the pipeline reading ready.'
|
|
6371
6369
|
reviewed_by: primary
|
|
6372
6370
|
- command_id: view.transform.window
|
|
6373
6371
|
command_path: view transform window
|
|
@@ -7065,7 +7063,7 @@ commands:
|
|
|
7065
7063
|
- CT-VIEW-EXPLORE-PANEL-SET-ERROR
|
|
7066
7064
|
draft_test: null
|
|
7067
7065
|
undo_test: null
|
|
7068
|
-
known_restrictions: '
|
|
7066
|
+
known_restrictions: 'Saves the Explore cards of the calling user for a view; it shows nothing by itself. Open a card per column
|
|
7069
7067
|
with {"panel": {"columns": "all"}} or {"panel": {"columns": ["Region", "Amount"]}}: each named column
|
|
7070
7068
|
that has no card gets one and the saved cards stay. To replace the whole panel, run view explore-panel
|
|
7071
7069
|
get first and write back {"panel": {"cards": [...]}}. A panel with no cards list is refused, because
|