mammoth-cli 2.0.54__tar.gz → 2.0.56__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/.gitignore +1 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/PKG-INFO +2 -2
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +1 -1
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +80 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +33 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/registry.py +8 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/schema.py +8 -2
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/view.py +75 -22
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/pyproject.toml +2 -2
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/dashboard.yaml +327 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/sdk-catalog.source.yaml +72 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/sdk-methods.yaml +109 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/LICENSE +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/README.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.54 → mammoth_cli-2.0.56}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.56
|
|
4
4
|
Summary: Command-line interface for the Mammoth Analytics platform
|
|
5
5
|
Project-URL: homepage, https://mammoth.io
|
|
6
6
|
Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
|
|
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
17
17
|
Requires-Python: <3.15,>=3.12
|
|
18
18
|
Requires-Dist: jsonschema>=4.20
|
|
19
19
|
Requires-Dist: keyring<26,>=25.7
|
|
20
|
-
Requires-Dist: mammoth-io<0.8,>=0.7.
|
|
20
|
+
Requires-Dist: mammoth-io<0.8,>=0.7.26
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.13
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.56
|
|
4
4
|
description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines (join, merge, pivot, filter, clean), dashboards, exports, and handoffs."
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Published CLI command catalog
|
|
2
2
|
|
|
3
|
-
This generated catalog is a lookup table for every command in the published CLI manifest, currently
|
|
3
|
+
This generated catalog is a lookup table for every command in the published CLI manifest, currently 565; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
|
|
4
4
|
|
|
5
5
|
Load only the applicable domain file:
|
|
6
6
|
|
|
@@ -21,7 +21,7 @@ Load only the applicable domain file:
|
|
|
21
21
|
- [connector](commands/connector.md) — 22 published commands
|
|
22
22
|
- [context](commands/context.md) — 3 published commands
|
|
23
23
|
- [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
|
|
24
|
-
- [dashboard](commands/dashboard.md) —
|
|
24
|
+
- [dashboard](commands/dashboard.md) — 98 published commands
|
|
25
25
|
- [data-app](commands/data-app.md) — 12 published commands
|
|
26
26
|
- [dataset](commands/dataset.md) — 17 published commands
|
|
27
27
|
- [doctor](commands/doctor.md) — 1 published commands
|
|
@@ -222,6 +222,86 @@ Result: `DashboardDuplicateResult`; mutation `benign_mutation`, confirmation `no
|
|
|
222
222
|
|
|
223
223
|
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: id. duplicated D=52 -> D2=54 Single invocation only; no error-path or variant coverage.
|
|
224
224
|
|
|
225
|
+
### `dashboard.embed.config.get`
|
|
226
|
+
|
|
227
|
+
Run: `mammoth dashboard embed config get`. Exact input fields: `mammoth schema get dashboard.embed.config.get`.
|
|
228
|
+
|
|
229
|
+
Example: `mammoth dashboard embed config get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
230
|
+
|
|
231
|
+
Result: `DashboardEmbedConfigGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
232
|
+
|
|
233
|
+
Status on release: untried; no live run recorded.
|
|
234
|
+
|
|
235
|
+
### `dashboard.embed.config.set`
|
|
236
|
+
|
|
237
|
+
Run: `mammoth dashboard embed config set`. Exact input fields: `mammoth schema get dashboard.embed.config.set`.
|
|
238
|
+
|
|
239
|
+
Example: `mammoth dashboard embed config set 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
240
|
+
|
|
241
|
+
Result: `DashboardEmbedConfigSetResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
242
|
+
|
|
243
|
+
Status on release: untried; no live run recorded.
|
|
244
|
+
|
|
245
|
+
### `dashboard.embed.key.rotate`
|
|
246
|
+
|
|
247
|
+
Run: `mammoth dashboard embed key rotate`. Exact input fields: `mammoth schema get dashboard.embed.key.rotate`.
|
|
248
|
+
|
|
249
|
+
Example: `mammoth dashboard embed key rotate 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
250
|
+
|
|
251
|
+
Result: `DashboardEmbedKeyRotateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
252
|
+
|
|
253
|
+
Status on release: untried; no live run recorded.
|
|
254
|
+
|
|
255
|
+
### `dashboard.embed.lifetime.set`
|
|
256
|
+
|
|
257
|
+
Run: `mammoth dashboard embed lifetime set`. Exact input fields: `mammoth schema get dashboard.embed.lifetime.set`.
|
|
258
|
+
|
|
259
|
+
Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl": 1}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
260
|
+
|
|
261
|
+
Result: `DashboardEmbedLifetimeSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
262
|
+
|
|
263
|
+
Status on release: untried; no live run recorded.
|
|
264
|
+
|
|
265
|
+
### `dashboard.embed.origin.revoke`
|
|
266
|
+
|
|
267
|
+
Run: `mammoth dashboard embed origin revoke`. Exact input fields: `mammoth schema get dashboard.embed.origin.revoke`.
|
|
268
|
+
|
|
269
|
+
Example: `mammoth dashboard embed origin revoke 123 --input '{"origin": "sample"}' --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
270
|
+
|
|
271
|
+
Result: `DashboardEmbedOriginRevokeResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
272
|
+
|
|
273
|
+
Status on release: untried; no live run recorded.
|
|
274
|
+
|
|
275
|
+
### `dashboard.embed.preview-token.create`
|
|
276
|
+
|
|
277
|
+
Run: `mammoth dashboard embed preview-token create`. Exact input fields: `mammoth schema get dashboard.embed.preview-token.create`.
|
|
278
|
+
|
|
279
|
+
Example: `mammoth dashboard embed preview-token create 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
280
|
+
|
|
281
|
+
Result: `DashboardEmbedPreviewTokenCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
282
|
+
|
|
283
|
+
Status on release: untried; no live run recorded.
|
|
284
|
+
|
|
285
|
+
### `dashboard.embed.secret.rotate`
|
|
286
|
+
|
|
287
|
+
Run: `mammoth dashboard embed secret rotate`. Exact input fields: `mammoth schema get dashboard.embed.secret.rotate`.
|
|
288
|
+
|
|
289
|
+
Example: `mammoth dashboard embed secret rotate 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
290
|
+
|
|
291
|
+
Result: `DashboardEmbedSecretRotateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
292
|
+
|
|
293
|
+
Status on release: untried; no live run recorded.
|
|
294
|
+
|
|
295
|
+
### `dashboard.embed.usage.get`
|
|
296
|
+
|
|
297
|
+
Run: `mammoth dashboard embed usage get`. Exact input fields: `mammoth schema get dashboard.embed.usage.get`.
|
|
298
|
+
|
|
299
|
+
Example: `mammoth dashboard embed usage get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
300
|
+
|
|
301
|
+
Result: `DashboardEmbedUsageGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
302
|
+
|
|
303
|
+
Status on release: untried; no live run recorded.
|
|
304
|
+
|
|
225
305
|
### `dashboard.exemplar.extract`
|
|
226
306
|
|
|
227
307
|
Run: `mammoth dashboard exemplar extract`. Exact input fields: `mammoth schema get dashboard.exemplar.extract`.
|
|
@@ -155,3 +155,36 @@ before that they return 404 `DASHBOARD_NOT_FOUND`. Legacy widget routes
|
|
|
155
155
|
`video export` needs a motion-story dashboard. Revert the share
|
|
156
156
|
(`type_of_auth: "mammoth"`) before trashing a temporary dashboard.
|
|
157
157
|
|
|
158
|
+
## Embedding a board on a third-party page
|
|
159
|
+
|
|
160
|
+
`dashboard embed config get DASHBOARD_ID` reads the board's embed settings
|
|
161
|
+
(mode, origin allowlist, the `embed_url`/`sdk_url` a snippet needs); the first
|
|
162
|
+
read on a non-public board without a key auto-mints one, so there is always a
|
|
163
|
+
key to copy. `dashboard embed config set DASHBOARD_ID --yes --confirm
|
|
164
|
+
DASHBOARD_ID --input '{"allow_any_origin": false, "allowed_origins":
|
|
165
|
+
["https://intranet.example.com"]}'` restricts which sites may frame it —
|
|
166
|
+
`allow_any_origin` defaults to true (any site). `mode: "signed"` requires a
|
|
167
|
+
host-signed token instead of the board's key, and only applies while the
|
|
168
|
+
board has no public link. `config set` is a `confirm_target` command, like
|
|
169
|
+
`dashboard archive`: it can expose the board outside Mammoth (enabling
|
|
170
|
+
embedding or widening the allowlist) or break every live embed on that board
|
|
171
|
+
(disabling it or narrowing the allowlist).
|
|
172
|
+
|
|
173
|
+
`dashboard embed key rotate DASHBOARD_ID --yes --confirm DASHBOARD_ID`
|
|
174
|
+
replaces the board's embed key (the old key keeps working for 24h unless
|
|
175
|
+
`keep_previous: false` is passed) — also `confirm_target`. `dashboard embed
|
|
176
|
+
origin revoke DASHBOARD_ID --yes --confirm DASHBOARD_ID --input
|
|
177
|
+
'{"origin": "https://old.example.com"}'` removes one origin from the
|
|
178
|
+
allowlist without touching the rest — also `confirm_target`: it immediately
|
|
179
|
+
breaks the embed on that origin's site. `dashboard embed usage get
|
|
180
|
+
DASHBOARD_ID` reports per-origin render counts and health from the embed
|
|
181
|
+
registry. `dashboard embed preview-token create DASHBOARD_ID` mints a
|
|
182
|
+
short-lived signed token for testing a row-level-security-scoped embed
|
|
183
|
+
before publishing.
|
|
184
|
+
|
|
185
|
+
Two settings are workspace-scoped, not board-scoped: `dashboard embed secret
|
|
186
|
+
rotate WORKSPACE_ID --yes --confirm WORKSPACE_ID` (also `confirm_target`;
|
|
187
|
+
returns the plaintext signing secret once, never on a read) and `dashboard
|
|
188
|
+
embed lifetime set WORKSPACE_ID --input '{"token_ttl": 900}'` (60-3600
|
|
189
|
+
seconds, how long a minted embed viewer session lives).
|
|
190
|
+
|
|
@@ -376,6 +376,14 @@ HANDLERS: dict[str, Handler] = {
|
|
|
376
376
|
"dashboard.assess-twb": dashboard_cmd.dashboard_assess_twb,
|
|
377
377
|
"dashboard.assess-pbix": dashboard_cmd.dashboard_assess_pbix,
|
|
378
378
|
"dashboard.import-workbook": dashboard_cmd.dashboard_import_workbook,
|
|
379
|
+
"dashboard.embed.config.get": dashboard_cmd.generated_dashboard,
|
|
380
|
+
"dashboard.embed.config.set": dashboard_cmd.generated_dashboard,
|
|
381
|
+
"dashboard.embed.key.rotate": dashboard_cmd.generated_dashboard,
|
|
382
|
+
"dashboard.embed.usage.get": dashboard_cmd.generated_dashboard,
|
|
383
|
+
"dashboard.embed.origin.revoke": dashboard_cmd.generated_dashboard,
|
|
384
|
+
"dashboard.embed.preview-token.create": dashboard_cmd.generated_dashboard,
|
|
385
|
+
"dashboard.embed.secret.rotate": dashboard_cmd.generated_dashboard,
|
|
386
|
+
"dashboard.embed.lifetime.set": dashboard_cmd.generated_dashboard,
|
|
379
387
|
# workflow family
|
|
380
388
|
"workflow.block.add": workflow_cmd.workflow_block_add,
|
|
381
389
|
"workflow.block.auth": workflow_cmd.workflow_block_auth,
|
|
@@ -893,8 +893,14 @@ def runnable_example(
|
|
|
893
893
|
# their manifests advertise; otherwise discovery emits a command that
|
|
894
894
|
# deterministically fails before dispatch.
|
|
895
895
|
tokens.append("--yes")
|
|
896
|
-
if record["command_id"]
|
|
897
|
-
|
|
896
|
+
if record["command_id"] in {
|
|
897
|
+
"project.resource-dependencies.update",
|
|
898
|
+
"dashboard.embed.key.rotate",
|
|
899
|
+
"dashboard.embed.secret.rotate",
|
|
900
|
+
"dashboard.embed.config.set",
|
|
901
|
+
"dashboard.embed.origin.revoke",
|
|
902
|
+
}:
|
|
903
|
+
# These commands have a confirm_target policy. Keep their generated
|
|
898
904
|
# example executable in non-interactive mode instead of advertising a
|
|
899
905
|
# request that the safety guard will reject.
|
|
900
906
|
tokens.extend(["--yes", "--confirm", str(_sample_positional_value(positionals[0]))])
|
|
@@ -24,6 +24,7 @@ import inspect
|
|
|
24
24
|
from datetime import UTC, datetime
|
|
25
25
|
from typing import Any
|
|
26
26
|
|
|
27
|
+
from mammoth.models.exports import ExportStatus
|
|
27
28
|
from mammoth.view import ViewExport
|
|
28
29
|
|
|
29
30
|
from mammoth_cli.context import profiles
|
|
@@ -2300,9 +2301,35 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
2300
2301
|
),
|
|
2301
2302
|
details={"dataset_id": dataset_id, "target_ds_id": int(target_ds_id)},
|
|
2302
2303
|
)
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2304
|
+
if target_ds_id is not None:
|
|
2305
|
+
# Each `view export dataset` call creates its own PERSISTENT
|
|
2306
|
+
# export trigger on this view, which re-runs on every pipeline
|
|
2307
|
+
# run; REPLACE_IN_DS/APPEND_TO_DS only ever touch that trigger's
|
|
2308
|
+
# OWN rows. A second export from this view into the same target
|
|
2309
|
+
# is therefore a second writer, not a refresh of the first --
|
|
2310
|
+
# the fix is to rerun the pipeline, not to export again.
|
|
2311
|
+
existing_export = _existing_internal_dataset_export(
|
|
2312
|
+
service, dataview_id, dataset_id, int(target_ds_id)
|
|
2313
|
+
)
|
|
2314
|
+
if existing_export is not None:
|
|
2315
|
+
raise CliError(
|
|
2316
|
+
code="export_already_exists",
|
|
2317
|
+
message=(
|
|
2318
|
+
f"View {dataview_id} already exports into dataset "
|
|
2319
|
+
f"{int(target_ds_id)} (export {existing_export.id}). This export "
|
|
2320
|
+
"re-runs on every pipeline run, and REPLACE_IN_DS replaces only "
|
|
2321
|
+
"its own rows -- a second export into the same target duplicates "
|
|
2322
|
+
"rows instead of refreshing them."
|
|
2323
|
+
),
|
|
2324
|
+
exit_status=EXIT_USAGE,
|
|
2325
|
+
hint="Refresh the target by rerunning the pipeline, not by exporting again.",
|
|
2326
|
+
recovery_commands=[f"mammoth view pipeline rerun {dataview_id}"],
|
|
2327
|
+
details={
|
|
2328
|
+
"dataview_id": dataview_id,
|
|
2329
|
+
"target_ds_id": int(target_ds_id),
|
|
2330
|
+
"export_id": existing_export.id,
|
|
2331
|
+
},
|
|
2332
|
+
)
|
|
2306
2333
|
data = service.call_view(dataview_id, method, dataset_id=dataset_id, **kwargs)
|
|
2307
2334
|
if is_dataset_route and isinstance(data, int):
|
|
2308
2335
|
# The SDK returns the bare id of the dataset written to; name it, and
|
|
@@ -2316,6 +2343,10 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
2316
2343
|
"dataset_id": data,
|
|
2317
2344
|
"project_id": result_project_id,
|
|
2318
2345
|
"source_view_id": dataview_id,
|
|
2346
|
+
# Every internal-dataset export is a pipeline trigger, not a
|
|
2347
|
+
# one-shot copy: it re-runs (and re-writes its own rows) every
|
|
2348
|
+
# time this view's pipeline runs.
|
|
2349
|
+
"refreshes_on_pipeline_run": True,
|
|
2319
2350
|
}
|
|
2320
2351
|
view_info = _dataset_view_info(service, data["dataset_id"], result_project_id)
|
|
2321
2352
|
if view_info is not None:
|
|
@@ -2325,30 +2356,52 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
2325
2356
|
data["next"] = f"mammoth view list {data['dataset_id']}" + (
|
|
2326
2357
|
f" --project {result_project_id}" if target_project is not None else ""
|
|
2327
2358
|
)
|
|
2328
|
-
rows_after
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2359
|
+
# rows_after is only trustworthy for a brand-new dataset: nothing
|
|
2360
|
+
# else could have written to it yet. Writing into an EXISTING
|
|
2361
|
+
# target_ds_id races the target view's own metadata refresh --
|
|
2362
|
+
# this same read has returned a stale row count right after a
|
|
2363
|
+
# confirmed write -- so it is omitted rather than reported wrong.
|
|
2364
|
+
if target_ds_id is None:
|
|
2365
|
+
rows_after = view_info["row_count"] if view_info is not None else None
|
|
2366
|
+
if rows_after is not None:
|
|
2367
|
+
data["rows_after"] = rows_after
|
|
2333
2368
|
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
2334
2369
|
|
|
2335
2370
|
|
|
2336
|
-
|
|
2337
|
-
|
|
2371
|
+
_EXPORTS_LIST_SYMBOL = "mammoth.api.exports.ExportsAPI.list"
|
|
2372
|
+
_INTERNAL_DATASET_HANDLER_TYPE = "internal_dataset"
|
|
2373
|
+
|
|
2338
2374
|
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2375
|
+
def _existing_internal_dataset_export(
|
|
2376
|
+
service: Any, dataview_id: int, dataset_id: int | None, target_ds_id: int
|
|
2377
|
+
) -> Any | None:
|
|
2378
|
+
"""This dataview's ``internal_dataset`` export already writing into
|
|
2379
|
+
``target_ds_id``, if one exists (the most recent by id, when more than
|
|
2380
|
+
one somehow matches). ``None`` on no match.
|
|
2381
|
+
|
|
2382
|
+
``TARGET_DS_ID`` is compared as ``int``: the wire value can come back as
|
|
2383
|
+
a string, which would otherwise never match (mirrors the same int/str
|
|
2384
|
+
fix already applied to the SDK's own write-confirmation poll). A
|
|
2385
|
+
soft-deleted export (``status == ExportStatus.DELETED``) is never a
|
|
2386
|
+
match: the backend soft-deletes triggers rather than removing the row,
|
|
2387
|
+
and the list endpoint does not filter on status, so a deleted export
|
|
2388
|
+
would otherwise block every later export into that target forever.
|
|
2342
2389
|
"""
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2390
|
+
listing = service.call(
|
|
2391
|
+
_EXPORTS_LIST_SYMBOL,
|
|
2392
|
+
dataview_id=dataview_id,
|
|
2393
|
+
dataset_id=dataset_id,
|
|
2394
|
+
handler_type=_INTERNAL_DATASET_HANDLER_TYPE,
|
|
2395
|
+
)
|
|
2396
|
+
exports = getattr(listing, "exports", None) or []
|
|
2397
|
+
matches = [
|
|
2398
|
+
export
|
|
2399
|
+
for export in exports
|
|
2400
|
+
if export.status is not ExportStatus.DELETED
|
|
2401
|
+
and (target := (export.target_properties or {}).get("TARGET_DS_ID")) is not None
|
|
2402
|
+
and int(target) == target_ds_id
|
|
2403
|
+
]
|
|
2404
|
+
return max(matches, key=lambda export: export.id or 0) if matches else None
|
|
2352
2405
|
|
|
2353
2406
|
|
|
2354
2407
|
def _dataset_view_info(
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.56"
|
|
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.7.
|
|
10
|
+
"mammoth-io (>=0.7.26,<0.8)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|