mammoth-cli 2.0.39__tar.gz → 2.0.41__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.0.39 → mammoth_cli-2.0.41}/PKG-INFO +2 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +18 -9
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +2 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +33 -33
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +36 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +7 -3
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/dashboard.py +73 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/file.py +15 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/schema.py +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/view.py +106 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/view_ops.py +94 -7
- mammoth_cli-2.0.41/mammoth_cli/services/dashboard_pages.py +136 -0
- mammoth_cli-2.0.41/mammoth_cli/services/dashboard_review.py +284 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/pyproject.toml +2 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/view.yaml +3 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/.gitignore +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/LICENSE +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/README.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.41
|
|
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
|
|
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
17
17
|
Requires-Python: <3.15,>=3.12
|
|
18
18
|
Requires-Dist: jsonschema>=4.20
|
|
19
19
|
Requires-Dist: keyring<26,>=25.7
|
|
20
|
-
Requires-Dist: mammoth-io<0.8,>=0.7.
|
|
20
|
+
Requires-Dist: mammoth-io<0.8,>=0.7.18
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.13
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.41
|
|
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
|
|
|
@@ -93,10 +93,11 @@ report a real gap with the command you tried.
|
|
|
93
93
|
Users often upload related files without saying how they relate ("make a
|
|
94
94
|
dashboard from t_a and t_b"). Work it out from the data before you build:
|
|
95
95
|
|
|
96
|
-
1. Upload every file
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
1. Upload every file. Each upload result carries a `view` preview of what
|
|
97
|
+
Mammoth made of the file (`view_id`, column types, sample rows,
|
|
98
|
+
`column_warnings`, and `before_dashboard`). Read every view in Mammoth, not
|
|
99
|
+
the local files: `view data get VIEW_ID` for each one. The warnings list
|
|
100
|
+
numbers or dates stored as text, and blanks, each with the fix.
|
|
100
101
|
2. Find the keys. A column in one view whose values appear in a column of
|
|
101
102
|
the other (`customer_id` and `id`, `order_ref` and `order_no`) is a
|
|
102
103
|
foreign key; the view with many rows per key is the main one.
|
|
@@ -104,14 +105,22 @@ dashboard from t_a and t_b"). Work it out from the data before you build:
|
|
|
104
105
|
case and padding (`text`), no blanks (`set-values`, `filter`).
|
|
105
106
|
4. Act on every `column_warnings` entry for a column the deliverable uses:
|
|
106
107
|
run its `fix` (`convert-type` to `NUMERIC` or `DATE`; the values that are
|
|
107
|
-
not numbers become empty)
|
|
108
|
-
|
|
108
|
+
not numbers become empty). A text `price` cannot be summed on a dashboard.
|
|
109
|
+
Then decide on each `blank_values` entry: fill, filter, or keep. Write one
|
|
110
|
+
line for each in your report (the column, the count, what you did and
|
|
111
|
+
why). A blank that you saw but did not mention is a miss.
|
|
109
112
|
5. `view transform join` the lookup view into the main view (`LEFT`). The
|
|
110
113
|
result's `join_check` gives `match_rate`, `unmatched_rows` and
|
|
111
114
|
`unmatched_keys`; put them in your report, and stop to compare the keys
|
|
112
115
|
if more than a few rows found no match.
|
|
113
|
-
6.
|
|
114
|
-
(
|
|
116
|
+
6. If the data has money, add it before you make the dashboard: `revenue`
|
|
117
|
+
(`math`, `qty * price`, `new_column`), the `fix` in `before_dashboard`.
|
|
118
|
+
A dashboard sees only the columns the view had when it was made.
|
|
119
|
+
7. Build the dashboard from the joined view
|
|
120
|
+
([dashboards](references/recipes/dashboards.md)) and chart the sum of
|
|
121
|
+
revenue. Do not sum a unit price. `create-blank`, `canvas save` and
|
|
122
|
+
`pages add` return `deliverable_check`: fix each warning, or say in the
|
|
123
|
+
report why not.
|
|
115
124
|
|
|
116
125
|
For the defaults that most pipelines use (new column or overwrite, `LEFT`
|
|
117
126
|
joins, date steps), see
|
|
@@ -110,7 +110,7 @@ Checkpoint Alert are the `view data-check` and `view checkpoint` families.
|
|
|
110
110
|
| Turn wide columns into label/value rows | Unpivot | `unnest` |
|
|
111
111
|
| Read fields out of a JSON column | Extract JSON | `json-extract` |
|
|
112
112
|
| Classify, tag or summarise rows with AI | Generative AI | `ai` |
|
|
113
|
-
| One SQL query over the view | AI SQL Query | `add-sql` (replaces the view's columns), `generate-sql` (from plain words) |
|
|
113
|
+
| One SQL query over the view | AI SQL Query | `add-sql` (replaces the view's columns), `generate-sql` (writes the query from plain words; apply it with `add-sql`) |
|
|
114
114
|
| Copy rows into another dataset, refreshed with the pipeline | Send to Dataset | `view export dataset` (not a `view transform`) |
|
|
115
115
|
|
|
116
116
|
`join` or `lookup`: `join` adds the chosen columns from every matching row
|
|
@@ -140,4 +140,4 @@ Ran once: `workflow.create`, `workflow.delete`, `workflow.get`, `workflow.graph`
|
|
|
140
140
|
|
|
141
141
|
Ran once: `workspace.app-usage`, `workspace.get`, `workspace.list`, `workspace.segment.list`, `workspace.segment.update`, `workspace.storage-breakdown`, `workspace.user.list`
|
|
142
142
|
|
|
143
|
-
Evidence collected on CLI releases 1.1.5 through 2.0.
|
|
143
|
+
Evidence collected on CLI releases 1.1.5 through 2.0.40; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
|
|
@@ -11,7 +11,7 @@ Status meanings:
|
|
|
11
11
|
- **CLI defect fixed, untried since**: the failure was on the CLI side and this release repairs it; nobody has re-run the route yet.
|
|
12
12
|
- Commands not listed under a family are untried.
|
|
13
13
|
|
|
14
|
-
The typed `view transform *` commands all submit through `view.task.add
|
|
14
|
+
The typed `view transform *` commands all submit through `view.task.add` (`rename-columns` and `sort` through `view.update`); its matrix row names the transformations that ran end to end and were read back against a known answer: `add-column`, `add-sql`, `ai`, `bulk-replace`, `combine-columns`, `convert-type`, `copy-columns`, `crosstab`, `date-diff`, `delete-columns`, `discard-duplicates`, `extract-date`, `fill-missing`, `filter`, `generate-sql`, `increment-date`, `join`, `json-extract`, `limit-rows`, `lookup`, `math`, `pivot`, `rename-columns`, `replace`, `set-values`, `small-large`, `sort`, `split`, `substring`, `text`, `unnest`, `window`. A transformation not named there has the same untried status as any other command.
|
|
15
15
|
|
|
16
16
|
## Coverage by family
|
|
17
17
|
|
|
@@ -118,4 +118,4 @@ Ran once: `view.active-user.list`, `view.active-user.mark`, `view.ai.generate-da
|
|
|
118
118
|
| `view.data-check.update` | observed blocker | backend_error: PATCH with the schema's documented {op: command, path: enable/disable, value: null} shape returns HTTP 500 empty body (CLI outcome_unknown, exit 7) while the mutatio |
|
|
119
119
|
| `view.export.publish-db-update` | CLI defect fixed, untried since | 2.0.16 (example value is the documented {"odbc_type": "postgres"} object (a bare string is rejected)) |
|
|
120
120
|
|
|
121
|
-
Evidence collected on CLI releases 1.1.5 through 2.0.
|
|
121
|
+
Evidence collected on CLI releases 1.1.5 through 2.0.40; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
|
|
@@ -762,7 +762,7 @@ Example: `mammoth view task add 123 --input '{"task_spec": {"DATAVIEW_ID": 123,
|
|
|
762
762
|
|
|
763
763
|
Result: `ViewTaskAddResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
764
764
|
|
|
765
|
-
Status on release: ran once on CLI 2.0.
|
|
765
|
+
Status on release: ran once on CLI 2.0.40 — golden-data check golden-20260919 (CLI 2.0.18): typed transforms bulk-replace, convert-type, discard-duplicates, filter, join, pivot, set-values, text each run once on an owned fixture on release and read back with view data get against a known answer (values…
|
|
766
766
|
|
|
767
767
|
### `view.task.delete`
|
|
768
768
|
|
|
@@ -822,7 +822,7 @@ Example: `mammoth view transform add-column 123 --input '{"name": "Revenue repor
|
|
|
822
822
|
|
|
823
823
|
Result: `ViewTransformAddColumnResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
824
824
|
|
|
825
|
-
Status on release:
|
|
825
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
826
826
|
|
|
827
827
|
### `view.transform.add-sql`
|
|
828
828
|
|
|
@@ -832,7 +832,7 @@ Example: `mammoth view transform add-sql 123 --input '{"query": "SELECT region,
|
|
|
832
832
|
|
|
833
833
|
Result: `ViewTransformAddSqlResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
834
834
|
|
|
835
|
-
Status on release: ran once on CLI 2.0.
|
|
835
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
836
836
|
|
|
837
837
|
### `view.transform.ai`
|
|
838
838
|
|
|
@@ -842,7 +842,7 @@ Example: `mammoth view transform ai 123 --input '{"prompt": "Summarize revenue b
|
|
|
842
842
|
|
|
843
843
|
Result: `ViewTransformAiResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
844
844
|
|
|
845
|
-
Status on release:
|
|
845
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
846
846
|
|
|
847
847
|
### `view.transform.bulk-replace`
|
|
848
848
|
|
|
@@ -852,7 +852,7 @@ Example: `mammoth view transform bulk-replace 123 --input '{"columns": ["Status"
|
|
|
852
852
|
|
|
853
853
|
Result: `ViewTransformBulkReplaceResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
854
854
|
|
|
855
|
-
Status on release: ran once on CLI 2.0.
|
|
855
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
856
856
|
|
|
857
857
|
### `view.transform.combine-columns`
|
|
858
858
|
|
|
@@ -862,7 +862,7 @@ Example: `mammoth view transform combine-columns 123 --input '{"sources": ["Stat
|
|
|
862
862
|
|
|
863
863
|
Result: `ViewTransformCombineColumnsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
864
864
|
|
|
865
|
-
Status on release:
|
|
865
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
866
866
|
|
|
867
867
|
### `view.transform.convert-type`
|
|
868
868
|
|
|
@@ -872,7 +872,7 @@ Example: `mammoth view transform convert-type 123 --input '{"conversions": [{"co
|
|
|
872
872
|
|
|
873
873
|
Result: `ViewTransformConvertTypeResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
874
874
|
|
|
875
|
-
Status on release: ran once on CLI 2.0.
|
|
875
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
876
876
|
|
|
877
877
|
### `view.transform.copy-columns`
|
|
878
878
|
|
|
@@ -882,7 +882,7 @@ Example: `mammoth view transform copy-columns 123 --input '{"copies": [{"source"
|
|
|
882
882
|
|
|
883
883
|
Result: `ViewTransformCopyColumnsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
884
884
|
|
|
885
|
-
Status on release:
|
|
885
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
886
886
|
|
|
887
887
|
### `view.transform.crosstab`
|
|
888
888
|
|
|
@@ -892,7 +892,7 @@ Example: `mammoth view transform crosstab 123 --input '{"rows": ["sample"], "piv
|
|
|
892
892
|
|
|
893
893
|
Result: `ViewTransformCrosstabResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
894
894
|
|
|
895
|
-
Status on release:
|
|
895
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
896
896
|
|
|
897
897
|
### `view.transform.date-diff`
|
|
898
898
|
|
|
@@ -902,7 +902,7 @@ Example: `mammoth view transform date-diff 123 --input '{"component": "YEAR", "s
|
|
|
902
902
|
|
|
903
903
|
Result: `ViewTransformDateDiffResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
904
904
|
|
|
905
|
-
Status on release:
|
|
905
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
906
906
|
|
|
907
907
|
### `view.transform.delete-columns`
|
|
908
908
|
|
|
@@ -912,7 +912,7 @@ Example: `mammoth view transform delete-columns 123 --input '{"columns": ["Statu
|
|
|
912
912
|
|
|
913
913
|
Result: `ViewTransformDeleteColumnsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
914
914
|
|
|
915
|
-
Status on release:
|
|
915
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
916
916
|
|
|
917
917
|
### `view.transform.discard-duplicates`
|
|
918
918
|
|
|
@@ -922,7 +922,7 @@ Example: `mammoth view transform discard-duplicates 123 --input '{"dataset_id":
|
|
|
922
922
|
|
|
923
923
|
Result: `ViewTransformDiscardDuplicatesResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
924
924
|
|
|
925
|
-
Status on release: ran once on CLI 2.0.
|
|
925
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
926
926
|
|
|
927
927
|
### `view.transform.extract-date`
|
|
928
928
|
|
|
@@ -932,7 +932,7 @@ Example: `mammoth view transform extract-date 123 --input '{"column": "Status",
|
|
|
932
932
|
|
|
933
933
|
Result: `ViewTransformExtractDateResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
934
934
|
|
|
935
|
-
Status on release: ran once on CLI 2.0.
|
|
935
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
936
936
|
|
|
937
937
|
### `view.transform.fill-missing`
|
|
938
938
|
|
|
@@ -942,7 +942,7 @@ Example: `mammoth view transform fill-missing 123 --input '{"column": "Status",
|
|
|
942
942
|
|
|
943
943
|
Result: `ViewTransformFillMissingResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
944
944
|
|
|
945
|
-
Status on release: ran once on CLI 2.0.
|
|
945
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
946
946
|
|
|
947
947
|
### `view.transform.filter`
|
|
948
948
|
|
|
@@ -952,7 +952,7 @@ Example: `mammoth view transform filter 123 --input '{"condition": {"column": "S
|
|
|
952
952
|
|
|
953
953
|
Result: `ViewTransformFilterResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
954
954
|
|
|
955
|
-
Status on release: ran once on CLI 2.0.
|
|
955
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
956
956
|
|
|
957
957
|
### `view.transform.generate-sql`
|
|
958
958
|
|
|
@@ -962,7 +962,7 @@ Example: `mammoth view transform generate-sql 123 --input '{"intent": "Summarize
|
|
|
962
962
|
|
|
963
963
|
Result: `ViewTransformGenerateSqlResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
964
964
|
|
|
965
|
-
Status on release:
|
|
965
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
966
966
|
|
|
967
967
|
### `view.transform.increment-date`
|
|
968
968
|
|
|
@@ -972,7 +972,7 @@ Example: `mammoth view transform increment-date 123 --input '{"column": "Status"
|
|
|
972
972
|
|
|
973
973
|
Result: `ViewTransformIncrementDateResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
974
974
|
|
|
975
|
-
Status on release:
|
|
975
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
976
976
|
|
|
977
977
|
### `view.transform.join`
|
|
978
978
|
|
|
@@ -982,7 +982,7 @@ Example: `mammoth view transform join 123 --input '{"foreign_view": 1, "join_typ
|
|
|
982
982
|
|
|
983
983
|
Result: `ViewTransformJoinResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
984
984
|
|
|
985
|
-
Status on release: ran once on CLI 2.0.
|
|
985
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
986
986
|
|
|
987
987
|
### `view.transform.json-extract`
|
|
988
988
|
|
|
@@ -992,7 +992,7 @@ Example: `mammoth view transform json-extract 123 --input '{"column": "Status",
|
|
|
992
992
|
|
|
993
993
|
Result: `ViewTransformJsonExtractResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
994
994
|
|
|
995
|
-
Status on release:
|
|
995
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
996
996
|
|
|
997
997
|
### `view.transform.limit-rows`
|
|
998
998
|
|
|
@@ -1002,7 +1002,7 @@ Example: `mammoth view transform limit-rows 123 --input '{"n": 1, "dataset_id":
|
|
|
1002
1002
|
|
|
1003
1003
|
Result: `ViewTransformLimitRowsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1004
1004
|
|
|
1005
|
-
Status on release:
|
|
1005
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1006
1006
|
|
|
1007
1007
|
### `view.transform.lookup`
|
|
1008
1008
|
|
|
@@ -1012,7 +1012,7 @@ Example: `mammoth view transform lookup 123 --input '{"source": "Status", "looku
|
|
|
1012
1012
|
|
|
1013
1013
|
Result: `ViewTransformLookupResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1014
1014
|
|
|
1015
|
-
Status on release:
|
|
1015
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1016
1016
|
|
|
1017
1017
|
### `view.transform.math`
|
|
1018
1018
|
|
|
@@ -1022,7 +1022,7 @@ Example: `mammoth view transform math 123 --input '{"expression": "price * quant
|
|
|
1022
1022
|
|
|
1023
1023
|
Result: `ViewTransformMathResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1024
1024
|
|
|
1025
|
-
Status on release:
|
|
1025
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1026
1026
|
|
|
1027
1027
|
### `view.transform.pivot`
|
|
1028
1028
|
|
|
@@ -1032,7 +1032,7 @@ Example: `mammoth view transform pivot 123 --input '{"group_by": ["sample"], "ag
|
|
|
1032
1032
|
|
|
1033
1033
|
Result: `ViewTransformPivotResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1034
1034
|
|
|
1035
|
-
Status on release: ran once on CLI 2.0.
|
|
1035
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1036
1036
|
|
|
1037
1037
|
### `view.transform.rename-columns`
|
|
1038
1038
|
|
|
@@ -1042,7 +1042,7 @@ Example: `mammoth view transform rename-columns 123 --input '{"renames": {"cust_
|
|
|
1042
1042
|
|
|
1043
1043
|
Result: `ViewTransformRenameColumnsResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
1044
1044
|
|
|
1045
|
-
Status on release:
|
|
1045
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1046
1046
|
|
|
1047
1047
|
### `view.transform.replace`
|
|
1048
1048
|
|
|
@@ -1052,7 +1052,7 @@ Example: `mammoth view transform replace 123 --input '{"columns": ["Status"], "f
|
|
|
1052
1052
|
|
|
1053
1053
|
Result: `ViewTransformReplaceResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1054
1054
|
|
|
1055
|
-
Status on release:
|
|
1055
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1056
1056
|
|
|
1057
1057
|
### `view.transform.set-values`
|
|
1058
1058
|
|
|
@@ -1062,7 +1062,7 @@ Example: `mammoth view transform set-values 123 --input '{"values": [{"value": "
|
|
|
1062
1062
|
|
|
1063
1063
|
Result: `ViewTransformSetValuesResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1064
1064
|
|
|
1065
|
-
Status on release: ran once on CLI 2.0.
|
|
1065
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1066
1066
|
|
|
1067
1067
|
### `view.transform.small-large`
|
|
1068
1068
|
|
|
@@ -1072,7 +1072,7 @@ Example: `mammoth view transform small-large 123 --input '{"function": "SMALL",
|
|
|
1072
1072
|
|
|
1073
1073
|
Result: `ViewTransformSmallLargeResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1074
1074
|
|
|
1075
|
-
Status on release:
|
|
1075
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1076
1076
|
|
|
1077
1077
|
### `view.transform.sort`
|
|
1078
1078
|
|
|
@@ -1082,7 +1082,7 @@ Example: `mammoth view transform sort 123 --input '{"order_by": [["Revenue", "DE
|
|
|
1082
1082
|
|
|
1083
1083
|
Result: `ViewTransformSortResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
1084
1084
|
|
|
1085
|
-
Status on release:
|
|
1085
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1086
1086
|
|
|
1087
1087
|
### `view.transform.split`
|
|
1088
1088
|
|
|
@@ -1092,7 +1092,7 @@ Example: `mammoth view transform split 123 --input '{"column": "Status", "delimi
|
|
|
1092
1092
|
|
|
1093
1093
|
Result: `ViewTransformSplitResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1094
1094
|
|
|
1095
|
-
Status on release:
|
|
1095
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1096
1096
|
|
|
1097
1097
|
### `view.transform.substring`
|
|
1098
1098
|
|
|
@@ -1102,7 +1102,7 @@ Example: `mammoth view transform substring 123 --input '{"column": "Status", "da
|
|
|
1102
1102
|
|
|
1103
1103
|
Result: `ViewTransformSubstringResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1104
1104
|
|
|
1105
|
-
Status on release:
|
|
1105
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1106
1106
|
|
|
1107
1107
|
### `view.transform.text`
|
|
1108
1108
|
|
|
@@ -1112,7 +1112,7 @@ Example: `mammoth view transform text 123 --input '{"columns": ["Status"], "data
|
|
|
1112
1112
|
|
|
1113
1113
|
Result: `ViewTransformTextResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1114
1114
|
|
|
1115
|
-
Status on release: ran once on CLI 2.0.
|
|
1115
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1116
1116
|
|
|
1117
1117
|
### `view.transform.unnest`
|
|
1118
1118
|
|
|
@@ -1122,7 +1122,7 @@ Example: `mammoth view transform unnest 123 --input '{"columns": ["Status"], "da
|
|
|
1122
1122
|
|
|
1123
1123
|
Result: `ViewTransformUnnestResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1124
1124
|
|
|
1125
|
-
Status on release:
|
|
1125
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1126
1126
|
|
|
1127
1127
|
### `view.transform.window`
|
|
1128
1128
|
|
|
@@ -1132,7 +1132,7 @@ Example: `mammoth view transform window 123 --input '{"function": "ROW_NUMBER",
|
|
|
1132
1132
|
|
|
1133
1133
|
Result: `ViewTransformWindowResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1134
1134
|
|
|
1135
|
-
Status on release: ran once on CLI 2.0.
|
|
1135
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1136
1136
|
|
|
1137
1137
|
### `view.trash`
|
|
1138
1138
|
|
{mammoth_cli-2.0.39 → mammoth_cli-2.0.41}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md
RENAMED
|
@@ -43,7 +43,7 @@ anything else fails with `invalid_condition` before any request is sent.
|
|
|
43
43
|
| `view transform filter` | `filter_type` | `SHOW` (keep matches, default), `REMOVE` |
|
|
44
44
|
| `view transform text` | `case` | `UPPER`, `LOWER`, `TITLE`; `trim`: true/false |
|
|
45
45
|
| `view transform convert-type` | `conversions[].to` | `TEXT`, `NUMERIC`, `DATE` |
|
|
46
|
-
| `view transform fill-missing` | `direction` | `
|
|
46
|
+
| `view transform fill-missing` | `direction` | `FIRST_VALUE` (forward fill: previous row), `LAST_VALUE` (back-fill: next row) |
|
|
47
47
|
| `view transform join` | `join_type` | `INNER`, `LEFT`, `RIGHT`, `OUTER` |
|
|
48
48
|
| `view transform set-values` | `column_type` (new column) | `TEXT`, `NUMERIC`, `DATE` |
|
|
49
49
|
|
|
@@ -65,7 +65,42 @@ correct aggregation for a "distinct people" card under a date filter);
|
|
|
65
65
|
ID --input '{"body": {"params": {"pages": [{"title": ..., "focus": {...},
|
|
66
66
|
"charts": [...]}]}}}'` adds a page, but that route runs through the LLM
|
|
67
67
|
guard and may drop a unit it cannot evidence (it says so in `data.message`);
|
|
68
|
-
`canvas save` keeps what you wrote.
|
|
68
|
+
`canvas save` keeps what you wrote. When the route refuses a chart (for
|
|
69
|
+
example a `pie` that the data does not support), `data.chart_check.refused`
|
|
70
|
+
names it. A new page that got no charts is removed, and
|
|
71
|
+
`data.chart_check.removed_pages` lists it. Add a chart of a different kind
|
|
72
|
+
(`hbar`, `line`, `table`) for that page.
|
|
73
|
+
|
|
74
|
+
## Put the money on the board
|
|
75
|
+
|
|
76
|
+
If the data has money (a price, an amount, revenue or cost), the dashboard
|
|
77
|
+
must show it. A board that shows only counts or quantities has left out the
|
|
78
|
+
number the user most likely wants.
|
|
79
|
+
|
|
80
|
+
- A money column must be `NUMERIC` first. `view data get` flags a money
|
|
81
|
+
column that is stored as text in `column_warnings`.
|
|
82
|
+
- A unit price is not revenue. Do not sum a price. If the data has a
|
|
83
|
+
quantity and a unit price, add a revenue column before you build the
|
|
84
|
+
board, then chart the sum of that column:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
mammoth view transform math VIEW_ID --project PROJECT_ID \
|
|
88
|
+
--input '{"dataset_id":DATASET_ID,"expression":"qty * price","new_column":"revenue"}'
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- Add every column the board needs before `create-blank`. A dashboard sees
|
|
92
|
+
only the columns the view had when the dashboard was made: `pages add`
|
|
93
|
+
refuses a later column ("isn't a measure in this data"). If you added it
|
|
94
|
+
after, make a new dashboard and delete the old one if you made it for this
|
|
95
|
+
task. The upload result's `before_dashboard` names the column to add.
|
|
96
|
+
- Put revenue in a KPI (`focus.kpis`, `agg` `sum`, `unit.prefix` for the
|
|
97
|
+
currency) and in one or more charts (revenue by product, by segment, by
|
|
98
|
+
month). Rows with an empty price give an empty revenue. Say how many there
|
|
99
|
+
are in your report.
|
|
100
|
+
- `create-blank`, `canvas save` and `pages add` return `deliverable_check`:
|
|
101
|
+
`money_not_shown` (with the `math` command in `fix`), `unit_price_summed`,
|
|
102
|
+
and one `blank_values` entry for each column on the board that has blanks.
|
|
103
|
+
Fix each warning, or say in your report why you kept it.
|
|
69
104
|
|
|
70
105
|
**Read the bindings back, then the numbers.** `dashboard canvas get` returns
|
|
71
106
|
`data.meta.figures` — `"p1:kpi:2": {"descriptors": {"value": "<id>"}}` per
|
|
@@ -21,9 +21,10 @@ Prefer typed operations such as convert-type, fill-missing, replace, join,
|
|
|
21
21
|
lookup, filter and math only when the live schema
|
|
22
22
|
lists them. Pick the operation by what it does, not by its name:
|
|
23
23
|
|
|
24
|
-
- `fill-missing` copies
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
- `fill-missing` copies an adjacent row's value into blanks, in the
|
|
25
|
+
`order_by` order. `direction` `FIRST_VALUE` takes the previous row's value
|
|
26
|
+
(forward fill, the usual choice); `LAST_VALUE` takes the next row's value
|
|
27
|
+
(back-fill). It cannot write a literal. To fill blanks with a constant (for example `0`), use `set-values`
|
|
27
28
|
on the existing column with an `IS_EMPTY` condition:
|
|
28
29
|
|
|
29
30
|
```bash
|
|
@@ -97,6 +98,9 @@ as defaults, and let the user's request override them:
|
|
|
97
98
|
first. Check the result on a few rows.
|
|
98
99
|
- Convert several columns to the same type in one `convert-type` call (one
|
|
99
100
|
`conversions` entry for each column), not one call for each column.
|
|
101
|
+
Upload already types numbers and ISO dates, so read the types (`view get`)
|
|
102
|
+
first and convert only the columns that are wrong. The CLI skips a column
|
|
103
|
+
that already has the type (`skipped` in the result).
|
|
100
104
|
- Remove duplicates near the end, after the cleanup and joins, so the check
|
|
101
105
|
uses the final columns.
|
|
102
106
|
- `filter` also takes a plain-language `prompt` instead of a `condition`.
|
|
@@ -16,6 +16,8 @@ from typing import Any
|
|
|
16
16
|
from mammoth.models.dashboards import AddPagesSpec
|
|
17
17
|
from pydantic import ValidationError
|
|
18
18
|
|
|
19
|
+
from mammoth_cli.commands.view import view_profiles
|
|
20
|
+
from mammoth_cli.context import profiles
|
|
19
21
|
from mammoth_cli.errors.envelope import (
|
|
20
22
|
CODE_INVALID_ARGUMENT,
|
|
21
23
|
CODE_MISSING_ARGUMENT,
|
|
@@ -25,6 +27,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
25
27
|
CliError,
|
|
26
28
|
)
|
|
27
29
|
from mammoth_cli.manifest.loader import command_by_id
|
|
30
|
+
from mammoth_cli.runtime import parents
|
|
28
31
|
from mammoth_cli.runtime.confirm import (
|
|
29
32
|
POLICY_CONFIRM_TARGET,
|
|
30
33
|
POLICY_NONE,
|
|
@@ -33,9 +36,16 @@ from mammoth_cli.runtime.confirm import (
|
|
|
33
36
|
enforce_confirmation,
|
|
34
37
|
)
|
|
35
38
|
from mammoth_cli.runtime.invocation import Invocation
|
|
36
|
-
from mammoth_cli.runtime.session import open_service, require_project
|
|
39
|
+
from mammoth_cli.runtime.session import open_service, require_project, resolved_project
|
|
37
40
|
from mammoth_cli.services.argspec import arg_spec
|
|
38
41
|
from mammoth_cli.services.command_contract import bind_command_inputs
|
|
42
|
+
from mammoth_cli.services.dashboard_pages import check_added_pages
|
|
43
|
+
from mammoth_cli.services.dashboard_review import (
|
|
44
|
+
CANVAS_GET,
|
|
45
|
+
NEW_COLUMN_NOTE,
|
|
46
|
+
has_profiles,
|
|
47
|
+
review,
|
|
48
|
+
)
|
|
39
49
|
from mammoth_cli.services.positionals import resolve_positionals
|
|
40
50
|
|
|
41
51
|
HandlerResult = tuple[Any, dict[str, Any]]
|
|
@@ -671,9 +681,71 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
|
|
|
671
681
|
with open_service(invocation) as (service, auth):
|
|
672
682
|
data = service.call(_symbol(invocation), **kwargs)
|
|
673
683
|
data = _resolve_job(service, invocation, data)
|
|
684
|
+
if invocation.command_id == "dashboard.pages.add" and "body" in kwargs:
|
|
685
|
+
requested = kwargs["body"].get("params", {}).get("pages", [])
|
|
686
|
+
data = check_added_pages(service, positionals["dashboard_id"], requested, data)
|
|
687
|
+
if invocation.command_id in _REVIEWED_COMMANDS:
|
|
688
|
+
data = _with_deliverable_check(invocation, service, auth, positionals, data)
|
|
674
689
|
return data, _meta(invocation, auth.workspace_id)
|
|
675
690
|
|
|
676
691
|
|
|
692
|
+
#: Authoring steps whose result carries ``deliverable_check``.
|
|
693
|
+
_REVIEWED_COMMANDS = frozenset(
|
|
694
|
+
{"dashboard.create-blank", "dashboard.canvas.save", "dashboard.pages.add"}
|
|
695
|
+
)
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
def _with_deliverable_check(
|
|
699
|
+
invocation: Invocation, service: Any, auth: Any, positionals: dict[str, Any], data: Any
|
|
700
|
+
) -> Any:
|
|
701
|
+
"""Add ``deliverable_check`` (money shown? blanks decided?) to an authoring result.
|
|
702
|
+
|
|
703
|
+
One canvas read; advice only, so a failed read leaves the result as it was.
|
|
704
|
+
"""
|
|
705
|
+
if hasattr(data, "model_dump"):
|
|
706
|
+
data = data.model_dump(mode="json")
|
|
707
|
+
if not isinstance(data, dict):
|
|
708
|
+
return data
|
|
709
|
+
dashboard_id = positionals.get("dashboard_id") or data.get("id")
|
|
710
|
+
if not isinstance(dashboard_id, int):
|
|
711
|
+
return data
|
|
712
|
+
try:
|
|
713
|
+
canvas_doc = service.call(CANVAS_GET, dashboard_id=dashboard_id)
|
|
714
|
+
if hasattr(canvas_doc, "model_dump"):
|
|
715
|
+
canvas_doc = canvas_doc.model_dump(mode="json")
|
|
716
|
+
source = (canvas_doc.get("canvas") or {}).get("dataset") or {}
|
|
717
|
+
view_id = source.get("dataview_id")
|
|
718
|
+
profile = invocation.profile or profiles.get_selected()
|
|
719
|
+
dataset_id = (
|
|
720
|
+
parents.lookup(profile, auth.workspace_id, view_id)
|
|
721
|
+
if isinstance(view_id, int)
|
|
722
|
+
else None
|
|
723
|
+
)
|
|
724
|
+
fallback = None
|
|
725
|
+
if not has_profiles(canvas_doc) and isinstance(view_id, int) and dataset_id is not None:
|
|
726
|
+
fallback = view_profiles(service, dataset_id, view_id, resolved_project(invocation))
|
|
727
|
+
warnings = review(canvas_doc, dataset_id, fallback)
|
|
728
|
+
except Exception: # noqa: BLE001 -- advice must never fail the authoring step
|
|
729
|
+
return data
|
|
730
|
+
if warnings:
|
|
731
|
+
data = {
|
|
732
|
+
**data,
|
|
733
|
+
"deliverable_check": {
|
|
734
|
+
"warnings": warnings,
|
|
735
|
+
"note": (
|
|
736
|
+
"Fix these before you report the dashboard as done, or say in your "
|
|
737
|
+
"report why not."
|
|
738
|
+
+ (
|
|
739
|
+
" " + NEW_COLUMN_NOTE
|
|
740
|
+
if any("fix" in warning for warning in warnings)
|
|
741
|
+
else ""
|
|
742
|
+
)
|
|
743
|
+
),
|
|
744
|
+
},
|
|
745
|
+
}
|
|
746
|
+
return data
|
|
747
|
+
|
|
748
|
+
|
|
677
749
|
def dashboard_assess_twb(invocation: Invocation) -> HandlerResult:
|
|
678
750
|
"""Assess a local Tableau workbook through the SDK multipart seam."""
|
|
679
751
|
file_path = _require_str_positional(invocation, "file")
|
|
@@ -15,6 +15,8 @@ from collections.abc import Callable
|
|
|
15
15
|
from pathlib import Path
|
|
16
16
|
from typing import Any
|
|
17
17
|
|
|
18
|
+
from mammoth_cli.commands.view import upload_preview
|
|
19
|
+
from mammoth_cli.context import profiles
|
|
18
20
|
from mammoth_cli.errors.envelope import (
|
|
19
21
|
CODE_INVALID_ARGUMENT,
|
|
20
22
|
CODE_MISSING_ARGUMENT,
|
|
@@ -24,6 +26,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
24
26
|
CliError,
|
|
25
27
|
)
|
|
26
28
|
from mammoth_cli.manifest.loader import command_by_id
|
|
29
|
+
from mammoth_cli.runtime import parents
|
|
27
30
|
from mammoth_cli.runtime.confirm import (
|
|
28
31
|
POLICY_CONFIRM_TARGET,
|
|
29
32
|
POLICY_PROMPT_OR_YES,
|
|
@@ -226,6 +229,18 @@ def file_upload(invocation: Invocation) -> HandlerResult:
|
|
|
226
229
|
# ambiguous date column lands in ``need_action`` with no view. Report
|
|
227
230
|
# the status the platform holds for each dataset, not an assumed one.
|
|
228
231
|
result = _upload_result(data, lambda dataset_id: _dataset_status(service, dataset_id))
|
|
232
|
+
project_id = resolved_project(invocation)
|
|
233
|
+
for entry in result["datasets"]:
|
|
234
|
+
if entry.get("status") != "ready":
|
|
235
|
+
continue
|
|
236
|
+
preview = upload_preview(service, int(entry["id"]), project_id)
|
|
237
|
+
if preview is not None:
|
|
238
|
+
entry["view"] = preview
|
|
239
|
+
parents.remember(
|
|
240
|
+
invocation.profile or profiles.get_selected(),
|
|
241
|
+
auth.workspace_id,
|
|
242
|
+
{preview["view_id"]: int(entry["id"])},
|
|
243
|
+
)
|
|
229
244
|
return result, _meta(invocation, auth.workspace_id, resolved_project(invocation))
|
|
230
245
|
|
|
231
246
|
|