mammoth-cli 2.0.79__tar.gz → 2.0.80__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 (234) hide show
  1. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/PKG-INFO +1 -1
  2. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/data_quality.py +90 -3
  4. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/sdk_service.py +51 -0
  5. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/pyproject.toml +1 -1
  6. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/.gitignore +0 -0
  7. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/LICENSE +0 -0
  8. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/README.md +0 -0
  9. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/__main__.py +0 -0
  10. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/app.py +0 -0
  11. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  12. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  13. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  14. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  15. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  16. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  17. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  18. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  19. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  20. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  21. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  22. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  23. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  24. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  25. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  26. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  27. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  28. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  29. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  30. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  31. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  32. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  33. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  34. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  35. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  36. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  37. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  38. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  39. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  40. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  41. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  42. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  43. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  44. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  45. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  46. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  47. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  48. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  49. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  50. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  51. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  52. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  53. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  54. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  55. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  56. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  57. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  58. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  59. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  60. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  61. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  62. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  63. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  64. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  65. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  66. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  67. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  68. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  69. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  70. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  71. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  72. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  73. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  74. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  75. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  76. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  77. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  78. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  79. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  80. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  81. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  82. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  83. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  84. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/__init__.py +0 -0
  85. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/activity.py +0 -0
  86. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/addon.py +0 -0
  87. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/agent.py +0 -0
  88. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/ai.py +0 -0
  89. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/annotation.py +0 -0
  90. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/auth.py +0 -0
  91. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/automation.py +0 -0
  92. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/batch.py +0 -0
  93. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/billing.py +0 -0
  94. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/browse.py +0 -0
  95. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/calc.py +0 -0
  96. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/capability.py +0 -0
  97. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/client_app.py +0 -0
  98. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/completion.py +0 -0
  99. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/config.py +0 -0
  100. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/connector.py +0 -0
  101. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/context.py +0 -0
  102. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/dashboard.py +0 -0
  103. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/data_app.py +0 -0
  104. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/dataset.py +0 -0
  105. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/doctor.py +0 -0
  106. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/external_key.py +0 -0
  107. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/file.py +0 -0
  108. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/folder.py +0 -0
  109. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/job.py +0 -0
  110. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/notification.py +0 -0
  111. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/parameter.py +0 -0
  112. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/project.py +0 -0
  113. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/registry.py +0 -0
  114. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/report.py +0 -0
  115. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/schedule.py +0 -0
  116. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/schema.py +0 -0
  117. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/skill.py +0 -0
  118. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/snippet.py +0 -0
  119. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/support.py +0 -0
  120. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/template.py +0 -0
  121. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/trash.py +0 -0
  122. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/upgrade.py +0 -0
  123. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/user.py +0 -0
  124. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/view.py +0 -0
  125. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/view_ops.py +0 -0
  126. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/webhook.py +0 -0
  127. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/workflow.py +0 -0
  128. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/commands/workspace.py +0 -0
  129. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/context/__init__.py +0 -0
  130. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/context/credentials.py +0 -0
  131. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/context/endpoint.py +0 -0
  132. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/context/profiles.py +0 -0
  133. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/context/resolver.py +0 -0
  134. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/contracts/__init__.py +0 -0
  135. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/contracts/auth.py +0 -0
  136. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/embed.py +0 -0
  137. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/errors/__init__.py +0 -0
  138. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/errors/envelope.py +0 -0
  139. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/manifest/__init__.py +0 -0
  140. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/manifest/loader.py +0 -0
  141. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/messages/__init__.py +0 -0
  142. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/output/__init__.py +0 -0
  143. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/output/envelope.py +0 -0
  144. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/output/normalize.py +0 -0
  145. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/output/policy.py +0 -0
  146. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/output/progress.py +0 -0
  147. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/output/render.py +0 -0
  148. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/py.typed +0 -0
  149. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/__init__.py +0 -0
  150. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/confirm.py +0 -0
  151. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/dryrun.py +0 -0
  152. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/embedded.py +0 -0
  153. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/executor.py +0 -0
  154. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/input_loader.py +0 -0
  155. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/invocation.py +0 -0
  156. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/options.py +0 -0
  157. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/parents.py +0 -0
  158. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/runlog.py +0 -0
  159. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/session.py +0 -0
  160. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/state.py +0 -0
  161. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/strict.py +0 -0
  162. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/updates.py +0 -0
  163. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/validate.py +0 -0
  164. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/runtime/verify.py +0 -0
  165. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/__init__.py +0 -0
  166. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/argspec.py +0 -0
  167. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/coerce.py +0 -0
  168. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/command_contract.py +0 -0
  169. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/conditions.py +0 -0
  170. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/dashboard_pages.py +0 -0
  171. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/dashboard_review.py +0 -0
  172. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/dispatch.py +0 -0
  173. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/factory.py +0 -0
  174. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/input_fields.py +0 -0
  175. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/mapping.py +0 -0
  176. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/openapi_types.py +0 -0
  177. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/positionals.py +0 -0
  178. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/protocol.py +0 -0
  179. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/testing.py +0 -0
  180. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/services/type_system.py +0 -0
  181. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/skills/__init__.py +0 -0
  182. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/skills/installer.py +0 -0
  183. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/skills/steering.py +0 -0
  184. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/mammoth_cli/testing.py +0 -0
  185. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/activity.yaml +0 -0
  186. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/addon.yaml +0 -0
  187. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/agent.yaml +0 -0
  188. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/ai.yaml +0 -0
  189. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/annotation.yaml +0 -0
  190. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/auth.yaml +0 -0
  191. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/automation.yaml +0 -0
  192. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/batch.yaml +0 -0
  193. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/billing.yaml +0 -0
  194. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/browse.yaml +0 -0
  195. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/calc.yaml +0 -0
  196. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/capability.yaml +0 -0
  197. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/client-app.yaml +0 -0
  198. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/completion.yaml +0 -0
  199. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/config.yaml +0 -0
  200. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/connector.yaml +0 -0
  201. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/context.yaml +0 -0
  202. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/dashboard.yaml +0 -0
  203. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/data-app.yaml +0 -0
  204. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/dataset.yaml +0 -0
  205. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/doctor.yaml +0 -0
  206. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/external-key.yaml +0 -0
  207. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/file.yaml +0 -0
  208. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/folder.yaml +0 -0
  209. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/job.yaml +0 -0
  210. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/log.yaml +0 -0
  211. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/notification.yaml +0 -0
  212. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/parameter.yaml +0 -0
  213. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/project.yaml +0 -0
  214. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/report.yaml +0 -0
  215. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/schedule.yaml +0 -0
  216. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/schema.yaml +0 -0
  217. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/skill.yaml +0 -0
  218. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/snippet.yaml +0 -0
  219. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/support.yaml +0 -0
  220. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/template.yaml +0 -0
  221. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/trash.yaml +0 -0
  222. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/upgrade.yaml +0 -0
  223. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/user.yaml +0 -0
  224. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/version.yaml +0 -0
  225. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/view.yaml +0 -0
  226. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/webhook.yaml +0 -0
  227. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/workflow.yaml +0 -0
  228. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/commands/workspace.yaml +0 -0
  229. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/openapi-operations.yaml +0 -0
  230. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/schema-v1.json +0 -0
  231. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/sdk-catalog.source.yaml +0 -0
  232. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/manifests/sdk-methods.yaml +0 -0
  233. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/spec/openapi/metadata.json +0 -0
  234. {mammoth_cli-2.0.79 → mammoth_cli-2.0.80}/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.79
3
+ Version: 2.0.80
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.0.79"
9
+ __version__ = "2.0.80"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -11,6 +11,7 @@ from __future__ import annotations
11
11
 
12
12
  import json
13
13
  import re
14
+ from collections import Counter
14
15
  from collections.abc import Iterable, Mapping
15
16
  from datetime import datetime
16
17
  from typing import Any
@@ -20,8 +21,14 @@ _MOSTLY = 0.8
20
21
  #: Fewer non-blank values than this are too few to call a pattern.
21
22
  _MIN_VALUES = 3
22
23
  _MAX_EXAMPLES = 3
24
+ #: Most groups of variant spellings to name in one warning.
25
+ _MAX_VARIANT_GROUPS = 5
23
26
 
24
27
  _NUMBER = re.compile(r"^[-+]?[$€£]?\s*\d[\d,]*(\.\d+)?\s*%?$|^[-+]?[$€£]?\s*\.\d+\s*%?$")
28
+ #: Punctuation is normalised to a space, not dropped, so "Pepsi,Cola" and
29
+ #: "Pepsi Cola" collapse the same way as "Pepsi Cola" itself.
30
+ _PUNCTUATION = re.compile(r"[^\w\s]", re.UNICODE)
31
+ _WHITESPACE = re.compile(r"\s+")
25
32
  _DATE_FORMATS = (
26
33
  "%Y-%m-%d",
27
34
  "%Y/%m/%d",
@@ -61,6 +68,82 @@ def _convert_hint(view_id: int | None, column: str, to: str) -> str:
61
68
  return f"mammoth view transform convert-type {target} --input '{spec}'"
62
69
 
63
70
 
71
+ def _bulk_replace_hint(view_id: int | None, column: str, mapping: list[dict[str, Any]]) -> str:
72
+ target = str(view_id) if view_id is not None else "VIEW_ID"
73
+ spec = json.dumps({"columns": [column], "mapping": mapping})
74
+ return f"mammoth view transform bulk-replace {target} --input '{spec}'"
75
+
76
+
77
+ def _spelling_key(text: str) -> str:
78
+ """Case-, whitespace- and punctuation-insensitive grouping key.
79
+
80
+ Punctuation is replaced with a space (not dropped) before whitespace is
81
+ collapsed, so inner punctuation ("Pepsi, Co.") normalises the same way
82
+ as a plain space ("Pepsi Co"). This is normalisation, not fuzzy
83
+ matching: different words ("pepsi cola") get a different key than
84
+ ("pepsi") and are never grouped.
85
+ """
86
+ despaced = _WHITESPACE.sub(" ", _PUNCTUATION.sub(" ", text))
87
+ return despaced.strip().lower()
88
+
89
+
90
+ def _variant_spelling_groups(texts: list[str]) -> list[tuple[str, list[str]]]:
91
+ """Group distinct values that share a spelling key, keys sorted for stable output.
92
+
93
+ Only keys with more than one distinct raw value are a "group" worth
94
+ reporting; a single spelling of a value is not a finding.
95
+ """
96
+ by_key: dict[str, list[str]] = {}
97
+ for text in dict.fromkeys(texts): # distinct values, first-seen order
98
+ key = _spelling_key(text)
99
+ if not key:
100
+ continue
101
+ by_key.setdefault(key, []).append(text)
102
+ groups = [(key, values) for key, values in by_key.items() if len(values) > 1]
103
+ return sorted(groups, key=lambda item: item[0])
104
+
105
+
106
+ def _most_used_spelling(values: list[str], counts: Counter[str]) -> str:
107
+ """The group's most frequent real spelling (first seen on a tie), trimmed.
108
+
109
+ Never a synthesised form such as ``str.title()``, which would rewrite
110
+ "McDonald's" as "Mcdonald'S".
111
+ """
112
+ return max(values, key=lambda value: counts[value]).strip()
113
+
114
+
115
+ def _variant_spellings_warning(
116
+ column: str,
117
+ texts: list[str],
118
+ view_id: int | None,
119
+ checked: int,
120
+ ) -> dict[str, Any] | None:
121
+ groups = _variant_spelling_groups(texts)
122
+ if not groups:
123
+ return None
124
+ shown = groups[:_MAX_VARIANT_GROUPS]
125
+ counts = Counter(texts)
126
+ canonical = {key: _most_used_spelling(values, counts) for key, values in shown}
127
+ mapping = [{"search": sorted(values), "replace": canonical[key]} for key, values in shown]
128
+ examples = "; ".join(
129
+ "{" + ", ".join(repr(v) for v in sorted(values)) + "}" + f" -> {canonical[key]!r}"
130
+ for key, values in shown
131
+ )
132
+ detail = (
133
+ f"{len(groups)} group(s) of values in this TEXT column differ only in case, "
134
+ f"whitespace or punctuation and will be counted separately unless unified: {examples}."
135
+ )
136
+ if len(groups) > _MAX_VARIANT_GROUPS:
137
+ detail += f" ({len(groups) - _MAX_VARIANT_GROUPS} more not shown)."
138
+ return {
139
+ "column": column,
140
+ "issue": "variant_spellings",
141
+ "detail": detail,
142
+ "fix": _bulk_replace_hint(view_id, column, mapping),
143
+ "rows_checked": checked,
144
+ }
145
+
146
+
64
147
  def _duplicate_rows_warning(
65
148
  rows: list[Mapping[str, Any]],
66
149
  view_id: int | None,
@@ -111,9 +194,10 @@ def column_warnings(
111
194
  Returns:
112
195
  One record per finding: ``column``, ``issue``
113
196
  (``numbers_stored_as_text``, ``dates_stored_as_text``,
114
- ``blank_values`` or the table-level ``duplicate_rows``), ``detail``
115
- and, where one command fixes it, ``fix``. Counts are over the rows
116
- given (``rows_checked`` on each record).
197
+ ``variant_spellings``, ``blank_values`` or the table-level
198
+ ``duplicate_rows``), ``detail`` and, where one command fixes it,
199
+ ``fix``. Counts are over the rows given (``rows_checked`` on each
200
+ record).
117
201
  """
118
202
  materialised = [row for row in rows if isinstance(row, Mapping)]
119
203
  if not materialised:
@@ -166,6 +250,9 @@ def column_warnings(
166
250
  }
167
251
  )
168
252
  break
253
+ variant_warning = _variant_spellings_warning(column, texts, view_id, checked)
254
+ if variant_warning is not None:
255
+ warnings.append(variant_warning)
169
256
  if blanks:
170
257
  warnings.append(
171
258
  {
@@ -489,6 +489,7 @@ class SdkMammothService:
489
489
  local_columns = getattr(view, "columns", {}) or {}
490
490
  local_internal = {value for value in local_columns.values() if isinstance(value, str)}
491
491
  local_display = set(local_columns)
492
+ local_types = getattr(view, "column_types", {}) or {}
492
493
 
493
494
  def check(value: Any, *, scope: str, columns: dict[str, str], display: set[str]) -> None:
494
495
  internal = {item for item in columns.values() if isinstance(item, str)}
@@ -583,6 +584,8 @@ class SdkMammothService:
583
584
  columns=local_columns,
584
585
  display=local_display,
585
586
  )
587
+ if not spec.get("value_is_column") and "value" in spec:
588
+ SdkMammothService._coerce_numeric_condition_value(spec, local_types)
586
589
  if spec.get("value_is_column") and "value" in spec:
587
590
  check(
588
591
  spec["value"],
@@ -639,6 +642,54 @@ class SdkMammothService:
639
642
  display=foreign_display,
640
643
  )
641
644
 
645
+ @staticmethod
646
+ def _coerce_numeric_condition_value(spec: dict[str, Any], column_types: dict[str, str]) -> None:
647
+ """Convert a numeric-string condition value against a NUMERIC column.
648
+
649
+ The backend accepts a filter/set-values/pivot condition whose value is
650
+ a string even when the column is NUMERIC, then puts the whole pipeline
651
+ into ref_error (7003 "type mismatch") on the next read. The CLI already
652
+ knows the column's type, so it converts what it can and fails locally,
653
+ before any request, for what it can't. DATE columns are left as is.
654
+ """
655
+ column = spec.get("column")
656
+ if not isinstance(column, str) or column_types.get(column) != "NUMERIC":
657
+ return
658
+
659
+ def convert(item: Any) -> Any:
660
+ if not isinstance(item, str):
661
+ return item
662
+ try:
663
+ return int(item)
664
+ except ValueError:
665
+ pass
666
+ try:
667
+ number = float(item)
668
+ except ValueError:
669
+ raise SdkMammothService._condition_value_type_error(
670
+ column, "NUMERIC", item
671
+ ) from None
672
+ return int(number) if number.is_integer() else number
673
+
674
+ value = spec["value"]
675
+ spec["value"] = (
676
+ [convert(item) for item in value] if isinstance(value, list) else convert(value)
677
+ )
678
+
679
+ @staticmethod
680
+ def _condition_value_type_error(column: str, column_type: str, value: str) -> CliError:
681
+ """Build a stable pre-mutation condition-value type error."""
682
+ return CliError(
683
+ code="invalid_condition_value",
684
+ message=(
685
+ f"Condition value {value!r} for column '{column}' ({column_type}) "
686
+ "is not a valid number."
687
+ ),
688
+ exit_status=EXIT_USAGE,
689
+ hint="Use a numeric value for a NUMERIC column.",
690
+ details={"column": column, "column_type": column_type, "value": value},
691
+ )
692
+
642
693
  @staticmethod
643
694
  def column_input_error(
644
695
  reference: str,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.79"
3
+ version = "2.0.80"
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