mammoth-cli 2.2.11__tar.gz → 2.2.13__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.11 → mammoth_cli-2.2.13}/PKG-INFO +2 -2
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +4 -4
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +2 -2
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +9 -5
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +1 -1
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/schedule.py +12 -8
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/schema.py +22 -3
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/view.py +50 -12
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/dryrun_targets.py +84 -1
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/command_contract.py +3 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/data_quality.py +7 -9
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/input_fields.py +3 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/listing.py +7 -3
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/pyproject.toml +2 -2
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/schedule.yaml +1 -1
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/view.yaml +3 -3
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/.gitignore +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/LICENSE +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/README.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.11 → mammoth_cli-2.2.13}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.13
|
|
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.9,>=0.8.
|
|
20
|
+
Requires-Dist: mammoth-io<0.9,>=0.8.13
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.12.5
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -160,7 +160,7 @@ Example: `mammoth view create 123`. Placeholders are illustrative; resolve IDs a
|
|
|
160
160
|
|
|
161
161
|
Result: `ViewCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
|
|
162
162
|
|
|
163
|
-
Status on release: ran once on CLI 2.0.18 — golden-data check 2026-09-19 (CLI 2.0.18): plain create on an owned dataset returned the new view's record (id, dataset_id; earlier releases printed '<unserializable View>'), and discard-duplicates then ran on it. clone_from
|
|
163
|
+
Status on release: ran once on CLI 2.0.18 — golden-data check 2026-09-19 (CLI 2.0.18): plain create on an owned dataset returned the new view's record (id, dataset_id; earlier releases printed '<unserializable View>'), and discard-duplicates then ran on it. clone_from works on a backend with mvc e56f23…
|
|
164
164
|
|
|
165
165
|
### `view.data-check.create`
|
|
166
166
|
|
|
@@ -878,11 +878,11 @@ Status on release: ran once on CLI 2.0.14 — write sweep 2026-09-18: exit 0 on
|
|
|
878
878
|
|
|
879
879
|
Run: `mammoth view update`. Exact input fields: `mammoth schema get view.update`.
|
|
880
880
|
|
|
881
|
-
Example: `mammoth view update 123 123 --input '{"
|
|
881
|
+
Example: `mammoth view update 123 123 --input '{"name": "Revenue report"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
882
882
|
|
|
883
|
-
|
|
883
|
+
Result: `ViewUpdateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
884
884
|
|
|
885
|
-
|
|
885
|
+
Status on release: untried; no live run recorded.
|
|
886
886
|
|
|
887
887
|
### `view.version.apply`
|
|
888
888
|
|
|
@@ -56,8 +56,8 @@ mammoth view export csv ORDERS_VIEW --project PROJECT_ID \
|
|
|
56
56
|
# check the file's header and row count against the last readback
|
|
57
57
|
|
|
58
58
|
# 7. per-region summary as the LAST step on the same view (pivot replaces the view's columns in place;
|
|
59
|
-
#
|
|
60
|
-
#
|
|
59
|
+
# to keep the uncollapsed view as well, copy it first with view create DATASET_ID --input '{"clone_from": VIEW_ID}'
|
|
60
|
+
# (same dataset only; the copy keeps the source's steps) and pivot the copy instead)
|
|
61
61
|
mammoth view transform pivot ORDERS_VIEW --project PROJECT_ID \
|
|
62
62
|
--input '{"dataset_id": ORDERS_DS, "group_by": ["region"], "aggregations": [{"column": "amount", "function": "SUM", "as_name": "total_amount"}, {"column": "order_id", "function": "COUNT", "as_name": "order_count"}]}'
|
|
63
63
|
mammoth view data get ORDERS_VIEW ORDERS_DS --project PROJECT_ID
|
|
@@ -151,11 +151,15 @@ display name) with display-name columns; unquoted or placeholder table names
|
|
|
151
151
|
select queries allowed". The result replaces the view's columns: never run it
|
|
152
152
|
(or `pivot`) on a view whose rows are still needed; export those rows first
|
|
153
153
|
(`view export csv`) and run the summary as the last step, and prefer `pivot`
|
|
154
|
-
(proven on release) over a SQL task.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
(proven on release) over a SQL task. To keep the view's rows and still
|
|
155
|
+
summarise, copy it first with `view create DATASET_ID --input
|
|
156
|
+
'{"clone_from": VIEW_ID}'` (same dataset only) and run the summary on the
|
|
157
|
+
copy: the copy keeps the source's steps and runs them (koyal, 2026-10-02: the
|
|
158
|
+
cloned steps executed and the copy took a further filter). Only a backend
|
|
159
|
+
older than 2026-09-26 left the copy's tasks unrun, answering reads with
|
|
160
|
+
`4DTVW019`; see recovery.md. A plain `view create DATASET_ID` (no
|
|
161
|
+
`clone_from`) is not a copy: it gives a fresh view of the raw upload, without
|
|
162
|
+
the pipeline:
|
|
159
163
|
|
|
160
164
|
A task must fit the column's type: `replace-values`, `bulk-replace` and the
|
|
161
165
|
text operations take TEXT columns, `math` takes NUMERIC. Check `type` in the
|
|
@@ -30,7 +30,7 @@ these commands are not blanket permission to replay a mutation.
|
|
|
30
30
|
| `resource_not_found` (exit 5) after `view get VIEW_ID` / `view data get VIEW_ID` without a parent | discovery could not find the view in the selected project | pass `--project PROJECT_ID` and the `DATASET_ID` positional from `view list` |
|
|
31
31
|
| `{"data": "<unserializable View>"}` from `view get VIEW_ID` | CLI ≤ 2.0.17 only; fixed in 2.0.18 | upgrade, or rerun as `view get VIEW_ID DATASET_ID` |
|
|
32
32
|
| `pipeline_reference_error` (exit 1) from a transform or `view task add`, `details.reference_errors[].reason` `type mismatch` / `not available` | the backend stored the task but cannot bind it to that column (find/replace and text operations take TEXT columns, math takes NUMERIC); the view is in `ref_error` and every read of it fails with `4DTVW019` until the task goes | run the printed `view task delete VIEW_ID TASK_ID --yes`, then convert-type the column or pick a transform for its type; CLI ≤ 2.0.24 reported this as success with `has_error: true` |
|
|
33
|
-
| `4DTVW019 INVALID_RESPONSE_GENERATED` on every read of a view made with `view create ... "clone_from"` | backend
|
|
33
|
+
| `4DTVW019 INVALID_RESPONSE_GENERATED` on every read of a view made with `view create ... "clone_from"` | only a backend older than mvc `e56f2338b6` (2026-09-26) leaves the clone's copied tasks `added`, never run; on a current backend a same-dataset clone runs its copied tasks and reads normally (koyal view 4429: both tasks `executed`), so any other cause is the `ref_error` row above | `view task list VIEW_ID DATASET_ID`: tasks stuck at `added` mean an old backend, so delete the copy and rebuild the steps on a plain view; a task in `ref_error` means delete that task. A copy of a view should still be made with `clone_from` (same dataset only), which keeps the source's steps; see recipes/end-to-end.md |
|
|
34
34
|
| `needs_view` in `file upload` result, or `status: ready` with `status_info.ready` "more than one plausible way to be read" and `view list` empty | all-text CSV: the platform ingests the rows but creates no view | run the `next_command` (`view create DATASET_ID`) once, then `view list DATASET_ID`; see recipes/need-action.md |
|
|
35
35
|
| `need_action` in `file upload` result | the platform needs a parsing decision (e.g. ambiguous dates) | run the `next_command` it returns (`dataset file-settings get ID`), then `dataset file-settings update ID`; see recipes/need-action.md |
|
|
36
36
|
| `confirmation_required` (exit 2) | destructive/high-impact command without `--yes` (and `--confirm TARGET` when policy is confirm_target) | re-run with the flag after you have read the target back by id |
|
|
@@ -22,6 +22,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
22
22
|
CODE_SDK_SYMBOL_UNRESOLVED,
|
|
23
23
|
EXIT_USAGE,
|
|
24
24
|
CliError,
|
|
25
|
+
not_available_error,
|
|
25
26
|
)
|
|
26
27
|
from mammoth_cli.manifest.loader import command_by_id
|
|
27
28
|
from mammoth_cli.runtime.confirm import (
|
|
@@ -154,14 +155,17 @@ def _meta(invocation: Invocation, workspace_id: int, project_id: int) -> dict[st
|
|
|
154
155
|
|
|
155
156
|
|
|
156
157
|
def schedule_list(invocation: Invocation) -> HandlerResult:
|
|
157
|
-
"""
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
158
|
+
"""Retired: the server does not implement listing a project's schedules.
|
|
159
|
+
|
|
160
|
+
``GET /workspaces/{id}/projects/{id}/schedules`` always answers ``5GENR011
|
|
161
|
+
NOT_IMPLEMENTED`` (the server raises it on purpose). The command stays so a
|
|
162
|
+
caller gets a clear answer instead of a bare backend error.
|
|
163
|
+
"""
|
|
164
|
+
raise not_available_error(
|
|
165
|
+
"schedule list",
|
|
166
|
+
web_path="the web app, which opens a schedule from the dataset or automation that owns it",
|
|
167
|
+
instead="`schedule get SCHEDULE_ID` reads one schedule by an id you already have.",
|
|
168
|
+
)
|
|
165
169
|
|
|
166
170
|
|
|
167
171
|
def schedule_get(invocation: Invocation) -> HandlerResult:
|
|
@@ -74,6 +74,7 @@ _GROUP_DISCOVERY_PURPOSES = {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
_COMMAND_DISCOVERY_PURPOSES = {
|
|
77
|
+
"view.update": "rename change name to a new name title relabel",
|
|
77
78
|
"file.upload": (
|
|
78
79
|
"upload import CSV spreadsheet XLSX source data append add rows union stack "
|
|
79
80
|
"a file into an existing dataset excel workbook tabs sheets drop in"
|
|
@@ -305,7 +306,7 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
305
306
|
"view.data.explore": (
|
|
306
307
|
"explore trend trends trending over time per day week month quarter year by date "
|
|
307
308
|
"distribution spread histogram top most common frequent values breakdown share "
|
|
308
|
-
"percentage profile"
|
|
309
|
+
"percentage profile period year quarter month date range coverage figure"
|
|
309
310
|
),
|
|
310
311
|
# "Give the West team their own copy they can change" / "duplicate this
|
|
311
312
|
# dataset as an independent copy" / "clone it without changing the
|
|
@@ -323,7 +324,10 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
323
324
|
# value -- and neither can be dropped as a data word anyway, since
|
|
324
325
|
# view.data.explore's own purpose text already uses both for its trend
|
|
325
326
|
# feature.
|
|
326
|
-
"view.data.aggregate":
|
|
327
|
+
"view.data.aggregate": (
|
|
328
|
+
"group and sum totals by month week without changing the pipeline "
|
|
329
|
+
"sum total figure answer a question, read only"
|
|
330
|
+
),
|
|
327
331
|
# Goals stated as "what is in this data" / "why do customers churn": one
|
|
328
332
|
# whole-view profile answers both, so the phrasing must reach it.
|
|
329
333
|
"view.data.profile": (
|
|
@@ -1740,6 +1744,21 @@ def _inline_call_detail(entries: list[dict[str, Any]]) -> None:
|
|
|
1740
1744
|
entry["agent_example"] = record["agent_example"]
|
|
1741
1745
|
|
|
1742
1746
|
|
|
1747
|
+
def _inline_picks(page: list[dict[str, Any]], offset: int) -> list[dict[str, Any]]:
|
|
1748
|
+
"""The entries to inline: the top ones, plus read commands ranked below a write.
|
|
1749
|
+
|
|
1750
|
+
A read that answers the question is worth its fields even when a write such as
|
|
1751
|
+
``view.transform.pivot`` outranks it; otherwise the caller needs a ``schema get``.
|
|
1752
|
+
"""
|
|
1753
|
+
head = page[: max(0, _INLINE_DETAIL_COUNT - offset)]
|
|
1754
|
+
reads = [
|
|
1755
|
+
entry
|
|
1756
|
+
for entry in page[len(head) :]
|
|
1757
|
+
if (command_by_id(entry["command_id"]) or {}).get("mutation_class") == "read"
|
|
1758
|
+
]
|
|
1759
|
+
return head + reads[:_INLINE_DETAIL_COUNT]
|
|
1760
|
+
|
|
1761
|
+
|
|
1743
1762
|
#: How to drill down from a find: a family's full command list, or every family.
|
|
1744
1763
|
_BROWSE_NEXT = (
|
|
1745
1764
|
"mammoth schema list FAMILY lists every command in a family; mammoth schema list "
|
|
@@ -1902,7 +1921,7 @@ def find_schemas(
|
|
|
1902
1921
|
)
|
|
1903
1922
|
total_matches = len(ranked_matches)
|
|
1904
1923
|
page = [match for _, match in ranked_matches[offset : offset + bounded_limit]]
|
|
1905
|
-
_inline_call_detail(page
|
|
1924
|
+
_inline_call_detail(_inline_picks(page, offset))
|
|
1906
1925
|
has_more = offset + len(page) < total_matches
|
|
1907
1926
|
continuation = (
|
|
1908
1927
|
{
|
|
@@ -899,19 +899,45 @@ def view_impact(invocation: Invocation) -> HandlerResult:
|
|
|
899
899
|
|
|
900
900
|
|
|
901
901
|
def view_update(invocation: Invocation) -> HandlerResult:
|
|
902
|
-
"""
|
|
903
|
-
|
|
902
|
+
"""Rename a view from the name input field; any other patch is refused.
|
|
903
|
+
|
|
904
|
+
The dataview patch route leaves op, path and value unconstrained, so the only
|
|
905
|
+
typed change offered is the rename (``replace`` on ``name``).
|
|
906
|
+
"""
|
|
907
|
+
project_id = require_project(invocation)
|
|
908
|
+
dataview_id = _require_int_positional_at(invocation, 0, "view id")
|
|
909
|
+
document = invocation.load_input() or {}
|
|
910
|
+
name = document.get("name")
|
|
911
|
+
# ``dataview_id`` is the VIEW_ID positional, bound into the document by the contract.
|
|
912
|
+
allowed = {"name", _DATASET_ID_FIELD, "dataview_id"}
|
|
913
|
+
if set(document) - allowed or not isinstance(name, str) or not name.strip():
|
|
914
|
+
raise _untyped_patch_error(invocation)
|
|
915
|
+
with open_service(invocation) as (service, auth):
|
|
916
|
+
dataset_id = _resolve_dataset_id(service, invocation, dataview_id, document)
|
|
917
|
+
data = service.call(
|
|
918
|
+
_symbol(invocation),
|
|
919
|
+
dataset_id=dataset_id,
|
|
920
|
+
dataview_id=dataview_id,
|
|
921
|
+
patch_data=[{"op": "replace", "path": "name", "value": name.strip()}],
|
|
922
|
+
project_id=project_id,
|
|
923
|
+
)
|
|
924
|
+
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
def _untyped_patch_error(invocation: Invocation) -> CliError:
|
|
928
|
+
"""The refusal for a view patch that is not the typed rename."""
|
|
929
|
+
return CliError(
|
|
904
930
|
code=CODE_UNSUPPORTED_CONTRACT,
|
|
905
931
|
message="Raw dataview patch operations are not available through the CLI.",
|
|
906
932
|
exit_status=EXIT_USAGE,
|
|
907
933
|
hint=(
|
|
908
|
-
"The OpenAPI operation leaves op, path, and value unconstrained. "
|
|
909
|
-
|
|
934
|
+
"The OpenAPI operation leaves op, path, and value unconstrained. The typed "
|
|
935
|
+
'change is the rename: view update VIEW_ID --input \'{"name": "New name"}\'.'
|
|
910
936
|
),
|
|
911
937
|
details={
|
|
912
938
|
"command_id": invocation.command_id,
|
|
913
939
|
"blocker": "B09 DATAVIEW_INPUT_UNTYPED",
|
|
914
|
-
"typed_alternatives": [],
|
|
940
|
+
"typed_alternatives": ['view update VIEW_ID --input \'{"name": "New name"}\''],
|
|
915
941
|
},
|
|
916
942
|
recovery_commands=[
|
|
917
943
|
"mammoth schema find view",
|
|
@@ -1288,17 +1314,19 @@ def _relabel_and_check(
|
|
|
1288
1314
|
) -> Any:
|
|
1289
1315
|
"""Relabel a data page to display names and add ``column_warnings`` and ``duplicates``.
|
|
1290
1316
|
|
|
1317
|
+
Only read-only data reads call this, so a dates-as-text finding carries no convert fix.
|
|
1318
|
+
|
|
1291
1319
|
The metadata read happens only when the page has rows and the caller has
|
|
1292
1320
|
not read it already (one read serves both the names and the types).
|
|
1293
1321
|
"""
|
|
1294
1322
|
rows = data.get(_ROWS_KEY) if isinstance(data, dict) else None
|
|
1295
1323
|
if not isinstance(rows, list) or not rows:
|
|
1296
1324
|
data = _relabel_columns(service, dataset_id, view_id, project_id, data, mapping)
|
|
1297
|
-
return _with_column_warnings(data, types or {}, view_id, dataset_id)
|
|
1325
|
+
return _with_column_warnings(data, types or {}, view_id, dataset_id, read_only=True)
|
|
1298
1326
|
if mapping is None or types is None:
|
|
1299
1327
|
mapping, types = _column_profile(service, dataset_id, view_id, project_id)
|
|
1300
1328
|
data = _relabel_columns(service, dataset_id, view_id, project_id, data, mapping)
|
|
1301
|
-
data = _with_column_warnings(data, types, view_id, dataset_id)
|
|
1329
|
+
data = _with_column_warnings(data, types, view_id, dataset_id, read_only=True)
|
|
1302
1330
|
return _with_duplicates_fact(data, view_id, dataset_id, whole_view)
|
|
1303
1331
|
|
|
1304
1332
|
|
|
@@ -1322,7 +1350,11 @@ COLUMN_CHECK_ISSUES = (
|
|
|
1322
1350
|
|
|
1323
1351
|
|
|
1324
1352
|
def _with_column_warnings(
|
|
1325
|
-
data: Any,
|
|
1353
|
+
data: Any,
|
|
1354
|
+
types: dict[str, str],
|
|
1355
|
+
view_id: int,
|
|
1356
|
+
dataset_id: int | None = None,
|
|
1357
|
+
read_only: bool = False,
|
|
1326
1358
|
) -> Any:
|
|
1327
1359
|
"""Add ``column_checks`` (always) and ``column_warnings`` (when found).
|
|
1328
1360
|
|
|
@@ -1332,13 +1364,19 @@ def _with_column_warnings(
|
|
|
1332
1364
|
"""
|
|
1333
1365
|
if not isinstance(data, dict) or not isinstance(data.get(_ROWS_KEY, []), list):
|
|
1334
1366
|
return data
|
|
1335
|
-
checks, warnings = _check_columns(
|
|
1367
|
+
checks, warnings = _check_columns(
|
|
1368
|
+
data.get(_ROWS_KEY) or [], types, view_id, dataset_id, read_only
|
|
1369
|
+
)
|
|
1336
1370
|
out = {**data, "column_checks": checks}
|
|
1337
1371
|
return {**out, "column_warnings": warnings} if warnings else out
|
|
1338
1372
|
|
|
1339
1373
|
|
|
1340
1374
|
def _check_columns(
|
|
1341
|
-
rows: list[Any],
|
|
1375
|
+
rows: list[Any],
|
|
1376
|
+
types: dict[str, str],
|
|
1377
|
+
view_id: int,
|
|
1378
|
+
dataset_id: int | None,
|
|
1379
|
+
read_only: bool = False,
|
|
1342
1380
|
) -> tuple[dict[str, Any], list[dict[str, Any]]]:
|
|
1343
1381
|
"""Run ``column_warnings`` and describe what was checked (never raises)."""
|
|
1344
1382
|
checks: dict[str, Any] = {
|
|
@@ -1350,7 +1388,7 @@ def _check_columns(
|
|
|
1350
1388
|
warnings: list[dict[str, Any]] = []
|
|
1351
1389
|
if rows and types:
|
|
1352
1390
|
try:
|
|
1353
|
-
warnings = column_warnings(rows, types, view_id, dataset_id)
|
|
1391
|
+
warnings = column_warnings(rows, types, view_id, dataset_id, read_only)
|
|
1354
1392
|
except Exception as exc: # noqa: BLE001 -- a presentation aid must not fail the read
|
|
1355
1393
|
checks["checked"] = []
|
|
1356
1394
|
checks["error"] = f"{type(exc).__name__}: {exc}"
|
|
@@ -1728,7 +1766,7 @@ def _run_aggregate_for_compare(
|
|
|
1728
1766
|
) -> tuple[list[dict[str, Any]], dict[str, Any]]:
|
|
1729
1767
|
"""Run ``view data aggregate``'s own handler against one view, for compare."""
|
|
1730
1768
|
sub_invocation = dataclasses.replace(
|
|
1731
|
-
invocation, command_id="view.data.aggregate", extra_args=[str(view_id)]
|
|
1769
|
+
invocation, command_id="view.data.aggregate", extra_args=[str(view_id)], positionals={}
|
|
1732
1770
|
)
|
|
1733
1771
|
data, meta = view_data_aggregate(sub_invocation)
|
|
1734
1772
|
rows = data.get(_ROWS_KEY, [])
|
|
@@ -192,6 +192,17 @@ SUBS: dict[str, tuple[Sub, ...]] = {
|
|
|
192
192
|
"view.draft.discard": (
|
|
193
193
|
Sub("draft", "view_id", "view", "view_id", name_fmt="{parent} › unsaved draft changes"),
|
|
194
194
|
),
|
|
195
|
+
"agent.action.delete": (
|
|
196
|
+
Sub(
|
|
197
|
+
"agent action",
|
|
198
|
+
"action_id",
|
|
199
|
+
source="agent.action.list",
|
|
200
|
+
container="actions",
|
|
201
|
+
forward=("session_id",),
|
|
202
|
+
label_paths=("name", "kind"),
|
|
203
|
+
name_fmt="what agent action {action_id} made: {label}",
|
|
204
|
+
),
|
|
205
|
+
),
|
|
195
206
|
"agent.session.delete": (
|
|
196
207
|
Sub(
|
|
197
208
|
"agent session",
|
|
@@ -251,6 +262,34 @@ SUBS: dict[str, tuple[Sub, ...]] = {
|
|
|
251
262
|
label_paths=("title", "name", "label"),
|
|
252
263
|
),
|
|
253
264
|
),
|
|
265
|
+
"dashboard.template.thumbnail.clear": (
|
|
266
|
+
Sub(
|
|
267
|
+
"dashboard template picture",
|
|
268
|
+
"template_id",
|
|
269
|
+
source="dashboard.template.get",
|
|
270
|
+
label_paths=("title", "name", "label"),
|
|
271
|
+
name_fmt="picture of dashboard template {label}",
|
|
272
|
+
),
|
|
273
|
+
),
|
|
274
|
+
"support.template.discard": (
|
|
275
|
+
Sub(
|
|
276
|
+
"curated template",
|
|
277
|
+
"slug",
|
|
278
|
+
source="support.template.list",
|
|
279
|
+
container="templates",
|
|
280
|
+
id_field="slug",
|
|
281
|
+
label_paths=("title", "slug"),
|
|
282
|
+
),
|
|
283
|
+
),
|
|
284
|
+
"workflow.cleanup": (
|
|
285
|
+
Sub(
|
|
286
|
+
"ghost workflows",
|
|
287
|
+
"project_id",
|
|
288
|
+
"project",
|
|
289
|
+
"project_id",
|
|
290
|
+
name_fmt="ghost (orphaned skeleton) workflows in {parent}",
|
|
291
|
+
),
|
|
292
|
+
),
|
|
254
293
|
"template.delete": (
|
|
255
294
|
Sub("template", "template_id", source="template.get", label_paths=("name", "title")),
|
|
256
295
|
),
|
|
@@ -328,6 +367,7 @@ COMMAND_TARGETS: dict[str, tuple[str, str]] = {
|
|
|
328
367
|
"dataset.delete": ("dataset", "dataset_id"),
|
|
329
368
|
"dataset.bulk-delete": ("dataset", "dataset_ids"),
|
|
330
369
|
"dataset.file-settings.undo": ("dataset", "dataset_id"),
|
|
370
|
+
"dataset.broken-rows.resolve": ("dataset", "dataset_id"),
|
|
331
371
|
"view.delete": ("view", "view_id"),
|
|
332
372
|
"view.bulk-delete": ("view", "dataview_ids"),
|
|
333
373
|
"batch.delete": ("batch", "batch_id"),
|
|
@@ -352,6 +392,10 @@ COMMAND_TARGETS: dict[str, tuple[str, str]] = {
|
|
|
352
392
|
}
|
|
353
393
|
|
|
354
394
|
|
|
395
|
+
#: Commands that make a new resource and change no existing one: nothing to name.
|
|
396
|
+
CREATES_ONLY: frozenset[str] = frozenset({"dataset.create", "dataset.create-from-pdf"})
|
|
397
|
+
|
|
398
|
+
|
|
355
399
|
def unresolvable_error(command_id: str, reason: str) -> CliError:
|
|
356
400
|
"""The fail-loud error for a command whose targets cannot be named."""
|
|
357
401
|
return CliError(
|
|
@@ -496,6 +540,16 @@ def _unresolved_name(kind: str, target_id: object, symbol: str, key: str) -> Cli
|
|
|
496
540
|
)
|
|
497
541
|
|
|
498
542
|
|
|
543
|
+
def _container_items(listed: Any, container: str) -> list[Any]:
|
|
544
|
+
"""The items of a list read: a bare list, a mapping, or a typed SDK model."""
|
|
545
|
+
if isinstance(listed, list):
|
|
546
|
+
return listed
|
|
547
|
+
held = (
|
|
548
|
+
listed.get(container) if isinstance(listed, Mapping) else getattr(listed, container, None)
|
|
549
|
+
)
|
|
550
|
+
return held if isinstance(held, list) else []
|
|
551
|
+
|
|
552
|
+
|
|
499
553
|
def _sub_record(
|
|
500
554
|
service: MammothService,
|
|
501
555
|
sub: Sub,
|
|
@@ -516,7 +570,7 @@ def _sub_record(
|
|
|
516
570
|
if symbol not in lists:
|
|
517
571
|
lists[symbol] = service.call(symbol, **kwargs)
|
|
518
572
|
listed = lists[symbol]
|
|
519
|
-
items =
|
|
573
|
+
items = _container_items(listed, sub.container)
|
|
520
574
|
found = next((i for i in items if str(_path(i, sub.id_field)) == str(target)), None)
|
|
521
575
|
if found is None:
|
|
522
576
|
raise _unresolved_name(sub.kind, target, symbol, sub.id_field)
|
|
@@ -568,6 +622,8 @@ def _target_spec(command_id: str, would_call: Mapping[str, Any]) -> tuple[str, s
|
|
|
568
622
|
"""
|
|
569
623
|
if command_id in COMMAND_TARGETS:
|
|
570
624
|
return COMMAND_TARGETS[command_id]
|
|
625
|
+
if command_id in CREATES_ONLY:
|
|
626
|
+
return None
|
|
571
627
|
record = command_by_id(command_id) or {}
|
|
572
628
|
if record.get("mutation_class") == "destructive":
|
|
573
629
|
raise unresolvable_error(command_id, "no read command names this command's targets")
|
|
@@ -589,6 +645,31 @@ def _remove_batch_invites(
|
|
|
589
645
|
return _sub_targets(service, command_id, _INVITE_SUB, {"invite_ids": invite_ids})
|
|
590
646
|
|
|
591
647
|
|
|
648
|
+
def _patched_dataset_ids(patch_data: Any) -> list[int]:
|
|
649
|
+
"""The dataset ids a bulk patch renames: the keys of each operation's ``value``."""
|
|
650
|
+
operations = patch_data if isinstance(patch_data, list) else [patch_data]
|
|
651
|
+
found: list[int] = []
|
|
652
|
+
for operation in operations:
|
|
653
|
+
value = operation.get("value") if isinstance(operation, Mapping) else None
|
|
654
|
+
if isinstance(value, Mapping):
|
|
655
|
+
found.extend(int(key) for key in value if str(key).isdigit())
|
|
656
|
+
return list(dict.fromkeys(found))
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
def _bulk_update_targets(
|
|
660
|
+
service: MammothService, command_id: str, arguments: Mapping[str, Any]
|
|
661
|
+
) -> list[dict[str, Any]]:
|
|
662
|
+
"""Name the datasets a ``dataset bulk-update`` patch changes, from its own ``patch_data``."""
|
|
663
|
+
ids = _patched_dataset_ids(arguments.get("patch_data"))
|
|
664
|
+
if not ids:
|
|
665
|
+
raise unresolvable_error(
|
|
666
|
+
command_id,
|
|
667
|
+
"'patch_data' names no dataset; pass "
|
|
668
|
+
'{"op": "replace", "path": "name", "value": {"<dataset_id>": "<new name>"}}',
|
|
669
|
+
)
|
|
670
|
+
return _read_names(service, "dataset", ids, arguments)
|
|
671
|
+
|
|
672
|
+
|
|
592
673
|
def resolve_targets(
|
|
593
674
|
service: MammothService, command_id: str, would_call: Mapping[str, Any]
|
|
594
675
|
) -> list[dict[str, Any]]:
|
|
@@ -611,6 +692,8 @@ def resolve_targets(
|
|
|
611
692
|
arguments = would_call.get("arguments") or {}
|
|
612
693
|
if command_id == "user.avatar.delete":
|
|
613
694
|
return _avatar_target(service)
|
|
695
|
+
if command_id == "dataset.bulk-update":
|
|
696
|
+
return _bulk_update_targets(service, command_id, arguments)
|
|
614
697
|
if command_id in SUBS:
|
|
615
698
|
scope = {k: v for k, v in would_call.items() if k in ("view_id", "dataset_id")}
|
|
616
699
|
merged = {**scope, **arguments}
|
|
@@ -697,6 +697,9 @@ _S7_ADDITIONAL_INPUT_FIELDS: dict[str, tuple[FieldSpec, ...]] = {
|
|
|
697
697
|
FieldSpec("activities", required=False, annotation=list[Any] | None, default=None),
|
|
698
698
|
FieldSpec("user_ids", required=False, annotation=list[Any] | None, default=None),
|
|
699
699
|
),
|
|
700
|
+
# The typed rename: the handler builds the one ``replace`` on ``name``; the
|
|
701
|
+
# SDK's free-form ``patch_data`` is handler-owned and never offered.
|
|
702
|
+
"view.update": (FieldSpec("name", required=True, annotation=str),),
|
|
700
703
|
"user.preference.update": (
|
|
701
704
|
# PreferencesPatchRequest: replace ops on dotted paths rooted at
|
|
702
705
|
# GLOBAL or WORKSPACE_PREFERENCES.
|
|
@@ -354,6 +354,7 @@ def column_warnings(
|
|
|
354
354
|
column_types: Mapping[str, str],
|
|
355
355
|
view_id: int | None = None,
|
|
356
356
|
dataset_id: int | None = None,
|
|
357
|
+
read_only: bool = False,
|
|
357
358
|
) -> list[dict[str, Any]]:
|
|
358
359
|
"""Return warnings for text columns that hold numbers or dates, and for blanks.
|
|
359
360
|
|
|
@@ -363,6 +364,8 @@ def column_warnings(
|
|
|
363
364
|
view_id: The view the rows came from, used in the suggested command.
|
|
364
365
|
dataset_id: The view's dataset, used for the duplicate-rows fix
|
|
365
366
|
command (a mutation, so it needs the exact parent, not discovery).
|
|
367
|
+
read_only: The rows came from a read-only data read; a ``dates_stored_as_text``
|
|
368
|
+
finding then carries no ``fix``, since a read answers from the text as it is.
|
|
366
369
|
|
|
367
370
|
Returns:
|
|
368
371
|
One record per finding: ``column``, ``issue``
|
|
@@ -414,15 +417,10 @@ def column_warnings(
|
|
|
414
417
|
# there would be untrue.
|
|
415
418
|
detail += " (the conversion makes them empty)"
|
|
416
419
|
detail += "."
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
"detail": detail,
|
|
422
|
-
"fix": _convert_hint(view_id, column, to),
|
|
423
|
-
"rows_checked": checked,
|
|
424
|
-
}
|
|
425
|
-
)
|
|
420
|
+
finding: dict[str, Any] = {"column": column, "issue": issue, "detail": detail}
|
|
421
|
+
if not (read_only and kind == "dates"):
|
|
422
|
+
finding["fix"] = _convert_hint(view_id, column, to)
|
|
423
|
+
warnings.append({**finding, "rows_checked": checked})
|
|
426
424
|
break
|
|
427
425
|
variant_warning = _variant_spellings_warning(column, texts, view_id, checked)
|
|
428
426
|
if variant_warning is not None:
|
|
@@ -46,6 +46,8 @@ _HANDLER_OWNED_FIELDS: dict[str, frozenset[str]] = {
|
|
|
46
46
|
# ``sort`` is the backend's internal result-column pairs; the CLI takes
|
|
47
47
|
# ``order_by`` (result labels) and maps it, so a raw ``sort`` would be dropped.
|
|
48
48
|
"view.data.aggregate": frozenset({"sort"}),
|
|
49
|
+
# ``view update`` offers only the typed rename; the handler builds the patch.
|
|
50
|
+
"view.update": frozenset({"patch_data"}),
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
# CLI-only commands whose complete request is carried by positionals/context.
|
|
@@ -76,6 +78,7 @@ _EXAMPLE_INPUT_HINTS: dict[str, dict[str, Any]] = {
|
|
|
76
78
|
},
|
|
77
79
|
# View display settings: real column names read better than sample keys.
|
|
78
80
|
"view.transform.rename-columns": {"renames": {"cust_id": "Customer ID"}},
|
|
81
|
+
"view.update": {"name": "Revenue report"},
|
|
79
82
|
"view.transform.sort": {"order_by": [["Revenue", "DESC"]]},
|
|
80
83
|
# The backend requires integer resource ids ("resource_ids must be
|
|
81
84
|
# comma-separated integers"); the SDK annotation is a plain list[str].
|
|
@@ -158,7 +158,7 @@ def ambiguity_note(matched: int, needle: str) -> str | None:
|
|
|
158
158
|
return None
|
|
159
159
|
return (
|
|
160
160
|
f"{matched} datasets match '{needle}' (a v2 or a copy can sit beside the one meant): "
|
|
161
|
-
"
|
|
161
|
+
"if nothing in the request tells them apart, ask the user which one before reading any."
|
|
162
162
|
)
|
|
163
163
|
|
|
164
164
|
|
|
@@ -352,14 +352,18 @@ def compact_view_list(
|
|
|
352
352
|
Sizes and columns come from the records already fetched. Each kept view then
|
|
353
353
|
gets ``sample_values`` from the backend's stored column stats via ``read_stats``
|
|
354
354
|
(one stored-stats read per kept view, run concurrently; no query runs).
|
|
355
|
+
A list of one dataset's views names every column; several datasets cap it at a few.
|
|
355
356
|
Returns ``{"dataviews", "shown"}`` plus
|
|
356
357
|
``first_dropped_dataset`` / ``views_omitted`` when something was cut, for the
|
|
357
358
|
caller to turn into a way to the next page.
|
|
358
359
|
"""
|
|
359
360
|
groups: dict[Any, list[tuple[dict[str, Any], dict[str, Any]]]] = {}
|
|
360
|
-
|
|
361
|
+
by_dataset = _group_by_dataset(views)
|
|
362
|
+
# One dataset's views are listed to be read from: the whole column list saves a `view get`.
|
|
363
|
+
every_column = all_columns or len(by_dataset) == 1
|
|
364
|
+
for ds_id, group in by_dataset.items():
|
|
361
365
|
groups[ds_id] = [
|
|
362
|
-
(v, view_summary(v, datasets.get(ds_id), ds_id,
|
|
366
|
+
(v, view_summary(v, datasets.get(ds_id), ds_id, every_column)) for v in group
|
|
363
367
|
]
|
|
364
368
|
chosen, dropped_dataset, omitted = _choose_views(groups)
|
|
365
369
|
with ThreadPoolExecutor(max_workers=_STATS_WORKERS) as pool:
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.2.
|
|
3
|
+
version = "2.2.13"
|
|
4
4
|
description = "Command-line interface for the Mammoth Analytics platform"
|
|
5
5
|
authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "LicenseRef-Proprietary"
|
|
8
8
|
requires-python = ">=3.12,<3.15"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"mammoth-io (>=0.8.
|
|
10
|
+
"mammoth-io (>=0.8.13,<0.9)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|
|
@@ -158,7 +158,7 @@ commands:
|
|
|
158
158
|
- CT-SCHEDULE-LIST-ERROR
|
|
159
159
|
draft_test: null
|
|
160
160
|
undo_test: null
|
|
161
|
-
known_restrictions: 'B04 SERVER_VARIANCE: unconditionally unimplemented on every backend
|
|
161
|
+
known_restrictions: 'Retired: the command answers not_available and names the web app. B04 SERVER_VARIANCE: unconditionally unimplemented on every backend
|
|
162
162
|
release tested, not intermittent -- GET .../schedules always returns HTTP 400 with error
|
|
163
163
|
code 5GENR011 NOT_IMPLEMENTED (mvc-service apiv2/apiv2/schedules/controller.py
|
|
164
164
|
ScheduleController.list_schedules always raises ClientError(not_implemented_error); its
|
|
@@ -5834,7 +5834,7 @@ commands:
|
|
|
5834
5834
|
required_fixture_guard: null
|
|
5835
5835
|
secret_fields: []
|
|
5836
5836
|
human_example: mammoth view update VIEW_ID --help
|
|
5837
|
-
agent_example: 'mammoth view update 123 123 --input ''{"
|
|
5837
|
+
agent_example: 'mammoth view update 123 123 --input ''{"name": "Revenue report"}'''
|
|
5838
5838
|
unit_tests:
|
|
5839
5839
|
- UT-VIEW-UPDATE
|
|
5840
5840
|
contract_tests:
|
|
@@ -5843,8 +5843,8 @@ commands:
|
|
|
5843
5843
|
- CT-VIEW-UPDATE-ERROR
|
|
5844
5844
|
draft_test: null
|
|
5845
5845
|
undo_test: null
|
|
5846
|
-
known_restrictions: '
|
|
5847
|
-
|
|
5846
|
+
known_restrictions: 'Only the typed rename is offered (--input {"name": ...}); any other patch is refused
|
|
5847
|
+
with B09 DATAVIEW_INPUT_UNTYPED because patch_data is an arbitrary dictionary.'
|
|
5848
5848
|
reviewed_by: primary
|
|
5849
5849
|
- command_id: view.version.apply
|
|
5850
5850
|
command_path: view version apply
|
|
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.11 → mammoth_cli-2.2.13}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
File without changes
|
|
File without changes
|