mammoth-cli 2.2.49__tar.gz → 2.2.51__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.
Files changed (268) hide show
  1. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/PKG-INFO +1 -1
  2. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/auth.py +6 -1
  4. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/view.py +23 -8
  5. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/context/credentials.py +5 -1
  6. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/context/oauth.py +10 -0
  7. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/data_quality.py +42 -14
  8. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/pyproject.toml +1 -1
  9. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/.gitignore +0 -0
  10. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/LICENSE +0 -0
  11. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/README.md +0 -0
  12. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/__main__.py +0 -0
  13. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/app.py +0 -0
  14. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  15. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  16. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  17. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  18. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  19. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  20. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  21. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  22. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  23. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  24. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  25. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  26. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  27. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  28. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  29. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  30. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  31. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  32. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  33. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  34. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  35. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  36. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  37. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  38. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  39. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  40. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  41. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  42. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  43. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  44. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  45. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  46. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  47. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  48. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  49. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  50. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  51. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  52. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  53. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  54. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
  55. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  56. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  57. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  58. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  59. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  60. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  61. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
  62. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  63. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  64. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  65. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  66. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  67. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  68. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  69. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  70. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  71. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  72. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  73. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  74. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  75. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  76. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  77. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  78. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  79. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  80. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  81. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  82. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  83. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  84. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  85. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  86. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  87. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  88. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  89. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  90. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  91. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  92. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  93. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/__init__.py +0 -0
  94. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/activity.py +0 -0
  95. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/addon.py +0 -0
  96. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/agent.py +0 -0
  97. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/ai.py +0 -0
  98. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/annotation.py +0 -0
  99. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/automation.py +0 -0
  100. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/batch.py +0 -0
  101. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/billing.py +0 -0
  102. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/browse.py +0 -0
  103. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/calc.py +0 -0
  104. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/capability.py +0 -0
  105. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/client_app.py +0 -0
  106. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/completion.py +0 -0
  107. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/config.py +0 -0
  108. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/connector.py +0 -0
  109. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/context.py +0 -0
  110. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/dashboard.py +0 -0
  111. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/data_app.py +0 -0
  112. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/dataset.py +0 -0
  113. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/doctor.py +0 -0
  114. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/external_key.py +0 -0
  115. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/file.py +0 -0
  116. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/folder.py +0 -0
  117. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/job.py +0 -0
  118. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/link.py +0 -0
  119. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/notification.py +0 -0
  120. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/parameter.py +0 -0
  121. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/project.py +0 -0
  122. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/registry.py +0 -0
  123. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/report.py +0 -0
  124. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/resolve.py +0 -0
  125. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/schedule.py +0 -0
  126. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/schema.py +0 -0
  127. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/skill.py +0 -0
  128. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/snippet.py +0 -0
  129. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/support.py +0 -0
  130. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/template.py +0 -0
  131. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/trash.py +0 -0
  132. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/upgrade.py +0 -0
  133. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/user.py +0 -0
  134. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/view_ops.py +0 -0
  135. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/view_profile.py +0 -0
  136. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/webhook.py +0 -0
  137. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/workflow.py +0 -0
  138. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/commands/workspace.py +0 -0
  139. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/context/__init__.py +0 -0
  140. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/context/endpoint.py +0 -0
  141. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/context/profiles.py +0 -0
  142. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/context/resolver.py +0 -0
  143. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/contracts/__init__.py +0 -0
  144. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/contracts/auth.py +0 -0
  145. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/embed.py +0 -0
  146. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/errors/__init__.py +0 -0
  147. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/errors/envelope.py +0 -0
  148. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/manifest/__init__.py +0 -0
  149. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/manifest/loader.py +0 -0
  150. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/messages/__init__.py +0 -0
  151. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/output/__init__.py +0 -0
  152. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/output/envelope.py +0 -0
  153. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/output/normalize.py +0 -0
  154. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/output/policy.py +0 -0
  155. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/output/progress.py +0 -0
  156. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/output/render.py +0 -0
  157. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/py.typed +0 -0
  158. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/__init__.py +0 -0
  159. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/confirm.py +0 -0
  160. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/dataset_health.py +0 -0
  161. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/dryrun.py +0 -0
  162. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  163. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/embedded.py +0 -0
  164. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/executor.py +0 -0
  165. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/input_loader.py +0 -0
  166. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/intent_only.py +0 -0
  167. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/invocation.py +0 -0
  168. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/locked_files.py +0 -0
  169. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/new_data.py +0 -0
  170. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/options.py +0 -0
  171. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/parents.py +0 -0
  172. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/runlog.py +0 -0
  173. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/session.py +0 -0
  174. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/state.py +0 -0
  175. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/strict.py +0 -0
  176. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/updates.py +0 -0
  177. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/validate.py +0 -0
  178. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/runtime/verify.py +0 -0
  179. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/__init__.py +0 -0
  180. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/append_blank_columns.py +0 -0
  181. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/argspec.py +0 -0
  182. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/board_values.py +0 -0
  183. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/coerce.py +0 -0
  184. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/command_contract.py +0 -0
  185. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/conditional_format.py +0 -0
  186. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/conditions.py +0 -0
  187. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/dashboard_filters.py +0 -0
  188. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/dashboard_pages.py +0 -0
  189. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/dashboard_review.py +0 -0
  190. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/data_profile.py +0 -0
  191. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/dispatch.py +0 -0
  192. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/factory.py +0 -0
  193. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/input_fields.py +0 -0
  194. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/job_outcome.py +0 -0
  195. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/listing.py +0 -0
  196. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/local_time.py +0 -0
  197. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/mapping.py +0 -0
  198. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/openapi_types.py +0 -0
  199. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/positionals.py +0 -0
  200. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/protocol.py +0 -0
  201. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/read_queries.py +0 -0
  202. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/sdk_service.py +0 -0
  203. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/sql_check.py +0 -0
  204. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/stored_stats.py +0 -0
  205. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/testing.py +0 -0
  206. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/text_dates.py +0 -0
  207. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/type_system.py +0 -0
  208. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/view_analysis.py +0 -0
  209. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/view_variants.py +0 -0
  210. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/services/write_impact.py +0 -0
  211. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/skills/__init__.py +0 -0
  212. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/skills/installer.py +0 -0
  213. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/skills/steering.py +0 -0
  214. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/mammoth_cli/testing.py +0 -0
  215. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/activity.yaml +0 -0
  216. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/addon.yaml +0 -0
  217. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/agent.yaml +0 -0
  218. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/ai.yaml +0 -0
  219. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/annotation.yaml +0 -0
  220. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/auth.yaml +0 -0
  221. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/automation.yaml +0 -0
  222. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/batch.yaml +0 -0
  223. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/billing.yaml +0 -0
  224. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/browse.yaml +0 -0
  225. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/calc.yaml +0 -0
  226. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/capability.yaml +0 -0
  227. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/client-app.yaml +0 -0
  228. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/completion.yaml +0 -0
  229. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/config.yaml +0 -0
  230. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/connector.yaml +0 -0
  231. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/context.yaml +0 -0
  232. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/dashboard.yaml +0 -0
  233. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/data-app.yaml +0 -0
  234. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/dataset.yaml +0 -0
  235. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/doctor.yaml +0 -0
  236. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/external-key.yaml +0 -0
  237. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/file.yaml +0 -0
  238. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/folder.yaml +0 -0
  239. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/job.yaml +0 -0
  240. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/link.yaml +0 -0
  241. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/log.yaml +0 -0
  242. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/notification.yaml +0 -0
  243. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/parameter.yaml +0 -0
  244. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/project.yaml +0 -0
  245. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/report.yaml +0 -0
  246. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/resolve.yaml +0 -0
  247. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/schedule.yaml +0 -0
  248. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/schema.yaml +0 -0
  249. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/skill.yaml +0 -0
  250. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/snippet.yaml +0 -0
  251. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/support.yaml +0 -0
  252. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/template.yaml +0 -0
  253. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/token.yaml +0 -0
  254. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/trash.yaml +0 -0
  255. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/upgrade.yaml +0 -0
  256. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/user.yaml +0 -0
  257. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/version.yaml +0 -0
  258. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/view.yaml +0 -0
  259. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/webhook.yaml +0 -0
  260. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/workflow.yaml +0 -0
  261. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/commands/workspace.yaml +0 -0
  262. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/edits-target.source.yaml +0 -0
  263. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/openapi-operations.yaml +0 -0
  264. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/schema-v1.json +0 -0
  265. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/sdk-catalog.source.yaml +0 -0
  266. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/manifests/sdk-methods.yaml +0 -0
  267. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/openapi/metadata.json +0 -0
  268. {mammoth_cli-2.2.49 → mammoth_cli-2.2.51}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.2.49
3
+ Version: 2.2.51
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
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.2.49"
9
+ __version__ = "2.2.51"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -339,17 +339,22 @@ def _run_oauth_login(
339
339
  session = oauth.browser_login(
340
340
  base_url, client_id=client_id, open_browser=open_browser, say=say
341
341
  )
342
+ # The server-verified workspace wins over the grant's own workspace_id.
342
343
  workspace_id = _verify_login(invocation, base_url=base_url, api_token=session.access)
343
344
 
344
345
  profile_name = invocation.profile or profiles.DEFAULT_PROFILE_NAME
345
346
  profiles.validate_profile_name(profile_name)
346
347
  existing = profiles.get_profile(profile_name)
348
+ if session.project_id is not None:
349
+ project_id = session.project_id
350
+ else:
351
+ project_id = existing.project_id if existing is not None else None
347
352
  profiles.save_profile(
348
353
  profiles.ProfileRecord(
349
354
  name=profile_name,
350
355
  workspace_id=workspace_id,
351
356
  server_prefix=server_prefix,
352
- project_id=existing.project_id if existing is not None else None,
357
+ project_id=project_id,
353
358
  ),
354
359
  select=True,
355
360
  )
@@ -1547,19 +1547,32 @@ def _relabel_and_check(
1547
1547
  rows = data.get(_ROWS_KEY) if isinstance(data, dict) else None
1548
1548
  if not isinstance(rows, list) or not rows:
1549
1549
  data = _relabel_columns(service, dataset_id, view_id, project_id, data, mapping)
1550
- return _with_column_warnings(data, types or {}, view_id, dataset_id, read_only=True)
1550
+ return _with_column_warnings(
1551
+ data, types or {}, view_id, dataset_id, read_only=True, project_id=project_id
1552
+ )
1551
1553
  if mapping is None or types is None:
1552
1554
  mapping, types = _column_profile(service, dataset_id, view_id, project_id)
1553
1555
  data = _relabel_columns(service, dataset_id, view_id, project_id, data, mapping)
1554
- data = _with_column_warnings(data, types, view_id, dataset_id, read_only=True)
1555
- return _with_duplicates_fact(data, view_id, dataset_id, whole_view)
1556
+ data = _with_column_warnings(
1557
+ data, types, view_id, dataset_id, read_only=True, project_id=project_id
1558
+ )
1559
+ return _with_duplicates_fact(data, view_id, dataset_id, whole_view, project_id=project_id)
1556
1560
 
1557
1561
 
1558
- def _with_duplicates_fact(data: Any, view_id: int, dataset_id: int | None, whole_view: bool) -> Any:
1562
+ def _with_duplicates_fact(
1563
+ data: Any,
1564
+ view_id: int,
1565
+ dataset_id: int | None,
1566
+ whole_view: bool,
1567
+ *,
1568
+ project_id: int | None = None,
1569
+ ) -> Any:
1559
1570
  """Add ``duplicates``: the read's own statement about exact duplicate rows."""
1560
1571
  if not isinstance(data, dict) or not isinstance(data.get(_ROWS_KEY), list):
1561
1572
  return data
1562
- fact = duplicate_rows_fact(data[_ROWS_KEY], view_id, dataset_id, whole_view=whole_view)
1573
+ fact = duplicate_rows_fact(
1574
+ data[_ROWS_KEY], view_id, dataset_id, whole_view=whole_view, project_id=project_id
1575
+ )
1563
1576
  return {**data, "duplicates": fact} if fact is not None else data
1564
1577
 
1565
1578
 
@@ -1580,6 +1593,7 @@ def _with_column_warnings(
1580
1593
  view_id: int,
1581
1594
  dataset_id: int | None = None,
1582
1595
  read_only: bool = False,
1596
+ project_id: int | None = None,
1583
1597
  ) -> Any:
1584
1598
  """Add ``column_checks`` (always) and ``column_warnings`` (when found).
1585
1599
 
@@ -1590,7 +1604,7 @@ def _with_column_warnings(
1590
1604
  if not isinstance(data, dict) or not isinstance(data.get(_ROWS_KEY, []), list):
1591
1605
  return data
1592
1606
  checks, warnings = _check_columns(
1593
- data.get(_ROWS_KEY) or [], types, view_id, dataset_id, read_only
1607
+ data.get(_ROWS_KEY) or [], types, view_id, dataset_id, read_only, project_id
1594
1608
  )
1595
1609
  out = {**data, "column_checks": checks}
1596
1610
  return {**out, "column_warnings": warnings} if warnings else out
@@ -1602,6 +1616,7 @@ def _check_columns(
1602
1616
  view_id: int,
1603
1617
  dataset_id: int | None,
1604
1618
  read_only: bool = False,
1619
+ project_id: int | None = None,
1605
1620
  ) -> tuple[dict[str, Any], list[dict[str, Any]]]:
1606
1621
  """Run ``column_warnings`` and describe what was checked (never raises)."""
1607
1622
  checks: dict[str, Any] = {
@@ -1613,7 +1628,7 @@ def _check_columns(
1613
1628
  warnings: list[dict[str, Any]] = []
1614
1629
  if rows and types:
1615
1630
  try:
1616
- warnings = column_warnings(rows, types, view_id, dataset_id, read_only)
1631
+ warnings = column_warnings(rows, types, view_id, dataset_id, read_only, project_id)
1617
1632
  except Exception as exc: # noqa: BLE001 -- a presentation aid must not fail the read
1618
1633
  checks["checked"] = []
1619
1634
  checks["error"] = f"{type(exc).__name__}: {exc}"
@@ -4789,7 +4804,7 @@ def upload_preview(
4789
4804
  rows = [row for row in rows or [] if isinstance(row, dict)]
4790
4805
  except Exception as exc: # noqa: BLE001 -- a preview must never fail the upload
4791
4806
  return {"preview_error": f"{type(exc).__name__}: {exc}"}
4792
- checks, warnings = _check_columns(rows, types, view_id, dataset_id)
4807
+ checks, warnings = _check_columns(rows, types, view_id, dataset_id, project_id=project_id)
4793
4808
  preview: dict[str, Any] = {
4794
4809
  "view_id": view_id,
4795
4810
  "view_name": record.get("name"),
@@ -140,7 +140,9 @@ class OAuthSession:
140
140
  """A browser login's tokens: a short-lived access token and its refresh token.
141
141
 
142
142
  ``expires_at`` is a Unix timestamp in whole seconds. ``grant_id`` is the
143
- server-side connection id, used to revoke it on logout.
143
+ server-side connection id, used to revoke it on logout. ``workspace_id`` and
144
+ ``project_id`` are the scope the server pinned the grant to at login; they are
145
+ adopted into the profile then and are not stored with the credential.
144
146
  """
145
147
 
146
148
  access: str
@@ -148,6 +150,8 @@ class OAuthSession:
148
150
  expires_at: int
149
151
  client_id: str
150
152
  grant_id: int | None = None
153
+ workspace_id: int | None = None
154
+ project_id: int | None = None
151
155
 
152
156
  def document(self) -> dict[str, str | int]:
153
157
  document: dict[str, str | int] = {
@@ -242,6 +242,8 @@ class TokenGrant:
242
242
  access: str
243
243
  refresh: str
244
244
  expires_in: int
245
+ workspace_id: int | None = None
246
+ project_id: int | None = None
245
247
 
246
248
 
247
249
  def _post_token(base_url: str, form: dict[str, str]) -> tuple[int, dict[str, object]]:
@@ -257,12 +259,18 @@ def _post_token(base_url: str, form: dict[str, str]) -> tuple[int, dict[str, obj
257
259
  return status, body if isinstance(body, dict) else {}
258
260
 
259
261
 
262
+ def _optional_id(value: object) -> int | None:
263
+ return None if value is None else int(str(value))
264
+
265
+
260
266
  def _parse_grant(body: dict[str, object]) -> TokenGrant:
261
267
  try:
262
268
  return TokenGrant(
263
269
  access=str(body["access_token"]),
264
270
  refresh=str(body["refresh_token"]),
265
271
  expires_in=int(str(body["expires_in"])),
272
+ workspace_id=_optional_id(body.get("workspace_id")),
273
+ project_id=_optional_id(body.get("project_id")),
266
274
  )
267
275
  except (ValueError, KeyError, TypeError) as exc:
268
276
  raise _login_failed("Mammoth's sign-in service returned an unreadable answer.") from exc
@@ -301,6 +309,8 @@ def session_from_grant(grant: TokenGrant, client_id: str, now: float | None = No
301
309
  expires_at=issued + grant.expires_in,
302
310
  client_id=client_id,
303
311
  grant_id=grant_id_from_refresh_token(grant.refresh),
312
+ workspace_id=grant.workspace_id,
313
+ project_id=grant.project_id,
304
314
  )
305
315
 
306
316
 
@@ -65,18 +65,31 @@ def _is_date(text: str) -> bool:
65
65
  return False
66
66
 
67
67
 
68
- def _convert_hint(view_id: int | None, column: str, to: str) -> str:
68
+ def _project_flag(project_id: int | None) -> str:
69
+ """`` --project N`` for a fix command, or nothing when the project is not known."""
70
+ return f" --project {project_id}" if project_id is not None else ""
71
+
72
+
73
+ def _convert_hint(view_id: int | None, column: str, to: str, project_id: int | None) -> str:
69
74
  target = str(view_id) if view_id is not None else "VIEW_ID"
70
75
  spec = json.dumps({"conversions": [{"column": column, "to": to}]})
71
- return f"mammoth view transform convert-type {target} --input {shlex.quote(spec)}"
76
+ return (
77
+ f"mammoth view transform convert-type {target} --input {shlex.quote(spec)}"
78
+ f"{_project_flag(project_id)}"
79
+ )
72
80
 
73
81
 
74
- def _bulk_replace_hint(view_id: int | None, column: str, mapping: list[dict[str, Any]]) -> str:
82
+ def _bulk_replace_hint(
83
+ view_id: int | None, column: str, mapping: list[dict[str, Any]], project_id: int | None
84
+ ) -> str:
75
85
  target = str(view_id) if view_id is not None else "VIEW_ID"
76
86
  spec = json.dumps(
77
87
  {"columns": [column], "mapping": mapping, "match_case": True, "match_words": True}
78
88
  )
79
- return f"mammoth view transform bulk-replace {target} --input {shlex.quote(spec)}"
89
+ return (
90
+ f"mammoth view transform bulk-replace {target} --input {shlex.quote(spec)}"
91
+ f"{_project_flag(project_id)}"
92
+ )
80
93
 
81
94
 
82
95
  def _spelling_key(text: str) -> str:
@@ -149,6 +162,7 @@ def _variant_spellings_warning(
149
162
  texts: list[str],
150
163
  view_id: int | None,
151
164
  checked: int,
165
+ project_id: int | None,
152
166
  ) -> dict[str, Any] | None:
153
167
  groups = _variant_spelling_groups(texts)
154
168
  if not groups:
@@ -172,7 +186,7 @@ def _variant_spellings_warning(
172
186
  "column": column,
173
187
  "issue": "variant_spellings",
174
188
  "detail": detail,
175
- "fix": _bulk_replace_hint(view_id, column, mapping),
189
+ "fix": _bulk_replace_hint(view_id, column, mapping, project_id),
176
190
  "rows_checked": checked,
177
191
  }
178
192
 
@@ -206,6 +220,7 @@ def _renamed_label_warning(
206
220
  column: str,
207
221
  date_column: str,
208
222
  view_id: int | None,
223
+ project_id: int | None,
209
224
  ) -> dict[str, Any] | None:
210
225
  """A label that stops before a longer label starting with its words begins
211
226
  reads as one thing renamed ("Riverside" -> "Riverside Mall"): left apart, its
@@ -240,7 +255,7 @@ def _renamed_label_warning(
240
255
  "its figures split across two names and a period comparison shows a drop "
241
256
  "and a new entry that are the same thing; confirm, then unify them."
242
257
  ),
243
- "fix": _bulk_replace_hint(view_id, column, mapping),
258
+ "fix": _bulk_replace_hint(view_id, column, mapping, project_id),
244
259
  "rows_checked": len(rows),
245
260
  }
246
261
 
@@ -273,6 +288,7 @@ def duplicate_rows_fact(
273
288
  dataset_id: int | None,
274
289
  *,
275
290
  whole_view: bool,
291
+ project_id: int | None = None,
276
292
  ) -> dict[str, Any] | None:
277
293
  """The read's positive statement about exact duplicate rows (zero included).
278
294
 
@@ -308,7 +324,7 @@ def duplicate_rows_fact(
308
324
  spec = json.dumps({"dataset_id": dataset_id})
309
325
  fact["table_wide_check"] = (
310
326
  f"mammoth view transform discard-duplicates {view_id} "
311
- f"--input {shlex.quote(spec)} --dry-run"
327
+ f"--input {shlex.quote(spec)} --dry-run{_project_flag(project_id)}"
312
328
  )
313
329
  return fact
314
330
 
@@ -317,6 +333,7 @@ def _duplicate_rows_warning(
317
333
  rows: list[Mapping[str, Any]],
318
334
  view_id: int | None,
319
335
  dataset_id: int | None,
336
+ project_id: int | None,
320
337
  ) -> dict[str, Any] | None:
321
338
  """Return a table-level warning when the page itself holds exact duplicates.
322
339
 
@@ -340,6 +357,7 @@ def _duplicate_rows_warning(
340
357
  spec = json.dumps({"dataset_id": dataset_id})
341
358
  warning["fix"] = (
342
359
  f"mammoth view transform discard-duplicates {view_id} --input {shlex.quote(spec)}"
360
+ f"{_project_flag(project_id)}"
343
361
  )
344
362
  return warning
345
363
 
@@ -389,11 +407,16 @@ def _blank_values_warning(
389
407
  }
390
408
 
391
409
 
392
- def _remove_blank_rows_hint(view_id: int, dataset_id: int, column: str) -> str:
410
+ def _remove_blank_rows_hint(
411
+ view_id: int, dataset_id: int, column: str, project_id: int | None
412
+ ) -> str:
393
413
  spec = json.dumps(
394
414
  {"condition": {"column": column, "operator": "IS_NOT_EMPTY"}, "dataset_id": dataset_id}
395
415
  )
396
- return f"mammoth view transform filter {view_id} --input {shlex.quote(spec)}"
416
+ return (
417
+ f"mammoth view transform filter {view_id} --input {shlex.quote(spec)}"
418
+ f"{_project_flag(project_id)}"
419
+ )
397
420
 
398
421
 
399
422
  def column_warnings(
@@ -402,6 +425,7 @@ def column_warnings(
402
425
  view_id: int | None = None,
403
426
  dataset_id: int | None = None,
404
427
  read_only: bool = False,
428
+ project_id: int | None = None,
405
429
  ) -> list[dict[str, Any]]:
406
430
  """Return warnings for text columns that hold numbers or dates, and for blanks.
407
431
 
@@ -413,6 +437,8 @@ def column_warnings(
413
437
  command (a mutation, so it needs the exact parent, not discovery).
414
438
  read_only: The rows came from a read-only data read; a ``dates_stored_as_text``
415
439
  finding then carries no ``fix``, since a read answers from the text as it is.
440
+ project_id: The project the rows were read from; each fix command names it
441
+ with ``--project`` (the saved profile project may differ, or be absent).
416
442
 
417
443
  Returns:
418
444
  One record per finding: ``column``, ``issue``
@@ -428,7 +454,7 @@ def column_warnings(
428
454
  checked = len(materialised)
429
455
  warnings: list[dict[str, Any]] = []
430
456
  figures = _varying_numbers(materialised, column_types)
431
- duplicate_warning = _duplicate_rows_warning(materialised, view_id, dataset_id)
457
+ duplicate_warning = _duplicate_rows_warning(materialised, view_id, dataset_id, project_id)
432
458
  if duplicate_warning is not None:
433
459
  warnings.append(duplicate_warning)
434
460
  for column, col_type in column_types.items():
@@ -466,10 +492,12 @@ def column_warnings(
466
492
  detail += "."
467
493
  finding: dict[str, Any] = {"column": column, "issue": issue, "detail": detail}
468
494
  if not (read_only and kind == "dates"):
469
- finding["fix"] = _convert_hint(view_id, column, to)
495
+ finding["fix"] = _convert_hint(view_id, column, to, project_id)
470
496
  warnings.append({**finding, "rows_checked": checked})
471
497
  break
472
- variant_warning = _variant_spellings_warning(column, texts, view_id, checked)
498
+ variant_warning = _variant_spellings_warning(
499
+ column, texts, view_id, checked, project_id
500
+ )
473
501
  if variant_warning is not None:
474
502
  warnings.append(variant_warning)
475
503
  date_column = next(
@@ -477,7 +505,7 @@ def column_warnings(
477
505
  None,
478
506
  )
479
507
  renamed = (
480
- _renamed_label_warning(materialised, column, date_column, view_id)
508
+ _renamed_label_warning(materialised, column, date_column, view_id, project_id)
481
509
  if date_column is not None
482
510
  else None
483
511
  )
@@ -486,6 +514,6 @@ def column_warnings(
486
514
  if blanks:
487
515
  remove_fix = None
488
516
  if figures == [column] and view_id is not None and dataset_id is not None:
489
- remove_fix = _remove_blank_rows_hint(view_id, dataset_id, column)
517
+ remove_fix = _remove_blank_rows_hint(view_id, dataset_id, column, project_id)
490
518
  warnings.append(_blank_values_warning(column, blanks, len(values), checked, remove_fix))
491
519
  return warnings
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.2.49"
3
+ version = "2.2.51"
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"
File without changes
File without changes
File without changes