altimate-datapilot-cli 0.0.8__tar.gz → 0.0.9__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.
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.bumpversion.cfg +1 -1
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/CONTRIBUTING.rst +1 -1
- {altimate-datapilot-cli-0.0.8/src/altimate_datapilot_cli.egg-info → altimate-datapilot-cli-0.0.9}/PKG-INFO +5 -5
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/README.rst +2 -2
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/conf.py +6 -6
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/features.rst +1 -1
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/hooks.rst +2 -2
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/setup.py +4 -4
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9/src/altimate_datapilot_cli.egg-info}/PKG-INFO +5 -5
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/altimate_datapilot_cli.egg-info/SOURCES.txt +4 -0
- altimate-datapilot-cli-0.0.9/src/datapilot/__init__.py +1 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/factory.py +6 -2
- altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/schemas.py +47 -0
- altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/wrapper.py +396 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/core/platform/dbt/test_cli.py +18 -0
- altimate-datapilot-cli-0.0.9/tests/data/manifest_v10.json +1 -0
- altimate-datapilot-cli-0.0.9/tests/utils/__init__.py +0 -0
- altimate-datapilot-cli-0.0.8/src/datapilot/__init__.py +0 -1
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.cookiecutterrc +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.coveragerc +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.editorconfig +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.github/workflows/github-actions.yml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.pre-commit-config.yaml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.pre-commit-hooks.yaml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/.readthedocs.yml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/AUTHORS.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/CHANGELOG.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/LICENSE +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/MANIFEST.in +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/README.md +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/ci/bootstrap.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/ci/requirements.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/ci/templates/.github/workflows/github-actions.yml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/authors.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/changelog.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/configuration.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/contributing.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/index.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/insights.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/installation.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/introduction.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/performance.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/readme.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/reference/datapilot.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/reference/index.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/requirements.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/spelling_wordlist.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/docs/usage.rst +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/pyproject.toml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/pytest.ini +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/setup.cfg +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/altimate_datapilot_cli.egg-info/dependency_links.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/altimate_datapilot_cli.egg-info/entry_points.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/altimate_datapilot_cli.egg-info/not-zip-safe +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/altimate_datapilot_cli.egg-info/requires.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/altimate_datapilot_cli.egg-info/top_level.txt +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/__main__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/cli/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/cli/main.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/clients/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/clients/altimate/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/clients/altimate/client.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/clients/altimate/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/config/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/config/config.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/config/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/base/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/base/insight.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/report.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/schema.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/sql/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/sql/base/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/sql/base/insight.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/sql/runtime/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/sql/static/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/insights/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/cli/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/cli/cli.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/constants.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/exceptions.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/executor.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/formatting.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/hooks/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/hooks/executor_hook.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_column_desc_are_same.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_column_name_contract.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_macro_args_have_desc.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_macro_has_desc.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_all_columns.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_labels_keys.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_meta_keys.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_properties_file.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_tests_by_group.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_tests_by_name.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_has_tests_by_type.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_materialization_by_childs.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_name_contract.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_parents_and_childs.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_parents_database.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_parents_schema.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_model_tags.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_childs.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_columns_have_desc.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_all_columns.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_freshness.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_labels_keys.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_loader.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_meta_keys.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests_by_group.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests_by_name.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_has_tests_by_type.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_table_has_description.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/checks/check_source_tags.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/dbt_test/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/dbt_test/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/dbt_test/missing_primary_key_tests.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/dbt_test/test_coverage.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/documentation_on_stale_columns.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/exposures_dependent_on_private_models.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/public_models_without_contracts.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/undocumented_columns.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/governance/undocumented_public_models.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/README.md +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/direct_join_to_source.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/downstream_models_dependent_on_source.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/duplicate_sources.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/hard_coded_references.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/joining_of_upstream_concepts.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/model_fanout.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/multiple_sources_joined.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/root_model.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/source_fanout.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/staging_model_dependent_on_downstream_models.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/staging_model_dependent_on_staging_models.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/modelling/unused_sources.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/performance/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/performance/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/performance/chain_view_linking.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/performance/exposure_parent_materializations.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/schema.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/structure/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/structure/base.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/structure/model_directories_structure.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/structure/model_naming_conventions.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/structure/source_directories_structure.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/structure/test_directory_structure.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/insights/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/schemas/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/schemas/catalog.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/schemas/manifest.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/catalog/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/catalog/v1/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/catalog/v1/wrapper.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/catalog/wrapper.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/manifest/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8/src/datapilot/core/platforms/dbt/wrappers/manifest/v11 → altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/manifest/v10}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8/src/datapilot/core/platforms/dbt/wrappers/run_results → altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/manifest/v11}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/manifest/v11/schemas.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/manifest/v11/wrapper.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/manifest/wrapper.py +0 -0
- {altimate-datapilot-cli-0.0.8/src/datapilot/exceptions → altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/run_results}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/core/platforms/dbt/wrappers/run_results/run_results.py +0 -0
- {altimate-datapilot-cli-0.0.8/src/datapilot/schemas → altimate-datapilot-cli-0.0.9/src/datapilot/exceptions}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/exceptions/exceptions.py +0 -0
- {altimate-datapilot-cli-0.0.8/src/datapilot/utils → altimate-datapilot-cli-0.0.9/src/datapilot/schemas}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/schemas/constants.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/schemas/nodes.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/schemas/sql.py +0 -0
- {altimate-datapilot-cli-0.0.8/src/datapilot/utils/formatting → altimate-datapilot-cli-0.0.9/src/datapilot/utils}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8/tests/core → altimate-datapilot-cli-0.0.9/src/datapilot/utils/formatting}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/utils/formatting/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/src/datapilot/utils/utils.py +0 -0
- {altimate-datapilot-cli-0.0.8/tests/core/platform → altimate-datapilot-cli-0.0.9/tests/core}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8/tests/core/platform/dbt → altimate-datapilot-cli-0.0.9/tests/core/platform}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8/tests/utils → altimate-datapilot-cli-0.0.9/tests/core/platform/dbt}/__init__.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/core/platform/dbt/test_utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/catalog_v1.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/config.yml +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifest_v11.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifests/manifest_js.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifests/manifest_js2.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifests/manifest_js3.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifests/manifest_tuva.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifests/manifest_tuva2.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/data/manifests/manifest_tuva3.json +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tests/utils/test_utils.py +0 -0
- {altimate-datapilot-cli-0.0.8 → altimate-datapilot-cli-0.0.9}/tox.ini +0 -0
@@ -37,7 +37,7 @@ Development
|
|
37
37
|
|
38
38
|
To set up `datapilot` for local development:
|
39
39
|
|
40
|
-
1. Fork `datapilot <https://github.com/AltimateAI/datapilot>`_
|
40
|
+
1. Fork `datapilot <https://github.com/AltimateAI/datapilot-cli>`_
|
41
41
|
(look for the "Fork" button).
|
42
42
|
2. Clone your fork locally::
|
43
43
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: altimate-datapilot-cli
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.9
|
4
4
|
Summary: Assistant for Data Teams
|
5
|
-
Home-page: https://github.com/AltimateAI/datapilot
|
6
|
-
Author:
|
5
|
+
Home-page: https://github.com/AltimateAI/datapilot-cli
|
6
|
+
Author: Altimate Inc
|
7
7
|
Author-email: info@altimate.ai
|
8
8
|
License: MIT
|
9
9
|
Project-URL: Documentation, https://datapilot.readthedocs.io/
|
10
10
|
Project-URL: Changelog, https://datapilot.readthedocs.io/en/latest/changelog.html
|
11
|
-
Project-URL: Issue Tracker, https://github.com/AltimateAI/datapilot/issues
|
11
|
+
Project-URL: Issue Tracker, https://github.com/AltimateAI/datapilot-cli/issues
|
12
12
|
Platform: UNKNOWN
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
14
14
|
Classifier: Intended Audience :: Developers
|
@@ -50,7 +50,7 @@ Installation
|
|
50
50
|
|
51
51
|
You can also install the in-development version with::
|
52
52
|
|
53
|
-
pip install https://github.com/AltimateAI/datapilot/archive/main.zip
|
53
|
+
pip install https://github.com/AltimateAI/datapilot-cli/archive/main.zip
|
54
54
|
|
55
55
|
|
56
56
|
Documentation
|
@@ -20,7 +20,7 @@ Overview
|
|
20
20
|
:target: https://datapilot.readthedocs.io/
|
21
21
|
:alt: Documentation Status
|
22
22
|
|
23
|
-
.. |github-actions| image:: https://github.com/AltimateAI/datapilot/actions/workflows/github-actions.yml/badge.svg
|
23
|
+
.. |github-actions| image:: https://github.com/AltimateAI/datapilot-cli/actions/workflows/github-actions.yml/badge.svg
|
24
24
|
:alt: GitHub Actions Build Status
|
25
25
|
:target: https://github.com/AltimateAI/datapilot/actions
|
26
26
|
|
@@ -46,7 +46,7 @@ Installation
|
|
46
46
|
|
47
47
|
You can also install the in-development version with::
|
48
48
|
|
49
|
-
pip install https://github.com/AltimateAI/datapilot/archive/main.zip
|
49
|
+
pip install https://github.com/AltimateAI/datapilot-cli/archive/main.zip
|
50
50
|
|
51
51
|
|
52
52
|
Documentation
|
@@ -11,22 +11,22 @@ extensions = [
|
|
11
11
|
]
|
12
12
|
source_suffix = ".rst"
|
13
13
|
master_doc = "index"
|
14
|
-
project = "datapilot"
|
14
|
+
project = "datapilot-cli"
|
15
15
|
year = "2024"
|
16
|
-
author = "
|
16
|
+
author = "Altimate Inc."
|
17
17
|
copyright = f"{year}, {author}"
|
18
|
-
version = release = "0.0.
|
18
|
+
version = release = "0.0.9"
|
19
19
|
|
20
20
|
pygments_style = "trac"
|
21
21
|
templates_path = ["."]
|
22
22
|
extlinks = {
|
23
|
-
"issue": ("https://github.com/AltimateAI/datapilot/issues/%s", "#"),
|
24
|
-
"pr": ("https://github.com/AltimateAI/datapilot/pull/%s", "PR #"),
|
23
|
+
"issue": ("https://github.com/AltimateAI/datapilot-cli/issues/%s", "#"),
|
24
|
+
"pr": ("https://github.com/AltimateAI/datapilot-cli/pull/%s", "PR #"),
|
25
25
|
}
|
26
26
|
html_theme = "sphinx_rtd_theme"
|
27
27
|
# html_theme_path = [furo.get_html_theme_path()]
|
28
28
|
# html_theme_options = {
|
29
|
-
# "githuburl": "https://github.com/AltimateAI/datapilot/",
|
29
|
+
# "githuburl": "https://github.com/AltimateAI/datapilot-cli/",
|
30
30
|
# }
|
31
31
|
|
32
32
|
html_use_smartypants = True
|
@@ -4,7 +4,7 @@ dbt
|
|
4
4
|
project-health
|
5
5
|
--------------
|
6
6
|
|
7
|
-
The ``project-health`` feature in DataPilot is a comprehensive tool designed to analyze and report on various aspects of your dbt project.
|
7
|
+
The ``project-health`` feature in DataPilot is a comprehensive tool designed to analyze and report on various aspects of your dbt project. This feature is currently supported for dbt version 1.6 and 1.7.
|
8
8
|
|
9
9
|
How to Use
|
10
10
|
^^^^^^^^^^
|
@@ -19,7 +19,7 @@ pip install pre-commit
|
|
19
19
|
|
20
20
|
```
|
21
21
|
repos:
|
22
|
-
- repo: https://github.com/AltimateAI/datapilot
|
22
|
+
- repo: https://github.com/AltimateAI/datapilot-cli
|
23
23
|
rev: <revision>
|
24
24
|
hooks:
|
25
25
|
- id: datapilot_run_dbt_checks
|
@@ -46,6 +46,6 @@ If you want to manually run all pre-commit hooks on a repository, run `pre-commi
|
|
46
46
|
Feedback and Contributions
|
47
47
|
--------------------------
|
48
48
|
|
49
|
-
If you encounter any issues or have suggestions for improvements, please feel free to open an issue or pull request on the DataPilot GitHub repository at https://github.com/AltimateAI/datapilot.
|
49
|
+
If you encounter any issues or have suggestions for improvements, please feel free to open an issue or pull request on the DataPilot GitHub repository at https://github.com/AltimateAI/datapilot-cli.
|
50
50
|
|
51
51
|
Thank you for using DataPilot!
|
@@ -13,16 +13,16 @@ def read(*names, **kwargs):
|
|
13
13
|
|
14
14
|
setup(
|
15
15
|
name="altimate-datapilot-cli",
|
16
|
-
version="0.0.
|
16
|
+
version="0.0.9",
|
17
17
|
license="MIT",
|
18
18
|
description="Assistant for Data Teams",
|
19
19
|
long_description="{}\n{}".format(
|
20
20
|
re.compile("^.. start-badges.*^.. end-badges", re.M | re.S).sub("", read("README.rst")),
|
21
21
|
re.sub(":[a-z]+:`~?(.*?)`", r"``\1``", read("CHANGELOG.rst")),
|
22
22
|
),
|
23
|
-
author="
|
23
|
+
author="Altimate Inc",
|
24
24
|
author_email="info@altimate.ai",
|
25
|
-
url="https://github.com/AltimateAI/datapilot",
|
25
|
+
url="https://github.com/AltimateAI/datapilot-cli",
|
26
26
|
packages=find_packages("src"),
|
27
27
|
package_dir={"": "src"},
|
28
28
|
py_modules=[path.stem for path in Path("src").glob("*.py")],
|
@@ -55,7 +55,7 @@ setup(
|
|
55
55
|
project_urls={
|
56
56
|
"Documentation": "https://datapilot.readthedocs.io/",
|
57
57
|
"Changelog": "https://datapilot.readthedocs.io/en/latest/changelog.html",
|
58
|
-
"Issue Tracker": "https://github.com/AltimateAI/datapilot/issues",
|
58
|
+
"Issue Tracker": "https://github.com/AltimateAI/datapilot-cli/issues",
|
59
59
|
},
|
60
60
|
keywords=[
|
61
61
|
# eg: "keyword1", "keyword2", "keyword3",
|
@@ -1,14 +1,14 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: altimate-datapilot-cli
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.9
|
4
4
|
Summary: Assistant for Data Teams
|
5
|
-
Home-page: https://github.com/AltimateAI/datapilot
|
6
|
-
Author:
|
5
|
+
Home-page: https://github.com/AltimateAI/datapilot-cli
|
6
|
+
Author: Altimate Inc
|
7
7
|
Author-email: info@altimate.ai
|
8
8
|
License: MIT
|
9
9
|
Project-URL: Documentation, https://datapilot.readthedocs.io/
|
10
10
|
Project-URL: Changelog, https://datapilot.readthedocs.io/en/latest/changelog.html
|
11
|
-
Project-URL: Issue Tracker, https://github.com/AltimateAI/datapilot/issues
|
11
|
+
Project-URL: Issue Tracker, https://github.com/AltimateAI/datapilot-cli/issues
|
12
12
|
Platform: UNKNOWN
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
14
14
|
Classifier: Intended Audience :: Developers
|
@@ -50,7 +50,7 @@ Installation
|
|
50
50
|
|
51
51
|
You can also install the in-development version with::
|
52
52
|
|
53
|
-
pip install https://github.com/AltimateAI/datapilot/archive/main.zip
|
53
|
+
pip install https://github.com/AltimateAI/datapilot-cli/archive/main.zip
|
54
54
|
|
55
55
|
|
56
56
|
Documentation
|
@@ -162,6 +162,9 @@ src/datapilot/core/platforms/dbt/wrappers/catalog/v1/__init__.py
|
|
162
162
|
src/datapilot/core/platforms/dbt/wrappers/catalog/v1/wrapper.py
|
163
163
|
src/datapilot/core/platforms/dbt/wrappers/manifest/__init__.py
|
164
164
|
src/datapilot/core/platforms/dbt/wrappers/manifest/wrapper.py
|
165
|
+
src/datapilot/core/platforms/dbt/wrappers/manifest/v10/__init__.py
|
166
|
+
src/datapilot/core/platforms/dbt/wrappers/manifest/v10/schemas.py
|
167
|
+
src/datapilot/core/platforms/dbt/wrappers/manifest/v10/wrapper.py
|
165
168
|
src/datapilot/core/platforms/dbt/wrappers/manifest/v11/__init__.py
|
166
169
|
src/datapilot/core/platforms/dbt/wrappers/manifest/v11/schemas.py
|
167
170
|
src/datapilot/core/platforms/dbt/wrappers/manifest/v11/wrapper.py
|
@@ -184,6 +187,7 @@ tests/core/platform/dbt/test_cli.py
|
|
184
187
|
tests/core/platform/dbt/test_utils.py
|
185
188
|
tests/data/catalog_v1.json
|
186
189
|
tests/data/config.yml
|
190
|
+
tests/data/manifest_v10.json
|
187
191
|
tests/data/manifest_v11.json
|
188
192
|
tests/data/manifests/manifest_js.json
|
189
193
|
tests/data/manifests/manifest_js2.json
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.0.9"
|
@@ -1,9 +1,11 @@
|
|
1
1
|
from dbt_artifacts_parser.parsers.catalog.catalog_v1 import CatalogV1
|
2
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import ManifestV10
|
2
3
|
from dbt_artifacts_parser.parsers.manifest.manifest_v11 import ManifestV11
|
3
4
|
|
4
5
|
from datapilot.core.platforms.dbt.schemas.manifest import Catalog
|
5
6
|
from datapilot.core.platforms.dbt.schemas.manifest import Manifest
|
6
7
|
from datapilot.core.platforms.dbt.wrappers.catalog.v1.wrapper import CatalogV1Wrapper
|
8
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.wrapper import ManifestV10Wrapper
|
7
9
|
from datapilot.core.platforms.dbt.wrappers.manifest.v11.wrapper import ManifestV11Wrapper
|
8
10
|
from datapilot.exceptions.exceptions import AltimateNotSupportedError
|
9
11
|
|
@@ -13,10 +15,12 @@ class DBTFactory:
|
|
13
15
|
def get_manifest_wrapper(cls, manifest: Manifest):
|
14
16
|
if isinstance(manifest, ManifestV11):
|
15
17
|
return ManifestV11Wrapper(manifest)
|
16
|
-
|
18
|
+
if isinstance(manifest, ManifestV10):
|
19
|
+
return ManifestV10Wrapper(manifest)
|
20
|
+
raise AltimateNotSupportedError(f"dbt version {manifest.metadata.dbt_version} not supported")
|
17
21
|
|
18
22
|
@classmethod
|
19
23
|
def get_catalog_wrapper(cls, catalog: Catalog):
|
20
24
|
if isinstance(catalog, CatalogV1):
|
21
25
|
return CatalogV1Wrapper(catalog)
|
22
|
-
raise AltimateNotSupportedError(f"
|
26
|
+
raise AltimateNotSupportedError(f"dbt version {catalog.metadata.dbt_version} not supported")
|
altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/schemas.py
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
from typing import Dict
|
2
|
+
from typing import Type
|
3
|
+
from typing import Union
|
4
|
+
|
5
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import AnalysisNode
|
6
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import Exposure
|
7
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import GenericTestNode
|
8
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import HookNode
|
9
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import Macro
|
10
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import ModelNode
|
11
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import RPCNode
|
12
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import SeedNode
|
13
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import SingularTestNode
|
14
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import SnapshotNode
|
15
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import SourceDefinition
|
16
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import SqlNode
|
17
|
+
|
18
|
+
from datapilot.core.platforms.dbt.constants import GENERIC
|
19
|
+
from datapilot.core.platforms.dbt.constants import SINGULAR
|
20
|
+
|
21
|
+
ManifestNode = Union[
|
22
|
+
AnalysisNode,
|
23
|
+
SingularTestNode,
|
24
|
+
HookNode,
|
25
|
+
ModelNode,
|
26
|
+
RPCNode,
|
27
|
+
SqlNode,
|
28
|
+
GenericTestNode,
|
29
|
+
SnapshotNode,
|
30
|
+
SeedNode,
|
31
|
+
]
|
32
|
+
|
33
|
+
SourceNode = SourceDefinition
|
34
|
+
|
35
|
+
ExposureNode = Exposure
|
36
|
+
|
37
|
+
TestNode = Union[GenericTestNode, SingularTestNode]
|
38
|
+
|
39
|
+
MacroNode = Macro
|
40
|
+
|
41
|
+
TEST_TYPE_TO_NODE_MAP: Dict[str, Type] = {
|
42
|
+
GENERIC: [GenericTestNode],
|
43
|
+
SINGULAR: [SingularTestNode],
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
SeedNodeMap = SeedNode
|
altimate-datapilot-cli-0.0.9/src/datapilot/core/platforms/dbt/wrappers/manifest/v10/wrapper.py
ADDED
@@ -0,0 +1,396 @@
|
|
1
|
+
from typing import Dict
|
2
|
+
from typing import Set
|
3
|
+
|
4
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import GenericTestNode
|
5
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import ManifestV10
|
6
|
+
from dbt_artifacts_parser.parsers.manifest.manifest_v10 import SingularTestNode
|
7
|
+
|
8
|
+
from datapilot.core.platforms.dbt.constants import GENERIC
|
9
|
+
from datapilot.core.platforms.dbt.constants import OTHER_TEST_NODE
|
10
|
+
from datapilot.core.platforms.dbt.constants import SEED
|
11
|
+
from datapilot.core.platforms.dbt.constants import SINGULAR
|
12
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateDBTContract
|
13
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateDependsOn
|
14
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateExposureType
|
15
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateExternalTable
|
16
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateFileHash
|
17
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateFreshnessThreshold
|
18
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateManifestColumnInfo
|
19
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateManifestExposureNode
|
20
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateManifestMacroNode
|
21
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateManifestNode
|
22
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateManifestSourceNode
|
23
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateManifestTestNode
|
24
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateMaturityEnum
|
25
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateNodeConfig
|
26
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateOwner
|
27
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateQuoting
|
28
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateRefArgs
|
29
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateResourceType
|
30
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateSeedConfig
|
31
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateSeedNode
|
32
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateSourceConfig
|
33
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateTestConfig
|
34
|
+
from datapilot.core.platforms.dbt.schemas.manifest import AltimateTestMetadata
|
35
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import TEST_TYPE_TO_NODE_MAP
|
36
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import ExposureNode
|
37
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import MacroNode
|
38
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import ManifestNode
|
39
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import SeedNodeMap
|
40
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import SourceNode
|
41
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.v10.schemas import TestNode
|
42
|
+
from datapilot.core.platforms.dbt.wrappers.manifest.wrapper import BaseManifestWrapper
|
43
|
+
|
44
|
+
|
45
|
+
class ManifestV10Wrapper(BaseManifestWrapper):
|
46
|
+
def __init__(self, manifest: ManifestV10):
|
47
|
+
self.manifest = manifest
|
48
|
+
|
49
|
+
def _get_node(self, node: ManifestNode) -> AltimateManifestNode:
|
50
|
+
(
|
51
|
+
sources,
|
52
|
+
metrics,
|
53
|
+
compiled_path,
|
54
|
+
compiled,
|
55
|
+
compiled_code,
|
56
|
+
depends_on_nodes,
|
57
|
+
depends_on_macros,
|
58
|
+
raw_code,
|
59
|
+
language,
|
60
|
+
contract,
|
61
|
+
) = ([], [], None, None, None, None, None, "", "", None)
|
62
|
+
if node.resource_type.value != SEED:
|
63
|
+
sources = node.sources
|
64
|
+
metrics = node.metrics
|
65
|
+
depends_on_nodes = node.depends_on.nodes if node.depends_on else None
|
66
|
+
depends_on_macros = node.depends_on.macros if node.depends_on else None
|
67
|
+
compiled_path = node.compiled_path
|
68
|
+
compiled = node.compiled
|
69
|
+
raw_code = node.raw_code
|
70
|
+
language = node.language
|
71
|
+
contract = AltimateDBTContract(**node.contract.__dict__) if node.contract else None
|
72
|
+
|
73
|
+
return AltimateManifestNode(
|
74
|
+
database=node.database,
|
75
|
+
schema_name=node.schema_,
|
76
|
+
name=node.name,
|
77
|
+
resource_type=AltimateResourceType(node.resource_type.value),
|
78
|
+
package_name=node.package_name,
|
79
|
+
path=node.path,
|
80
|
+
description=node.description,
|
81
|
+
original_file_path=node.original_file_path,
|
82
|
+
unique_id=node.unique_id,
|
83
|
+
fqn=node.fqn,
|
84
|
+
alias=node.alias,
|
85
|
+
raw_code=raw_code,
|
86
|
+
language=language,
|
87
|
+
config=AltimateNodeConfig(**node.config.__dict__) if node.config else None,
|
88
|
+
checksum=AltimateFileHash(
|
89
|
+
name=node.checksum.name if node.checksum else None,
|
90
|
+
checksum=node.checksum.checksum if node.checksum else None,
|
91
|
+
),
|
92
|
+
columns={
|
93
|
+
name: AltimateManifestColumnInfo(
|
94
|
+
name=column.name,
|
95
|
+
description=column.description,
|
96
|
+
meta=column.meta,
|
97
|
+
data_type=column.data_type,
|
98
|
+
quote=column.quote,
|
99
|
+
tags=column.tags,
|
100
|
+
)
|
101
|
+
for name, column in node.columns.items()
|
102
|
+
},
|
103
|
+
relation_name=node.relation_name,
|
104
|
+
sources=sources,
|
105
|
+
metrics=metrics,
|
106
|
+
depends_on=AltimateDependsOn(
|
107
|
+
nodes=depends_on_nodes,
|
108
|
+
macros=depends_on_macros,
|
109
|
+
),
|
110
|
+
compiled_path=compiled_path,
|
111
|
+
compiled=compiled,
|
112
|
+
compiled_code=compiled_code,
|
113
|
+
contract=contract,
|
114
|
+
meta=node.meta,
|
115
|
+
patch_path=node.patch_path,
|
116
|
+
)
|
117
|
+
|
118
|
+
def _get_source(self, source: SourceNode) -> AltimateManifestSourceNode:
|
119
|
+
return AltimateManifestSourceNode(
|
120
|
+
database=source.database,
|
121
|
+
resource_type=AltimateResourceType(source.resource_type.value),
|
122
|
+
schema_name=source.schema_,
|
123
|
+
name=source.name,
|
124
|
+
package_name=source.package_name,
|
125
|
+
path=source.path,
|
126
|
+
original_file_path=source.original_file_path,
|
127
|
+
unique_id=source.unique_id,
|
128
|
+
fqn=source.fqn,
|
129
|
+
source_name=source.source_name,
|
130
|
+
source_description=source.source_description,
|
131
|
+
loader=source.loader,
|
132
|
+
identifier=source.identifier,
|
133
|
+
quoting=AltimateQuoting(**source.quoting.dict()) if source.quoting else None,
|
134
|
+
loaded_at_field=source.loaded_at_field,
|
135
|
+
freshness=AltimateFreshnessThreshold(**source.freshness.dict()) if source.freshness else None,
|
136
|
+
external=AltimateExternalTable(**source.external.dict()) if source.external else None,
|
137
|
+
description=source.description,
|
138
|
+
columns={
|
139
|
+
name: AltimateManifestColumnInfo(
|
140
|
+
name=column.name,
|
141
|
+
description=column.description,
|
142
|
+
meta=column.meta,
|
143
|
+
data_type=column.data_type,
|
144
|
+
quote=column.quote,
|
145
|
+
tags=column.tags,
|
146
|
+
)
|
147
|
+
for name, column in source.columns.items()
|
148
|
+
},
|
149
|
+
meta=source.meta,
|
150
|
+
relation_name=source.relation_name,
|
151
|
+
source_meta=source.source_meta,
|
152
|
+
tags=source.tags,
|
153
|
+
config=AltimateSourceConfig(**source.config.dict()) if source.config else None,
|
154
|
+
patch_path=source.patch_path,
|
155
|
+
unrendered_config=source.unrendered_config,
|
156
|
+
created_at=source.created_at,
|
157
|
+
)
|
158
|
+
|
159
|
+
def _get_macro(self, macro: MacroNode) -> AltimateManifestMacroNode:
|
160
|
+
return AltimateManifestMacroNode(
|
161
|
+
name=macro.name,
|
162
|
+
resource_type=AltimateResourceType(macro.resource_type.value),
|
163
|
+
package_name=macro.package_name,
|
164
|
+
path=macro.path,
|
165
|
+
original_file_path=macro.original_file_path,
|
166
|
+
unique_id=macro.unique_id,
|
167
|
+
macro_sql=macro.macro_sql,
|
168
|
+
depends_on=(
|
169
|
+
AltimateDependsOn(
|
170
|
+
macros=macro.depends_on.macros,
|
171
|
+
)
|
172
|
+
if macro.depends_on
|
173
|
+
else None
|
174
|
+
),
|
175
|
+
description=macro.description,
|
176
|
+
meta=macro.meta,
|
177
|
+
docs=macro.docs,
|
178
|
+
patch_path=macro.patch_path,
|
179
|
+
arguments=[AltimateRefArgs(**arg.dict()) for arg in macro.arguments] if macro.arguments else None,
|
180
|
+
created_at=macro.created_at,
|
181
|
+
supported_languages=macro.supported_languages,
|
182
|
+
)
|
183
|
+
|
184
|
+
def _get_exposure(self, exposure: ExposureNode) -> AltimateManifestExposureNode:
|
185
|
+
return AltimateManifestExposureNode(
|
186
|
+
name=exposure.name,
|
187
|
+
resource_type=AltimateResourceType(exposure.resource_type.value),
|
188
|
+
package_name=exposure.package_name,
|
189
|
+
path=exposure.path,
|
190
|
+
original_file_path=exposure.original_file_path,
|
191
|
+
unique_id=exposure.unique_id,
|
192
|
+
fqn=exposure.fqn,
|
193
|
+
type=AltimateExposureType(exposure.type.value) if exposure.type else None,
|
194
|
+
owner=AltimateOwner(**exposure.owner.dict()) if exposure.owner else None,
|
195
|
+
description=exposure.description,
|
196
|
+
label=exposure.label,
|
197
|
+
maturity=AltimateMaturityEnum(exposure.maturity.value) if exposure.maturity else None,
|
198
|
+
meta=exposure.meta,
|
199
|
+
tags=exposure.tags,
|
200
|
+
config=AltimateSourceConfig(**exposure.config.dict()) if exposure.config else None,
|
201
|
+
unrendered_config=exposure.unrendered_config,
|
202
|
+
url=exposure.url,
|
203
|
+
depends_on=AltimateDependsOn(
|
204
|
+
nodes=exposure.depends_on.nodes,
|
205
|
+
macros=exposure.depends_on.macros,
|
206
|
+
)
|
207
|
+
if exposure.depends_on
|
208
|
+
else None,
|
209
|
+
refs=[AltimateRefArgs(**ref.dict()) for ref in exposure.refs] if exposure.refs else None,
|
210
|
+
sources=exposure.sources,
|
211
|
+
metrics=exposure.metrics,
|
212
|
+
created_at=exposure.created_at,
|
213
|
+
)
|
214
|
+
|
215
|
+
def _get_tests(self, test: TestNode) -> AltimateManifestTestNode:
|
216
|
+
test_metadata = None
|
217
|
+
if isinstance(test, GenericTestNode):
|
218
|
+
test_type = GENERIC
|
219
|
+
test_metadata = AltimateTestMetadata(**test.test_metadata.dict()) if test.test_metadata else None
|
220
|
+
elif isinstance(test, SingularTestNode):
|
221
|
+
test_type = SINGULAR
|
222
|
+
else:
|
223
|
+
test_type = OTHER_TEST_NODE
|
224
|
+
return AltimateManifestTestNode(
|
225
|
+
test_metadata=test_metadata,
|
226
|
+
test_type=test_type,
|
227
|
+
name=test.name,
|
228
|
+
resource_type=AltimateResourceType(test.resource_type.value),
|
229
|
+
package_name=test.package_name,
|
230
|
+
path=test.path,
|
231
|
+
original_file_path=test.original_file_path,
|
232
|
+
unique_id=test.unique_id,
|
233
|
+
fqn=test.fqn,
|
234
|
+
alias=test.alias,
|
235
|
+
checksum=AltimateFileHash(
|
236
|
+
name=test.checksum.name,
|
237
|
+
checksum=test.checksum.checksum,
|
238
|
+
)
|
239
|
+
if test.checksum
|
240
|
+
else None,
|
241
|
+
config=AltimateTestConfig(**test.config.dict()) if test.config else None,
|
242
|
+
description=test.description,
|
243
|
+
tags=test.tags,
|
244
|
+
columns={
|
245
|
+
name: AltimateManifestColumnInfo(
|
246
|
+
name=column.name,
|
247
|
+
description=column.description,
|
248
|
+
meta=column.meta,
|
249
|
+
data_type=column.data_type,
|
250
|
+
quote=column.quote,
|
251
|
+
tags=column.tags,
|
252
|
+
)
|
253
|
+
for name, column in test.columns.items()
|
254
|
+
}
|
255
|
+
if test.columns
|
256
|
+
else None,
|
257
|
+
meta=test.meta,
|
258
|
+
relation_name=test.relation_name,
|
259
|
+
group=test.group,
|
260
|
+
raw_code=test.raw_code,
|
261
|
+
language=test.language,
|
262
|
+
refs=[AltimateRefArgs(**ref.dict()) for ref in test.refs] if test.refs else None,
|
263
|
+
sources=test.sources,
|
264
|
+
metrics=test.metrics,
|
265
|
+
depends_on=AltimateDependsOn(
|
266
|
+
nodes=test.depends_on.nodes,
|
267
|
+
macros=test.depends_on.macros,
|
268
|
+
)
|
269
|
+
if test.depends_on
|
270
|
+
else None,
|
271
|
+
compiled_path=test.compiled_path,
|
272
|
+
compiled=test.compiled,
|
273
|
+
compiled_code=test.compiled_code,
|
274
|
+
)
|
275
|
+
|
276
|
+
def _get_seed(self, seed: SeedNodeMap) -> AltimateSeedNode:
|
277
|
+
return AltimateSeedNode(
|
278
|
+
database=seed.database,
|
279
|
+
schema_name=seed.schema_,
|
280
|
+
name=seed.name,
|
281
|
+
resource_type=AltimateResourceType(seed.resource_type.value),
|
282
|
+
package_name=seed.package_name,
|
283
|
+
path=seed.path,
|
284
|
+
original_file_path=seed.original_file_path,
|
285
|
+
unique_id=seed.unique_id,
|
286
|
+
fqn=seed.fqn,
|
287
|
+
alias=seed.alias,
|
288
|
+
checksum=AltimateFileHash(
|
289
|
+
name=seed.checksum.name,
|
290
|
+
checksum=seed.checksum.checksum,
|
291
|
+
)
|
292
|
+
if seed.checksum
|
293
|
+
else None,
|
294
|
+
config=AltimateSeedConfig(**seed.config.dict()) if seed.config else None,
|
295
|
+
description=seed.description,
|
296
|
+
tags=seed.tags,
|
297
|
+
columns={
|
298
|
+
name: AltimateManifestColumnInfo(
|
299
|
+
name=column.name,
|
300
|
+
description=column.description,
|
301
|
+
meta=column.meta,
|
302
|
+
data_type=column.data_type,
|
303
|
+
quote=column.quote,
|
304
|
+
tags=column.tags,
|
305
|
+
)
|
306
|
+
for name, column in seed.columns.items()
|
307
|
+
}
|
308
|
+
if seed.columns
|
309
|
+
else None,
|
310
|
+
meta=seed.meta,
|
311
|
+
group=seed.group,
|
312
|
+
docs=seed.docs.dict() if seed.docs else None,
|
313
|
+
patch_path=seed.patch_path,
|
314
|
+
build_path=seed.build_path,
|
315
|
+
deferred=seed.deferred,
|
316
|
+
unrendered_config=seed.unrendered_config,
|
317
|
+
created_at=seed.created_at,
|
318
|
+
config_call_dict=seed.config_call_dict,
|
319
|
+
)
|
320
|
+
|
321
|
+
def get_nodes(
|
322
|
+
self,
|
323
|
+
) -> Dict[str, AltimateManifestNode]:
|
324
|
+
nodes = {}
|
325
|
+
for node in self.manifest.nodes.values():
|
326
|
+
if (
|
327
|
+
node.resource_type.value
|
328
|
+
in [
|
329
|
+
AltimateResourceType.seed.value,
|
330
|
+
AltimateResourceType.test.value,
|
331
|
+
]
|
332
|
+
or node.package_name != self.get_package()
|
333
|
+
):
|
334
|
+
continue
|
335
|
+
nodes[node.unique_id] = self._get_node(node)
|
336
|
+
return nodes
|
337
|
+
|
338
|
+
def get_package(self) -> str:
|
339
|
+
return self.manifest.metadata.project_name
|
340
|
+
|
341
|
+
def get_sources(self) -> Dict[str, AltimateManifestSourceNode]:
|
342
|
+
sources = {}
|
343
|
+
for source in self.manifest.sources.values():
|
344
|
+
sources[source.unique_id] = self._get_source(source)
|
345
|
+
return sources
|
346
|
+
|
347
|
+
def get_macros(self) -> Dict[str, AltimateManifestMacroNode]:
|
348
|
+
macros = {}
|
349
|
+
for macro in self.manifest.macros.values():
|
350
|
+
if macro.resource_type.value == AltimateResourceType.macro.value and macro.package_name == self.get_package():
|
351
|
+
macros[macro.unique_id] = self._get_macro(macro)
|
352
|
+
return macros
|
353
|
+
|
354
|
+
def get_exposures(self) -> Dict[str, AltimateManifestExposureNode]:
|
355
|
+
exposures = {}
|
356
|
+
for exposure in self.manifest.exposures.values():
|
357
|
+
exposures[exposure.unique_id] = self._get_exposure(exposure)
|
358
|
+
return exposures
|
359
|
+
|
360
|
+
def get_tests(self, type=None) -> Dict[str, AltimateManifestTestNode]:
|
361
|
+
tests = {}
|
362
|
+
# Initialize types_union with TestNode
|
363
|
+
types = [GenericTestNode, SingularTestNode]
|
364
|
+
|
365
|
+
# Add other types to the union if provided
|
366
|
+
if type:
|
367
|
+
types = TEST_TYPE_TO_NODE_MAP.get(type)
|
368
|
+
|
369
|
+
for node in self.manifest.nodes.values():
|
370
|
+
# Check if the node is a test and of the correct type
|
371
|
+
if node.resource_type.value == AltimateResourceType.test.value:
|
372
|
+
if any(isinstance(node, t) for t in types):
|
373
|
+
tests[node.unique_id] = self._get_tests(node)
|
374
|
+
return tests
|
375
|
+
|
376
|
+
def get_seeds(self) -> Dict[str, AltimateSeedNode]:
|
377
|
+
seeds = {}
|
378
|
+
for seed in self.manifest.nodes.values():
|
379
|
+
if seed.resource_type.value == AltimateResourceType.seed.value:
|
380
|
+
seeds[seed.unique_id] = self._get_seed(seed)
|
381
|
+
return seeds
|
382
|
+
|
383
|
+
def parent_to_child_map(self, nodes: Dict[str, AltimateManifestNode]) -> Dict[str, Set[str]]:
|
384
|
+
"""
|
385
|
+
Current manifest contains information about parents
|
386
|
+
THis gives an information of node to childre
|
387
|
+
:param nodes: A dictionary of nodes in a manifest.
|
388
|
+
:return: A dictionary of all the children of a node.
|
389
|
+
"""
|
390
|
+
children_map = {}
|
391
|
+
for node_id, node in nodes.items():
|
392
|
+
if node_id not in children_map:
|
393
|
+
children_map[node_id] = set()
|
394
|
+
for parent in node.depends_on.nodes or []:
|
395
|
+
children_map.setdefault(parent, set()).add(node_id)
|
396
|
+
return children_map
|