|
4 | 4 | from contextlib import contextmanager |
5 | 5 | from datetime import datetime |
6 | 6 | from enum import Enum |
| 7 | +from importlib import import_module |
7 | 8 | from multiprocessing.context import SpawnContext |
8 | 9 | from typing import ( |
9 | 10 | Any, |
|
61 | 62 | ComponentName, |
62 | 63 | InformationSchema, |
63 | 64 | SchemaSearchMap, |
| 65 | + AdapterTrackingRelationInfo, |
64 | 66 | ) |
65 | 67 | from dbt.adapters.cache import RelationsCache, _make_ref_key_dict |
66 | 68 | from dbt.adapters.capability import Capability, CapabilityDict |
67 | 69 | from dbt.adapters.contracts.connection import Credentials |
68 | 70 | from dbt.adapters.contracts.macros import MacroResolverProtocol |
69 | 71 | from dbt.adapters.contracts.relation import RelationConfig |
| 72 | + |
70 | 73 | from dbt.adapters.events.types import ( |
71 | 74 | CacheMiss, |
72 | 75 | CatalogGenerationError, |
@@ -1744,6 +1747,30 @@ def capabilities(cls) -> CapabilityDict: |
1744 | 1747 | def supports(cls, capability: Capability) -> bool: |
1745 | 1748 | return bool(cls.capabilities()[capability]) |
1746 | 1749 |
|
| 1750 | + @classmethod |
| 1751 | + def get_adapter_run_info(cls, config: RelationConfig) -> AdapterTrackingRelationInfo: |
| 1752 | + adapter_class_name, *_ = cls.__name__.split("Adapter") |
| 1753 | + adapter_name = adapter_class_name.lower() |
| 1754 | + |
| 1755 | + if adapter_name == "base": |
| 1756 | + adapter_version = "" |
| 1757 | + else: |
| 1758 | + adapter_version = import_module(f"dbt.adapters.{adapter_name}.__version__").version |
| 1759 | + |
| 1760 | + return AdapterTrackingRelationInfo( |
| 1761 | + adapter_name=adapter_name, |
| 1762 | + base_adapter_version=import_module("dbt.adapters.__about__").version, |
| 1763 | + adapter_version=adapter_version, |
| 1764 | + model_adapter_details=cls._get_adapter_specific_run_info(config), |
| 1765 | + ) |
| 1766 | + |
| 1767 | + @classmethod |
| 1768 | + def _get_adapter_specific_run_info(cls, config) -> Dict[str, Any]: |
| 1769 | + """ |
| 1770 | + Adapter maintainers should overwrite this method to return any run metadata that should be captured during a run. |
| 1771 | + """ |
| 1772 | + return {} |
| 1773 | + |
1747 | 1774 |
|
1748 | 1775 | COLUMNS_EQUAL_SQL = """ |
1749 | 1776 | with diff_count as ( |
|
0 commit comments