altimate-datapilot-cli 0.3.4__tar.gz → 0.3.5__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 (293) hide show
  1. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.bumpversion.cfg +1 -1
  2. {altimate_datapilot_cli-0.3.4/src/altimate_datapilot_cli.egg-info → altimate_datapilot_cli-0.3.5}/PKG-INFO +1 -1
  3. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/README.md +29 -0
  4. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/conf.py +1 -1
  5. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/setup.py +1 -1
  6. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5/src/altimate_datapilot_cli.egg-info}/PKG-INFO +1 -1
  7. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/altimate_datapilot_cli.egg-info/SOURCES.txt +5 -0
  8. altimate_datapilot_cli-0.3.5/src/datapilot/__init__.py +1 -0
  9. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/cli/decorators.py +21 -0
  10. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/clients/altimate/client.py +6 -1
  11. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/clients/altimate/utils.py +2 -1
  12. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/mcp_utils/mcp.py +3 -2
  13. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/cli/cli.py +6 -3
  14. altimate_datapilot_cli-0.3.5/src/datapilot/utils/logging_utils.py +79 -0
  15. altimate_datapilot_cli-0.3.5/tests/cli/test_debug_option.py +65 -0
  16. altimate_datapilot_cli-0.3.5/tests/clients/altimate/test_client_redaction.py +66 -0
  17. altimate_datapilot_cli-0.3.5/tests/utils/__init__.py +0 -0
  18. altimate_datapilot_cli-0.3.5/tests/utils/test_logging_utils.py +99 -0
  19. altimate_datapilot_cli-0.3.4/src/datapilot/__init__.py +0 -1
  20. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.cookiecutterrc +0 -0
  21. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.coveragerc +0 -0
  22. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.editorconfig +0 -0
  23. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.github/workflows/github-actions.yml +0 -0
  24. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.pre-commit-config.yaml +0 -0
  25. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.pre-commit-hooks.yaml +0 -0
  26. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/.readthedocs.yml +0 -0
  27. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/AUTHORS.rst +0 -0
  28. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/CHANGELOG.rst +0 -0
  29. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/CONTRIBUTING.rst +0 -0
  30. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/LICENSE +0 -0
  31. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/MANIFEST.in +0 -0
  32. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/Makefile +0 -0
  33. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/README.rst +0 -0
  34. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/ci/bootstrap.py +0 -0
  35. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/ci/requirements.txt +0 -0
  36. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/ci/templates/.github/workflows/github-actions.yml +0 -0
  37. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/authors.rst +0 -0
  38. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/changelog.rst +0 -0
  39. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/configuration.rst +0 -0
  40. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/contributing.rst +0 -0
  41. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/features.rst +0 -0
  42. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/hooks.rst +0 -0
  43. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/index.rst +0 -0
  44. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/insights.rst +0 -0
  45. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/installation.rst +0 -0
  46. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/introduction.rst +0 -0
  47. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/performance.rst +0 -0
  48. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/readme.rst +0 -0
  49. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/reference/datapilot.rst +0 -0
  50. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/reference/index.rst +0 -0
  51. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/requirements.txt +0 -0
  52. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/spelling_wordlist.txt +0 -0
  53. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/docs/usage.rst +0 -0
  54. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/pyproject.toml +0 -0
  55. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/pytest.ini +0 -0
  56. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/setup.cfg +0 -0
  57. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/altimate_datapilot_cli.egg-info/dependency_links.txt +0 -0
  58. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/altimate_datapilot_cli.egg-info/entry_points.txt +0 -0
  59. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/altimate_datapilot_cli.egg-info/not-zip-safe +0 -0
  60. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/altimate_datapilot_cli.egg-info/requires.txt +0 -0
  61. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/altimate_datapilot_cli.egg-info/top_level.txt +0 -0
  62. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/__main__.py +0 -0
  63. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/cli/__init__.py +0 -0
  64. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/cli/main.py +0 -0
  65. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/clients/__init__.py +0 -0
  66. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/clients/altimate/__init__.py +0 -0
  67. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/clients/altimate/constants.py +0 -0
  68. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/config/__init__.py +0 -0
  69. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/config/config.py +0 -0
  70. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/config/utils.py +0 -0
  71. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/__init__.py +0 -0
  72. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/__init__.py +0 -0
  73. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/base/__init__.py +0 -0
  74. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/base/insight.py +0 -0
  75. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/report.py +0 -0
  76. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/schema.py +0 -0
  77. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/sql/__init__.py +0 -0
  78. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/sql/base/__init__.py +0 -0
  79. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/sql/base/insight.py +0 -0
  80. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/sql/runtime/__init__.py +0 -0
  81. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/sql/static/__init__.py +0 -0
  82. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/insights/utils.py +0 -0
  83. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/knowledge/__init__.py +0 -0
  84. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/knowledge/cli.py +0 -0
  85. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/knowledge/server.py +0 -0
  86. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/mcp_utils/__init__.py +0 -0
  87. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/__init__.py +0 -0
  88. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/__init__.py +0 -0
  89. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/cli/__init__.py +0 -0
  90. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/constants.py +0 -0
  91. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/exceptions.py +0 -0
  92. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/executor.py +0 -0
  93. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/factory.py +0 -0
  94. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/formatting.py +0 -0
  95. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/hooks/__init__.py +0 -0
  96. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/hooks/executor_hook.py +0 -0
  97. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/__init__.py +0 -0
  98. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/base.py +0 -0
  99. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/__init__.py +0 -0
  100. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/base.py +0 -0
  101. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_column_desc_are_same.py +0 -0
  102. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_column_name_contract.py +0 -0
  103. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_macro_args_have_desc.py +0 -0
  104. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_macro_has_desc.py +0 -0
  105. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_all_columns.py +0 -0
  106. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_labels_keys.py +0 -0
  107. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_meta_keys.py +0 -0
  108. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_properties_file.py +0 -0
  109. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_tests_by_group.py +0 -0
  110. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_tests_by_name.py +0 -0
  111. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_tests_by_type.py +0 -0
  112. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_materialization_by_childs.py +0 -0
  113. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_name_contract.py +0 -0
  114. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_parents_and_childs.py +0 -0
  115. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_parents_database.py +0 -0
  116. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_parents_schema.py +0 -0
  117. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_model_tags.py +0 -0
  118. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_childs.py +0 -0
  119. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_columns_have_desc.py +0 -0
  120. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_all_columns.py +0 -0
  121. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_freshness.py +0 -0
  122. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_labels_keys.py +0 -0
  123. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_loader.py +0 -0
  124. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_meta_keys.py +0 -0
  125. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests.py +0 -0
  126. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests_by_group.py +0 -0
  127. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests_by_name.py +0 -0
  128. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests_by_type.py +0 -0
  129. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_table_has_description.py +0 -0
  130. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/checks/check_source_tags.py +0 -0
  131. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/dbt_test/__init__.py +0 -0
  132. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/dbt_test/base.py +0 -0
  133. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/dbt_test/missing_primary_key_tests.py +0 -0
  134. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/dbt_test/test_coverage.py +0 -0
  135. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/__init__.py +0 -0
  136. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/base.py +0 -0
  137. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/documentation_on_stale_columns.py +0 -0
  138. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/exposures_dependent_on_private_models.py +0 -0
  139. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/public_models_without_contracts.py +0 -0
  140. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/undocumented_columns.py +0 -0
  141. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/governance/undocumented_public_models.py +0 -0
  142. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/README.md +0 -0
  143. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/__init__.py +0 -0
  144. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/base.py +0 -0
  145. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/direct_join_to_source.py +0 -0
  146. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/downstream_models_dependent_on_source.py +0 -0
  147. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/duplicate_sources.py +0 -0
  148. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/hard_coded_references.py +0 -0
  149. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/joining_of_upstream_concepts.py +0 -0
  150. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/model_fanout.py +0 -0
  151. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/multiple_sources_joined.py +0 -0
  152. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/root_model.py +0 -0
  153. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/source_fanout.py +0 -0
  154. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/staging_model_dependent_on_downstream_models.py +0 -0
  155. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/staging_model_dependent_on_staging_models.py +0 -0
  156. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/modelling/unused_sources.py +0 -0
  157. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/performance/__init__.py +0 -0
  158. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/performance/base.py +0 -0
  159. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/performance/chain_view_linking.py +0 -0
  160. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/performance/exposure_parent_materializations.py +0 -0
  161. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/schema.py +0 -0
  162. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/sql/__init__.py +0 -0
  163. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/sql/base.py +0 -0
  164. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/sql/sql_check.py +0 -0
  165. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/structure/__init__.py +0 -0
  166. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/structure/base.py +0 -0
  167. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/structure/model_directories_structure.py +0 -0
  168. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/structure/model_naming_conventions.py +0 -0
  169. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/structure/source_directories_structure.py +0 -0
  170. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/structure/test_directory_structure.py +0 -0
  171. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/insights/utils.py +0 -0
  172. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/schemas/__init__.py +0 -0
  173. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/schemas/catalog.py +0 -0
  174. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/schemas/manifest.py +0 -0
  175. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/schemas/run_results.py +0 -0
  176. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/schemas/sources.py +0 -0
  177. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/utils.py +0 -0
  178. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/__init__.py +0 -0
  179. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/catalog/__init__.py +0 -0
  180. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/catalog/v1/__init__.py +0 -0
  181. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/catalog/v1/wrapper.py +0 -0
  182. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/catalog/wrapper.py +0 -0
  183. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/__init__.py +0 -0
  184. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/__init__.py +0 -0
  185. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/schemas.py +0 -0
  186. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/wrapper.py +0 -0
  187. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v11/__init__.py +0 -0
  188. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v11/schemas.py +0 -0
  189. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v11/wrapper.py +0 -0
  190. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v12/__init__.py +0 -0
  191. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v12/schemas.py +0 -0
  192. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/v12/wrapper.py +0 -0
  193. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/manifest/wrapper.py +0 -0
  194. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/run_results/__init__.py +0 -0
  195. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/core/platforms/dbt/wrappers/run_results/run_results.py +0 -0
  196. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/exceptions/__init__.py +0 -0
  197. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/exceptions/exceptions.py +0 -0
  198. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/schemas/__init__.py +0 -0
  199. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/schemas/constants.py +0 -0
  200. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/schemas/nodes.py +0 -0
  201. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/schemas/sql.py +0 -0
  202. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/utils/__init__.py +0 -0
  203. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/utils/formatting/__init__.py +0 -0
  204. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/utils/formatting/utils.py +0 -0
  205. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/datapilot/utils/utils.py +0 -0
  206. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/__init__.py +0 -0
  207. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/__init__.py +0 -0
  208. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parser.py +0 -0
  209. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/__init__.py +0 -0
  210. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/base.py +0 -0
  211. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/catalog/__init__.py +0 -0
  212. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/catalog/catalog_v1.py +0 -0
  213. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/__init__.py +0 -0
  214. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v1.py +0 -0
  215. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v10.py +0 -0
  216. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v11.py +0 -0
  217. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v12.py +0 -0
  218. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v2.py +0 -0
  219. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v3.py +0 -0
  220. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v4.py +0 -0
  221. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v5.py +0 -0
  222. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v6.py +0 -0
  223. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v7.py +0 -0
  224. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v8.py +0 -0
  225. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/manifest/manifest_v9.py +0 -0
  226. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/__init__.py +0 -0
  227. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/run_results_v1.py +0 -0
  228. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/run_results_v2.py +0 -0
  229. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/run_results_v3.py +0 -0
  230. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/run_results_v4.py +0 -0
  231. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/run_results_v5.py +0 -0
  232. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/run_results/run_results_v6.py +0 -0
  233. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/sources/__init__.py +0 -0
  234. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/sources/sources_v1.py +0 -0
  235. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/sources/sources_v2.py +0 -0
  236. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/sources/sources_v3.py +0 -0
  237. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/utils.py +0 -0
  238. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/parsers/version_map.py +0 -0
  239. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/catalog/catalog_v1.json +0 -0
  240. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v1.json +0 -0
  241. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v10.json +0 -0
  242. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v11.json +0 -0
  243. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v12.json +0 -0
  244. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v2.json +0 -0
  245. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v3.json +0 -0
  246. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v4.json +0 -0
  247. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v5.json +0 -0
  248. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v6.json +0 -0
  249. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v7.json +0 -0
  250. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v8.json +0 -0
  251. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/manifest/manifest_v9.json +0 -0
  252. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v1.json +0 -0
  253. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v2.json +0 -0
  254. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v3.json +0 -0
  255. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v4.json +0 -0
  256. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v5.json +0 -0
  257. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v6.json +0 -0
  258. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/sources/sources_v1.json +0 -0
  259. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/sources/sources_v2.json +0 -0
  260. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/resources/sources/sources_v3.json +0 -0
  261. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/src/vendor/dbt_artifacts_parser/utils.py +0 -0
  262. {altimate_datapilot_cli-0.3.4/tests/clients → altimate_datapilot_cli-0.3.5/tests/cli}/__init__.py +0 -0
  263. {altimate_datapilot_cli-0.3.4/tests/clients/altimate → altimate_datapilot_cli-0.3.5/tests/clients}/__init__.py +0 -0
  264. {altimate_datapilot_cli-0.3.4/tests/core → altimate_datapilot_cli-0.3.5/tests/clients/altimate}/__init__.py +0 -0
  265. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/clients/altimate/test_utils.py +0 -0
  266. {altimate_datapilot_cli-0.3.4/tests/core/platform → altimate_datapilot_cli-0.3.5/tests/core}/__init__.py +0 -0
  267. {altimate_datapilot_cli-0.3.4/tests/core/platform/dbt → altimate_datapilot_cli-0.3.5/tests/core/platform}/__init__.py +0 -0
  268. {altimate_datapilot_cli-0.3.4/tests/test_vendor → altimate_datapilot_cli-0.3.5/tests/core/platform/dbt}/__init__.py +0 -0
  269. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/core/platform/dbt/test_artifact_loaders.py +0 -0
  270. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/core/platform/dbt/test_cli.py +0 -0
  271. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/core/platform/dbt/test_utils.py +0 -0
  272. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/catalog_v1.json +0 -0
  273. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/catalog_v12.json +0 -0
  274. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/config.yml +0 -0
  275. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifest_v10.json +0 -0
  276. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifest_v10macroargs.json +0 -0
  277. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifest_v11.json +0 -0
  278. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifest_v11macroargs.json +0 -0
  279. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifest_v12.json +0 -0
  280. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifests/manifest_js.json +0 -0
  281. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifests/manifest_js2.json +0 -0
  282. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifests/manifest_js3.json +0 -0
  283. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifests/manifest_tuva.json +0 -0
  284. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifests/manifest_tuva2.json +0 -0
  285. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/manifests/manifest_tuva3.json +0 -0
  286. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/run_results_v6.json +0 -0
  287. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/data/sources_v3.json +0 -0
  288. {altimate_datapilot_cli-0.3.4/tests/utils → altimate_datapilot_cli-0.3.5/tests/test_vendor}/__init__.py +0 -0
  289. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/test_vendor/test_catalog_v1.py +0 -0
  290. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/test_vendor/test_run_results_pre_v6.py +0 -0
  291. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/test_vendor/test_run_results_v6.py +0 -0
  292. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tests/utils/test_utils.py +0 -0
  293. {altimate_datapilot_cli-0.3.4 → altimate_datapilot_cli-0.3.5}/tox.ini +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.3.4
2
+ current_version = 0.3.5
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: altimate-datapilot-cli
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Assistant for Data Teams
5
5
  Home-page: https://github.com/AltimateAI/datapilot-cli
6
6
  Author: Altimate Inc
@@ -42,6 +42,35 @@ The [--catalog-path] is an optional argument. If you don't specify a catalog pat
42
42
 
43
43
  The [--config-path] is an optional argument. You can provide a yaml file with overrides for the default behavior of the insights.
44
44
 
45
+ #### Verbose / Debug Logging
46
+
47
+ By default, API failures are reported as a short summary such as `Error in uploading the manifest.`
48
+ To see the underlying HTTP status codes and the error bodies returned by the API, enable debug
49
+ logging with either the `--debug` flag or the `DATAPILOT_DEBUG` environment variable:
50
+
51
+ ```shell
52
+ datapilot dbt onboard --debug ...
53
+
54
+ # Or, for CI/CD pipelines where the command line is generated:
55
+ export DATAPILOT_DEBUG=1
56
+ datapilot dbt onboard ...
57
+ ```
58
+
59
+ This turns the generic message into an actionable one:
60
+
61
+ ```
62
+ DEBUG:APIClient:Sending GET request for tenant acme at url: https://api.myaltimate.com/dbt/v1/signed_url
63
+ DEBUG:APIClient:Request params: {'dbt_core_integration_id': '2', 'dbt_core_integration_environment_type': 'DEV', 'file_type': 'manifest'}
64
+ DEBUG:APIClient:HTTP Error: {'detail': 'dbt_core_integration with id:2 and env:DEV not found'} - Status code: 400
65
+ Error in uploading the manifest.
66
+ ```
67
+
68
+ Note that `--dbt_core_integration_environment` is matched exactly, including case, against the
69
+ environments configured for your integration.
70
+
71
+ Debug output is safe to share: the API token is never logged, and the credentials in presigned
72
+ upload URLs are redacted to `?<redacted>`.
73
+
45
74
  #### Generating Manifest and Catalog Files for dbt Projects
46
75
 
47
76
  1. Generate Manifest File (manifest.json). Open your dbt project's root directory in a terminal or command prompt. Run `dbt compile`. This command generates manifest.json in the target folder under your dbt project directory structure.
@@ -15,7 +15,7 @@ project = "datapilot-cli"
15
15
  year = "2024"
16
16
  author = "Altimate Inc."
17
17
  copyright = f"{year}, {author}"
18
- version = release = "0.3.4"
18
+ version = release = "0.3.5"
19
19
 
20
20
  pygments_style = "trac"
21
21
  templates_path = ["."]
@@ -13,7 +13,7 @@ def read(*names, **kwargs):
13
13
 
14
14
  setup(
15
15
  name="altimate-datapilot-cli",
16
- version="0.3.4",
16
+ version="0.3.5",
17
17
  license="MIT",
18
18
  description="Assistant for Data Teams",
19
19
  long_description="{}\n{}".format(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: altimate-datapilot-cli
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Assistant for Data Teams
5
5
  Home-page: https://github.com/AltimateAI/datapilot-cli
6
6
  Author: Altimate Inc
@@ -193,6 +193,7 @@ src/datapilot/schemas/constants.py
193
193
  src/datapilot/schemas/nodes.py
194
194
  src/datapilot/schemas/sql.py
195
195
  src/datapilot/utils/__init__.py
196
+ src/datapilot/utils/logging_utils.py
196
197
  src/datapilot/utils/utils.py
197
198
  src/datapilot/utils/formatting/__init__.py
198
199
  src/datapilot/utils/formatting/utils.py
@@ -252,8 +253,11 @@ src/vendor/dbt_artifacts_parser/resources/run-results/run-results_v6.json
252
253
  src/vendor/dbt_artifacts_parser/resources/sources/sources_v1.json
253
254
  src/vendor/dbt_artifacts_parser/resources/sources/sources_v2.json
254
255
  src/vendor/dbt_artifacts_parser/resources/sources/sources_v3.json
256
+ tests/cli/__init__.py
257
+ tests/cli/test_debug_option.py
255
258
  tests/clients/__init__.py
256
259
  tests/clients/altimate/__init__.py
260
+ tests/clients/altimate/test_client_redaction.py
257
261
  tests/clients/altimate/test_utils.py
258
262
  tests/core/__init__.py
259
263
  tests/core/platform/__init__.py
@@ -282,4 +286,5 @@ tests/test_vendor/test_catalog_v1.py
282
286
  tests/test_vendor/test_run_results_pre_v6.py
283
287
  tests/test_vendor/test_run_results_v6.py
284
288
  tests/utils/__init__.py
289
+ tests/utils/test_logging_utils.py
285
290
  tests/utils/test_utils.py
@@ -0,0 +1 @@
1
+ __version__ = "0.3.5"
@@ -9,6 +9,27 @@ from typing import Optional
9
9
  import click
10
10
  from dotenv import load_dotenv
11
11
 
12
+ from datapilot.utils.logging_utils import DEBUG_ENV_VAR
13
+ from datapilot.utils.logging_utils import configure_logging
14
+
15
+
16
+ def debug_option(f):
17
+ """Decorator adding a --debug flag, also settable via DATAPILOT_DEBUG."""
18
+
19
+ @click.option(
20
+ "--debug",
21
+ is_flag=True,
22
+ default=False,
23
+ envvar=DEBUG_ENV_VAR,
24
+ help=f"Enable verbose debug logging, including API status codes and error responses. Can also be set with {DEBUG_ENV_VAR}=1.",
25
+ )
26
+ @wraps(f)
27
+ def wrapper(*args, **kwargs):
28
+ configure_logging(debug=kwargs.pop("debug", False))
29
+ return f(*args, **kwargs)
30
+
31
+ return wrapper
32
+
12
33
 
13
34
  def load_config_from_file() -> Optional[Dict]:
14
35
  """Load configuration from ~/.altimate/altimate.json if it exists."""
@@ -6,6 +6,8 @@ from requests.exceptions import HTTPError
6
6
  from requests.exceptions import RequestException
7
7
  from requests.exceptions import Timeout
8
8
 
9
+ from datapilot.utils.logging_utils import redact_url
10
+
9
11
 
10
12
  class APIClient:
11
13
  def __init__(self, api_token="", base_url="", tenant=""):
@@ -36,6 +38,8 @@ class APIClient:
36
38
 
37
39
  try:
38
40
  self.logger.debug(f"Sending GET request for tenant {self.tenant} at url: {url}")
41
+ if params:
42
+ self.logger.debug(f"Request params: {params}")
39
43
  response = requests.get(url, headers=headers, params=params, timeout=timeout)
40
44
 
41
45
  # Check if the response was successful
@@ -67,7 +71,8 @@ class APIClient:
67
71
  def put(self, endpoint, data, timeout=None):
68
72
  url = f"{self.base_url}{endpoint}"
69
73
 
70
- self.logger.debug(f"Sending PUT request for tenant {self.tenant} at url: {url}")
74
+ # Presigned upload URLs carry AWS credentials in the query string.
75
+ self.logger.debug(f"Sending PUT request for tenant {self.tenant} at url: {redact_url(url)}")
71
76
  response = requests.put(url, data=data, timeout=timeout)
72
77
  self.logger.debug(f"Received PUT response with status: {response.status_code}")
73
78
  return response
@@ -8,6 +8,7 @@ from requests import Response
8
8
 
9
9
  from datapilot.clients.altimate.client import APIClient
10
10
  from datapilot.clients.altimate.constants import SUPPORTED_ARTIFACT_TYPES
11
+ from datapilot.utils.logging_utils import redact_url
11
12
 
12
13
 
13
14
  def check_token_and_instance(
@@ -89,7 +90,7 @@ def onboard_file(api_token, tenant, dbt_core_integration_id, dbt_core_integratio
89
90
  if signed_url_data:
90
91
  signed_url = signed_url_data.get("url")
91
92
  file_id = signed_url_data.get("dbt_core_integration_file_id")
92
- api_client.log(f"Received signed URL: {signed_url}")
93
+ api_client.log(f"Received signed URL: {redact_url(signed_url)}")
93
94
  api_client.log(f"Received File ID: {file_id}")
94
95
 
95
96
  upload_response = upload_content_to_signed_url(file_path, signed_url)
@@ -1,6 +1,5 @@
1
1
  import asyncio
2
2
  import json
3
- import logging
4
3
  import shutil
5
4
  from dataclasses import dataclass
6
5
 
@@ -10,7 +9,9 @@ from mcp import ClientSession
10
9
  from mcp import StdioServerParameters
11
10
  from mcp.client.stdio import stdio_client
12
11
 
13
- logging.basicConfig(level=logging.INFO)
12
+ from datapilot.utils.logging_utils import configure_logging
13
+
14
+ configure_logging()
14
15
 
15
16
 
16
17
  @dataclass
@@ -1,8 +1,7 @@
1
- import logging
2
-
3
1
  import click
4
2
 
5
3
  from datapilot.cli.decorators import auth_options
4
+ from datapilot.cli.decorators import debug_option
6
5
  from datapilot.clients.altimate.utils import check_token_and_instance
7
6
  from datapilot.clients.altimate.utils import get_all_dbt_configs
8
7
  from datapilot.clients.altimate.utils import onboard_file
@@ -21,9 +20,11 @@ from datapilot.core.platforms.dbt.utils import load_manifest
21
20
  from datapilot.core.platforms.dbt.utils import load_run_results
22
21
  from datapilot.core.platforms.dbt.utils import load_sources
23
22
  from datapilot.utils.formatting.utils import tabulate_data
23
+ from datapilot.utils.logging_utils import configure_logging
24
24
  from datapilot.utils.utils import map_url_to_instance
25
25
 
26
- logging.basicConfig(level=logging.INFO)
26
+ # Honour DATAPILOT_DEBUG even for code paths that never reach a command callback.
27
+ configure_logging()
27
28
 
28
29
 
29
30
  # New dbt group
@@ -33,6 +34,7 @@ def dbt():
33
34
 
34
35
 
35
36
  @dbt.command("project-health")
37
+ @debug_option
36
38
  @auth_options
37
39
  @click.option(
38
40
  "--manifest-path",
@@ -134,6 +136,7 @@ def project_health(
134
136
 
135
137
 
136
138
  @dbt.command("onboard")
139
+ @debug_option
137
140
  @auth_options
138
141
  @click.option(
139
142
  "--dbt_core_integration_id",
@@ -0,0 +1,79 @@
1
+ """Logging configuration for the datapilot CLI.
2
+
3
+ Verbose output is opt-in and can be turned on two ways:
4
+
5
+ - the ``DATAPILOT_DEBUG`` environment variable, which is the option to reach for
6
+ in CI/CD pipelines where the command line is generated and hard to edit
7
+ - the ``--debug`` flag on individual commands
8
+
9
+ Both raise the root logger to ``DEBUG``, which surfaces the HTTP status codes and
10
+ API error bodies that ``APIClient`` already records but normally discards.
11
+ """
12
+
13
+ import logging
14
+ import os
15
+ from typing import Optional
16
+ from urllib.parse import urlsplit
17
+ from urllib.parse import urlunsplit
18
+
19
+ DEBUG_ENV_VAR = "DATAPILOT_DEBUG"
20
+
21
+ # Values that count as "on" for DATAPILOT_DEBUG. Anything else (including "0",
22
+ # "false" and the empty string) leaves debug logging off.
23
+ _TRUTHY_VALUES = frozenset({"1", "true", "yes", "on"})
24
+
25
+ # Debug mode is sticky: a command-level `--debug` must not be undone by a later
26
+ # call that happens to default to False.
27
+ _debug_enabled = False
28
+
29
+
30
+ def debug_enabled_via_env() -> bool:
31
+ """Return True when DATAPILOT_DEBUG is set to a truthy value."""
32
+ return os.environ.get(DEBUG_ENV_VAR, "").strip().lower() in _TRUTHY_VALUES
33
+
34
+
35
+ def configure_logging(debug: bool = False) -> bool:
36
+ """Configure root logging for the CLI and return whether debug mode is on.
37
+
38
+ Safe to call more than once; the group callback and the command callback both
39
+ call it, and the more verbose of the two wins.
40
+ """
41
+ global _debug_enabled
42
+ _debug_enabled = _debug_enabled or debug or debug_enabled_via_env()
43
+ level = logging.DEBUG if _debug_enabled else logging.INFO
44
+
45
+ root = logging.getLogger()
46
+ # Only install a handler when nothing else has, so embedding applications
47
+ # (and pytest's caplog) keep theirs. Setting the level is what actually
48
+ # decides whether the DEBUG records get through.
49
+ if not root.handlers:
50
+ logging.basicConfig(level=level)
51
+ root.setLevel(level)
52
+
53
+ # urllib3 logs each request line in full, which for a presigned S3 upload means
54
+ # the AWS key and signature. Our own client logs the status codes and request
55
+ # params, so nothing diagnostic is lost by holding urllib3 at INFO.
56
+ logging.getLogger("urllib3").setLevel(logging.INFO)
57
+
58
+ return _debug_enabled
59
+
60
+
61
+ def is_debug_enabled() -> bool:
62
+ """Return whether debug logging is currently enabled."""
63
+ return _debug_enabled
64
+
65
+
66
+ def redact_url(url: Optional[str]) -> str:
67
+ """Strip a URL's query string so it is safe to log.
68
+
69
+ Presigned upload URLs carry AWS credentials and a signature in the query
70
+ string, and debug output routinely gets pasted into support tickets.
71
+ """
72
+ if not url:
73
+ return ""
74
+
75
+ parts = urlsplit(url)
76
+ if not parts.query:
77
+ return url
78
+
79
+ return urlunsplit((parts.scheme, parts.netloc, parts.path, "<redacted>", ""))
@@ -0,0 +1,65 @@
1
+ import logging
2
+
3
+ import pytest
4
+ from click.testing import CliRunner
5
+
6
+ from datapilot.cli.main import datapilot
7
+ from datapilot.utils import logging_utils
8
+ from datapilot.utils.logging_utils import DEBUG_ENV_VAR
9
+
10
+
11
+ @pytest.fixture(autouse=True)
12
+ def _reset_logging_state(monkeypatch):
13
+ monkeypatch.setattr(logging_utils, "_debug_enabled", False)
14
+ monkeypatch.delenv(DEBUG_ENV_VAR, raising=False)
15
+ original_level = logging.getLogger().level
16
+ yield
17
+ logging.getLogger().setLevel(original_level)
18
+
19
+
20
+ def invoke_project_health(env=None, extra_args=()):
21
+ """project-health runs fully offline, so it exercises the flag without network access."""
22
+ return CliRunner().invoke(
23
+ datapilot,
24
+ ["dbt", "project-health", "--manifest-path", "tests/data/manifest_v11.json", *extra_args],
25
+ env=env or {},
26
+ )
27
+
28
+
29
+ class TestDebugFlag:
30
+ def test_flag_is_advertised_in_help(self):
31
+ result = CliRunner().invoke(datapilot, ["dbt", "onboard", "--help"])
32
+
33
+ assert result.exit_code == 0
34
+ assert "--debug" in result.output
35
+ assert DEBUG_ENV_VAR in result.output
36
+
37
+ def test_flag_enables_debug_logging(self):
38
+ result = invoke_project_health(extra_args=["--debug"])
39
+
40
+ assert result.exit_code == 0
41
+ assert logging_utils.is_debug_enabled() is True
42
+ assert logging.getLogger().level == logging.DEBUG
43
+
44
+ def test_without_flag_stays_at_info(self):
45
+ result = invoke_project_health()
46
+
47
+ assert result.exit_code == 0
48
+ assert logging_utils.is_debug_enabled() is False
49
+ assert logging.getLogger().level == logging.INFO
50
+
51
+
52
+ class TestDebugEnvVar:
53
+ def test_env_var_enables_debug_logging(self):
54
+ result = invoke_project_health(env={DEBUG_ENV_VAR: "1"})
55
+
56
+ assert result.exit_code == 0
57
+ assert logging_utils.is_debug_enabled() is True
58
+ assert logging.getLogger().level == logging.DEBUG
59
+
60
+ def test_env_var_off_stays_at_info(self):
61
+ result = invoke_project_health(env={DEBUG_ENV_VAR: "0"})
62
+
63
+ assert result.exit_code == 0
64
+ assert logging_utils.is_debug_enabled() is False
65
+ assert logging.getLogger().level == logging.INFO
@@ -0,0 +1,66 @@
1
+ import logging
2
+ from unittest.mock import patch
3
+
4
+ import pytest
5
+ from requests import Response
6
+
7
+ from datapilot.clients.altimate.client import APIClient
8
+ from datapilot.utils import logging_utils
9
+ from datapilot.utils.logging_utils import DEBUG_ENV_VAR
10
+ from datapilot.utils.logging_utils import configure_logging
11
+
12
+ PRESIGNED_URL = (
13
+ "https://altimate-datapilot-freemium-prod.s3.amazonaws.com/prd/tenant%3Delastic/manifest.json"
14
+ "?AWSAccessKeyId=AKIAVXVSOK5H3JQFSSU4&Signature=2LV9nU5JHPVOFz&Expires=1785271367"
15
+ )
16
+
17
+
18
+ @pytest.fixture(autouse=True)
19
+ def _reset_logging_state(monkeypatch):
20
+ monkeypatch.setattr(logging_utils, "_debug_enabled", False)
21
+ monkeypatch.delenv(DEBUG_ENV_VAR, raising=False)
22
+ original_level = logging.getLogger().level
23
+ yield
24
+ logging.getLogger().setLevel(original_level)
25
+
26
+
27
+ def make_response(status_code=200):
28
+ response = Response()
29
+ response.status_code = status_code
30
+ response._content = b""
31
+ return response
32
+
33
+
34
+ class TestPresignedUrlRedaction:
35
+ def test_put_does_not_log_aws_credentials(self, caplog):
36
+ client = APIClient()
37
+
38
+ with caplog.at_level(logging.DEBUG), patch("requests.put", return_value=make_response()):
39
+ client.put(PRESIGNED_URL, data=b"{}")
40
+
41
+ assert "AKIAVXVSOK5H3JQFSSU4" not in caplog.text
42
+ assert "2LV9nU5JHPVOFz" not in caplog.text
43
+ # The object path is still logged, which is the part that aids debugging.
44
+ assert "manifest.json" in caplog.text
45
+ assert "<redacted>" in caplog.text
46
+
47
+ def test_get_logs_request_params(self, caplog):
48
+ """Params identify the integration id/env, and contain no secrets."""
49
+ client = APIClient(api_token="secret-token", base_url="https://api.myaltimate.com", tenant="elastic") # noqa: S106
50
+ params = {"dbt_core_integration_id": "2", "dbt_core_integration_environment_type": "PROD"}
51
+
52
+ with caplog.at_level(logging.DEBUG), patch("requests.get", return_value=make_response()):
53
+ client.get("/dbt/v1/signed_url", params=params)
54
+
55
+ assert "dbt_core_integration_environment_type" in caplog.text
56
+ assert "PROD" in caplog.text
57
+ assert "secret-token" not in caplog.text
58
+
59
+
60
+ class TestUrllib3Silencing:
61
+ def test_urllib3_is_held_at_info_in_debug_mode(self):
62
+ """urllib3 logs whole request lines, presigned query string included."""
63
+ configure_logging(debug=True)
64
+
65
+ assert logging.getLogger().level == logging.DEBUG
66
+ assert logging.getLogger("urllib3").level == logging.INFO
File without changes
@@ -0,0 +1,99 @@
1
+ import logging
2
+
3
+ import pytest
4
+
5
+ from datapilot.utils import logging_utils
6
+ from datapilot.utils.logging_utils import DEBUG_ENV_VAR
7
+ from datapilot.utils.logging_utils import configure_logging
8
+ from datapilot.utils.logging_utils import debug_enabled_via_env
9
+ from datapilot.utils.logging_utils import is_debug_enabled
10
+ from datapilot.utils.logging_utils import redact_url
11
+
12
+
13
+ @pytest.fixture(autouse=True)
14
+ def _reset_logging_state(monkeypatch):
15
+ """Debug mode is sticky by design, so reset it between tests."""
16
+ monkeypatch.setattr(logging_utils, "_debug_enabled", False)
17
+ monkeypatch.delenv(DEBUG_ENV_VAR, raising=False)
18
+ original_level = logging.getLogger().level
19
+ yield
20
+ logging.getLogger().setLevel(original_level)
21
+
22
+
23
+ class TestDebugEnabledViaEnv:
24
+ @pytest.mark.parametrize("value", ["1", "true", "TRUE", "yes", "on", " True "])
25
+ def test_truthy_values(self, monkeypatch, value):
26
+ monkeypatch.setenv(DEBUG_ENV_VAR, value)
27
+
28
+ assert debug_enabled_via_env() is True
29
+
30
+ @pytest.mark.parametrize("value", ["0", "false", "no", "off", "", " "])
31
+ def test_falsy_values(self, monkeypatch, value):
32
+ monkeypatch.setenv(DEBUG_ENV_VAR, value)
33
+
34
+ assert debug_enabled_via_env() is False
35
+
36
+ def test_unset(self):
37
+ assert debug_enabled_via_env() is False
38
+
39
+
40
+ class TestConfigureLogging:
41
+ def test_default_is_info(self):
42
+ assert configure_logging() is False
43
+ assert is_debug_enabled() is False
44
+ assert logging.getLogger().level == logging.INFO
45
+
46
+ def test_debug_argument_sets_debug_level(self):
47
+ assert configure_logging(debug=True) is True
48
+ assert logging.getLogger().level == logging.DEBUG
49
+
50
+ def test_env_var_sets_debug_level(self, monkeypatch):
51
+ monkeypatch.setenv(DEBUG_ENV_VAR, "1")
52
+
53
+ assert configure_logging() is True
54
+ assert logging.getLogger().level == logging.DEBUG
55
+
56
+ def test_env_var_off_stays_at_info(self, monkeypatch):
57
+ monkeypatch.setenv(DEBUG_ENV_VAR, "0")
58
+
59
+ assert configure_logging() is False
60
+ assert logging.getLogger().level == logging.INFO
61
+
62
+ def test_debug_is_sticky_across_calls(self):
63
+ """An import-time configure_logging() must not undo a --debug flag, or vice versa."""
64
+ configure_logging(debug=True)
65
+ configure_logging(debug=False)
66
+
67
+ assert is_debug_enabled() is True
68
+ assert logging.getLogger().level == logging.DEBUG
69
+
70
+ def test_debug_records_reach_a_handler(self, caplog):
71
+ configure_logging(debug=True)
72
+
73
+ with caplog.at_level(logging.DEBUG):
74
+ logging.getLogger("APIClient").debug("HTTP Error: boom")
75
+
76
+ assert "HTTP Error: boom" in caplog.text
77
+
78
+
79
+ class TestRedactUrl:
80
+ def test_url_without_query_is_unchanged(self):
81
+ url = "https://api.myaltimate.com/dbt/v1/signed_url"
82
+
83
+ assert redact_url(url) == url
84
+
85
+ def test_presigned_url_credentials_are_removed(self):
86
+ url = (
87
+ "https://altimate-datapilot-freemium-prod.s3.amazonaws.com/prd/tenant%3Delastic/manifest.json"
88
+ "?AWSAccessKeyId=AKIAVXVSOK5H3JQFSSU4&Signature=2LV9nU5JHPVOFz&Expires=1785271367"
89
+ )
90
+
91
+ redacted = redact_url(url)
92
+
93
+ assert "AKIAVXVSOK5H3JQFSSU4" not in redacted
94
+ assert "2LV9nU5JHPVOFz" not in redacted
95
+ assert redacted == ("https://altimate-datapilot-freemium-prod.s3.amazonaws.com/prd/tenant%3Delastic/manifest.json?<redacted>")
96
+
97
+ def test_empty_values(self):
98
+ assert redact_url("") == ""
99
+ assert redact_url(None) == ""
@@ -1 +0,0 @@
1
- __version__ = "0.3.4"