Skip to content

Commit

Permalink
add exception if catalog doesn't exist
Browse files Browse the repository at this point in the history
  • Loading branch information
colin-rogers-dbt committed Feb 9, 2025
1 parent 8466486 commit 3ea4904
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
8 changes: 7 additions & 1 deletion dbt-adapters/src/dbt/adapters/clients/catalogs.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from typing import List
from dbt_common.exceptions import DbtRuntimeError


Expand All @@ -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)
14 changes: 11 additions & 3 deletions dbt-adapters/tests/unit/clients/test_catalogs.py
Original file line number Diff line number Diff line change
@@ -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):
Expand All @@ -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)

0 comments on commit 3ea4904

Please sign in to comment.