Skip to content

Commit fa7e741

Browse files
committed
chore: constrain all dbt import surface area to project py
1 parent a8f1efb commit fa7e741

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

src/dbt_core_interface/dbt_templater/templater.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from contextlib import suppress
1010
from functools import cached_property
1111

12-
from dbt_common.exceptions import CompilationError as DbtCompilationException
1312
from sqlfluff.core.errors import SQLFluffSkipFile, SQLTemplaterError
1413
from sqlfluff.core.templaters.base import (
1514
TemplatedFile,
@@ -56,6 +55,8 @@ def process( # pyright: ignore[reportIncompatibleMethodOverride]
5655
**kwargs: t.Any,
5756
) -> tuple[TemplatedFile | None, list[SQLTemplaterError]]:
5857
"""Compile a dbt model and return the compiled SQL."""
58+
from dbt_common.exceptions import CompilationError as DbtCompilationException
59+
5960
fname_absolute_path = (
6061
os.path.abspath(fname) if fname not in ("stdin", "<string input>") else fname
6162
)

src/dbt_core_interface/project.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def _patched_adapter_accessor(config: t.Any) -> t.Any:
4646
from dbt.contracts.graph.nodes import ManifestNode, SourceDefinition
4747
from dbt.flags import set_from_args
4848
from dbt.parser.manifest import ManifestLoader, process_node
49-
from dbt.parser.read_files import FileDiff, InputFile
49+
from dbt.parser.read_files import FileDiff, InputFile, ReadFilesFromFileSystem
5050
from dbt.parser.sql import SqlBlockParser, SqlMacroParser
5151
from dbt.task.sql import SqlCompileRunner
5252
from dbt.tracking import disable_tracking
@@ -62,7 +62,13 @@ def _patched_adapter_accessor(config: t.Any) -> t.Any:
6262

6363

6464
disable_tracking()
65-
set_invocation_context(get_env())
65+
66+
67+
def _set_invocation_context() -> None:
68+
set_invocation_context(get_env())
69+
70+
71+
_set_invocation_context()
6672

6773
logger = logging.getLogger(__name__)
6874
logger.setLevel(logging.DEBUG)
@@ -267,6 +273,8 @@ def __repr__(self) -> str: # pyright: ignore[reportImplicitOverride]
267273
"""Return a string representation of the DbtProject instance."""
268274
return f"DbtProject(name={self.project_name}, root={self.project_root}, last_parsed_at={self._last_parsed_at})"
269275

276+
set_invocation_context = staticmethod(_set_invocation_context)
277+
270278
@classmethod
271279
def from_config(cls, config: DbtConfiguration) -> DbtProject:
272280
"""Create project from configuration."""
@@ -417,6 +425,14 @@ def create_adapter(
417425

418426
return self._adapter
419427

428+
def create_reader(self) -> ReadFilesFromFileSystem:
429+
"""Create a file reader for the project."""
430+
return ReadFilesFromFileSystem(
431+
all_projects=self.runtime_config.load_dependencies(),
432+
files={},
433+
saved_files=self.manifest.files,
434+
)
435+
420436
def parse_project(
421437
self, write_manifest: bool = False, reparse_configuration: bool = False
422438
) -> None:

src/dbt_core_interface/watcher.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
import typing as t
99
from pathlib import Path
1010

11-
from dbt.parser.read_files import ReadFilesFromFileSystem
12-
from dbt_common.clients.system import get_env
13-
from dbt_common.context import set_invocation_context
14-
1511
if t.TYPE_CHECKING:
1612
from dbt_core_interface.project import DbtProject
1713

@@ -48,11 +44,7 @@ def __init__(
4844
self._project = project
4945
self.check_interval = check_interval
5046

51-
self.reader = ReadFilesFromFileSystem(
52-
all_projects=self._project.runtime_config.load_dependencies(),
53-
files={},
54-
saved_files=self._project.manifest.files,
55-
)
47+
self.reader = project.create_reader()
5648

5749
self._mtimes: dict[Path, float] = {}
5850
self._running = False
@@ -87,7 +79,7 @@ def stop(self) -> None:
8779
def _monitor_loop(self) -> None:
8880
"""Run the main monitoring loop."""
8981
self._initialize_file_mtimes()
90-
set_invocation_context(get_env())
82+
self._project.set_invocation_context()
9183

9284
while self._running and not self._stop_event.is_set():
9385
try:

0 commit comments

Comments
 (0)