mammoth-cli 2.2.72__tar.gz → 2.2.74__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.72 → mammoth_cli-2.2.74}/PKG-INFO +3 -2
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/app.py +7 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +9 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +1 -0
- mammoth_cli-2.2.74/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +91 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +2 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/connector.py +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/help_summaries.json +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/schema.py +12 -5
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/view.py +53 -2
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/resolver.py +28 -4
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/errors/envelope.py +13 -13
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/invocation.py +3 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/state.py +1 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/sdk_service.py +2 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/skills/steering.py +4 -3
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/pyproject.toml +3 -3
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/project.yaml +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/view.yaml +1 -1
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/.gitignore +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/LICENSE +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/README.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/build-an-agent.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/_lazy.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/resolve.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/keyring_backend.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/oauth.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/locked_files.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/opens.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/append_blank_columns.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/explore_cards.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/folder_ids.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/job_outcome.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/view_analysis.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/view_variants.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/resolve.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/token.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/spec/openapi/openapi.json +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.74
|
|
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
|
|
7
|
+
Project-URL: documentation, https://docs.mammoth.io/build/cli
|
|
7
8
|
Author-email: Mammoth Analytics <support@mammoth.io>
|
|
8
9
|
License-Expression: LicenseRef-Proprietary
|
|
9
10
|
License-File: LICENSE
|
|
@@ -17,7 +18,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
17
18
|
Requires-Python: <3.15,>=3.12
|
|
18
19
|
Requires-Dist: jsonschema>=4.20
|
|
19
20
|
Requires-Dist: keyring<26,>=25.7
|
|
20
|
-
Requires-Dist: mammoth-io<0.9,>=0.8.
|
|
21
|
+
Requires-Dist: mammoth-io<0.9,>=0.8.38
|
|
21
22
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
23
|
Requires-Dist: pydantic<3,>=2.12.5
|
|
23
24
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -949,7 +949,7 @@ def _execute(invocation: Invocation) -> None:
|
|
|
949
949
|
from mammoth_cli.runtime.strict import validate_extra_args
|
|
950
950
|
|
|
951
951
|
if invocation.profile is None:
|
|
952
|
-
invocation = replace(invocation, profile=profiles.get_selected())
|
|
952
|
+
invocation = replace(invocation, profile=profiles.get_selected(), profile_is_default=True)
|
|
953
953
|
|
|
954
954
|
def producer() -> tuple[Any, dict[str, Any]]:
|
|
955
955
|
refuse_hand_crafted_write(invocation.command_id)
|
|
@@ -1321,6 +1321,10 @@ def _top_level_typer(name: str) -> typer.Typer:
|
|
|
1321
1321
|
return sub
|
|
1322
1322
|
|
|
1323
1323
|
|
|
1324
|
+
#: Groups kept out of ``mammoth --help`` until their backend is generally available.
|
|
1325
|
+
#: They still run when typed; only the listing hides them.
|
|
1326
|
+
_HIDDEN_UNTIL_GA = frozenset({"agent"})
|
|
1327
|
+
|
|
1324
1328
|
# Top-level groups are converted to Click on first use. Building the leaf
|
|
1325
1329
|
# callbacks and ``--help`` text for all ~550 commands, then letting Typer
|
|
1326
1330
|
# convert every one of them, used to cost most of the CLI's start-up time on
|
|
@@ -1337,6 +1341,7 @@ def _load_top_level_group(name: str) -> Any:
|
|
|
1337
1341
|
name=name,
|
|
1338
1342
|
help=_GROUP_DESCRIPTIONS.get(name, f"Commands for {name}."),
|
|
1339
1343
|
rich_help_panel=_ROOT_HELP_PANELS.get(name),
|
|
1344
|
+
hidden=name in _HIDDEN_UNTIL_GA,
|
|
1340
1345
|
)
|
|
1341
1346
|
return typer.main.get_group_from_info(info, **_LAZY_SETTINGS)
|
|
1342
1347
|
|
|
@@ -1409,6 +1414,7 @@ def _group_stub(name: str) -> Any:
|
|
|
1409
1414
|
help=_GROUP_DESCRIPTIONS.get(name, f"Commands for {name}."),
|
|
1410
1415
|
rich_help_panel=_ROOT_HELP_PANELS.get(name),
|
|
1411
1416
|
rich_markup_mode=_LAZY_SETTINGS["rich_markup_mode"],
|
|
1417
|
+
hidden=name in _HIDDEN_UNTIL_GA,
|
|
1412
1418
|
)
|
|
1413
1419
|
|
|
1414
1420
|
|
|
@@ -266,7 +266,7 @@ Status on release: untried; no live run recorded.
|
|
|
266
266
|
|
|
267
267
|
Run: `mammoth view data get`. Exact input fields: `mammoth schema get view.data.get`.
|
|
268
268
|
|
|
269
|
-
Example: `mammoth view data get 123
|
|
269
|
+
Example: `mammoth view data get 123 456`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
270
270
|
|
|
271
271
|
Result: `ViewDataGetResult`; mutation `read`, confirmation `none`, wait policy `always_wait`.
|
|
272
272
|
|
|
@@ -123,6 +123,15 @@ mammoth dashboard descriptor-data DASHBOARD_ID --input '{"body": {"params": {
|
|
|
123
123
|
A card that reads the same with and without the filter, or a distinct count
|
|
124
124
|
that equals a row count, is a wrong binding, not a data fact.
|
|
125
125
|
|
|
126
|
+
## Limits
|
|
127
|
+
|
|
128
|
+
- `v3 generate` takes one `dataview_id`; `chat edit` cannot add a tile from
|
|
129
|
+
another view. Join the data into one view first.
|
|
130
|
+
- The smallest date grain is day (day/week/month/quarter/year): hourly data
|
|
131
|
+
shows as daily points.
|
|
132
|
+
- Currently a view with no numeric column gets no table or bar chart. Add a
|
|
133
|
+
numeric column such as a count, or build from a view that has a measure.
|
|
134
|
+
|
|
126
135
|
## Canvas, widget data and PDF
|
|
127
136
|
|
|
128
137
|
`dashboard canvas get DASHBOARD_ID` reads the canvas (`data.canvas` incl.
|
|
@@ -14,6 +14,7 @@ hashes; stop on ambiguous schemas, authorization errors, or unknown effects.
|
|
|
14
14
|
- [files, datasets, views and settings](resources.md)
|
|
15
15
|
- [import a table from a database (SQL Server, MySQL, Postgres)](database-import.md)
|
|
16
16
|
- [import a file from an SFTP server](file-import.md)
|
|
17
|
+
- [pull data from a REST API or Elasticsearch on a schedule](rest-api-import.md)
|
|
17
18
|
- [datasets in `need_action` or `needs_view` after upload](need-action.md)
|
|
18
19
|
- [typed transformations and drafts](transforms.md)
|
|
19
20
|
- [typed ETL discovery](typed-etl-discovery.md)
|
mammoth_cli-2.2.74/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Pull data from a REST API (or Elasticsearch) on a schedule
|
|
2
|
+
|
|
3
|
+
REST connection -> dataset -> scheduled refresh. Every connector command runs
|
|
4
|
+
in a project (`--project PROJECT_ID`). The connector key is `generic_rest_api`.
|
|
5
|
+
Creates and refreshes are writes: get the user's confirmation first.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
mammoth connector get generic_rest_api # spec.connection_config (has base_url) + spec.connection_input_note; spec.data_source_config = JSON schema of the query keys below, plus selected_columns, max_flatten_depth, join_tables, loop_over
|
|
9
|
+
mammoth connector connection list generic_rest_api # reuse a connection if one fits
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 1. Connection
|
|
13
|
+
|
|
14
|
+
The body goes under `config`, with **flat** auth fields: `auth_type` (`none`,
|
|
15
|
+
`api_key`, `bearer`, `basic`), then `username` +
|
|
16
|
+
`password`, or `token`, or `key_name` + `key_value` + `inject_into`
|
|
17
|
+
(`header|query_param`). Do not send a nested `auth` object: an older backend
|
|
18
|
+
drops it and saves the connection as `auth_type: none` (the target API then
|
|
19
|
+
answers 401 at sample time); a backend with the fix rejects it with 4CONN003 ("Create a connection with auth as flat fields ... not a nested 'auth' object"). The base URL must be
|
|
20
|
+
a public host; localhost and private addresses are refused (SSRF guard).
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# request.json (mode 0600): {"config": {"name": "My API", "base_url": "https://api.example.com/v1", "auth_type": "basic", "username": "u", "password": "p"}}
|
|
24
|
+
mammoth connector connection create generic_rest_api --input request.json --yes
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The reply holds `identity_key`: that is CONNECTION_KEY below. To change
|
|
28
|
+
credentials later use `connector connection update ... --input` with
|
|
29
|
+
`{"credentials": {...}}`, not `config`. Error 4SUBS007 means the workspace plan
|
|
30
|
+
does not include this connector (or its paid addon is not active).
|
|
31
|
+
|
|
32
|
+
## 2. Try the data-source config (creates no dataset)
|
|
33
|
+
|
|
34
|
+
`query` is a **JSON string** (not an object) of the data-source config:
|
|
35
|
+
`endpoint_path`, `http_method` (`GET|POST`), `request_body`, `query_params`,
|
|
36
|
+
`data_root_path` (JSONPath to the records; `[*]` is supported), `pagination`,
|
|
37
|
+
`flatten_nested_json`, `max_pages`.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# sample.json: {"query": "{\"endpoint_path\": \"/posts\", \"data_root_path\": \"$\", \"max_pages\": 1}", "validate": false, "data_sample": true}
|
|
41
|
+
mammoth connector ds-config create generic_rest_api CONNECTION_KEY --input sample.json --yes
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Needs `--yes`; returns real sample rows (50 for a composite-agg
|
|
45
|
+
`data_root_path`). Read the column names from `data.data_sample.dataschema`.
|
|
46
|
+
`ds-config list generic_rest_api CONNECTION_KEY` shows the connection's configs
|
|
47
|
+
(`config_key`, `ds_name`, `on_refresh_action`, `query`, `table`, `profile`);
|
|
48
|
+
`ds-config get generic_rest_api CONNECTION_KEY CONFIG_KEY` returns one under
|
|
49
|
+
`ds_config`. A REST config has `data_start_date: null`. A dataset's config key
|
|
50
|
+
is `dataset get` -> `sources[0].details.id`.
|
|
51
|
+
|
|
52
|
+
## 3. Dataset with a refresh schedule
|
|
53
|
+
|
|
54
|
+
`schedule_properties` and `recurrence_info` are required; without them the job
|
|
55
|
+
fails with "Invalid parameters". `on_refresh_action` is `replace` (swap the
|
|
56
|
+
rows each refresh) or `combine` (append: every refresh re-adds every row the
|
|
57
|
+
API returns, so rows duplicate).
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# dataset.json
|
|
61
|
+
# {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "generic_rest_api",
|
|
62
|
+
# "connection_key": "CONNECTION_KEY",
|
|
63
|
+
# "query_properties": {"ds_name": "My data", "table_name": "posts", "query": "<same JSON string as step 2>"},
|
|
64
|
+
# "schedule_properties": {"schedule_type": "moment", "first_pull_at": "now", "on_refresh_action": "replace"},
|
|
65
|
+
# "recurrence_info": {"interval": 1, "start_at": "2027-01-01T02:00:00"}}}
|
|
66
|
+
mammoth dataset create --input dataset.json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 4. Refresh automatically
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# auto.json: {"description": "Refresh My data", "tasks": [{"task_type": "run_data_retrieval", "details": {"ds_details": [{"ds_id": DATASET_ID}]}}],
|
|
73
|
+
# "conditions": [{"condition_type": "at_specific_time", "details": {"frequency": "daily", "interval": 1, "start_at": "2027-01-01T02:00:00Z"}}]}
|
|
74
|
+
mammoth automation create 'Refresh My data' --input auto.json --yes # name required; ds_details must be a list
|
|
75
|
+
mammoth automation update AUTOMATION_ID --yes --input '{"patch": [{"op": "command", "path": "run", "value": {}}]}' # run now
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
A `start_at` under 2 minutes ahead is rejected ("too soon"); a past one starts now.
|
|
79
|
+
More on automations: [recurring work](scheduling.md).
|
|
80
|
+
|
|
81
|
+
## Elasticsearch
|
|
82
|
+
|
|
83
|
+
Use the connection above with `base_url` of the cluster and `POST` on
|
|
84
|
+
`/INDEX/_search`. Name the fields you need in `_source`: a field such as
|
|
85
|
+
`asctime` ("2026-10-09 15:52:46,290", comma before the millis) breaks the load.
|
|
86
|
+
|
|
87
|
+
- Documents: `"request_body": {"size": 500, "_source": ["@timestamp", "task"]}`,
|
|
88
|
+
`"data_root_path": "$.hits.hits[*]._source"`.
|
|
89
|
+
- Counts per bucket: `"request_body": {"size": 0, "aggs": {"c": {"composite": {"size": 10000, "sources": [...]}}}}`,
|
|
90
|
+
`"data_root_path": "$.aggregations.c.buckets[*]"` gives columns `doc_count`,
|
|
91
|
+
`key.<source>`.
|
|
@@ -120,7 +120,8 @@ If one exists, change it with `automation update AUTOMATION_ID` (see below)
|
|
|
120
120
|
instead of creating another. Before a schedule that emails a client, send the
|
|
121
121
|
same email to the user first (or `--dry-run` the create and show the
|
|
122
122
|
recipients, subject and attached views) and get a yes. Give `start_at` a time
|
|
123
|
-
in the future
|
|
123
|
+
in the future: under 2 minutes ahead is rejected ("too soon"), a later one is
|
|
124
|
+
stored as sent, a past one starts now.
|
|
124
125
|
|
|
125
126
|
## Read it back
|
|
126
127
|
|
|
@@ -10,7 +10,7 @@ or secrets in an argument, prompt, transcript, or checkpoint.
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
python3 -m venv .mammoth && .mammoth/bin/python -m pip install --no-cache-dir --upgrade mammoth-cli
|
|
13
|
-
.mammoth/bin/mammoth --version # or: uv tool install mammoth-cli
|
|
13
|
+
.mammoth/bin/mammoth --version # or: uv tool install mammoth-cli && uv tool update-shell
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
Pin `mammoth-cli==X.Y.Z` when the task names an approved release, and
|
|
@@ -360,7 +360,7 @@ def connector_connection_update(invocation: Invocation) -> HandlerResult:
|
|
|
360
360
|
|
|
361
361
|
|
|
362
362
|
def connector_ds_config_create(invocation: Invocation) -> HandlerResult:
|
|
363
|
-
"""
|
|
363
|
+
"""Sample a data source config; REST ``query`` is a JSON string. ``--yes`` always needed."""
|
|
364
364
|
project_id = require_project(invocation)
|
|
365
365
|
connector_key = _require_string_positional_at(invocation, 0, "connector key")
|
|
366
366
|
connection_key = _require_string_positional_at(invocation, 1, "connection key")
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"connector.connection.get": "Get one connection's details. Connector and connection keys are positional.",
|
|
139
139
|
"connector.connection.list": "List connections for a connector type; find its key with `mammoth connector active`.",
|
|
140
140
|
"connector.connection.update": "Update a connection's credentials. '--yes' is always required.",
|
|
141
|
-
"connector.ds-config.create": "
|
|
141
|
+
"connector.ds-config.create": "Sample a data source config; REST 'query' is a JSON string. '--yes' always needed.",
|
|
142
142
|
"connector.ds-config.delete": "Delete a data source configuration. Prompt or '--yes' required.",
|
|
143
143
|
"connector.ds-config.delete-all": "Bulk-delete data source configurations for a connection. Prompt or '--yes' required.",
|
|
144
144
|
"connector.ds-config.get": "Get one data source configuration by key.",
|
|
@@ -405,7 +405,8 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
405
405
|
),
|
|
406
406
|
"connector.get": (
|
|
407
407
|
"connector database SQL Server MSSQL MySQL Postgres SFTP file server connection fields "
|
|
408
|
-
"host port username password required to connect import table file dataset"
|
|
408
|
+
"host port username password required to connect import table file dataset "
|
|
409
|
+
"REST API Elasticsearch generic_rest_api config schema"
|
|
409
410
|
),
|
|
410
411
|
"connector.connection.list": (
|
|
411
412
|
"which outside external sources connected connections list database SQL Server "
|
|
@@ -419,11 +420,12 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
419
420
|
"connector.connection.create": (
|
|
420
421
|
"connect a database such as SQL Server MSSQL MySQL Postgres Oracle or an SFTP file "
|
|
421
422
|
"server host port username password new connection connector to import a table or "
|
|
422
|
-
"file into a dataset"
|
|
423
|
+
"file into a dataset, or a REST API or Elasticsearch generic_rest_api base_url"
|
|
423
424
|
),
|
|
424
425
|
"connector.ds-config.create": (
|
|
425
426
|
"import pull load read retrieve a table or SQL query from a connected database such "
|
|
426
|
-
"as SQL Server MSSQL MySQL Postgres connector connection as a new dataset rows data"
|
|
427
|
+
"as SQL Server MSSQL MySQL Postgres connector connection as a new dataset rows data "
|
|
428
|
+
"REST API Elasticsearch sample validate"
|
|
427
429
|
),
|
|
428
430
|
"connector.ds-config.list": (
|
|
429
431
|
"datasets imported from a connected database SQL Server MSSQL MySQL Postgres "
|
|
@@ -548,7 +550,8 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
548
550
|
# it just had no discovery-purpose text at all.
|
|
549
551
|
"dataset.create": (
|
|
550
552
|
"url web link fetch retrieve pull import public website endpoint api json data weburl "
|
|
551
|
-
"file csv from an SFTP server folder cloud storage connection connector as a new dataset"
|
|
553
|
+
"file csv from an SFTP server folder cloud storage connection connector as a new dataset "
|
|
554
|
+
"REST API Elasticsearch generic_rest_api on a schedule refresh recurring"
|
|
552
555
|
),
|
|
553
556
|
"dashboard.v3.generate": (
|
|
554
557
|
"create build make new generate dashboard board report from a view description "
|
|
@@ -681,7 +684,7 @@ IN_PLACE_RECIPE = (
|
|
|
681
684
|
"EDITS THE GIVEN VIEW IN PLACE: this adds a step to the view and changes that view "
|
|
682
685
|
"and its dataset's output. To make a NEW dataset and leave the source untouched: "
|
|
683
686
|
"`mammoth view create SOURCE_DATASET_ID` (working view), do the steps on that working "
|
|
684
|
-
|
|
687
|
+
"view, then `mammoth view export dataset WORKING_VIEW_ID` (add dataset_name only if the user named it)."
|
|
685
688
|
)
|
|
686
689
|
_IN_PLACE_KEYWORDS = (
|
|
687
690
|
"new dataset create make in place edits given view working view source untouched"
|
|
@@ -1241,6 +1244,10 @@ def runnable_example(
|
|
|
1241
1244
|
# the manifest carries the safe ``creds.json`` invocation instead.
|
|
1242
1245
|
if record["command_id"] == "auth.login":
|
|
1243
1246
|
return None
|
|
1247
|
+
if record["command_id"] == "view.data.get":
|
|
1248
|
+
# VIEW_ID then DATASET_ID: two different placeholders so a reader can
|
|
1249
|
+
# tell which is which (the generic fallback printed "123 123").
|
|
1250
|
+
return "mammoth view data get 123 456"
|
|
1244
1251
|
if record["command_id"] == "ai.retention.condition":
|
|
1245
1252
|
return shlex.join(
|
|
1246
1253
|
[
|
|
@@ -35,6 +35,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
35
35
|
CODE_INVALID_ARGUMENTS,
|
|
36
36
|
CODE_MISSING_ARGUMENT,
|
|
37
37
|
CODE_MISSING_FIELD,
|
|
38
|
+
CODE_RESOURCE_NOT_FOUND,
|
|
38
39
|
CODE_SDK_SYMBOL_UNRESOLVED,
|
|
39
40
|
CODE_UNSUPPORTED_CONTRACT,
|
|
40
41
|
EXIT_USAGE,
|
|
@@ -1227,7 +1228,13 @@ def view_data_get(invocation: Invocation) -> HandlerResult:
|
|
|
1227
1228
|
limit = document.get("limit", _DATA_GET_DEFAULT_LIMIT)
|
|
1228
1229
|
with open_service(invocation) as (service, auth):
|
|
1229
1230
|
dataset_id = _resolve_dataset_id(service, invocation, view_id, document)
|
|
1230
|
-
|
|
1231
|
+
try:
|
|
1232
|
+
meta = _read_meta(
|
|
1233
|
+
service, invocation, auth.workspace_id, dataset_id, view_id, project_id
|
|
1234
|
+
)
|
|
1235
|
+
except CliError as exc:
|
|
1236
|
+
_explain_swapped_ids(service, exc, view_id, dataset_id)
|
|
1237
|
+
raise
|
|
1231
1238
|
kwargs: dict[str, Any] = {
|
|
1232
1239
|
"dataset_id": dataset_id,
|
|
1233
1240
|
"dataview_id": view_id,
|
|
@@ -1247,7 +1254,51 @@ def view_data_get(invocation: Invocation) -> HandlerResult:
|
|
|
1247
1254
|
service, dataset_id, view_id, project_id, data, whole_view=whole_view
|
|
1248
1255
|
)
|
|
1249
1256
|
page_size = _DATA_PAGE_ROWS if whole_view else kwargs["limit"]
|
|
1250
|
-
|
|
1257
|
+
data = _trim_rows(data, limit, page_size)
|
|
1258
|
+
if document.get("sequence") is None:
|
|
1259
|
+
# The view's row count is its latest step's; a read at an earlier step differs.
|
|
1260
|
+
data = _with_paging_total(data, meta)
|
|
1261
|
+
return data, meta
|
|
1262
|
+
|
|
1263
|
+
|
|
1264
|
+
def _with_paging_total(data: Any, meta: dict[str, Any]) -> Any:
|
|
1265
|
+
"""Fill ``paging.total`` with the view's row count; the query route reports 0."""
|
|
1266
|
+
paging = data.get("paging") if isinstance(data, dict) else None
|
|
1267
|
+
row_count = meta["view"].get("row_count")
|
|
1268
|
+
if (
|
|
1269
|
+
isinstance(paging, dict)
|
|
1270
|
+
and isinstance(row_count, int)
|
|
1271
|
+
and row_count > paging.get("total", 0)
|
|
1272
|
+
):
|
|
1273
|
+
return {**data, "paging": {**paging, "total": row_count}}
|
|
1274
|
+
return data
|
|
1275
|
+
|
|
1276
|
+
|
|
1277
|
+
def _explain_swapped_ids(service: Any, error: CliError, view_id: int, dataset_id: int) -> None:
|
|
1278
|
+
"""Raise a clear refusal when a not-found read was given DATASET_ID then VIEW_ID.
|
|
1279
|
+
|
|
1280
|
+
The arguments are ``VIEW_ID [DATASET_ID]``; passing them the other way round
|
|
1281
|
+
only produces a bare 404. If the first number is really a view of the second,
|
|
1282
|
+
say so. Any other outcome leaves the original error to be re-raised.
|
|
1283
|
+
"""
|
|
1284
|
+
if error.code != CODE_RESOURCE_NOT_FOUND:
|
|
1285
|
+
return
|
|
1286
|
+
try:
|
|
1287
|
+
parent = int(service.call(_FIND_DATASET_SYMBOL, dataview_id=dataset_id))
|
|
1288
|
+
except CliError:
|
|
1289
|
+
return
|
|
1290
|
+
if parent != view_id:
|
|
1291
|
+
return
|
|
1292
|
+
raise CliError(
|
|
1293
|
+
code=CODE_INVALID_ARGUMENT,
|
|
1294
|
+
message=(
|
|
1295
|
+
f"{view_id} is a dataset id and {dataset_id} is its view; "
|
|
1296
|
+
"the order is VIEW_ID DATASET_ID"
|
|
1297
|
+
),
|
|
1298
|
+
exit_status=EXIT_USAGE,
|
|
1299
|
+
hint=f"Run it again as: mammoth view data get {dataset_id} {view_id}",
|
|
1300
|
+
details={"view_id": dataset_id, "dataset_id": view_id},
|
|
1301
|
+
) from error
|
|
1251
1302
|
|
|
1252
1303
|
|
|
1253
1304
|
_QUERY_DATA_SYMBOL = "mammoth.api.dataviews.DataviewsAPI.query_data"
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Authentication requires a login. Credentials come from an explicit secure
|
|
4
4
|
input to the current command (a prompt or a permission-checked ``--input``
|
|
5
5
|
file), or from the selected or ``--profile`` profile's saved credentials.
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
For CI, an ``mm_...`` token in ``MAMMOTH_API_TOKEN`` (server prefix in
|
|
7
|
+
``MAMMOTH_SERVER_PREFIX``) is used instead of a profile. The API endpoint falls back to the ``app``
|
|
8
8
|
default when a profile supplies no server prefix. Project context resolves
|
|
9
9
|
separately: ``--project`` overrides the saved profile project id, which
|
|
10
10
|
overrides no project at all.
|
|
@@ -12,6 +12,8 @@ overrides no project at all.
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
+
import os
|
|
16
|
+
import sys
|
|
15
17
|
from collections.abc import Callable, Mapping
|
|
16
18
|
from dataclasses import dataclass
|
|
17
19
|
|
|
@@ -158,6 +160,20 @@ def _endpoint(server_prefix: str | None) -> str:
|
|
|
158
160
|
return resolve_base_url(server_prefix)
|
|
159
161
|
|
|
160
162
|
|
|
163
|
+
#: Environment variables a CI job sets instead of running ``mammoth auth login``.
|
|
164
|
+
API_TOKEN_ENV = "MAMMOTH_API_TOKEN" # noqa: S105 -- the variable name, not a secret
|
|
165
|
+
SERVER_PREFIX_ENV = "MAMMOTH_SERVER_PREFIX"
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _env_token_login() -> ExplicitLogin | None:
|
|
169
|
+
"""The ``mm_...`` token in ``MAMMOTH_API_TOKEN`` as a login, or None when unset."""
|
|
170
|
+
token = os.environ.get(API_TOKEN_ENV, "").strip()
|
|
171
|
+
if not token:
|
|
172
|
+
return None
|
|
173
|
+
prefix = os.environ.get(SERVER_PREFIX_ENV, "").strip() or None
|
|
174
|
+
return ExplicitLogin(api_key=None, api_secret=None, server_prefix=prefix, api_token=token)
|
|
175
|
+
|
|
176
|
+
|
|
161
177
|
def resolve_auth(
|
|
162
178
|
invocation: Invocation,
|
|
163
179
|
explicit_login: ExplicitLogin | None = None,
|
|
@@ -167,8 +183,9 @@ def resolve_auth(
|
|
|
167
183
|
Credentials come from an explicit login (a secure prompt or ``--input``
|
|
168
184
|
document handed to :func:`resolve_auth` by ``auth login``, or the login of
|
|
169
185
|
the current embedded call, :mod:`mammoth_cli.runtime.embedded`), otherwise from
|
|
170
|
-
the selected or ``--profile`` saved profile.
|
|
171
|
-
|
|
186
|
+
the selected or ``--profile`` saved profile. A ``MAMMOTH_API_TOKEN`` (and optional
|
|
187
|
+
``MAMMOTH_SERVER_PREFIX``) in the environment outranks the selected profile, for CI,
|
|
188
|
+
but never an explicit ``--profile``; using it prints one stderr line.
|
|
172
189
|
|
|
173
190
|
Args:
|
|
174
191
|
invocation: The current command's resolved global options.
|
|
@@ -184,8 +201,15 @@ def resolve_auth(
|
|
|
184
201
|
"""
|
|
185
202
|
if explicit_login is None and (call := embedded.current()) is not None:
|
|
186
203
|
explicit_login = call.login
|
|
204
|
+
from_env = False
|
|
205
|
+
if explicit_login is None and (invocation.profile is None or invocation.profile_is_default):
|
|
206
|
+
# An explicit ``--profile`` outranks the ambient environment token.
|
|
207
|
+
explicit_login = _env_token_login()
|
|
208
|
+
from_env = explicit_login is not None
|
|
187
209
|
if explicit_login is not None:
|
|
188
210
|
base_url = _endpoint(explicit_login.server_prefix)
|
|
211
|
+
if from_env:
|
|
212
|
+
print(f"Using {API_TOKEN_ENV} for {base_url}", file=sys.stderr)
|
|
189
213
|
return ResolvedAuth(
|
|
190
214
|
api_key=explicit_login.api_key,
|
|
191
215
|
api_secret=explicit_login.api_secret,
|
|
@@ -66,19 +66,19 @@ CODE_EMPTIES_VIEW = "empties_view"
|
|
|
66
66
|
# ``message``/``hint``. Plain language only: no command names, ids, field names
|
|
67
67
|
# or jargon. Exactly one entry per error code the CLI can raise;
|
|
68
68
|
# ``tests/unit/test_error_summaries.py`` fails if a raised code has none.
|
|
69
|
-
_S_BAD_REQUEST = "The
|
|
69
|
+
_S_BAD_REQUEST = "The request wasn't valid."
|
|
70
70
|
_S_BAD_INPUT = "Some of the information provided couldn't be used."
|
|
71
|
-
_S_SIGN_IN = "
|
|
72
|
-
_S_INTERNAL = "
|
|
73
|
-
_S_NOT_FOUND = "Something
|
|
74
|
-
_S_MISSING_INFO = "The
|
|
71
|
+
_S_SIGN_IN = "You aren't signed in to Mammoth."
|
|
72
|
+
_S_INTERNAL = "This step hit an internal problem."
|
|
73
|
+
_S_NOT_FOUND = "Something that was looked for couldn't be found."
|
|
74
|
+
_S_MISSING_INFO = "The request was missing some information."
|
|
75
75
|
_S_SETUP = "A setting needed for this step isn't set up correctly."
|
|
76
76
|
_S_UNAVAILABLE = "This step isn't available right now."
|
|
77
77
|
|
|
78
78
|
ERROR_SUMMARIES: dict[str, str] = {
|
|
79
79
|
"aborted": "This step was stopped before it finished.",
|
|
80
80
|
"ambiguous_resource_identity": (
|
|
81
|
-
"More than one item matched, so the
|
|
81
|
+
"More than one item matched, so the request needs to be more specific."
|
|
82
82
|
),
|
|
83
83
|
"api_error": "Mammoth couldn't complete this step.",
|
|
84
84
|
"append_leaves_columns_blank": (
|
|
@@ -90,8 +90,8 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
90
90
|
"append_schema_unreadable": "The columns of the existing data couldn't be read.",
|
|
91
91
|
"authentication_failed": "Mammoth didn't accept the sign-in for this step.",
|
|
92
92
|
"authorization_required": "You don't have permission to do this.",
|
|
93
|
-
"capability_not_found": "
|
|
94
|
-
"cli_key_expired": "The saved API key has expired, so
|
|
93
|
+
"capability_not_found": "That isn't something Mammoth supports.",
|
|
94
|
+
"cli_key_expired": "The saved API key has expired, so a new sign-in is needed.",
|
|
95
95
|
"cli_keys_need_browser_sign_in": "Managing API keys needs a browser sign-in, not an API token.",
|
|
96
96
|
"cli_keys_not_allowed": "This server doesn't let a browser sign-in create API keys.",
|
|
97
97
|
"confirmation_declined": "This step was not confirmed, so nothing was changed.",
|
|
@@ -102,7 +102,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
102
102
|
"conflict": "This conflicts with the current state of your data, so nothing was changed.",
|
|
103
103
|
"device_login_expired": "The sign-in code expired before it was approved.",
|
|
104
104
|
"dry_run_targets_unresolvable": (
|
|
105
|
-
"
|
|
105
|
+
"It wasn't clear exactly which items this would change, so nothing was changed."
|
|
106
106
|
),
|
|
107
107
|
"download_failed": "A download didn't complete.",
|
|
108
108
|
"dry_run_unsupported": "That command can't be previewed, so it was not run.",
|
|
@@ -119,7 +119,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
119
119
|
"input_unreadable": _S_BAD_INPUT,
|
|
120
120
|
"insecure_credential_file": _S_SETUP,
|
|
121
121
|
"insecure_input_file": _S_BAD_INPUT,
|
|
122
|
-
"intent_only_dashboards": "
|
|
122
|
+
"intent_only_dashboards": "Dashboards are built from the request only.",
|
|
123
123
|
"internal_column_name": "That column is internal to Mammoth and can't be used.",
|
|
124
124
|
"internal_error": _S_INTERNAL,
|
|
125
125
|
"interrupted": "This step was interrupted before it finished.",
|
|
@@ -169,7 +169,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
169
169
|
"no_saved_project": "This step can't save a project here; each step names its own.",
|
|
170
170
|
"not_available_embedded": "This step isn't available inside the Mammoth app.",
|
|
171
171
|
"not_available": _S_UNAVAILABLE,
|
|
172
|
-
"user_control": "Stopping, pausing or extending a run is left to you, not
|
|
172
|
+
"user_control": "Stopping, pausing or extending a run is left to you, not done automatically.",
|
|
173
173
|
"profile_write_failed": _S_SETUP,
|
|
174
174
|
"project_required": "No project has been chosen for this step.",
|
|
175
175
|
"pypi_response_invalid": "An update check didn't return a usable answer.",
|
|
@@ -177,7 +177,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
177
177
|
"replace_table_not_acknowledged": (
|
|
178
178
|
"This export would drop and recreate a database table, and needs an explicit yes."
|
|
179
179
|
),
|
|
180
|
-
"resource_identity_required": "The
|
|
180
|
+
"resource_identity_required": "The request needs to say which item it means.",
|
|
181
181
|
"resource_not_found": _S_NOT_FOUND,
|
|
182
182
|
"retryable_error": "Mammoth was temporarily unavailable. Trying again may work.",
|
|
183
183
|
"schema_not_found": _S_NOT_FOUND,
|
|
@@ -190,7 +190,7 @@ ERROR_SUMMARIES: dict[str, str] = {
|
|
|
190
190
|
"too_many_ids": _S_BAD_REQUEST,
|
|
191
191
|
"unexpected_argument": _S_BAD_REQUEST,
|
|
192
192
|
"unknown_agent": _S_SETUP,
|
|
193
|
-
"unknown_column": "A column
|
|
193
|
+
"unknown_column": "A column that was referred to doesn't exist.",
|
|
194
194
|
"unknown_config_key": _S_SETUP,
|
|
195
195
|
"unknown_input_field": _S_BAD_REQUEST,
|
|
196
196
|
"unknown_option": _S_BAD_REQUEST,
|
|
@@ -49,6 +49,9 @@ class Invocation:
|
|
|
49
49
|
command_id: str
|
|
50
50
|
output: str = "table"
|
|
51
51
|
profile: str | None = None
|
|
52
|
+
# True when ``profile`` is the saved selection filled in for a command that
|
|
53
|
+
# named none, rather than a ``--profile`` / ``MAMMOTH_PROFILE`` the user gave.
|
|
54
|
+
profile_is_default: bool = field(default=False, repr=False, compare=False)
|
|
52
55
|
project: int | None = None
|
|
53
56
|
session: str | None = None
|
|
54
57
|
timeout: float | None = None
|
|
@@ -224,6 +224,7 @@ def _read_invocation(command_id: str, resolved_ids: dict[str, Any], base: Invoca
|
|
|
224
224
|
command_id=command_id,
|
|
225
225
|
output="json",
|
|
226
226
|
profile=base.profile,
|
|
227
|
+
profile_is_default=base.profile_is_default,
|
|
227
228
|
project=base.project,
|
|
228
229
|
timeout=base.timeout,
|
|
229
230
|
job_timeout=base.job_timeout,
|
|
@@ -26,6 +26,7 @@ from typing import Any, NoReturn
|
|
|
26
26
|
|
|
27
27
|
from mammoth.exceptions import MammothAPIError, MammothColumnError
|
|
28
28
|
|
|
29
|
+
from mammoth_cli import __version__
|
|
29
30
|
from mammoth_cli.context.resolver import ResolvedAuth
|
|
30
31
|
from mammoth_cli.errors.envelope import (
|
|
31
32
|
CODE_INVALID_ARGUMENTS,
|
|
@@ -190,6 +191,7 @@ class SdkMammothService:
|
|
|
190
191
|
self._client = MammothClient(
|
|
191
192
|
**credential,
|
|
192
193
|
base_url=auth.base_url,
|
|
194
|
+
user_agent=f"mammoth-cli/{__version__}",
|
|
193
195
|
**kwargs,
|
|
194
196
|
)
|
|
195
197
|
# One loop for the process, not one per call: the client's connection
|
|
@@ -30,9 +30,10 @@ Transform-menu task is a `mammoth view transform` command (`mammoth view
|
|
|
30
30
|
transform --help`). Before the first Mammoth command in a session run
|
|
31
31
|
`mammoth doctor` (it must pass), then `mammoth skill show` and follow that
|
|
32
32
|
guide. If `mammoth` is missing, install it with `pip install mammoth-cli`
|
|
33
|
-
(or `uv tool install mammoth-cli
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
(or `uv tool install mammoth-cli`, then `uv tool update-shell` so it is on
|
|
34
|
+
PATH). If `mammoth auth status` shows no credentials, tell the operator the
|
|
35
|
+
exact `mammoth auth login` command to run in their own terminal
|
|
36
|
+
and wait; never ask for, read, or pass a key or secret.
|
|
36
37
|
Piped output is compact JSON. Take ids only from reads; run `mammoth schema get
|
|
37
38
|
COMMAND_ID` before a command you have not used (`schema get A,B,C` reads
|
|
38
39
|
several in one call); destructive commands need
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.2.
|
|
3
|
+
version = "2.2.74"
|
|
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.38,<0.9)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|
|
@@ -17,7 +17,7 @@ dependencies = [
|
|
|
17
17
|
"pydantic (>=2.12.5,<3)",
|
|
18
18
|
"jsonschema (>=4.20)",
|
|
19
19
|
]
|
|
20
|
-
urls = {homepage = "https://mammoth.io", repository = "https://github.com/EdgeMetric/mammothsdk"}
|
|
20
|
+
urls = {homepage = "https://mammoth.io", repository = "https://github.com/EdgeMetric/mammothsdk", documentation = "https://docs.mammoth.io/build/cli"}
|
|
21
21
|
scripts.mammoth = "mammoth_cli.__main__:main"
|
|
22
22
|
classifiers = [
|
|
23
23
|
"Development Status :: 5 - Production/Stable",
|
|
@@ -1168,7 +1168,7 @@ commands:
|
|
|
1168
1168
|
required_fixture_guard: null
|
|
1169
1169
|
secret_fields: []
|
|
1170
1170
|
human_example: mammoth view data get VIEW_ID --help
|
|
1171
|
-
agent_example: mammoth view data get 123
|
|
1171
|
+
agent_example: mammoth view data get 123 456
|
|
1172
1172
|
unit_tests:
|
|
1173
1173
|
- UT-VIEW-DATA-GET
|
|
1174
1174
|
contract_tests:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.72 → mammoth_cli-2.2.74}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
File without changes
|
|
File without changes
|