mammoth-cli 2.2.27__tar.gz → 2.2.29__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.27 → mammoth_cli-2.2.29}/PKG-INFO +1 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +6 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/dataset.py +17 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/view.py +84 -14
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/errors/envelope.py +1 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/pyproject.toml +1 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/browse.yaml +1 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/dashboard.yaml +1 -1
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/dataset.yaml +1 -8
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/view.yaml +3 -25
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/.gitignore +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/LICENSE +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/README.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/schema.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/spec/openapi/openapi.json +0 -0
|
@@ -141,7 +141,12 @@ No command:
|
|
|
141
141
|
- **Union or append two views.** There is no union task. Upload a file into
|
|
142
142
|
an existing dataset with `append_to_ds_id`, or send a view's rows into an
|
|
143
143
|
existing dataset with `view export dataset` (`target_ds_id` and
|
|
144
|
-
`save_as_mode` `APPEND_TO_DS`).
|
|
144
|
+
`save_as_mode` `APPEND_TO_DS`). Omit `column_mapping` and every column is
|
|
145
|
+
matched by name; a non-empty `column_mapping` is used as-is, so it must map
|
|
146
|
+
every source column to an existing target column. A partial mapping, or a
|
|
147
|
+
destination the target lacks, is refused with `append_mapping_incomplete`
|
|
148
|
+
before anything is written (the backend would append only the mapped columns
|
|
149
|
+
and add a new column for the unknown name). An append is a standing link: it is stored
|
|
145
150
|
as a pipeline step of the source view, so every later re-run of that view
|
|
146
151
|
appends again into the target dataset, not just the first run. A column
|
|
147
152
|
with the same name but a different type in the source view and the target
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# What is proven on release
|
|
2
2
|
|
|
3
3
|
Generated from `docs/release-capability-matrix.json`; do not edit by hand.
|
|
4
|
-
The CLI publishes
|
|
4
|
+
The CLI publishes 646 commands. 516 of them bind one of the 545 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 262 bound commands ran once successfully on release, 1 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
|
|
5
5
|
|
|
6
6
|
Status meanings:
|
|
7
7
|
|
|
@@ -526,7 +526,8 @@ def _compact_dataset_list(data: Any, offset: int, sort: str | None, limit: int)
|
|
|
526
526
|
"order": sort or "newest first (created_at desc)",
|
|
527
527
|
"note": (
|
|
528
528
|
"A dataset record holds no sample values; 'view list DATASET_ID' shows "
|
|
529
|
-
"a sample of the stored profile per view as sample_values
|
|
529
|
+
"a sample of the stored profile per view as sample_values "
|
|
530
|
+
"(all_columns: true lists every column)."
|
|
530
531
|
),
|
|
531
532
|
}
|
|
532
533
|
# The list route sends no ``next``: a page of ``limit`` rows may have a successor.
|
|
@@ -802,6 +803,7 @@ def dataset_create(invocation: Invocation) -> HandlerResult:
|
|
|
802
803
|
document = invocation.load_input()
|
|
803
804
|
dataset_spec = _require_field(document, "dataset_spec")
|
|
804
805
|
ds_creation_type = _require_field(document, "ds_creation_type")
|
|
806
|
+
_require_clone_views(ds_creation_type, dataset_spec)
|
|
805
807
|
kwargs: dict[str, Any] = {
|
|
806
808
|
"dataset_spec": dataset_spec,
|
|
807
809
|
"ds_creation_type": ds_creation_type,
|
|
@@ -822,6 +824,20 @@ def dataset_create(invocation: Invocation) -> HandlerResult:
|
|
|
822
824
|
return result, _meta(invocation, auth.workspace_id, project_id)
|
|
823
825
|
|
|
824
826
|
|
|
827
|
+
def _require_clone_views(ds_creation_type: object, dataset_spec: object) -> None:
|
|
828
|
+
"""Refuse a clone with no ``clone_dataview_ids``: the server would make a blank view."""
|
|
829
|
+
if ds_creation_type != "clone" or not isinstance(dataset_spec, dict):
|
|
830
|
+
return
|
|
831
|
+
if dataset_spec.get("clone_dataview_ids") == []:
|
|
832
|
+
raise CliError(
|
|
833
|
+
code=CODE_MISSING_ARGUMENT,
|
|
834
|
+
message="A clone needs at least one view in dataset_spec.clone_dataview_ids",
|
|
835
|
+
exit_status=EXIT_USAGE,
|
|
836
|
+
hint="Pass the source dataset's default_view id from 'mammoth view list "
|
|
837
|
+
"DATASET_ID' (other views only when asked); an empty list makes a blank view.",
|
|
838
|
+
)
|
|
839
|
+
|
|
840
|
+
|
|
825
841
|
def _created_dataset(handle: Any, settled: Any) -> dict[str, Any]:
|
|
826
842
|
"""Shape a create job (handle + settled result) into a labeled result.
|
|
827
843
|
|
|
@@ -3545,6 +3545,7 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
3545
3545
|
_reject_export_into_draft(service, dataview_id, dataset_id)
|
|
3546
3546
|
target_view_before = None
|
|
3547
3547
|
target_only_columns: list[str] = []
|
|
3548
|
+
mapped_type_warnings: list[str] = []
|
|
3548
3549
|
if target_ds_id is not None:
|
|
3549
3550
|
# Each `view export dataset` call creates its own PERSISTENT
|
|
3550
3551
|
# export trigger on this view, which re-runs on every pipeline
|
|
@@ -3578,7 +3579,7 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
3578
3579
|
# before the call so a later re-read can never be confused with it.
|
|
3579
3580
|
target_view_before = _dataset_view_info(service, int(target_ds_id), result_project_id)
|
|
3580
3581
|
if save_as_mode == "APPEND_TO_DS":
|
|
3581
|
-
target_only_columns = _reject_append_schema_mismatch(
|
|
3582
|
+
target_only_columns, mapped_type_warnings = _reject_append_schema_mismatch(
|
|
3582
3583
|
service,
|
|
3583
3584
|
dataview_id,
|
|
3584
3585
|
dataset_id,
|
|
@@ -3640,13 +3641,17 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
3640
3641
|
# An append is expected to grow the target; verify.py treats
|
|
3641
3642
|
# a non-increase here as unverified, not just an omitted count.
|
|
3642
3643
|
row_check["expected_row_increase"] = True
|
|
3644
|
+
warnings = list(mapped_type_warnings)
|
|
3643
3645
|
if target_only_columns:
|
|
3644
3646
|
# Allowed -- an append never has to cover every target column
|
|
3645
3647
|
# -- but worth surfacing rather than leaving silent.
|
|
3646
|
-
|
|
3648
|
+
warnings.insert(
|
|
3649
|
+
0,
|
|
3647
3650
|
"target dataset has column(s) the source view does not (kept "
|
|
3648
|
-
"as-is): " + ", ".join(target_only_columns)
|
|
3649
|
-
|
|
3651
|
+
"as-is): " + ", ".join(target_only_columns),
|
|
3652
|
+
)
|
|
3653
|
+
if warnings:
|
|
3654
|
+
row_check["warnings"] = warnings
|
|
3650
3655
|
data["row_check"] = row_check
|
|
3651
3656
|
if pipeline_error is not None:
|
|
3652
3657
|
data["pipeline_error"] = pipeline_error
|
|
@@ -3799,24 +3804,92 @@ def _reject_append_type_mismatch(
|
|
|
3799
3804
|
)
|
|
3800
3805
|
|
|
3801
3806
|
|
|
3807
|
+
def _reject_partial_append_mapping(
|
|
3808
|
+
source_names: set[str],
|
|
3809
|
+
target_names: set[str],
|
|
3810
|
+
mapping: dict[str, str],
|
|
3811
|
+
ids: tuple[int, int],
|
|
3812
|
+
) -> None:
|
|
3813
|
+
"""Refuse a non-empty append ``column_mapping`` that drops or invents columns.
|
|
3814
|
+
|
|
3815
|
+
The backend maps every column by name when the mapping is empty, but uses
|
|
3816
|
+
a non-empty one as-is: unmapped source columns are not appended (their
|
|
3817
|
+
target cells stay NULL) and a destination the target lacks becomes a new
|
|
3818
|
+
column named after the source.
|
|
3819
|
+
"""
|
|
3820
|
+
if not mapping:
|
|
3821
|
+
return
|
|
3822
|
+
unknown = {src: dest for src, dest in sorted(mapping.items()) if dest not in target_names}
|
|
3823
|
+
unmapped = sorted(source_names - set(mapping))
|
|
3824
|
+
if not unknown and not unmapped:
|
|
3825
|
+
return
|
|
3826
|
+
view_id, target_ds_id = ids
|
|
3827
|
+
problems = []
|
|
3828
|
+
if unknown:
|
|
3829
|
+
listed = ", ".join(f"{dest!r} (for {src!r})" for src, dest in unknown.items())
|
|
3830
|
+
problems.append(f"destination column(s) not in target dataset {target_ds_id}: {listed}")
|
|
3831
|
+
if unmapped:
|
|
3832
|
+
problems.append(f"source column(s) left unmapped and not appended: {', '.join(unmapped)}")
|
|
3833
|
+
raise CliError(
|
|
3834
|
+
code="append_mapping_incomplete",
|
|
3835
|
+
message=(
|
|
3836
|
+
f"column_mapping for appending view {view_id} into dataset {target_ds_id} would "
|
|
3837
|
+
f"corrupt the append: {'; '.join(problems)}. A non-empty column_mapping is used "
|
|
3838
|
+
"as-is: unmapped columns are not appended and an unknown destination creates a "
|
|
3839
|
+
"new column."
|
|
3840
|
+
),
|
|
3841
|
+
exit_status=EXIT_USAGE,
|
|
3842
|
+
hint=(
|
|
3843
|
+
"Omit column_mapping to map all columns by name, or map every source column to "
|
|
3844
|
+
f"an existing column of dataset {target_ds_id}."
|
|
3845
|
+
),
|
|
3846
|
+
details={
|
|
3847
|
+
"unknown_destinations": unknown,
|
|
3848
|
+
"unmapped_source_columns": unmapped,
|
|
3849
|
+
"target_columns": sorted(target_names),
|
|
3850
|
+
},
|
|
3851
|
+
)
|
|
3852
|
+
|
|
3853
|
+
|
|
3854
|
+
def _mapped_type_warnings(
|
|
3855
|
+
source_types: Any, target_schema: dict[str, str], mapping: dict[str, str]
|
|
3856
|
+
) -> list[str]:
|
|
3857
|
+
"""Warn where a mapped source column's type differs from its target column's."""
|
|
3858
|
+
if not isinstance(source_types, dict):
|
|
3859
|
+
return []
|
|
3860
|
+
return [
|
|
3861
|
+
f"mapped column {src!r} is {str(source_types[src]).lower()} but target column "
|
|
3862
|
+
f"{dest!r} is {target_schema[dest].lower()}"
|
|
3863
|
+
for src, dest in sorted(mapping.items())
|
|
3864
|
+
if source_types.get(src)
|
|
3865
|
+
and target_schema.get(dest)
|
|
3866
|
+
and str(source_types[src]).lower() != target_schema[dest].lower()
|
|
3867
|
+
]
|
|
3868
|
+
|
|
3869
|
+
|
|
3802
3870
|
def _reject_append_schema_mismatch(
|
|
3803
3871
|
service: Any,
|
|
3804
3872
|
dataview_id: int,
|
|
3805
3873
|
dataset_id: int | None,
|
|
3806
3874
|
target_ds_id: int,
|
|
3807
3875
|
column_mapping: Any,
|
|
3808
|
-
) -> list[str]:
|
|
3876
|
+
) -> tuple[list[str], list[str]]:
|
|
3809
3877
|
"""Refuse an ``APPEND_TO_DS`` export whose source has a column the target
|
|
3810
3878
|
dataset's schema does not, and ``column_mapping`` does not cover.
|
|
3811
3879
|
|
|
3880
|
+
A non-empty ``column_mapping`` is stricter: the backend then copies only
|
|
3881
|
+
the mapped columns and turns an unknown destination into a new column, so
|
|
3882
|
+
every source column must be mapped to a column the target already has
|
|
3883
|
+
(``_reject_partial_append_mapping``).
|
|
3884
|
+
|
|
3812
3885
|
An append writes into rows the target dataset already has; a source
|
|
3813
3886
|
column with no home in the target schema and no explicit mapping would
|
|
3814
3887
|
otherwise reach the backend as a malformed write. Checked here, before
|
|
3815
3888
|
the call, so the refusal costs nothing and names exactly what to fix.
|
|
3816
3889
|
|
|
3817
3890
|
Returns the target-only column names (present in the target schema, not
|
|
3818
|
-
in the source, not a ``column_mapping`` destination)
|
|
3819
|
-
worth a warning
|
|
3891
|
+
in the source, not a ``column_mapping`` destination) and the type
|
|
3892
|
+
warnings for mapped pairs -- both allowed, but worth a warning.
|
|
3820
3893
|
"""
|
|
3821
3894
|
source_columns = service.call_view(dataview_id, "columns", dataset_id=dataset_id)
|
|
3822
3895
|
if not isinstance(source_columns, dict):
|
|
@@ -3833,14 +3906,11 @@ def _reject_append_schema_mismatch(
|
|
|
3833
3906
|
# dict keys are display names, matching what the backend's own schema
|
|
3834
3907
|
# match compares by -- never the internal ids in the dict's values.
|
|
3835
3908
|
source_names = set(source_columns)
|
|
3909
|
+
_reject_partial_append_mapping(source_names, target_names, mapping, (dataview_id, target_ds_id))
|
|
3836
3910
|
source_only = sorted(source_names - target_names - set(mapping))
|
|
3837
3911
|
target_only = sorted(target_names - source_names - set(mapping.values()))
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
target_schema,
|
|
3841
|
-
mapping,
|
|
3842
|
-
(dataview_id, target_ds_id),
|
|
3843
|
-
)
|
|
3912
|
+
source_types = service.call_view(dataview_id, "column_types", dataset_id=dataset_id)
|
|
3913
|
+
_reject_append_type_mismatch(source_types, target_schema, mapping, (dataview_id, target_ds_id))
|
|
3844
3914
|
if source_only:
|
|
3845
3915
|
raise CliError(
|
|
3846
3916
|
code="append_schema_mismatch",
|
|
@@ -3855,7 +3925,7 @@ def _reject_append_schema_mismatch(
|
|
|
3855
3925
|
),
|
|
3856
3926
|
details={"source_only": source_only, "target_only": target_only},
|
|
3857
3927
|
)
|
|
3858
|
-
return target_only
|
|
3928
|
+
return target_only, _mapped_type_warnings(source_types, target_schema, mapping)
|
|
3859
3929
|
|
|
3860
3930
|
|
|
3861
3931
|
def _dataset_view_info(
|
|
@@ -77,6 +77,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
77
77
|
"More than one item matched, so the assistant needs to be more specific."
|
|
78
78
|
),
|
|
79
79
|
"api_error": "Mammoth couldn't complete this step.",
|
|
80
|
+
"append_mapping_incomplete": "The column mapping would leave columns out or add new ones.",
|
|
80
81
|
"append_schema_mismatch": "The new data doesn't line up with the existing columns.",
|
|
81
82
|
"append_type_mismatch": "A column has a different type than in the existing data.",
|
|
82
83
|
"append_schema_unreadable": "The columns of the existing data couldn't be read.",
|
|
@@ -303,7 +303,7 @@ commands:
|
|
|
303
303
|
- CT-BROWSE-SEARCH-ERROR
|
|
304
304
|
draft_test: null
|
|
305
305
|
undo_test: null
|
|
306
|
-
known_restrictions: 'Searches resources across every project you can open in the workspace (resources v2), a cursor page at a time: pass next_cursor back as cursor while has_more is true. search matches names; resource_type (comma-separated), sort and fields narrow the page. Needs no active project.'
|
|
306
|
+
known_restrictions: 'Searches resources across every project you can open in the workspace (resources v2), a cursor page at a time: pass next_cursor back as cursor while has_more is true. search matches names; resource_type (comma-separated), sort and fields narrow the page. Needs no active project. Each dataset hit carries dataset_id (its object_id) and each view hit view_id: pass those, never the tree id.'
|
|
307
307
|
reviewed_by: primary
|
|
308
308
|
readback:
|
|
309
309
|
command: browse.search
|
|
@@ -389,7 +389,7 @@ commands:
|
|
|
389
389
|
- CT-DASHBOARD-CANVAS-GET-ERROR
|
|
390
390
|
draft_test: null
|
|
391
391
|
undo_test: null
|
|
392
|
-
known_restrictions:
|
|
392
|
+
known_restrictions: 'A board''s data is the view in the canvas dataset.dataview_id: read it with view data get VIEW_ID. After a board''s bake job, read the canvas and quote one number from it, such as a KPI total.'
|
|
393
393
|
reviewed_by: primary
|
|
394
394
|
- command_id: dashboard.canvas.restore
|
|
395
395
|
command_path: dashboard canvas restore
|
|
@@ -246,14 +246,7 @@ commands:
|
|
|
246
246
|
- CT-DATASET-CREATE-ERROR
|
|
247
247
|
draft_test: null
|
|
248
248
|
undo_test: null
|
|
249
|
-
known_restrictions: ds_creation_type is freeform and dataset_spec is arbitrary, so variants beyond the
|
|
250
|
-
documented path are not qualified. Retained live evidence supports ds_creation_type=weburl with dataset_spec.url;
|
|
251
|
-
the CLI command waits for the raw SDK job and returned ready for five OWID URL imports. Re-read returned
|
|
252
|
-
dataset/view IDs and delete only IDs created by this task. A weburl dataset is a one-time copy that
|
|
253
|
-
keeps no source details to refresh from, so automation's run_data_retrieval task cannot refresh it
|
|
254
|
-
(only a cloud-connected dataset can be refreshed); say so rather than scheduling a refresh for it.
|
|
255
|
-
The result's name is the dataset's real name; when the requested name was taken the server adds a suffix,
|
|
256
|
-
and requested_name and note say so. Use name, not the name you asked for.
|
|
249
|
+
known_restrictions: 'ds_creation_type is freeform and dataset_spec is arbitrary, so variants beyond the documented path are not qualified. Retained live evidence supports ds_creation_type=weburl with dataset_spec.url; the CLI command waits for the raw SDK job and returned ready for five OWID URL imports. Re-read returned dataset/view IDs and delete only IDs created by this task. A weburl dataset is a one-time copy that keeps no source details to refresh from, so automation''s run_data_retrieval task cannot refresh it (only a cloud-connected dataset can be refreshed); say so rather than scheduling a refresh for it. The result''s name is the dataset''s real name; when the requested name was taken the server adds a suffix, and requested_name and note say so. Use name, not the name you asked for. To copy a dataset as a new independent one: {"ds_creation_type": "clone", "dataset_spec": {"ds_name": NEW_NAME, "source_ds_id": ID, "clone_dataview_ids": [DEFAULT_VIEW_ID], "exclude_data": false}}, DEFAULT_VIEW_ID being the id in dataset''s `default_view` from view list (other views only when asked); an empty clone_dataview_ids is refused here because it makes a blank view. A clone waits and returns the new dataset_id; never use view export dataset for a plain copy, which leaves a live export on the source. A weburl import names the dataset after the downloaded file: follow it with dataset rename to the name the user picked.'
|
|
257
250
|
reviewed_by: primary
|
|
258
251
|
- command_id: dataset.create-from-pdf
|
|
259
252
|
command_path: dataset create-from-pdf
|
|
@@ -807,7 +807,7 @@ commands:
|
|
|
807
807
|
- CT-VIEW-CREATE-ERROR
|
|
808
808
|
draft_test: null
|
|
809
809
|
undo_test: null
|
|
810
|
-
known_restrictions:
|
|
810
|
+
known_restrictions: 'To work on a dataset''s changes without touching its own views, create a working view; clone_from (a view id of the same dataset) carries that view''s steps. A dataset''s own view is the default_view of view list, never the newest or an agent-made view: read it, or clone it with clone_from when steps are needed; edit it in place only when asked to change that view.'
|
|
811
811
|
reviewed_by: primary
|
|
812
812
|
- command_id: view.data-check.create
|
|
813
813
|
command_path: view data-check create
|
|
@@ -1347,26 +1347,7 @@ commands:
|
|
|
1347
1347
|
- CT-VIEW-DATA-EXPLORE-ERROR
|
|
1348
1348
|
draft_test: null
|
|
1349
1349
|
undo_test: null
|
|
1350
|
-
known_restrictions: 'Read-only: explore one column the way the web app''s column Explore card does --
|
|
1351
|
-
trend, distribution, histogram, or top values -- without adding a task to the view''s pipeline (never
|
|
1352
|
-
use ''view transform pivot'' just to explore). DATE column: counts per ''level'' bucket (AUTO default;
|
|
1353
|
-
SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR, DECADE, CENTURY, MILLENNIUM) for "what''s trending",
|
|
1354
|
-
"over time", "by month", "by year". NUMERIC column: counts per ''level'' resolution (AUTO default;
|
|
1355
|
-
a power of 10) for a distribution or histogram. TEXT column: top values by count, ''limit'' default
|
|
1356
|
-
20 -- "what''s in this column". Every bucket has ''count'' and ''percentage'' of the total. Options
|
|
1357
|
-
(--input): ''metric'' {"column","function"} adds a per-bucket SUM, COUNT, AVG, MIN, MAX, STDDEV or
|
|
1358
|
-
DISTINCT_COUNT over another column (the custom card); ''condition'' filters rows first -- include/exclude
|
|
1359
|
-
values, blanks, a date or number range, text contains -- and several cards'' selections combine as
|
|
1360
|
-
one AND condition (cross-filter); drill down by re-running at a finer ''level'' with a ''condition''
|
|
1361
|
-
on the chosen bucket''s range; ''sort'' count_desc, count_asc, value_asc or value_desc; ''limit''
|
|
1362
|
-
and ''offset'' page the buckets ("load more"); ''sequence'' explores at a pipeline step. Related:
|
|
1363
|
-
distinct raw values of a DATE/NUMERIC column, a summary (min/max/sum/avg) or a matching-row count
|
|
1364
|
-
-> ''view data aggregate''; keep the filter as a pipeline step -> ''view transform filter''; save
|
|
1365
|
-
it as a new view -> ''view create'' then ''view transform filter'' on it; download all rows -> ''view
|
|
1366
|
-
export csv''. A TEXT column of dates takes a level (or column_type DATE): the format is detected from the data and
|
|
1367
|
-
stated in text_dates; ambiguous or unreadable dates fail loud. A column_type that disagrees with the
|
|
1368
|
-
stored type is refused, never dropped. Example: --input ''{"level": "MONTH", "condition": {"column": "Results", "operator":
|
|
1369
|
-
"EQ", "value": "Fail"}}''.'
|
|
1350
|
+
known_restrictions: 'Read-only: explore one column the way the web app''s column Explore card does -- trend, distribution, histogram, or top values -- without adding a task to the view''s pipeline (never use ''view transform pivot'' just to explore). DATE column: counts per ''level'' bucket (AUTO default; SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR, DECADE, CENTURY, MILLENNIUM) for "what''s trending", "over time", "by month", "by year". NUMERIC column: counts per ''level'' resolution (AUTO default; a power of 10) for a distribution or histogram. TEXT column: top values by count, ''limit'' default 20 -- "what''s in this column". Every bucket has ''count'' and ''percentage'' of the total. Options (--input): ''metric'' {"column","function"} adds a per-bucket SUM, COUNT, AVG, MIN, MAX, STDDEV or DISTINCT_COUNT over another column (the custom card); ''condition'' filters rows first -- include/exclude values, blanks, a date or number range, text contains -- and several cards'' selections combine as one AND condition (cross-filter); drill down by re-running at a finer ''level'' with a ''condition'' on the chosen bucket''s range; ''sort'' count_desc, count_asc, value_asc or value_desc; ''limit'' and ''offset'' page the buckets ("load more"); ''sequence'' explores at a pipeline step. Related: distinct raw values of a DATE/NUMERIC column, a summary (min/max/sum/avg) or a matching-row count -> ''view data aggregate''; keep the filter as a pipeline step -> ''view transform filter''; save it as a new view -> ''view create'' then ''view transform filter'' on it; download all rows -> ''view export csv''. A TEXT column of dates takes a level (or column_type DATE): the format is detected from the data and stated in text_dates; ambiguous or unreadable dates fail loud. A column_type that disagrees with the stored type is refused, never dropped. Example: --input ''{"level": "MONTH", "condition": {"column": "Results", "operator": "EQ", "value": "Fail"}}''. A figure for a period (year, quarter, month) is one explore of the DATE column with level YEAR, QUARTER or MONTH and a metric {"column": AMOUNT, "function": "SUM"}: it returns one figure per period and the date range the data covers, so no rows need paging. cumulative true adds a running total; keep one year or range with condition, for a year {"column": DATE_COLUMN, "operator": "=", "value": 2017, "component": "year"}. Figures come back rounded to two decimals: quote them as returned.'
|
|
1370
1351
|
reviewed_by: primary
|
|
1371
1352
|
- command_id: view.data.profile
|
|
1372
1353
|
command_path: view data profile
|
|
@@ -2280,10 +2261,7 @@ commands:
|
|
|
2280
2261
|
- CT-VIEW-EXPORT-DATASET-ERROR
|
|
2281
2262
|
draft_test: null
|
|
2282
2263
|
undo_test: null
|
|
2283
|
-
known_restrictions: 'Mutation class dynamic: benign_mutation for a new target, destructive when replacing
|
|
2284
|
-
an existing target. The export is appended to the source pipeline (end_of_pipeline) and re-runs with
|
|
2285
|
-
it; target_project_id sends the dataset into another project (cross-project branch-out, proven on
|
|
2286
|
-
release). Result: {dataset_id, project_id, source_view_id, next}.'
|
|
2264
|
+
known_restrictions: 'Mutation class dynamic: benign_mutation for a new target, destructive when replacing an existing target. The export is appended to the source pipeline (end_of_pipeline) and re-runs with it; target_project_id sends the dataset into another project (cross-project branch-out, proven on release). Result: {dataset_id, project_id, source_view_id, next}. Not a plain copy: this leaves a live export on the source and the new dataset refreshes from the source view, so keep that working view and name it as the new dataset''s source. For an independent copy of a dataset use dataset create with ds_creation_type clone. Appending into an existing dataset (save_as_mode APPEND_TO_DS with target_ds_id): omit column_mapping and every column is mapped by name; a non-empty column_mapping is used as-is, so it must map every source column to an existing target column, and a partial mapping or an unknown destination is refused (append_mapping_incomplete) before anything is written. A mapped pair of different types is reported in row_check.warnings.'
|
|
2287
2265
|
reviewed_by: primary
|
|
2288
2266
|
- command_id: view.export.delete
|
|
2289
2267
|
command_path: view export delete
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.27 → mammoth_cli-2.2.29}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|