Skip to content

Commit 1fb6183

Browse files
committed
WIP
1 parent 7f21814 commit 1fb6183

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

src/dbt_core_interface/project.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
dbt.adapters.factory.get_adapter = lambda config: config.adapter # pyright: ignore[reportUnknownLambdaType]
1111

12+
import atexit
1213
import contextlib
1314
import json
1415
import logging
@@ -66,7 +67,7 @@ def _get_profiles_dir(project_dir: Path | str | None = None) -> Path:
6667
DEFAULT_PROJECT_DIR = str(_get_project_dir())
6768

6869

69-
@dataclass
70+
@dataclass(frozen=True)
7071
class DbtConfiguration:
7172
"""Minimal dbt configuration."""
7273

@@ -87,11 +88,6 @@ class DbtConfiguration:
8788
which: str = "zezima was here"
8889
REQUIRE_RESOURCE_NAMES_WITHOUT_SPACES: bool = field(default_factory=bool)
8990

90-
def __post_init__(self) -> None:
91-
"""Post-init validation and cleanup."""
92-
if self.target == "":
93-
self.target = None
94-
9591

9692
@dataclass
9793
class ExecutionResult:
@@ -142,6 +138,7 @@ def __init__(
142138
vars=vars or {},
143139
)
144140

141+
set_from_args(self._args, None) # pyright: ignore[reportArgumentType]
145142
self.runtime_config: RuntimeConfig = RuntimeConfig.from_args(self._args)
146143

147144
self._adapter: BaseAdapter | None = None
@@ -265,14 +262,17 @@ def pool(self) -> ThreadPoolExecutor:
265262
raise RuntimeError("Thread pool not initialized")
266263
return self._pool
267264

268-
def _initialize_adapter(self, replace: bool = False) -> None:
265+
def _initialize_adapter(self, replace: bool = False, verify_connectivity: bool = True) -> None:
269266
"""Initialize or reinitialize the adapter."""
270267
if self._adapter is not None:
271268
if not replace:
272269
return
273270
with contextlib.suppress(Exception):
271+
if self._pool:
272+
self._pool.shutdown(wait=True, cancel_futures=True)
273+
self._pool = None
274274
self._adapter.connections.cleanup_all()
275-
self._pool = None
275+
_ = atexit.unregister(self._adapter.connections.cleanup_all)
276276

277277
adapter_cls = get_adapter_class_by_name(self.runtime_config.credentials.type)
278278
try:
@@ -283,14 +283,18 @@ def _initialize_adapter(self, replace: bool = False) -> None:
283283
except ValueError:
284284
self._adapter = t.cast(BaseAdapter, adapter_cls(self.runtime_config)) # pyright: ignore[reportInvalidCast]
285285

286-
with self._adapter.connection_named("master"):
287-
self._adapter.debug_query()
286+
if verify_connectivity:
287+
with self._adapter.connection_named("dbt-core-interface"):
288+
self._adapter.debug_query()
288289

289290
logger.debug(f"Initialized adapter for {self.project_name}")
290291
self.runtime_config.adapter = self._adapter # pyright: ignore[reportAttributeAccessIssue]
291292
self.__manifest_loader.macro_hook = self._adapter.connections.set_query_header # pyright: ignore[reportAttributeAccessIssue]
292293
self._adapter.set_macro_context_generator(generate_runtime_macro_context) # pyright: ignore[reportArgumentType]
293294

295+
_ = self._adapter.connections.set_connection_name()
296+
_ = atexit.register(self._adapter.connections.cleanup_all)
297+
294298
def parse_project(self, write_manifest: bool = True) -> None:
295299
"""Parse the dbt project and load manifest."""
296300
self._initialize_adapter(replace=False)
@@ -379,6 +383,8 @@ def execute_sql(self, sql: str, compile: bool = True) -> ExecutionResult:
379383
compiled_code=compiled_code,
380384
)
381385

386+
query = execute_sql
387+
382388
def compile_sql(self, sql: str) -> CompilationResult:
383389
"""Compile SQL without execution.
384390

0 commit comments

Comments
 (0)