-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Enable multi project references and settings
- Loading branch information
1 parent
532719f
commit 2d09443
Showing
3 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
from dataclasses import dataclass | ||
from pathlib import Path | ||
from typing import Mapping | ||
|
||
from dbt.config import RuntimeConfig | ||
from dbt.config.project import load_yml_dict | ||
from dbt.constants import DEPENDENCIES_FILE_NAME | ||
from dbt.exceptions import ( | ||
DbtProjectError, NonUniquePackageNameError, | ||
) | ||
from typing_extensions import override | ||
|
||
|
||
# pylint: disable=too-many-ancestors | ||
@dataclass | ||
class OpenDbtRuntimeConfig(RuntimeConfig): | ||
def load_dependence_projects(self): | ||
dependencies_yml_dict = load_yml_dict(f"{self.project_root}/{DEPENDENCIES_FILE_NAME}") | ||
|
||
if "projects" not in dependencies_yml_dict: | ||
return | ||
|
||
projects = dependencies_yml_dict["projects"] | ||
project_root_parent = Path(self.project_root).parent | ||
for project in projects: | ||
path = project_root_parent.joinpath(project['name']) | ||
try: | ||
project = self.new_project(str(path.as_posix())) | ||
except DbtProjectError as e: | ||
raise DbtProjectError( | ||
f"Failed to read depending project: {e} \n project path:{path.as_posix()}", | ||
result_type="invalid_project", | ||
path=path, | ||
) from e | ||
|
||
yield project.project_name, project | ||
|
||
@override | ||
def load_dependencies(self, base_only=False) -> Mapping[str, "RuntimeConfig"]: | ||
# if self.dependencies is None: | ||
|
||
if self.dependencies is None: | ||
# this sets self.dependencies variable! | ||
self.dependencies = super().load_dependencies() | ||
|
||
# additionally load `projects` defined in `dependencies.yml` | ||
for project_name, project in self.load_dependence_projects(): | ||
print(f"WARN: loading:{project_name} , project:{project}") | ||
if project_name in self.dependencies: | ||
raise NonUniquePackageNameError(project_name) | ||
self.dependencies[project_name] = project | ||
|
||
return self.dependencies |