From 0a1edbad378ddef6aea6383e4852ec78977f8e0e Mon Sep 17 00:00:00 2001 From: Dat Nguyen Date: Sat, 30 Mar 2024 11:05:02 +0700 Subject: [PATCH] chore: decouple dbt-core as an ext deps (#101) --- dbterd/adapters/dbt_core/dbt_invocation.py | 9 +++++---- tests/unit/adapters/test_dbt_invocation.py | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/dbterd/adapters/dbt_core/dbt_invocation.py b/dbterd/adapters/dbt_core/dbt_invocation.py index ccf73b1..260711d 100644 --- a/dbterd/adapters/dbt_core/dbt_invocation.py +++ b/dbterd/adapters/dbt_core/dbt_invocation.py @@ -1,11 +1,10 @@ import os -import importlib.util +from importlib import util from importlib.metadata import version from pathlib import Path from typing import List import click -from dbt.cli.main import dbtRunner, dbtRunnerResult from dbterd.helpers.log import logger @@ -21,6 +20,8 @@ def __init__(self, dbt_project_dir: str = None, dbt_target: str = None) -> None: dbt_target (str, optional): Custom dbt target name. Defaults to None - using default target """ self.__ensure_dbt_installed() + from dbt.cli.main import dbtRunner + self.dbt = dbtRunner() self.project_dir = ( dbt_project_dir or os.environ.get("DBT_PROJECT_DIR") or str(Path.cwd()) @@ -42,7 +43,7 @@ def __invoke(self, runner_args: List[str] = []): """ args = self.__construct_arguments(*runner_args) logger.debug(f"Invoking: `dbt {' '.join(args)}` at {self.project_dir}") - r: dbtRunnerResult = self.dbt.invoke(args) + r = self.dbt.invoke(args) if not r.success: logger.error(str(r)) @@ -72,7 +73,7 @@ def __ensure_dbt_installed(self): Raises: click.UsageError: dbt is not installed """ - dbt_spec = importlib.util.find_spec("dbt") + dbt_spec = util.find_spec("dbt") if dbt_spec and dbt_spec.loader: installed_path = dbt_spec.submodule_search_locations[0] logger.debug( diff --git a/tests/unit/adapters/test_dbt_invocation.py b/tests/unit/adapters/test_dbt_invocation.py index c9e6b02..275b1a7 100644 --- a/tests/unit/adapters/test_dbt_invocation.py +++ b/tests/unit/adapters/test_dbt_invocation.py @@ -33,7 +33,7 @@ def test__ensure_dbt_installed__no_dbt_installed(self, mock_find_spec): ), ], ) - @mock.patch("dbterd.adapters.dbt_core.dbt_invocation.dbtRunner.invoke") + @mock.patch("dbt.cli.main.dbtRunner.invoke") def test_get_selection( self, mock_dbtRunner_invoke, @@ -62,7 +62,7 @@ def test_get_selection( ] ) - @mock.patch("dbterd.adapters.dbt_core.dbt_invocation.dbtRunner.invoke") + @mock.patch("dbt.cli.main.dbtRunner.invoke") def test_get_selection__failed(self, mock_dbtRunner_invoke): mock_dbtRunner_invoke.return_value = dbtRunnerResult(success=False) with pytest.raises(click.UsageError): @@ -70,7 +70,7 @@ def test_get_selection__failed(self, mock_dbtRunner_invoke): select_rules=[], exclude_rules=[] ) - @mock.patch("dbterd.adapters.dbt_core.dbt_invocation.dbtRunner.invoke") + @mock.patch("dbt.cli.main.dbtRunner.invoke") def test_get_artifacts_for_erd(self, mock_dbtRunner_invoke): invoker = DbtInvocation() _ = invoker.get_artifacts_for_erd()