mammoth-cli 2.2.62__tar.gz → 2.2.64__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.62 → mammoth_cli-2.2.64}/PKG-INFO +1 -1
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/app.py +1 -1
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/connector.py +16 -19
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/dataset.py +131 -16
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/resolve.py +14 -4
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/command_contract.py +2 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/pyproject.toml +1 -1
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/dataset.yaml +1 -1
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/.gitignore +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/LICENSE +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/README.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/build-an-agent.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/_lazy.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/help_summaries.json +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/schema.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/keyring_backend.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/oauth.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/locked_files.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/opens.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/append_blank_columns.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/explore_cards.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/folder_ids.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/job_outcome.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/view_analysis.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/view_variants.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/resolve.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/token.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/spec/openapi/openapi.json +0 -0
|
@@ -1343,7 +1343,7 @@ _ROOT_LEAF_HELP: dict[str, str] = {
|
|
|
1343
1343
|
),
|
|
1344
1344
|
"resolve": (
|
|
1345
1345
|
"Say what NAME refers to: a dataset, a view or a project, with ids and projects."
|
|
1346
|
-
"\n\nExample: mammoth resolve uqa-w29-ren"
|
|
1346
|
+
"\n\nExample: mammoth resolve uqa-w29-ren\n\nInput fields: all_projects (bool)"
|
|
1347
1347
|
),
|
|
1348
1348
|
"upgrade": (
|
|
1349
1349
|
"Upgrade the mammoth CLI to the latest (or a specified) version from PyPI."
|
|
@@ -145,26 +145,23 @@ def connector_get(invocation: Invocation) -> HandlerResult:
|
|
|
145
145
|
return data, _meta(invocation, auth.workspace_id, resolved_project(invocation))
|
|
146
146
|
|
|
147
147
|
|
|
148
|
-
#: ``availability`` a
|
|
149
|
-
#:
|
|
150
|
-
|
|
148
|
+
#: ``availability`` a connector gets when the server says this workspace's plan
|
|
149
|
+
#: does not include it.
|
|
150
|
+
_NOT_IN_PLAN = "not_in_plan"
|
|
151
151
|
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
"Premium connector, not enabled in this workspace: Mammoth sales must enable"
|
|
155
|
-
" it before it can be connected. Tell the user so and offer to contact sales."
|
|
156
|
-
)
|
|
153
|
+
_NOT_IN_PLAN_NOTE = "Not included in this workspace's plan. Mammoth sales can enable it."
|
|
157
154
|
|
|
158
155
|
|
|
159
|
-
def
|
|
160
|
-
"""Mark each
|
|
156
|
+
def _with_plan_availability(data: Any) -> Any:
|
|
157
|
+
"""Mark each connector the server reports unavailable to this workspace.
|
|
161
158
|
|
|
162
|
-
``
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
159
|
+
The server's ``is_available`` is the same plan check that gates creating a
|
|
160
|
+
connection. ``is_premium``/``is_added`` cannot stand in for it: ``is_added``
|
|
161
|
+
only says a legacy integration row exists, so a premium connector the plan
|
|
162
|
+
does include read as "not enabled". A response without ``is_available`` (an
|
|
163
|
+
older server) is left unmarked. ``ConnectorsAPI.list`` returns a list, which
|
|
164
|
+
stays a list.
|
|
168
165
|
"""
|
|
169
166
|
if not isinstance(data, list):
|
|
170
167
|
return data
|
|
@@ -172,10 +169,10 @@ def _with_premium_availability(data: Any) -> Any:
|
|
|
172
169
|
(
|
|
173
170
|
{
|
|
174
171
|
**item,
|
|
175
|
-
"availability":
|
|
176
|
-
"availability_note":
|
|
172
|
+
"availability": _NOT_IN_PLAN,
|
|
173
|
+
"availability_note": _NOT_IN_PLAN_NOTE,
|
|
177
174
|
}
|
|
178
|
-
if isinstance(item, dict) and item.get("
|
|
175
|
+
if isinstance(item, dict) and item.get("is_available") is False
|
|
179
176
|
else item
|
|
180
177
|
)
|
|
181
178
|
for item in data
|
|
@@ -187,7 +184,7 @@ def connector_list(invocation: Invocation) -> HandlerResult:
|
|
|
187
184
|
with open_service(invocation) as (service, auth):
|
|
188
185
|
data = service.call(_symbol(invocation))
|
|
189
186
|
return (
|
|
190
|
-
|
|
187
|
+
_with_plan_availability(data),
|
|
191
188
|
_meta(invocation, auth.workspace_id, resolved_project(invocation)),
|
|
192
189
|
)
|
|
193
190
|
|
|
@@ -10,14 +10,17 @@ seam to the public SDK method named by the command's reviewed manifest
|
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
|
+
from collections.abc import Callable
|
|
13
14
|
from typing import Any, Protocol
|
|
14
15
|
|
|
15
16
|
from mammoth_cli.errors.envelope import (
|
|
16
17
|
CODE_INVALID_ARGUMENT,
|
|
18
|
+
CODE_JOB_FAILED,
|
|
17
19
|
CODE_MISSING_ARGUMENT,
|
|
18
20
|
CODE_MISSING_FIELD,
|
|
19
21
|
CODE_SDK_SYMBOL_UNRESOLVED,
|
|
20
22
|
CODE_UNSUPPORTED_CONTRACT,
|
|
23
|
+
EXIT_API,
|
|
21
24
|
EXIT_USAGE,
|
|
22
25
|
CliError,
|
|
23
26
|
)
|
|
@@ -358,6 +361,44 @@ def _tag_scope(matches: list[dict[str, Any]], project_id: int) -> list[dict[str,
|
|
|
358
361
|
return [{**m, "in_project": m.get("project_id") == project_id} for m in matches]
|
|
359
362
|
|
|
360
363
|
|
|
364
|
+
def all_projects_requested(invocation: Invocation) -> bool:
|
|
365
|
+
"""Whether ``--input '{"all_projects": true}'`` asks for matches outside the project."""
|
|
366
|
+
value = (invocation.load_input() or {}).get("all_projects", False)
|
|
367
|
+
if not isinstance(value, bool):
|
|
368
|
+
raise CliError(
|
|
369
|
+
code=CODE_INVALID_ARGUMENT,
|
|
370
|
+
message="all_projects must be true or false.",
|
|
371
|
+
exit_status=EXIT_USAGE,
|
|
372
|
+
)
|
|
373
|
+
return value
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
def narrow_to_project(
|
|
377
|
+
rows: list[dict[str, Any]], is_exact: Callable[[dict[str, Any]], bool]
|
|
378
|
+
) -> tuple[list[dict[str, Any]], int]:
|
|
379
|
+
"""``(rows, dropped)``: only the project's own rows when one of them is an exact match.
|
|
380
|
+
|
|
381
|
+
The name already is in the project the call runs under, so the same name in
|
|
382
|
+
every other project is noise that reads as an ambiguity to ask the user about.
|
|
383
|
+
Rows must carry ``in_project``. With no exact match in the project, all rows
|
|
384
|
+
stay: the name may live elsewhere. ``dropped`` counts the rows left out.
|
|
385
|
+
"""
|
|
386
|
+
own = [r for r in rows if r.get("in_project")]
|
|
387
|
+
if not any(is_exact(r) for r in own):
|
|
388
|
+
return rows, 0
|
|
389
|
+
return own, len(rows) - len(own)
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
def elsewhere_note(dropped: int) -> str:
|
|
393
|
+
"""Says how many matches in other projects were left out, and how to list them."""
|
|
394
|
+
if not dropped:
|
|
395
|
+
return ""
|
|
396
|
+
return (
|
|
397
|
+
f"{dropped} more match(es) in other projects are not listed: "
|
|
398
|
+
"""--input '{"all_projects": true}' lists them."""
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
|
|
361
402
|
def _find_scoped(
|
|
362
403
|
service: Any,
|
|
363
404
|
needle: str,
|
|
@@ -384,11 +425,14 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
|
|
|
384
425
|
carrying its ``project_id`` and ``project_name``: the in-product agent runs
|
|
385
426
|
every call under the project the user last opened, which is often not the one
|
|
386
427
|
the named dataset is in, so it states where the name is instead of asking the
|
|
387
|
-
user to switch.
|
|
428
|
+
user to switch. When the project holds an exact match, only the project's own
|
|
429
|
+
matches are returned and ``elsewhere`` counts the rest; ``--input
|
|
430
|
+
'{"all_projects": true}'`` returns them all. Does not require an active project.
|
|
388
431
|
"""
|
|
389
432
|
name_substring = _require_string_positional(invocation, "name substring")
|
|
390
433
|
needle = name_substring.lower()
|
|
391
434
|
skipped: list[dict[str, Any]] = []
|
|
435
|
+
dropped = 0
|
|
392
436
|
with open_service(invocation) as (service, auth):
|
|
393
437
|
visible = _visible_projects(service)
|
|
394
438
|
cut = False
|
|
@@ -396,6 +440,10 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
|
|
|
396
440
|
matches, projects, cut = _find_scoped(
|
|
397
441
|
service, needle, visible, invocation.project, skipped
|
|
398
442
|
)
|
|
443
|
+
if not all_projects_requested(invocation):
|
|
444
|
+
matches, dropped = narrow_to_project(
|
|
445
|
+
matches, lambda m: str(m.get("name", "")).lower() == needle
|
|
446
|
+
)
|
|
399
447
|
else:
|
|
400
448
|
projects = visible
|
|
401
449
|
holding, cut = _projects_holding(service, needle, visible)
|
|
@@ -412,6 +460,9 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
|
|
|
412
460
|
if skipped:
|
|
413
461
|
result["projects_skipped"] = skipped
|
|
414
462
|
notes = [ambiguity_note(len(matches), name_substring)]
|
|
463
|
+
if dropped:
|
|
464
|
+
result["elsewhere"] = dropped
|
|
465
|
+
notes.append(elsewhere_note(dropped))
|
|
415
466
|
if cut:
|
|
416
467
|
result["truncated"] = True
|
|
417
468
|
notes.append(search_cut_note("datasets"))
|
|
@@ -828,6 +879,7 @@ def dataset_create(invocation: Invocation) -> HandlerResult:
|
|
|
828
879
|
# A clone can land in another project (``dataset_spec.target_project_id``): the
|
|
829
880
|
# name check and the result's scope are that project's, not the active one's.
|
|
830
881
|
landing_project_id = _clone_target_project(ds_creation_type, dataset_spec) or project_id
|
|
882
|
+
_default_data_pull_file(ds_creation_type, dataset_spec)
|
|
831
883
|
kwargs: dict[str, Any] = {
|
|
832
884
|
"dataset_spec": dataset_spec,
|
|
833
885
|
"ds_creation_type": ds_creation_type,
|
|
@@ -878,29 +930,92 @@ def _require_clone_views(ds_creation_type: object, dataset_spec: object) -> None
|
|
|
878
930
|
)
|
|
879
931
|
|
|
880
932
|
|
|
933
|
+
#: The server's ``data_pull_file`` values for a cloud file import; the first is the app default.
|
|
934
|
+
_DATA_PULL_FILE_VALUES = ("Pull same file", "Pull next file based on name pattern")
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
def _default_data_pull_file(ds_creation_type: object, dataset_spec: object) -> None:
|
|
938
|
+
"""Default a cloud file import's ``data_pull_file`` to "Pull same file", as the web app does.
|
|
939
|
+
|
|
940
|
+
Raises:
|
|
941
|
+
CliError: ``invalid_argument`` listing the allowed values when it is not one of them.
|
|
942
|
+
"""
|
|
943
|
+
if ds_creation_type != "cloud" or not isinstance(dataset_spec, dict):
|
|
944
|
+
return
|
|
945
|
+
properties = dataset_spec.get("query_properties")
|
|
946
|
+
if not isinstance(properties, dict) or not properties.get("file_path"):
|
|
947
|
+
return
|
|
948
|
+
pull = properties.setdefault("data_pull_file", _DATA_PULL_FILE_VALUES[0])
|
|
949
|
+
if pull not in _DATA_PULL_FILE_VALUES:
|
|
950
|
+
raise CliError(
|
|
951
|
+
code=CODE_INVALID_ARGUMENT,
|
|
952
|
+
message="query_properties.data_pull_file must be one of "
|
|
953
|
+
f"{list(_DATA_PULL_FILE_VALUES)}, got {pull!r}.",
|
|
954
|
+
exit_status=EXIT_USAGE,
|
|
955
|
+
)
|
|
956
|
+
|
|
957
|
+
|
|
881
958
|
def _created_dataset(handle: Any, settled: Any) -> dict[str, Any]:
|
|
882
959
|
"""Shape a create job (handle + settled result) into a labeled result.
|
|
883
960
|
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
961
|
+
What each creation type settles with: weburl, clone and a single cloud file or
|
|
962
|
+
database import carry the new dataset id (``ds_id``, ``dataset_id`` or
|
|
963
|
+
``datasource_id``); a cloud import deferred to a later start carries
|
|
964
|
+
``datasource_config_id`` and reports ``scheduled``; a bulk cloud file import
|
|
965
|
+
carries ``files_found``/``created``/``failed`` and is returned as the server
|
|
966
|
+
sent it; a sketch is not a job and answers with the dataset itself. A job that
|
|
967
|
+
settled with none of these made nothing, so it raises with the server's reason
|
|
968
|
+
rather than report success.
|
|
969
|
+
|
|
970
|
+
Raises:
|
|
971
|
+
CliError: ``job_failed`` when the settled job made no dataset.
|
|
887
972
|
"""
|
|
888
|
-
|
|
973
|
+
if not isinstance(handle, dict) or "job_id" not in handle:
|
|
974
|
+
return settled if isinstance(settled, dict) else {"job_id": None}
|
|
975
|
+
job_id = handle["job_id"]
|
|
889
976
|
ds_id = None
|
|
977
|
+
config_id = None
|
|
890
978
|
if isinstance(settled, dict):
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
ds_id =
|
|
979
|
+
for source in (settled, settled.get("response")):
|
|
980
|
+
if not isinstance(source, dict):
|
|
981
|
+
continue
|
|
982
|
+
ds_id = ds_id or _first_id(source, _DATASET_ID_KEYS)
|
|
983
|
+
config_id = config_id or source.get("datasource_config_id")
|
|
895
984
|
job_id = settled.get("job_id", job_id)
|
|
985
|
+
if ds_id is None and config_id is not None:
|
|
986
|
+
return {"status": "scheduled", "datasource_config_id": config_id, "job_id": job_id}
|
|
987
|
+
if ds_id is None and isinstance(settled, dict) and "files_found" in settled:
|
|
988
|
+
return settled
|
|
896
989
|
if ds_id is None:
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
990
|
+
reason = _job_reason(settled)
|
|
991
|
+
raise CliError(
|
|
992
|
+
code=CODE_JOB_FAILED,
|
|
993
|
+
message="The dataset was not created"
|
|
994
|
+
+ (f": {reason}" if reason else f" (job {job_id} finished without a dataset id)."),
|
|
995
|
+
exit_status=EXIT_API,
|
|
996
|
+
)
|
|
997
|
+
return {"status": "ready", "dataset_id": ds_id, "job_id": job_id}
|
|
998
|
+
|
|
999
|
+
|
|
1000
|
+
#: Keys a settled create job may carry its dataset id under.
|
|
1001
|
+
_DATASET_ID_KEYS = ("ds_id", "dataset_id", "datasource_id")
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
def _first_id(source: dict[str, Any], keys: tuple[str, ...]) -> Any:
|
|
1005
|
+
"""The first non-empty value of ``keys`` in ``source``, or None."""
|
|
1006
|
+
return next((source[key] for key in keys if source.get(key)), None)
|
|
1007
|
+
|
|
1008
|
+
|
|
1009
|
+
def _job_reason(settled: Any) -> str | None:
|
|
1010
|
+
"""The failure reason a settled job carries (``failure_reason``, ``message``, ``error``)."""
|
|
1011
|
+
if not isinstance(settled, dict):
|
|
1012
|
+
return None
|
|
1013
|
+
nested = settled.get("response")
|
|
1014
|
+
for source in (settled, nested if isinstance(nested, dict) else {}):
|
|
1015
|
+
for key in ("failure_reason", "message", "error"):
|
|
1016
|
+
if source.get(key):
|
|
1017
|
+
return str(source[key])
|
|
1018
|
+
return None
|
|
904
1019
|
|
|
905
1020
|
|
|
906
1021
|
#: Pages (of 100) read to predict a final name; past it the answer is "a suffix may be added".
|
|
@@ -14,6 +14,9 @@ from typing import Any
|
|
|
14
14
|
from mammoth_cli.commands.dataset import (
|
|
15
15
|
_require_string_positional,
|
|
16
16
|
_visible_projects,
|
|
17
|
+
all_projects_requested,
|
|
18
|
+
elsewhere_note,
|
|
19
|
+
narrow_to_project,
|
|
17
20
|
search_cut_note,
|
|
18
21
|
search_hits,
|
|
19
22
|
)
|
|
@@ -99,10 +102,11 @@ def kinds_note(name: str, rows: list[dict[str, Any]]) -> str:
|
|
|
99
102
|
def resolve(invocation: Invocation) -> HandlerResult:
|
|
100
103
|
"""Say what NAME refers to: a dataset, a view or a project, with ids and projects.
|
|
101
104
|
|
|
102
|
-
Read-only. NAME is a case-insensitive substring
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
Read-only. NAME is a case-insensitive substring. Searches every project the
|
|
106
|
+
credential can see and marks each match ``in_project`` under ``--project``.
|
|
107
|
+
When the project holds an exact match, only the project's own matches are
|
|
108
|
+
returned and ``elsewhere`` counts the rest; ``--input '{"all_projects": true}'``
|
|
109
|
+
returns them all. Does not require an active project.
|
|
106
110
|
"""
|
|
107
111
|
name = _require_string_positional(invocation, "name")
|
|
108
112
|
cut = False
|
|
@@ -118,7 +122,13 @@ def resolve(invocation: Invocation) -> HandlerResult:
|
|
|
118
122
|
"project_id": invocation.project,
|
|
119
123
|
}
|
|
120
124
|
rows = resolve_matches(name, projects, hits, invocation.project)
|
|
125
|
+
dropped = 0
|
|
126
|
+
if invocation.project is not None and not all_projects_requested(invocation):
|
|
127
|
+
rows, dropped = narrow_to_project(rows, lambda r: r["exact"])
|
|
121
128
|
result: dict[str, Any] = {"name": name, "matches": rows, "note": kinds_note(name, rows)}
|
|
129
|
+
if dropped:
|
|
130
|
+
result["elsewhere"] = dropped
|
|
131
|
+
result["note"] += " " + elsewhere_note(dropped)
|
|
122
132
|
if cut:
|
|
123
133
|
result["truncated"] = True
|
|
124
134
|
result["note"] += " " + search_cut_note("datasets or views")
|
|
@@ -250,6 +250,8 @@ _PILOT_ADAPTER_INPUTS: dict[str, frozenset[str]] = {
|
|
|
250
250
|
_LOCAL_CONTRACT_FIELDS: dict[str, tuple[FieldSpec, ...]] = {
|
|
251
251
|
"project.ensure": (FieldSpec("name", required=False, annotation=str),),
|
|
252
252
|
"doctor": (FieldSpec("wait", required=False, annotation=int, default=0),),
|
|
253
|
+
"resolve": (FieldSpec("all_projects", required=False, annotation=bool, default=False),),
|
|
254
|
+
"dataset.find": (FieldSpec("all_projects", required=False, annotation=bool, default=False),),
|
|
253
255
|
"schema.get": (FieldSpec("full", required=False, annotation=bool, default=False),),
|
|
254
256
|
"schema.list": (
|
|
255
257
|
FieldSpec("family", required=False, annotation=str | None, default=None),
|
|
@@ -247,7 +247,7 @@ commands:
|
|
|
247
247
|
- CT-DATASET-CREATE-ERROR
|
|
248
248
|
draft_test: null
|
|
249
249
|
undo_test: null
|
|
250
|
-
known_restrictions: 'ds_creation_type is freeform and dataset_spec is arbitrary, so variants beyond the documented path are not qualified. Retained live evidence supports ds_creation_type=weburl with dataset_spec.url; the CLI command waits for the raw SDK job and returned ready for five OWID URL imports. Re-read returned dataset/view IDs and delete only IDs created by this task. A weburl dataset is a one-time copy that keeps no source details to refresh from, so automation''s run_data_retrieval task cannot refresh it (only a cloud-connected dataset can be refreshed); say so rather than scheduling a refresh for it. The result''s name is the dataset''s real name; when the requested name was taken the server adds a suffix, and requested_name and note say so. Use name, not the name you asked for. To copy a dataset as a new independent one: {"ds_creation_type": "clone", "dataset_spec": {"ds_name": NEW_NAME, "source_ds_id": ID, "clone_dataview_ids": [DEFAULT_VIEW_ID], "exclude_data": false}}, DEFAULT_VIEW_ID being the id in dataset''s `default_view` from view list (other views only when asked); an empty clone_dataview_ids is refused here because it makes a blank view. A clone waits and returns the new dataset_id; never use view export dataset for a plain copy, which leaves a live export on the source. A weburl import names the dataset after the downloaded file: follow it with dataset rename to the name the user picked. To import a file from an SFTP server (or another file connector) as a new dataset: connector connection create sftp, then {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "sftp", "connection_key": KEY, "query_properties": {"ds_name": NAME, "file_path": PATH_ON_SERVER}}}; the recipe is recipes/file-import.md.'
|
|
250
|
+
known_restrictions: 'ds_creation_type is freeform and dataset_spec is arbitrary, so variants beyond the documented path are not qualified. Retained live evidence supports ds_creation_type=weburl with dataset_spec.url; the CLI command waits for the raw SDK job and returned ready for five OWID URL imports. Re-read returned dataset/view IDs and delete only IDs created by this task. A weburl dataset is a one-time copy that keeps no source details to refresh from, so automation''s run_data_retrieval task cannot refresh it (only a cloud-connected dataset can be refreshed); say so rather than scheduling a refresh for it. The result''s name is the dataset''s real name; when the requested name was taken the server adds a suffix, and requested_name and note say so. Use name, not the name you asked for. To copy a dataset as a new independent one: {"ds_creation_type": "clone", "dataset_spec": {"ds_name": NEW_NAME, "source_ds_id": ID, "clone_dataview_ids": [DEFAULT_VIEW_ID], "exclude_data": false}}, DEFAULT_VIEW_ID being the id in dataset''s `default_view` from view list (other views only when asked); an empty clone_dataview_ids is refused here because it makes a blank view. A clone waits and returns the new dataset_id; never use view export dataset for a plain copy, which leaves a live export on the source. A weburl import names the dataset after the downloaded file: follow it with dataset rename to the name the user picked. To import a file from an SFTP server (or another file connector) as a new dataset: connector connection create sftp, then {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "sftp", "connection_key": KEY, "query_properties": {"ds_name": NAME, "file_path": PATH_ON_SERVER, "data_pull_file": "Pull same file"}}}. data_pull_file is a string and may be left out, which means "Pull same file" (what the web app does); its only other value is "Pull next file based on name pattern", which also needs folder_path and name_pattern. A pull that finds no file at the path fails the create with the server''s reason; the recipe is recipes/file-import.md.'
|
|
251
251
|
reviewed_by: primary
|
|
252
252
|
- command_id: dataset.create-from-pdf
|
|
253
253
|
command_path: dataset create-from-pdf
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.62 → mammoth_cli-2.2.64}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|