diff --git a/dbt-adapters/src/dbt/adapters/clients/catalogs.py b/dbt-adapters/src/dbt/adapters/clients/catalogs.py index d67ae749a..a9c4583d5 100644 --- a/dbt-adapters/src/dbt/adapters/clients/catalogs.py +++ b/dbt-adapters/src/dbt/adapters/clients/catalogs.py @@ -1,5 +1,6 @@ from dbt.adapters.protocol import CatalogIntegrationProtocol from dbt.adapters.exceptions import DbtCatalogIntegrationAlreadyExistsError +from dbt.adapters.exceptions.catalog_integration import DbtCatalogIntegrationNotFoundError from typing import Optional @@ -27,7 +28,12 @@ def add_integration(self, integration: CatalogIntegrationProtocol, catalog_name: def get_catalog(integration_name: str) -> Optional[CatalogIntegrationProtocol]: - return _CATALOG_CLIENT.get(integration_name) + catalog = _CATALOG_CLIENT.get(integration_name) + if catalog is None: + raise DbtCatalogIntegrationNotFoundError( + integration_name, list(_CATALOG_CLIENT.integrations.keys()) + ) + return catalog def add_catalog(integration: CatalogIntegrationProtocol, catalog_name: str): diff --git a/dbt-adapters/src/dbt/adapters/exceptions/catalog_integration.py b/dbt-adapters/src/dbt/adapters/exceptions/catalog_integration.py index 4755dc111..a799f4220 100644 --- a/dbt-adapters/src/dbt/adapters/exceptions/catalog_integration.py +++ b/dbt-adapters/src/dbt/adapters/exceptions/catalog_integration.py @@ -1,3 +1,4 @@ +from typing import List from dbt_common.exceptions import DbtRuntimeError @@ -6,3 +7,10 @@ def __init__(self, catalog_name: str): self.catalog_name = catalog_name msg = f"Catalog integration {self.catalog_name} already exists" super().__init__(msg) + + +class DbtCatalogIntegrationNotFoundError(DbtRuntimeError): + def __init__(self, catalog_name: str, existing_catalog_names: List[str]): + self.catalog_name = catalog_name + msg = f"Catalog integration {self.catalog_name} not found. Maybe you meant one of these catalog names: {existing_catalog_names}?" + super().__init__(msg) diff --git a/dbt-adapters/tests/unit/clients/test_catalogs.py b/dbt-adapters/tests/unit/clients/test_catalogs.py index 94ecd3d2e..ffaea24b8 100644 --- a/dbt-adapters/tests/unit/clients/test_catalogs.py +++ b/dbt-adapters/tests/unit/clients/test_catalogs.py @@ -1,6 +1,9 @@ import pytest from dbt.adapters.clients.catalogs import add_catalog, get_catalog -from dbt.adapters.exceptions.catalog_integration import DbtCatalogIntegrationAlreadyExistsError +from dbt.adapters.exceptions.catalog_integration import ( + DbtCatalogIntegrationAlreadyExistsError, + DbtCatalogIntegrationNotFoundError, +) def test_adding_and_getting_catalog_integration(fake_catalog_integration): @@ -17,5 +20,10 @@ def test_adding_catalog_integration_that_already_exists(fake_catalog_integration add_catalog(catalog, catalog_name=catalog_name) -def test_getting_catalog_integration_that_does_not_exist(): - assert get_catalog("non_existent_catalog") is None +def test_getting_catalog_integration_that_does_not_exist(fake_catalog_integration): + catalog = fake_catalog_integration + add_catalog(catalog, catalog_name="fake_existing_catalog") + with pytest.raises(DbtCatalogIntegrationNotFoundError) as e: + get_catalog("non_existent_catalog") + assert e.value.catalog_name == "non_existent_catalog" + assert "fake_existing_catalog" in str(e.value)