From 5261bfe1a32b4318a0b2cee189ab25a4644090d9 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Wed, 25 Jan 2023 15:55:56 -0500 Subject: [PATCH 01/27] :sparkles: adding installed_packages.json functionality --- core/dbt/task/deps.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index ac6a6c41af3..684b89ab1a8 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -1,3 +1,4 @@ +import json from typing import Optional import dbt.utils @@ -60,6 +61,8 @@ def run(self) -> None: fire_event(DepsNoPackagesFound()) return + packages_installed = {} + with downloads_directory(): final_deps = resolve_packages(packages, self.config) @@ -73,7 +76,12 @@ def run(self) -> None: fire_event(DepsStartPackageInstall(package_name=package_name)) package.install(self.config, renderer) + + # add installed package metadata to write to installed_packages.json at the end + packages_installed[package_name] = {"source": source_type, "version": version} + fire_event(DepsInstallInfo(version_name=package.nice_version_name())) + if isinstance(package, RegistryPinnedPackage): version_latest = package.get_version_latest() if version_latest != version: @@ -91,6 +99,11 @@ def run(self) -> None: fire_event(Formatting("")) fire_event(DepsNotifyUpdatesAvailable(packages=ListOfStrings(packages_to_upgrade))) + with open( + f"{self.config.packages_install_path}/installed_packages.json", "w" + ) as json_output: + json.dump(packages_installed, json_output, indent=4) + @classmethod def from_args(cls, args): # deps needs to move to the project directory, as it does put files From 5507a0ec2b9c00acce86dcee50cb409f542eddd6 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Wed, 25 Jan 2023 16:52:24 -0500 Subject: [PATCH 02/27] :white_check_mark: update test_simple_dependency_deps test --- tests/functional/dependencies/test_simple_dependency.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/functional/dependencies/test_simple_dependency.py b/tests/functional/dependencies/test_simple_dependency.py index 140966e1c07..b5e45a99cc7 100644 --- a/tests/functional/dependencies/test_simple_dependency.py +++ b/tests/functional/dependencies/test_simple_dependency.py @@ -203,7 +203,12 @@ def packages(self): def test_simple_dependency_deps(self, project): run_dbt(["deps"]) - assert len(os.listdir("dbt_packages")) == 2 + + dbt_packages = os.listdir("dbt_packages") + dbt_packages_without_json = [x for x in dbt_packages if x != "installed_packages.json"] + + assert len(dbt_packages_without_json) == 2 + assert len(dbt_packages) == 3 class DependencyBranchBase(object): From f0cf216e02d4c381218e2536e59cdaa75aa70ce0 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Wed, 25 Jan 2023 17:00:03 -0500 Subject: [PATCH 03/27] :memo: adding changelog for deps feature via changie --- .changes/unreleased/Features-20230125-165933.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changes/unreleased/Features-20230125-165933.yaml diff --git a/.changes/unreleased/Features-20230125-165933.yaml b/.changes/unreleased/Features-20230125-165933.yaml new file mode 100644 index 00000000000..28d8132d5a4 --- /dev/null +++ b/.changes/unreleased/Features-20230125-165933.yaml @@ -0,0 +1,6 @@ +kind: Features +body: add log file of installed packages via dbt deps +time: 2023-01-25T16:59:33.786304-05:00 +custom: + Author: jusbaldw + Issue: "6643" From 8ae24e4e91d2e63aea27e53bb21ee553a6c2dfe4 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Thu, 9 Feb 2023 19:35:00 -0500 Subject: [PATCH 04/27] :sparkles: restructure deps command, include lock/add --- core/dbt/cli/main.py | 31 +++++- core/dbt/cli/params.py | 22 ++++ core/dbt/config/project.py | 7 +- core/dbt/deps/resolver.py | 12 +++ core/dbt/events/proto_types.py | 67 +++++++++++++ core/dbt/events/types.py | 45 +++++++++ core/dbt/main.py | 52 +++++++++- core/dbt/task/deps.py | 178 +++++++++++++++++++++++++++++---- 8 files changed, 388 insertions(+), 26 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index 9942db702ca..dcb8aa38767 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -200,15 +200,40 @@ def debug(ctx, **kwargs): # dbt deps -@cli.command("deps") +@cli.group() +@click.pass_context +def deps(ctx, **kwargs): + """Pull the most recent version of the dependencies listed in packages.yml""" + + +# dbt deps lock +@deps.command("lock") @click.pass_context @p.profile @p.profiles_dir @p.project_dir @p.target @p.vars -def deps(ctx, **kwargs): - """Pull the most recent version of the dependencies listed in packages.yml""" +def deps_lock(ctx, **kwargs): + """Pull the most recent version of the dependencies listed in packages.yml into package-lock.yml file""" + flags = Flags() + click.echo(f"`{inspect.stack()[0][3]}` called\n flags: {flags}") + + +# dbt deps add +@deps.command("add") +@click.pass_context +@p.profile +@p.profiles_dir +@p.project_dir +@p.target +@p.vars +@p.package +@p.package_version +@p.source +@p.dry_run +def deps_add(ctx, **kwargs): + """Add a new package to the packages.yml file""" flags = Flags() click.echo(f"`{inspect.stack()[0][3]}` called\n flags: {flags}") diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index 3ad3747e962..3661a329d2e 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -74,6 +74,14 @@ help="If set, defer to the state variable for resolving unselected nodes.", ) +dry_run = click.option( + "--dry-run", + envvar=None, + help="Option to run `dbt deps add` without updating package-lock.yml file.", + default=False, + type=click.BOOL, +) + enable_legacy_logger = click.option( "--enable-legacy-logger/--no-enable-legacy-logger", envvar="DBT_ENABLE_LEGACY_LOGGER", @@ -162,6 +170,12 @@ default=PurePath.joinpath(Path.cwd(), "target/sources.json"), ) +package = click.option("--package", envvar=None, help="Name of package to add to packages.yml.") + +package_version = click.option( + "--version/--package_version", envvar=None, help="Version of the package to install." +) + parse_only = click.option( "--parse-only", envvar=None, @@ -273,6 +287,14 @@ "--skip-profile-setup", "-s", envvar=None, help="Skip interactive profile setup.", is_flag=True ) +source = click.option( + "--source", + envvar=None, + help="Source to download page from, must be one of hub, git, or local. Defaults to hub.", + type=click.Choice(["hub", "git", "local"], case_sensitive=True), + default="hub", +) + # TODO: The env var and name (reflected in flags) are corrections! # The original name was `ARTIFACT_STATE_PATH` and used the env var `DBT_ARTIFACT_STATE_PATH`. # Both of which break existing naming conventions. diff --git a/core/dbt/config/project.py b/core/dbt/config/project.py index 861785cf0c9..18283c26407 100644 --- a/core/dbt/config/project.py +++ b/core/dbt/config/project.py @@ -93,13 +93,14 @@ def _load_yaml(path): return load_yaml_text(contents) -def package_data_from_root(project_root): - package_filepath = resolve_path_from_base("packages.yml", project_root) +def package_data_from_root(project_root, package_file_name="packages.yml"): + package_filepath = resolve_path_from_base(package_file_name, project_root) if path_exists(package_filepath): packages_dict = _load_yaml(package_filepath) else: packages_dict = None + return packages_dict @@ -490,6 +491,7 @@ def from_project_root( project_root = os.path.normpath(project_root) project_dict = _raw_project_from(project_root) config_version = project_dict.get("config-version", 1) + if config_version != 2: raise DbtProjectError( f"Invalid config version: {config_version}, expected 2", @@ -498,6 +500,7 @@ def from_project_root( packages_dict = package_data_from_root(project_root) selectors_dict = selector_data_from_root(project_root) + return cls.from_dicts( project_root=project_root, project_dict=project_dict, diff --git a/core/dbt/deps/resolver.py b/core/dbt/deps/resolver.py index db57ef0f641..1e2cb654b5f 100644 --- a/core/dbt/deps/resolver.py +++ b/core/dbt/deps/resolver.py @@ -132,3 +132,15 @@ def resolve_packages( resolved = final.resolved() _check_for_duplicate_project_names(resolved, config, renderer) return resolved + + +def resolve_lock_packages(packages: List[PackageContract]) -> List[PinnedPackage]: + lock_packages = PackageListing.from_contracts(packages) + final = PackageListing() + + for package in lock_packages: + final.incorporate(package) + + resolved = final.resolved() + + return resolved diff --git a/core/dbt/events/proto_types.py b/core/dbt/events/proto_types.py index ee11e01d172..e6b56d74395 100644 --- a/core/dbt/events/proto_types.py +++ b/core/dbt/events/proto_types.py @@ -1807,6 +1807,73 @@ class NoNodesForSelectionCriteriaMsg(betterproto.Message): data: "NoNodesForSelectionCriteria" = betterproto.message_field(2) +@dataclass +class DepsLockCreated(betterproto.Message): + """M031""" + + lock_filepath: str = betterproto.string_field(1) + + +@dataclass +class DepsLockCreatedMsg(betterproto.Message): + info: "EventInfo" = betterproto.message_field(1) + data: "DepsLockCreated" = betterproto.message_field(2) + + +@dataclass +class DepsLockUpdating(betterproto.Message): + """M032""" + + lock_filepath: str = betterproto.string_field(1) + + +@dataclass +class DepsLockUpdatingMsg(betterproto.Message): + info: "EventInfo" = betterproto.message_field(1) + data: "DepsLockUpdating" = betterproto.message_field(2) + + +@dataclass +class DepsAddPackage(betterproto.Message): + """M033""" + + package_name: str = betterproto.string_field(1) + version: str = betterproto.string_field(2) + packages_filepath: str = betterproto.string_field(3) + + +@dataclass +class DepsAddPackageMsg(betterproto.Message): + info: "EventInfo" = betterproto.message_field(1) + data: "DepsAddPackage" = betterproto.message_field(2) + + +@dataclass +class DepsFoundDuplicatePackage(betterproto.Message): + """M034""" + + removed_package: dict = betterproto.string_field(1) + + +@dataclass +class DepsFoundDuplicatePackageMsg(betterproto.Message): + info: "EventInfo" = betterproto.message_field(1) + data: "DepsFoundDuplicatePackage" = betterproto.message_field(2) + + +@dataclass +class DepsVersionMissing(betterproto.Message): + """M035""" + + source: str = betterproto.string_field(1) + + +@dataclass +class DepsVersionMissingMsg(betterproto.Message): + info: "EventInfo" = betterproto.message_field(1) + data: "DepsVersionMissing" = betterproto.message_field(2) + + @dataclass class RunningOperationCaughtError(betterproto.Message): """Q001""" diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index ab2d090a93a..48362c5f27d 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -1457,6 +1457,51 @@ def message(self) -> str: return f"The selection criterion '{self.spec_raw}' does not match any nodes" +@dataclass +class DepsLockCreated(InfoLevel, pt.DepsLockCreated): + def code(self): + return "M031" + + def message(self) -> str: + return f"Created lock file in file path: {self.lock_filepath}" + + +@dataclass +class DepsLockUpdating(InfoLevel, pt.DepsLockUpdating): + def code(self): + return "M032" + + def message(self) -> str: + return f"Updating lock file in file path: {self.lock_filepath}" + + +@dataclass +class DepsAddPackage(InfoLevel, pt.DepsAddPackage): + def code(self): + return "M033" + + def message(self) -> str: + return f"Added new package {self.package_name}@{self.version} to {self.packages_filepath}" + + +@dataclass +class DepsFoundDuplicatePackage(InfoLevel, pt.DepsFoundDuplicatePackage): + def code(self): + return "M034" + + def message(self) -> str: + return f"Found duplicate package in packages.yml, removing: {self.removed_package}" + + +@dataclass +class DepsVersionMissing(InfoLevel, pt.DepsVersionMissing): + def code(self): + return "M035" + + def message(self) -> str: + return f"Version is required to add a package when source is {self.source}" + + # ======================================================= # Q - Node execution # ======================================================= diff --git a/core/dbt/main.py b/core/dbt/main.py index 429d823be52..e72b927a9e8 100644 --- a/core/dbt/main.py +++ b/core/dbt/main.py @@ -465,6 +465,53 @@ def _build_deps_subparser(subparsers, base_subparser): return sub +def _build_deps_lock_subparser(subparsers, base_subparser): + # it might look like docs_sub is the correct parents entry, but that + # will cause weird errors about 'conflicting option strings'. + lock_sub = subparsers.add_parser( + "lock", + parents=[base_subparser], + help="""Build lock file based on latest installed packages in packages.yml""", + ) + lock_sub.set_defaults(cls=deps_task.LockTask, which="lock", rpc_method="deps.lock") + + _add_defer_arguments(lock_sub) + return lock_sub + + +def _build_deps_add_subparser(subparsers, base_subparser): + add_sub = subparsers.add_parser( + "add", parents=[base_subparser], help="Add a package to packages.yml" + ) + + add_sub.add_argument( + "--package", help="Name of package to add to packages.yml.", required=True + ) + + # Can't make version required because local source package install doesn't require version. + # A check & event type exists in `dbt deps add` + # to ensure a version is passed in when source isn't local. + add_sub.add_argument("--version", help="Version of the package to install.") + + add_sub.add_argument( + "--source", + choices=["hub", "git", "local"], + default="hub", + help="Source to download page from, must be one of hub, git, or local. Defaults to hub.", + ) + + add_sub.add_argument( + "--dry-run", + type=bool, + default=False, + help="Option to run `dbt deps add` without updating package-lock.yml file.", + ) + + add_sub.set_defaults(cls=deps_task.AddTask, which="deps", rpc_method="deps.add") + + return add_sub + + def _build_snapshot_subparser(subparsers, base_subparser): sub = subparsers.add_parser( "snapshot", @@ -1165,11 +1212,14 @@ def parse_args(args, cls=DBTArgumentParser): docs_subs = docs_sub.add_subparsers(title="Available sub-commands") source_sub = _build_source_subparser(subs, base_subparser) source_subs = source_sub.add_subparsers(title="Available sub-commands") + deps_sub = _build_deps_subparser(subs, base_subparser) + deps_subs = deps_sub.add_subparsers(title="Available sub-commands") + _build_deps_lock_subparser(deps_subs, base_subparser) + _build_deps_add_subparser(deps_subs, base_subparser) _build_init_subparser(subs, base_subparser) _build_clean_subparser(subs, base_subparser) _build_debug_subparser(subs, base_subparser) - _build_deps_subparser(subs, base_subparser) _build_list_subparser(subs, base_subparser) build_sub = _build_build_subparser(subs, base_subparser) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 684b89ab1a8..2b2de36702f 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -1,5 +1,5 @@ -import json from typing import Optional +import yaml import dbt.utils import dbt.deprecations @@ -7,20 +7,26 @@ from dbt.config import UnsetProfileConfig from dbt.config.renderer import DbtProjectYamlRenderer +from dbt.config.project import package_config_from_data, package_data_from_root from dbt.deps.base import downloads_directory -from dbt.deps.resolver import resolve_packages +from dbt.deps.resolver import resolve_lock_packages, resolve_packages from dbt.deps.registry import RegistryPinnedPackage from dbt.events.proto_types import ListOfStrings from dbt.events.functions import fire_event from dbt.events.types import ( + DepsAddPackage, + DepsFoundDuplicatePackage, + DepsInstallInfo, + DepsListSubdirectory, + DepsLockCreated, + DepsLockUpdating, DepsNoPackagesFound, + DepsNotifyUpdatesAvailable, DepsStartPackageInstall, DepsUpdateAvailable, DepsUpToDate, - DepsInstallInfo, - DepsListSubdirectory, - DepsNotifyUpdatesAvailable, + DepsVersionMissing, Formatting, ) from dbt.clients import system @@ -28,12 +34,46 @@ from dbt.task.base import BaseTask, move_to_nearest_project_dir +def _create_packages_yml_entry(package, version, source): + """Create a formatted entry to add to `packages.yml` or `package-lock.yml` file + + Args: + package (str): Name of package to download + version (str): Version of package to download + source (str): Source of where to download package from + + Returns: + dict: Formatted dict to write to `packages.yml` or `package-lock.yml` file + """ + package_key = source + version_key = "version" + + if source == "hub": + package_key = "package" + + if source == "git": + version_key = "revision" + + packages_yml_entry = {package_key: package} + + if version: + if "," in version: + version = version.split(",") + + packages_yml_entry[version_key] = version + + return packages_yml_entry + + class DepsTask(BaseTask): ConfigType = UnsetProfileConfig def __init__(self, args, config: UnsetProfileConfig): super().__init__(args=args, config=config) + if not system.path_exists(f"{self.config.project_root}/package-lock.yml"): + LockTask(args, config).run() + def track_package_install( self, package_name: str, source_type: str, version: Optional[str] ) -> None: @@ -55,21 +95,25 @@ def track_package_install( ) def run(self) -> None: + if system.path_exists(self.config.packages_install_path): + system.rmtree(self.config.packages_install_path) + system.make_directory(self.config.packages_install_path) - packages = self.config.packages.packages - if not packages: + + packages_lock_dict = package_data_from_root(self.config.project_root, "package-lock.yml") + packages_lock_config = package_config_from_data(packages_lock_dict).packages + + if not packages_lock_config: fire_event(DepsNoPackagesFound()) return - packages_installed = {} - with downloads_directory(): - final_deps = resolve_packages(packages, self.config) - + lock_defined_deps = resolve_lock_packages(packages_lock_config) renderer = DbtProjectYamlRenderer(self.config, self.config.cli_vars) packages_to_upgrade = [] - for package in final_deps: + + for package in lock_defined_deps: package_name = package.name source_type = package.source_type() version = package.get_version() @@ -77,36 +121,130 @@ def run(self) -> None: fire_event(DepsStartPackageInstall(package_name=package_name)) package.install(self.config, renderer) - # add installed package metadata to write to installed_packages.json at the end - packages_installed[package_name] = {"source": source_type, "version": version} - fire_event(DepsInstallInfo(version_name=package.nice_version_name())) if isinstance(package, RegistryPinnedPackage): version_latest = package.get_version_latest() + if version_latest != version: packages_to_upgrade.append(package_name) fire_event(DepsUpdateAvailable(version_latest=version_latest)) else: fire_event(DepsUpToDate()) + if package.get_subdirectory(): fire_event(DepsListSubdirectory(subdirectory=package.get_subdirectory())) self.track_package_install( package_name=package_name, source_type=source_type, version=version ) + if packages_to_upgrade: fire_event(Formatting("")) fire_event(DepsNotifyUpdatesAvailable(packages=ListOfStrings(packages_to_upgrade))) - with open( - f"{self.config.packages_install_path}/installed_packages.json", "w" - ) as json_output: - json.dump(packages_installed, json_output, indent=4) - @classmethod def from_args(cls, args): # deps needs to move to the project directory, as it does put files # into the modules directory move_to_nearest_project_dir(args) return super().from_args(args) + + +class LockTask(BaseTask): + ConfigType = UnsetProfileConfig + + def __init__(self, args, config: UnsetProfileConfig): + super().__init__(args=args, config=config) + + def run(self): + lock_filepath = f"{self.config.project_root}/package-lock.yml" + + packages = self.config.packages.packages + packages_installed = {"packages": []} + + if not packages: + fire_event(DepsNoPackagesFound()) + return + + with downloads_directory(): + resolved_deps = resolve_packages(packages, self.config) + + # this loop is to create the package-lock.yml in the same format as original packages.yml + # package-lock.yml includes both the stated packages in packages.yml along with dependent packages + for package in resolved_deps: + lock_entry = _create_packages_yml_entry( + package.name, package.get_version(), package.source_type() + ) + packages_installed["packages"].append(lock_entry) + + with open(lock_filepath, "w") as lock_obj: + yaml.safe_dump(packages_installed, lock_obj) + + fire_event(DepsLockCreated(lock_filepath=lock_filepath)) + + +class AddTask(BaseTask): + ConfigType = UnsetProfileConfig + + def __init__(self, args, config: UnsetProfileConfig): + super().__init__(args=args, config=config) + + def check_for_duplicate_packages(self, packages_yml): + """Loop through contents of `packages.yml` to ensure no duplicate package names + versions. + + This duplicate check will take into consideration exact match of a package name, as well as + a check to see if a package name exists within a name (i.e. a package name inside a git URL). + + Args: + packages_yml (dict): In-memory read of `packages.yml` contents + + Returns: + dict: Updated or untouched packages_yml contents + """ + for i, pkg_entry in enumerate(packages_yml["packages"]): + for val in pkg_entry.values(): + if self.args.package in val: + del packages_yml["packages"][i] + + fire_event(DepsFoundDuplicatePackage(removed_package=pkg_entry)) + + return packages_yml + + def run(self): + packages_yml_filepath = f"{self.config.project_root}/packages.yml" + + if not system.path_exists(packages_yml_filepath): + fire_event(DepsNoPackagesFound()) + return + + if not self.args.version and self.args.source != "local": + fire_event(DepsVersionMissing(source=self.args.source)) + return + + new_package_entry = _create_packages_yml_entry( + self.args.package, self.args.version, self.args.source + ) + + with open(packages_yml_filepath, "r") as user_yml_obj: + packages_yml = yaml.safe_load(user_yml_obj) + packages_yml = self.check_for_duplicate_packages(packages_yml) + packages_yml["packages"].append(new_package_entry) + + if packages_yml: + with open(packages_yml_filepath, "w") as pkg_obj: + yaml.safe_dump(packages_yml, pkg_obj) + + fire_event( + DepsAddPackage( + package_name=self.args.package, + version=self.args.version, + packages_filepath=packages_yml_filepath, + ) + ) + + if not self.args.dry_run: + fire_event( + DepsLockUpdating(lock_filepath=f"{self.config.project_root}/package-lock.yml") + ) + LockTask(self.args, self.config).run() From 94d208f076b78282d769899456719bbcd7d92d68 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Thu, 9 Feb 2023 19:43:46 -0500 Subject: [PATCH 05/27] :white_check_mark: add new deps event types to sample_values --- tests/unit/test_events.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index 529a11f5ed9..d785460dd5a 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -256,6 +256,11 @@ def test_event_codes(self): RegistryResponseMissingNestedKeys(response=""), RegistryResponseExtraNestedKeys(response=""), DepsSetDownloadDirectory(path=""), + DepsLockCreated(lock_filepath=""), + DepsLockUpdating(lock_filepath=""), + DepsAddPackage(package_name="", version="", packages_filepath=""), + DepsFoundDuplicatePackage(removed_package={}), + DepsVersionMissing(source=""), # Q - Node execution ====================== RunningOperationCaughtError(exc=""), CompileComplete(), From 948d4003e943b4343e02120ad7b2c3b807106f70 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Thu, 9 Feb 2023 20:57:39 -0500 Subject: [PATCH 06/27] :white_check_mark: fix test_simple_dependency_deps test --- tests/functional/dependencies/test_simple_dependency.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/functional/dependencies/test_simple_dependency.py b/tests/functional/dependencies/test_simple_dependency.py index b5e45a99cc7..140966e1c07 100644 --- a/tests/functional/dependencies/test_simple_dependency.py +++ b/tests/functional/dependencies/test_simple_dependency.py @@ -203,12 +203,7 @@ def packages(self): def test_simple_dependency_deps(self, project): run_dbt(["deps"]) - - dbt_packages = os.listdir("dbt_packages") - dbt_packages_without_json = [x for x in dbt_packages if x != "installed_packages.json"] - - assert len(dbt_packages_without_json) == 2 - assert len(dbt_packages) == 3 + assert len(os.listdir("dbt_packages")) == 2 class DependencyBranchBase(object): From a3df2806e513c8aaaabf153355e14c43f21183fa Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Thu, 9 Feb 2023 23:16:37 -0500 Subject: [PATCH 07/27] :bug: attempting to fix cli commands --- core/dbt/cli/main.py | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index 7d43a98c1b3..50517779b31 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -8,7 +8,7 @@ from dbt.contracts.graph.manifest import Manifest from dbt.task.clean import CleanTask from dbt.task.compile import CompileTask -from dbt.task.deps import AddTask, LockTask, DepsTask +from dbt.task.deps import AddTask, DepsTask, LockTask from dbt.task.debug import DebugTask from dbt.task.run import RunTask from dbt.task.serve import ServeTask @@ -289,8 +289,13 @@ def debug(ctx, **kwargs): # dbt deps -@cli.group() +@cli.group(invoke_without_command=True) @click.pass_context +@p.profile +@p.profiles_dir +@p.project_dir +@p.target +@p.vars @requires.preflight @requires.unset_profile @requires.project @@ -305,11 +310,6 @@ def deps(ctx, **kwargs): # dbt deps lock @deps.command("lock") @click.pass_context -@p.profile -@p.profiles_dir -@p.project_dir -@p.target -@p.vars def deps_lock(ctx, **kwargs): """Pull the most recent version of the dependencies listed in packages.yml into package-lock.yml file""" task = LockTask(ctx.obj["flags"], ctx.obj["project"]) @@ -317,18 +317,10 @@ def deps_lock(ctx, **kwargs): success = task.interpret_results(results) return results, success - # flags = Flags() - # click.echo(f"`{inspect.stack()[0][3]}` called\n flags: {flags}") - # dbt deps add @deps.command("add") @click.pass_context -@p.profile -@p.profiles_dir -@p.project_dir -@p.target -@p.vars @p.package @p.package_version @p.source @@ -340,9 +332,6 @@ def deps_add(ctx, **kwargs): success = task.interpret_results(results) return results, success - # flags = Flags() - # click.echo(f"`{inspect.stack()[0][3]}` called\n flags: {flags}") - # dbt init @cli.command("init") From 0e01c2e825249e73e6f6d97efa00ad10963f18da Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Fri, 10 Feb 2023 10:34:44 -0500 Subject: [PATCH 08/27] :bug: convert dbt deps to dbt deps install also leave dbt deps as just a new click group --- core/dbt/cli/main.py | 28 +++++++++++++++++++++++++--- core/dbt/cli/params.py | 6 ++++-- core/dbt/task/deps.py | 2 +- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index 50517779b31..06480c903f4 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -289,7 +289,13 @@ def debug(ctx, **kwargs): # dbt deps -@cli.group(invoke_without_command=True) +@cli.group() +@click.pass_context +def deps(ctx, **kwargs): + """Pull the most recent version of the dependencies listed in packages.yml""" + + +@deps.command("install") @click.pass_context @p.profile @p.profiles_dir @@ -299,8 +305,8 @@ def debug(ctx, **kwargs): @requires.preflight @requires.unset_profile @requires.project -def deps(ctx, **kwargs): - """Pull the most recent version of the dependencies listed in packages.yml""" +def deps_install(ctx, **kwargs): + """Install the most recent version of the dependencies listed in packages.yml""" task = DepsTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() success = task.interpret_results(results) @@ -310,6 +316,14 @@ def deps(ctx, **kwargs): # dbt deps lock @deps.command("lock") @click.pass_context +@p.profile +@p.profiles_dir +@p.project_dir +@p.target +@p.vars +@requires.preflight +@requires.unset_profile +@requires.project def deps_lock(ctx, **kwargs): """Pull the most recent version of the dependencies listed in packages.yml into package-lock.yml file""" task = LockTask(ctx.obj["flags"], ctx.obj["project"]) @@ -321,10 +335,18 @@ def deps_lock(ctx, **kwargs): # dbt deps add @deps.command("add") @click.pass_context +@p.profile +@p.profiles_dir +@p.project_dir +@p.target +@p.vars @p.package @p.package_version @p.source @p.dry_run +@requires.preflight +@requires.unset_profile +@requires.project def deps_add(ctx, **kwargs): """Add a new package to the packages.yml file""" task = AddTask(ctx.obj["flags"], ctx.obj["project"]) diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index c807b137f1d..98d04de56c5 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -168,10 +168,12 @@ default=PurePath.joinpath(Path.cwd(), "target/sources.json"), ) -package = click.option("--package", envvar=None, help="Name of package to add to packages.yml.") +package = click.option( + "--package", envvar=None, help="Name of package to add to packages.yml.", type=click.STRING +) package_version = click.option( - "--version/--package_version", envvar=None, help="Version of the package to install." + "--version", envvar=None, help="Version of the package to install.", type=click.STRING ) parse_only = click.option( diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 6a598375c25..e880a113c97 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -154,7 +154,7 @@ def __init__(self, args: Any, project: Project): def run(self): lock_filepath = f"{self.project.project_root}/package-lock.yml" - packages = self.packages.packages.packages + packages = self.project.packages.packages packages_installed = {"packages": []} if not packages: From 9995193cbc87d4ddf77c7073feacb59d60f5f48b Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Fri, 10 Feb 2023 10:44:51 -0500 Subject: [PATCH 09/27] :white_check_mark: update test_command_mutually_exclusive_option change deps command to deps install --- tests/unit/test_dbt_runner.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/unit/test_dbt_runner.py b/tests/unit/test_dbt_runner.py index 6c17de6dc8c..cc26534b23a 100644 --- a/tests/unit/test_dbt_runner.py +++ b/tests/unit/test_dbt_runner.py @@ -18,7 +18,10 @@ def test_command_invalid_option(self, dbt: dbtRunner) -> None: def test_command_mutually_exclusive_option(self, dbt: dbtRunner) -> None: with pytest.raises(dbtUsageException): - dbt.invoke(["--warn-error", "--warn-error-options", '{"include": "all"}', "deps"]) + # dbt.invoke(["--warn-error", "--warn-error-options", '{"include": "all"}', "deps"]) + dbt.invoke( + ["--warn-error", "--warn-error-options", '{"include": "all"}', "deps install"] + ) def test_invalid_command(self, dbt: dbtRunner) -> None: with pytest.raises(dbtUsageException): From e18282154f59d468a77a1b7cfda46214cd02939f Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Fri, 10 Feb 2023 11:13:43 -0500 Subject: [PATCH 10/27] :white_check_mark: update functional tests from deps > deps install --- tests/functional/context_methods/test_cli_vars.py | 2 +- .../context_methods/test_custom_env_vars.py | 2 +- .../context_methods/test_secret_env_vars.py | 6 +++--- .../context_methods/test_var_dependency.py | 2 +- .../dependencies/test_local_dependency.py | 14 +++++++------- .../dependencies/test_simple_dependency.py | 14 +++++++------- .../test_simple_dependency_with_configs.py | 4 ++-- tests/functional/deprecations/test_deprecations.py | 4 ++-- .../functional/duplicates/test_duplicate_model.py | 4 ++-- tests/functional/exit_codes/test_exit_codes.py | 4 ++-- .../test_schema_test_graph_selection.py | 2 +- tests/functional/macros/test_macros.py | 4 ++-- .../test_custom_materialization.py | 10 +++++----- tests/functional/minimal_cli/test_minimal_cli.py | 8 ++++---- .../partial_parsing/test_partial_parsing.py | 2 +- tests/functional/schema/test_custom_schema.py | 2 +- .../schema_tests/test_schema_v2_tests.py | 8 ++++---- .../test_simple_source_override.py | 2 +- .../test_source_overrides_duplicate_model.py | 2 +- tests/unit/test_dbt_runner.py | 2 +- 20 files changed, 49 insertions(+), 49 deletions(-) diff --git a/tests/functional/context_methods/test_cli_vars.py b/tests/functional/context_methods/test_cli_vars.py index 5f5b222f5da..eb2f9d4e4ba 100644 --- a/tests/functional/context_methods/test_cli_vars.py +++ b/tests/functional/context_methods/test_cli_vars.py @@ -138,7 +138,7 @@ def packages_config(self): def test_cli_vars_in_packages(self, project, packages_config): # Run working deps and run commands - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt(["run"]) assert len(results) == 1 diff --git a/tests/functional/context_methods/test_custom_env_vars.py b/tests/functional/context_methods/test_custom_env_vars.py index e74a5dcee09..e9403d2b1ce 100644 --- a/tests/functional/context_methods/test_custom_env_vars.py +++ b/tests/functional/context_methods/test_custom_env_vars.py @@ -28,7 +28,7 @@ def setup(self): def test_extra_filled(self, project): _, log_output = run_dbt_and_capture( - ["--log-format=json", "deps"], + ["--log-format=json", "deps", "install"], ) logs = parse_json_logs(log_output) for log in logs: diff --git a/tests/functional/context_methods/test_secret_env_vars.py b/tests/functional/context_methods/test_secret_env_vars.py index 710c104f551..f1ef957bfae 100644 --- a/tests/functional/context_methods/test_secret_env_vars.py +++ b/tests/functional/context_methods/test_secret_env_vars.py @@ -106,7 +106,7 @@ def profile_target(self): } def test_allow_secrets(self, project, first_dependency): - _, log_output = run_dbt_and_capture(["deps"]) + _, log_output = run_dbt_and_capture(["deps", "install"]) assert not ("first_dependency" in log_output) @@ -131,7 +131,7 @@ def packages(self): def test_fail_clone_with_scrubbing(self, project): with pytest.raises(DbtInternalError) as excinfo: - _, log_output = run_dbt_and_capture(["deps"]) + _, log_output = run_dbt_and_capture(["deps", "install"]) assert "abc123" not in str(excinfo.value) @@ -150,7 +150,7 @@ def packages(self): def test_fail_clone_with_scrubbing(self, project): with pytest.raises(DbtInternalError) as excinfo: - _, log_output = run_dbt_and_capture(["deps"]) + _, log_output = run_dbt_and_capture(["deps", "install"]) # we should not see any manipulated form of the secret value (abc123) here # we should see a manipulated form of the placeholder instead diff --git a/tests/functional/context_methods/test_var_dependency.py b/tests/functional/context_methods/test_var_dependency.py index 6c3f85e94c4..c91a8cef869 100644 --- a/tests/functional/context_methods/test_var_dependency.py +++ b/tests/functional/context_methods/test_var_dependency.py @@ -47,7 +47,7 @@ def project_config_update(self): } def test_var_mutual_overrides_v1_conversion(self, project, first_dependency): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) assert len(run_dbt(["seed"])) == 2 assert len(run_dbt(["run"])) == 2 check_relations_equal(project.adapter, ["root_model_expected", "model"]) diff --git a/tests/functional/dependencies/test_local_dependency.py b/tests/functional/dependencies/test_local_dependency.py index 559a1b25586..976ec14bf38 100644 --- a/tests/functional/dependencies/test_local_dependency.py +++ b/tests/functional/dependencies/test_local_dependency.py @@ -133,7 +133,7 @@ def packages(self): class TestSimpleDependency(BaseDependencyTest): def test_local_dependency(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["seed"]) results = run_dbt() assert len(results) == 5 @@ -156,7 +156,7 @@ def test_local_dependency(self, project): ) def test_no_dependency_paths(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["seed"]) # prove dependency does not exist as model in project @@ -206,7 +206,7 @@ def project_config(self): @mock.patch("dbt.config.project.get_installed_version") def test_local_dependency_out_of_date(self, mock_get, project): mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1") - run_dbt(["deps"] + self.dbt_vargs(project.test_schema)) + run_dbt(["deps", "install"] + self.dbt_vargs(project.test_schema)) # check seed with pytest.raises(dbt.exceptions.DbtProjectError) as exc: run_dbt(["seed"] + self.dbt_vargs(project.test_schema)) @@ -219,7 +219,7 @@ def test_local_dependency_out_of_date(self, mock_get, project): @mock.patch("dbt.config.project.get_installed_version") def test_local_dependency_out_of_date_no_check(self, mock_get): mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1") - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["seed", "--no-version-check"]) results = run_dbt(["run", "--no-version-check"]) assert len(results) == 5 @@ -261,7 +261,7 @@ def test_local_dependency_out_of_date_no_check(self, mock_get, project): ) mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1") - run_dbt(["deps", "--vars", vars_arg]) + run_dbt(["deps", "install", "--vars", vars_arg]) run_dbt(["seed", "--vars", vars_arg]) results = run_dbt(["run", "--vars", vars_arg]) len(results) == 5 @@ -310,7 +310,7 @@ def test_hook_dependency(self, prepare_dependencies, project): } ) - run_dbt(["deps", "--vars", cli_vars]) + run_dbt(["deps", "install", "--vars", cli_vars]) results = run_dbt(["run", "--vars", cli_vars]) assert len(results) == 2 check_relations_equal(project.adapter, ["actual", "expected"]) @@ -334,7 +334,7 @@ def prepare_dependencies(self, project): def test_local_dependency_same_name(self, prepare_dependencies, project): with pytest.raises(dbt.exceptions.DependencyError): - run_dbt(["deps"], expect_pass=False) + run_dbt(["deps", "install"], expect_pass=False) def test_local_dependency_same_name_sneaky(self, prepare_dependencies, project): shutil.copytree("duplicate_dependency", "./dbt_packages/duplicate_dependency") diff --git a/tests/functional/dependencies/test_simple_dependency.py b/tests/functional/dependencies/test_simple_dependency.py index 140966e1c07..3fcb3f254c2 100644 --- a/tests/functional/dependencies/test_simple_dependency.py +++ b/tests/functional/dependencies/test_simple_dependency.py @@ -73,7 +73,7 @@ def packages(self): # These two functions included to enable override in ...NoProfile derived test class @pytest.fixture(scope="class") def run_deps(self, project): - return run_dbt(["deps"]) + return run_dbt(["deps", "install"]) @pytest.fixture(scope="function") def run_clean(self, project): @@ -111,7 +111,7 @@ class TestSimpleDependencyNoProfile(SimpleDependencyBase): @pytest.fixture(scope="class") def run_deps(self, project): with tempfile.TemporaryDirectory() as tmpdir: - result = run_dbt(["deps", "--profiles-dir", tmpdir]) + result = run_dbt(["deps", "install", "--profiles-dir", tmpdir]) return result @pytest.fixture(scope="class") @@ -159,7 +159,7 @@ def packages(self): } def test_simple_dependency(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) class TestSimpleDependencyWithDuplicates(object): @@ -180,7 +180,7 @@ def packages(self): } def test_simple_dependency_deps(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) class TestRekeyedDependencyWithSubduplicates(object): @@ -202,7 +202,7 @@ def packages(self): } def test_simple_dependency_deps(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) assert len(os.listdir("dbt_packages")) == 2 @@ -223,7 +223,7 @@ def packages(self): } def deps_run_assert_equality(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt() assert len(results) == 4 @@ -302,5 +302,5 @@ def dbt_profile_target(self): def test_deps_bad_profile(self, project): del os.environ["PROFILE_TEST_HOST"] - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["clean"]) diff --git a/tests/functional/dependencies/test_simple_dependency_with_configs.py b/tests/functional/dependencies/test_simple_dependency_with_configs.py index 86ab911a2b1..c5000fe1e14 100644 --- a/tests/functional/dependencies/test_simple_dependency_with_configs.py +++ b/tests/functional/dependencies/test_simple_dependency_with_configs.py @@ -63,7 +63,7 @@ def project_config_update(self): } def test_simple_dependency(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt() assert len(results) == 5 @@ -100,7 +100,7 @@ def project_config_update(self): } def test_simple_dependency(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt(["run"]) len(results) == 5 diff --git a/tests/functional/deprecations/test_deprecations.py b/tests/functional/deprecations/test_deprecations.py index a70b3687c69..1b5c5a149a7 100644 --- a/tests/functional/deprecations/test_deprecations.py +++ b/tests/functional/deprecations/test_deprecations.py @@ -126,7 +126,7 @@ def packages(self): def test_package_redirect(self, project): deprecations.reset_deprecations() assert deprecations.active_deprecations == set() - run_dbt(["deps"]) + run_dbt(["deps", "install"]) expected = {"package-redirect"} assert expected == deprecations.active_deprecations @@ -135,7 +135,7 @@ def test_package_redirect_fail(self, project): deprecations.reset_deprecations() assert deprecations.active_deprecations == set() with pytest.raises(dbt.exceptions.CompilationError) as exc: - run_dbt(["--warn-error", "deps"]) + run_dbt(["--warn-error", "deps", "install"]) exc_str = " ".join(str(exc.value).split()) # flatten all whitespace expected_msg = "The `fishtown-analytics/dbt_utils` package is deprecated in favor of `dbt-labs/dbt_utils`" assert expected_msg in exc_str diff --git a/tests/functional/duplicates/test_duplicate_model.py b/tests/functional/duplicates/test_duplicate_model.py index 7a53fd6de63..154bd1dcc3d 100644 --- a/tests/functional/duplicates/test_duplicate_model.py +++ b/tests/functional/duplicates/test_duplicate_model.py @@ -106,7 +106,7 @@ def packages(self): return {"packages": [{"local": "local_dependency"}]} def test_duplicate_model_enabled_across_packages(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) message = "dbt found two models with the name" with pytest.raises(DuplicateResourceNameError) as exc: run_dbt(["run"]) @@ -131,7 +131,7 @@ def packages(self): return {"packages": [{"local": "local_dependency"}]} def test_duplicate_model_disabled_across_packages(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt(["compile"]) assert len(results) == 1 diff --git a/tests/functional/exit_codes/test_exit_codes.py b/tests/functional/exit_codes/test_exit_codes.py index 44672beecae..dc7b69092d5 100644 --- a/tests/functional/exit_codes/test_exit_codes.py +++ b/tests/functional/exit_codes/test_exit_codes.py @@ -78,7 +78,7 @@ def packages(self): } def test_deps(self, project): - results = run_dbt(["deps"]) + results = run_dbt(["deps", "install"]) assert results is None @@ -96,7 +96,7 @@ def packages(self): def test_deps_fail(self, project): with pytest.raises(dbt.exceptions.GitCheckoutError) as exc: - run_dbt(["deps"]) + run_dbt(["deps", "install"]) expected_msg = "Error checking out spec='bad-branch'" assert expected_msg in str(exc.value) diff --git a/tests/functional/graph_selection/test_schema_test_graph_selection.py b/tests/functional/graph_selection/test_schema_test_graph_selection.py index 4cfa5ef51f9..39e12b4c259 100644 --- a/tests/functional/graph_selection/test_schema_test_graph_selection.py +++ b/tests/functional/graph_selection/test_schema_test_graph_selection.py @@ -9,7 +9,7 @@ def run_schema_and_assert(project, include, exclude, expected_tests): # deps must run before seed - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["seed"]) results = run_dbt(["run", "--exclude", "never_selected"]) assert len(results) == 10 diff --git a/tests/functional/macros/test_macros.py b/tests/functional/macros/test_macros.py index e7f25acab3a..b03beedd2f4 100644 --- a/tests/functional/macros/test_macros.py +++ b/tests/functional/macros/test_macros.py @@ -66,7 +66,7 @@ def project_config_update(self): } def test_working_macros(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt() assert len(results) == 6 @@ -198,7 +198,7 @@ def packages(self): } def test_overrides(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt() run_dbt() diff --git a/tests/functional/materializations/test_custom_materialization.py b/tests/functional/materializations/test_custom_materialization.py index 838eb68bb01..fcb0adb261f 100644 --- a/tests/functional/materializations/test_custom_materialization.py +++ b/tests/functional/materializations/test_custom_materialization.py @@ -23,7 +23,7 @@ def packages(self): return {"packages": [{"local": "override-view-adapter-dep"}]} def test_adapter_dependency(self, project, override_view_adapter_dep): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) # this should error because the override is buggy run_dbt(["run"], expect_pass=False) @@ -34,7 +34,7 @@ def packages(self): return {"packages": [{"local": "override-view-default-dep"}]} def test_default_dependency(self, project, override_view_default_dep): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) # this should error because the override is buggy run_dbt(["run"], expect_pass=False) @@ -45,7 +45,7 @@ def packages(self): return {"packages": [{"local": "override-view-adapter-pass-dep"}]} def test_default_dependency(self, project, override_view_adapter_pass_dep): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) # this should pass because the override is ok run_dbt(["run"]) @@ -65,7 +65,7 @@ def project_config_update(self): def test_default_dependency( self, project, override_view_adapter_pass_dep, override_view_adapter_macros ): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) # this should error because the override is buggy run_dbt(["run"], expect_pass=False) @@ -76,6 +76,6 @@ def project_config_update(self): return {"macro-paths": ["override-view-return-no-relation"]} def test_default_dependency(self, project, override_view_return_no_relation): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt(["run"], expect_pass=False) assert "did not explicitly return a list of relations" in results[0].message diff --git a/tests/functional/minimal_cli/test_minimal_cli.py b/tests/functional/minimal_cli/test_minimal_cli.py index ae8f40dcfcc..e501313609e 100644 --- a/tests/functional/minimal_cli/test_minimal_cli.py +++ b/tests/functional/minimal_cli/test_minimal_cli.py @@ -19,12 +19,12 @@ def test_clean(self, runner, project): assert "logs" in result.output def test_deps(self, runner, project): - result = runner.invoke(cli, ["deps"]) + result = runner.invoke(cli, ["deps", "install"]) assert "dbt-labs/dbt_utils" in result.output assert "1.0.0" in result.output def test_ls(self, runner, project): - runner.invoke(cli, ["deps"]) + runner.invoke(cli, ["deps", "install"]) ls_result = runner.invoke(cli, ["ls"]) assert "1 seed" in ls_result.output assert "1 model" in ls_result.output @@ -32,7 +32,7 @@ def test_ls(self, runner, project): assert "1 snapshot" in ls_result.output def test_build(self, runner, project): - runner.invoke(cli, ["deps"]) + runner.invoke(cli, ["deps", "install"]) result = runner.invoke(cli, ["build"]) # 1 seed, 1 model, 2 tests assert "PASS=4" in result.output @@ -44,7 +44,7 @@ def test_build(self, runner, project): assert "SKIP=1" in result.output def test_docs_generate(self, runner, project): - runner.invoke(cli, ["deps"]) + runner.invoke(cli, ["deps", "install"]) result = runner.invoke(cli, ["docs", "generate"]) assert "Building catalog" in result.output assert "Catalog written" in result.output diff --git a/tests/functional/partial_parsing/test_partial_parsing.py b/tests/functional/partial_parsing/test_partial_parsing.py index f70b2e0f9fa..68f727da4fd 100644 --- a/tests/functional/partial_parsing/test_partial_parsing.py +++ b/tests/functional/partial_parsing/test_partial_parsing.py @@ -441,7 +441,7 @@ def packages(self): def test_parsing_with_dependency(self, project): run_dbt(["clean"]) - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["seed"]) run_dbt(["run"]) diff --git a/tests/functional/schema/test_custom_schema.py b/tests/functional/schema/test_custom_schema.py index 7262a79cce9..2c7566e3969 100644 --- a/tests/functional/schema/test_custom_schema.py +++ b/tests/functional/schema/test_custom_schema.py @@ -149,7 +149,7 @@ def test__postgres__custom_schema_with_prefix_and_dispatch( self, project, macros, project_config_update ): project.run_sql(_VALIDATION_SQL) - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["seed"]) results = run_dbt(["run"]) assert len(results) == 3 diff --git a/tests/functional/schema_tests/test_schema_v2_tests.py b/tests/functional/schema_tests/test_schema_v2_tests.py index 7b80c5d3eb4..e8ebdb09bac 100644 --- a/tests/functional/schema_tests/test_schema_v2_tests.py +++ b/tests/functional/schema_tests/test_schema_v2_tests.py @@ -564,7 +564,7 @@ def test_schema_tests( self, project, ): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt() assert len(results) == 4 @@ -752,7 +752,7 @@ def packages(self): def test_test_context_tests(self, project): # This test tests the the TestContext and TestMacroNamespace # are working correctly - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt() assert len(results) == 3 @@ -841,7 +841,7 @@ def test_test_context_with_macro_namespace( ): # This test tests the the TestContext and TestMacroNamespace # are working correctly - run_dbt(["deps"]) + run_dbt(["deps", "install"]) results = run_dbt() assert len(results) == 3 @@ -1124,5 +1124,5 @@ def test_macro_resolution_test_namespace( # resolve to 'some_macro' from the 'dbt' namespace during static analysis, # if 'some_macro' also existed in an installed package, # leading to the macro being missing in the TestNamespace - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["parse"]) diff --git a/tests/functional/source_overrides/test_simple_source_override.py b/tests/functional/source_overrides/test_simple_source_override.py index da1b4856e32..ed80726e609 100644 --- a/tests/functional/source_overrides/test_simple_source_override.py +++ b/tests/functional/source_overrides/test_simple_source_override.py @@ -93,7 +93,7 @@ def _set_updated_at_to(self, insert_id, delta, project): def test_source_overrides(self, project): insert_id = 101 - run_dbt(["deps"]) + run_dbt(["deps", "install"]) seed_results = run_dbt(["seed"]) assert len(seed_results) == 5 diff --git a/tests/functional/source_overrides/test_source_overrides_duplicate_model.py b/tests/functional/source_overrides/test_source_overrides_duplicate_model.py index e3cdebe4794..936f46c0ffb 100644 --- a/tests/functional/source_overrides/test_source_overrides_duplicate_model.py +++ b/tests/functional/source_overrides/test_source_overrides_duplicate_model.py @@ -55,7 +55,7 @@ def project_config_update(self): } def test_source_duplicate_overrides(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) with pytest.raises(CompilationError) as exc: run_dbt(["compile"]) diff --git a/tests/unit/test_dbt_runner.py b/tests/unit/test_dbt_runner.py index cc26534b23a..b51ef6c9616 100644 --- a/tests/unit/test_dbt_runner.py +++ b/tests/unit/test_dbt_runner.py @@ -20,7 +20,7 @@ def test_command_mutually_exclusive_option(self, dbt: dbtRunner) -> None: with pytest.raises(dbtUsageException): # dbt.invoke(["--warn-error", "--warn-error-options", '{"include": "all"}', "deps"]) dbt.invoke( - ["--warn-error", "--warn-error-options", '{"include": "all"}', "deps install"] + ["--warn-error", "--warn-error-options", '{"include": "all"}', "deps", "install"] ) def test_invalid_command(self, dbt: dbtRunner) -> None: From 5615910a5f81170127cabbe306b6795cc7f9d36e Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Fri, 10 Feb 2023 11:28:38 -0500 Subject: [PATCH 11/27] :white_check_mark: change missing deps to deps install --- tests/functional/context_methods/test_cli_vars.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/functional/context_methods/test_cli_vars.py b/tests/functional/context_methods/test_cli_vars.py index eb2f9d4e4ba..3bf8d560e75 100644 --- a/tests/functional/context_methods/test_cli_vars.py +++ b/tests/functional/context_methods/test_cli_vars.py @@ -149,10 +149,12 @@ def test_cli_vars_in_packages(self, project, packages_config): # Without vars args deps fails with pytest.raises(DbtRuntimeError): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) # With vars arg deps succeeds - results = run_dbt(["deps", "--vars", "path_to_project: dbt_integration_project"]) + results = run_dbt( + ["deps", "install", "--vars", "path_to_project: dbt_integration_project"] + ) assert results is None From 5eb279f8a3230f7397b3d7743e2ad5e080b6d0b8 Mon Sep 17 00:00:00 2001 From: Justin Baldwin <91483530+justbldwn@users.noreply.github.com> Date: Fri, 10 Feb 2023 11:45:05 -0500 Subject: [PATCH 12/27] :white_check_mark: convert adapter tests to deps install from deps --- tests/adapter/dbt/tests/adapter/utils/test_except.py | 2 +- tests/adapter/dbt/tests/adapter/utils/test_intersect.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/adapter/dbt/tests/adapter/utils/test_except.py b/tests/adapter/dbt/tests/adapter/utils/test_except.py index 2c058e91c2c..4235a05c985 100644 --- a/tests/adapter/dbt/tests/adapter/utils/test_except.py +++ b/tests/adapter/dbt/tests/adapter/utils/test_except.py @@ -53,7 +53,7 @@ def models(self): } def test_build_assert_equal(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["build"]) check_relations_equal( diff --git a/tests/adapter/dbt/tests/adapter/utils/test_intersect.py b/tests/adapter/dbt/tests/adapter/utils/test_intersect.py index 737e317c6f2..477c12e110b 100644 --- a/tests/adapter/dbt/tests/adapter/utils/test_intersect.py +++ b/tests/adapter/dbt/tests/adapter/utils/test_intersect.py @@ -51,7 +51,7 @@ def models(self): } def test_build_assert_equal(self, project): - run_dbt(["deps"]) + run_dbt(["deps", "install"]) run_dbt(["build"]) check_relations_equal( From 23959f4423efd206bbd70ad051f05364cab81bc9 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Tue, 15 Aug 2023 15:11:55 +0800 Subject: [PATCH 13/27] move back to deps and merge more with main --- core/dbt/cli/main.py | 32 ++++--------------- core/dbt/config/project.py | 10 +++++- core/dbt/constants.py | 1 + core/dbt/task/deps.py | 14 ++++---- .../dbt/tests/adapter/utils/test_except.py | 2 +- .../dbt/tests/adapter/utils/test_intersect.py | 2 +- .../context_methods/test_cli_vars.py | 8 ++--- .../context_methods/test_custom_env_vars.py | 2 +- .../context_methods/test_secret_env_vars.py | 6 ++-- .../context_methods/test_var_dependency.py | 2 +- .../dependencies/test_local_dependency.py | 14 ++++---- .../dependencies/test_simple_dependency.py | 15 +++++---- .../test_simple_dependency_with_configs.py | 4 +-- .../deprecations/test_deprecations.py | 4 +-- .../duplicates/test_duplicate_model.py | 4 +-- .../functional/exit_codes/test_exit_codes.py | 4 +-- .../test_schema_test_graph_selection.py | 2 +- tests/functional/macros/test_macros.py | 4 +-- .../test_custom_materialization.py | 10 +++--- .../minimal_cli/test_minimal_cli.py | 8 ++--- .../partial_parsing/test_partial_parsing.py | 2 +- tests/functional/schema/test_custom_schema.py | 2 +- .../schema_tests/test_schema_v2_tests.py | 8 ++--- .../test_simple_source_override.py | 2 +- .../test_source_overrides_duplicate_model.py | 2 +- 25 files changed, 77 insertions(+), 87 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index d8206361cb1..4d366b2cdcb 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -428,13 +428,7 @@ def debug(ctx, **kwargs): # dbt deps -@cli.group() -@click.pass_context -def deps(ctx, **kwargs): - """Pull the most recent version of the dependencies listed in packages.yml""" - - -@deps.command("install") +@cli.group(invoke_without_command=True) @click.pass_context @p.profile @p.profiles_dir_exists_false @@ -445,7 +439,9 @@ def deps(ctx, **kwargs): @requires.preflight @requires.unset_profile @requires.project -def deps_install(ctx, **kwargs): +def deps(ctx, **kwargs): + """Pull the most recent version of the dependencies listed in packages.yml""" + """Install the most recent version of the dependencies listed in packages.yml""" task = DepsTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() @@ -456,15 +452,7 @@ def deps_install(ctx, **kwargs): # dbt deps lock @deps.command("lock") @click.pass_context -@p.profile -@p.profiles_dir -@p.project_dir -@p.target -@p.vars -@requires.preflight -@requires.unset_profile -@requires.project -def deps_lock(ctx, **kwargs): +def lock(ctx, **kwargs): """Pull the most recent version of the dependencies listed in packages.yml into package-lock.yml file""" task = LockTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() @@ -475,19 +463,11 @@ def deps_lock(ctx, **kwargs): # dbt deps add @deps.command("add") @click.pass_context -@p.profile -@p.profiles_dir -@p.project_dir -@p.target -@p.vars @p.package @p.package_version @p.source @p.dry_run -@requires.preflight -@requires.unset_profile -@requires.project -def deps_add(ctx, **kwargs): +def add(ctx, **kwargs): """Add a new package to the packages.yml file""" task = AddTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() diff --git a/core/dbt/config/project.py b/core/dbt/config/project.py index 23725edc343..b2144971698 100644 --- a/core/dbt/config/project.py +++ b/core/dbt/config/project.py @@ -16,7 +16,7 @@ from dbt.flags import get_flags from dbt import deprecations -from dbt.constants import DEPENDENCIES_FILE_NAME, PACKAGES_FILE_NAME +from dbt.constants import DEPENDENCIES_FILE_NAME, PACKAGES_FILE_NAME, PACKAGE_LOCK_FILE_NAME from dbt.clients.system import path_exists, resolve_path_from_base, load_file_contents from dbt.clients.yaml_helper import load_yaml_text from dbt.contracts.connection import QueryComment @@ -94,6 +94,14 @@ def _load_yaml(path): return load_yaml_text(contents) +def get_package_lock_data(project_root): + package_lock_path = resolve_path_from_base(PACKAGE_LOCK_FILE_NAME, project_root) + ret = {} + if path_exists(package_lock_path): + ret = _load_yaml(package_lock_path) or {} + return ret + + def package_and_project_data_from_root(project_root, package_file_name=PACKAGES_FILE_NAME): package_filepath = resolve_path_from_base(package_file_name, project_root) dependencies_filepath = resolve_path_from_base(DEPENDENCIES_FILE_NAME, project_root) diff --git a/core/dbt/constants.py b/core/dbt/constants.py index f52ac23fefe..2ceb6c1070e 100644 --- a/core/dbt/constants.py +++ b/core/dbt/constants.py @@ -11,6 +11,7 @@ PACKAGES_FILE_NAME = "packages.yml" DEPENDENCIES_FILE_NAME = "dependencies.yml" +PACKAGE_LOCK_FILE_NAME = "package-lock.yml" MANIFEST_FILE_NAME = "manifest.json" SEMANTIC_MANIFEST_FILE_NAME = "semantic_manifest.json" PARTIAL_PARSE_FILE_NAME = "partial_parse.msgpack" diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index c5e8b03f668..639a815548b 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -6,7 +6,8 @@ import dbt.exceptions from dbt.config.renderer import DbtProjectYamlRenderer -from dbt.config.project import package_config_from_data, package_and_project_data_from_root +from dbt.config.project import package_config_from_data, get_package_lock_data +from dbt.constants import PACKAGE_LOCK_FILE_NAME from dbt.deps.base import downloads_directory from dbt.deps.resolver import resolve_lock_packages, resolve_packages from dbt.deps.registry import RegistryPinnedPackage @@ -106,9 +107,8 @@ def run(self) -> None: system.make_directory(self.project.packages_install_path) - packages_lock_dict, _ = package_and_project_data_from_root( - self.project.project_root, "package-lock.yml" - ) + packages_lock_dict = get_package_lock_data(self.project.project_root) + packages_lock_config = package_config_from_data(packages_lock_dict).packages if not packages_lock_config: @@ -159,7 +159,7 @@ def __init__(self, args: Any, project: Project): self.cli_vars = args.vars def run(self): - lock_filepath = f"{self.project.project_root}/package-lock.yml" + lock_filepath = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" packages = self.project.packages.packages packages_installed = {"packages": []} @@ -246,6 +246,8 @@ def run(self): if not self.args.dry_run: fire_event( - DepsLockUpdating(lock_filepath=f"{self.project.project_root}/package-lock.yml") + DepsLockUpdating( + lock_filepath=f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" + ) ) LockTask(self.args, self.project).run() diff --git a/tests/adapter/dbt/tests/adapter/utils/test_except.py b/tests/adapter/dbt/tests/adapter/utils/test_except.py index 4235a05c985..2c058e91c2c 100644 --- a/tests/adapter/dbt/tests/adapter/utils/test_except.py +++ b/tests/adapter/dbt/tests/adapter/utils/test_except.py @@ -53,7 +53,7 @@ def models(self): } def test_build_assert_equal(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["build"]) check_relations_equal( diff --git a/tests/adapter/dbt/tests/adapter/utils/test_intersect.py b/tests/adapter/dbt/tests/adapter/utils/test_intersect.py index 477c12e110b..737e317c6f2 100644 --- a/tests/adapter/dbt/tests/adapter/utils/test_intersect.py +++ b/tests/adapter/dbt/tests/adapter/utils/test_intersect.py @@ -51,7 +51,7 @@ def models(self): } def test_build_assert_equal(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["build"]) check_relations_equal( diff --git a/tests/functional/context_methods/test_cli_vars.py b/tests/functional/context_methods/test_cli_vars.py index 3bf8d560e75..5f5b222f5da 100644 --- a/tests/functional/context_methods/test_cli_vars.py +++ b/tests/functional/context_methods/test_cli_vars.py @@ -138,7 +138,7 @@ def packages_config(self): def test_cli_vars_in_packages(self, project, packages_config): # Run working deps and run commands - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt(["run"]) assert len(results) == 1 @@ -149,12 +149,10 @@ def test_cli_vars_in_packages(self, project, packages_config): # Without vars args deps fails with pytest.raises(DbtRuntimeError): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) # With vars arg deps succeeds - results = run_dbt( - ["deps", "install", "--vars", "path_to_project: dbt_integration_project"] - ) + results = run_dbt(["deps", "--vars", "path_to_project: dbt_integration_project"]) assert results is None diff --git a/tests/functional/context_methods/test_custom_env_vars.py b/tests/functional/context_methods/test_custom_env_vars.py index e9403d2b1ce..e74a5dcee09 100644 --- a/tests/functional/context_methods/test_custom_env_vars.py +++ b/tests/functional/context_methods/test_custom_env_vars.py @@ -28,7 +28,7 @@ def setup(self): def test_extra_filled(self, project): _, log_output = run_dbt_and_capture( - ["--log-format=json", "deps", "install"], + ["--log-format=json", "deps"], ) logs = parse_json_logs(log_output) for log in logs: diff --git a/tests/functional/context_methods/test_secret_env_vars.py b/tests/functional/context_methods/test_secret_env_vars.py index 297f48982ed..a95c20b7f91 100644 --- a/tests/functional/context_methods/test_secret_env_vars.py +++ b/tests/functional/context_methods/test_secret_env_vars.py @@ -107,7 +107,7 @@ def profile_target(self): } def test_allow_secrets(self, project, first_dependency): - _, log_output = run_dbt_and_capture(["deps", "install"]) + _, log_output = run_dbt_and_capture(["deps"]) assert not ("first_dependency" in log_output) @@ -132,7 +132,7 @@ def packages(self): def test_fail_clone_with_scrubbing(self, project): with pytest.raises(DbtInternalError) as excinfo: - _, log_output = run_dbt_and_capture(["deps", "install"]) + _, log_output = run_dbt_and_capture(["deps"]) assert "abc123" not in str(excinfo.value) @@ -151,7 +151,7 @@ def packages(self): def test_fail_clone_with_scrubbing(self, project): with pytest.raises(DbtInternalError) as excinfo: - _, log_output = run_dbt_and_capture(["deps", "install"]) + _, log_output = run_dbt_and_capture(["deps"]) # we should not see any manipulated form of the secret value (abc123) here # we should see a manipulated form of the placeholder instead diff --git a/tests/functional/context_methods/test_var_dependency.py b/tests/functional/context_methods/test_var_dependency.py index 29c77bcc7c1..9755c8c9ab8 100644 --- a/tests/functional/context_methods/test_var_dependency.py +++ b/tests/functional/context_methods/test_var_dependency.py @@ -50,7 +50,7 @@ def project_config_update(self): } def test_var_mutual_overrides_v1_conversion(self, project, first_dependency): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) assert len(run_dbt(["seed"])) == 2 assert len(run_dbt(["run"])) == 2 check_relations_equal(project.adapter, ["root_model_expected", "model"]) diff --git a/tests/functional/dependencies/test_local_dependency.py b/tests/functional/dependencies/test_local_dependency.py index 0fd33ea6ac4..c7a9f01cc0a 100644 --- a/tests/functional/dependencies/test_local_dependency.py +++ b/tests/functional/dependencies/test_local_dependency.py @@ -141,7 +141,7 @@ def packages(self): class TestSimpleDependency(BaseDependencyTest): def test_local_dependency(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["seed"]) results = run_dbt() assert len(results) == 5 @@ -170,7 +170,7 @@ def test_local_dependency(self, project): ) def test_no_dependency_paths(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["seed"]) # prove dependency does not exist as model in project @@ -230,7 +230,7 @@ def project_config(self): @mock.patch("dbt.config.project.get_installed_version") def test_local_dependency_out_of_date(self, mock_get, project): mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1") - run_dbt(["deps", "install"] + self.dbt_vargs(project.test_schema)) + run_dbt(["deps"] + self.dbt_vargs(project.test_schema)) # check seed with pytest.raises(dbt.exceptions.DbtProjectError) as exc: run_dbt(["seed"] + self.dbt_vargs(project.test_schema)) @@ -243,7 +243,7 @@ def test_local_dependency_out_of_date(self, mock_get, project): @mock.patch("dbt.config.project.get_installed_version") def test_local_dependency_out_of_date_no_check(self, mock_get): mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1") - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["seed", "--no-version-check"]) results = run_dbt(["run", "--no-version-check"]) assert len(results) == 5 @@ -285,7 +285,7 @@ def test_local_dependency_out_of_date_no_check(self, mock_get, project): ) mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1") - run_dbt(["deps", "install", "--vars", vars_arg]) + run_dbt(["deps", "--vars", vars_arg]) run_dbt(["seed", "--vars", vars_arg]) results = run_dbt(["run", "--vars", vars_arg]) len(results) == 5 @@ -334,7 +334,7 @@ def test_hook_dependency(self, prepare_dependencies, project): } ) - run_dbt(["deps", "install", "--vars", cli_vars]) + run_dbt(["deps", "--vars", cli_vars]) results = run_dbt(["run", "--vars", cli_vars]) assert len(results) == 2 check_relations_equal(project.adapter, ["actual", "expected"]) @@ -358,7 +358,7 @@ def prepare_dependencies(self, project): def test_local_dependency_same_name(self, prepare_dependencies, project): with pytest.raises(dbt.exceptions.DependencyError): - run_dbt(["deps", "install"], expect_pass=False) + run_dbt(["deps"], expect_pass=False) def test_local_dependency_same_name_sneaky(self, prepare_dependencies, project): shutil.copytree("duplicate_dependency", "./dbt_packages/duplicate_dependency") diff --git a/tests/functional/dependencies/test_simple_dependency.py b/tests/functional/dependencies/test_simple_dependency.py index b63855e4718..f9b4f58658c 100644 --- a/tests/functional/dependencies/test_simple_dependency.py +++ b/tests/functional/dependencies/test_simple_dependency.py @@ -73,7 +73,7 @@ def packages(self): # These two functions included to enable override in ...NoProfile derived test class @pytest.fixture(scope="class") def run_deps(self, project): - return run_dbt(["deps", "install"]) + return run_dbt(["deps"]) @pytest.fixture(scope="function") def run_clean(self, project): @@ -123,6 +123,7 @@ def dependencies(self): def test_dependency_with_dependencies_file(self, run_deps, project): # Tests that "packages" defined in a dependencies.yml file works + run_dbt(["deps"]) results = run_dbt() assert len(results) == 4 @@ -143,7 +144,7 @@ class TestSimpleDependencyNoProfile(SimpleDependencyBase): @pytest.fixture(scope="class") def run_deps(self, project): with tempfile.TemporaryDirectory() as tmpdir: - result = run_dbt(["deps", "install", "--profiles-dir", tmpdir]) + result = run_dbt(["deps", "--profiles-dir", tmpdir]) return result @pytest.fixture(scope="class") @@ -191,7 +192,7 @@ def packages(self): } def test_simple_dependency(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) class TestSimpleDependencyWithDuplicates(object): @@ -212,7 +213,7 @@ def packages(self): } def test_simple_dependency_deps(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) class TestRekeyedDependencyWithSubduplicates(object): @@ -234,7 +235,7 @@ def packages(self): } def test_simple_dependency_deps(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) assert len(os.listdir("dbt_packages")) == 2 @@ -255,7 +256,7 @@ def packages(self): } def deps_run_assert_equality(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt() assert len(results) == 4 @@ -334,5 +335,5 @@ def dbt_profile_target(self): def test_deps_bad_profile(self, project): del os.environ["PROFILE_TEST_HOST"] - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["clean"]) diff --git a/tests/functional/dependencies/test_simple_dependency_with_configs.py b/tests/functional/dependencies/test_simple_dependency_with_configs.py index c5000fe1e14..86ab911a2b1 100644 --- a/tests/functional/dependencies/test_simple_dependency_with_configs.py +++ b/tests/functional/dependencies/test_simple_dependency_with_configs.py @@ -63,7 +63,7 @@ def project_config_update(self): } def test_simple_dependency(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt() assert len(results) == 5 @@ -100,7 +100,7 @@ def project_config_update(self): } def test_simple_dependency(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt(["run"]) len(results) == 5 diff --git a/tests/functional/deprecations/test_deprecations.py b/tests/functional/deprecations/test_deprecations.py index 12a2d0f1dc3..6c2678433b0 100644 --- a/tests/functional/deprecations/test_deprecations.py +++ b/tests/functional/deprecations/test_deprecations.py @@ -122,7 +122,7 @@ def packages(self): def test_package_redirect(self, project): deprecations.reset_deprecations() assert deprecations.active_deprecations == set() - run_dbt(["deps", "install"]) + run_dbt(["deps"]) expected = {"package-redirect"} assert expected == deprecations.active_deprecations @@ -131,7 +131,7 @@ def test_package_redirect_fail(self, project): deprecations.reset_deprecations() assert deprecations.active_deprecations == set() with pytest.raises(dbt.exceptions.CompilationError) as exc: - run_dbt(["--warn-error", "deps", "install"]) + run_dbt(["--warn-error", "deps"]) exc_str = " ".join(str(exc.value).split()) # flatten all whitespace expected_msg = "The `fishtown-analytics/dbt_utils` package is deprecated in favor of `dbt-labs/dbt_utils`" assert expected_msg in exc_str diff --git a/tests/functional/duplicates/test_duplicate_model.py b/tests/functional/duplicates/test_duplicate_model.py index e2ab731a725..17be1ff20b9 100644 --- a/tests/functional/duplicates/test_duplicate_model.py +++ b/tests/functional/duplicates/test_duplicate_model.py @@ -106,7 +106,7 @@ def packages(self): return {"packages": [{"local": "local_dependency"}]} def test_duplicate_model_alias_enabled_across_packages(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) message = "dbt found two resources with the database representation" with pytest.raises(AmbiguousAliasError) as exc: run_dbt(["run"]) @@ -131,7 +131,7 @@ def packages(self): return {"packages": [{"local": "local_dependency"}]} def test_duplicate_model_disabled_across_packages(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt(["compile"]) assert len(results) == 1 diff --git a/tests/functional/exit_codes/test_exit_codes.py b/tests/functional/exit_codes/test_exit_codes.py index dc7b69092d5..44672beecae 100644 --- a/tests/functional/exit_codes/test_exit_codes.py +++ b/tests/functional/exit_codes/test_exit_codes.py @@ -78,7 +78,7 @@ def packages(self): } def test_deps(self, project): - results = run_dbt(["deps", "install"]) + results = run_dbt(["deps"]) assert results is None @@ -96,7 +96,7 @@ def packages(self): def test_deps_fail(self, project): with pytest.raises(dbt.exceptions.GitCheckoutError) as exc: - run_dbt(["deps", "install"]) + run_dbt(["deps"]) expected_msg = "Error checking out spec='bad-branch'" assert expected_msg in str(exc.value) diff --git a/tests/functional/graph_selection/test_schema_test_graph_selection.py b/tests/functional/graph_selection/test_schema_test_graph_selection.py index 595f062abdb..105397d4112 100644 --- a/tests/functional/graph_selection/test_schema_test_graph_selection.py +++ b/tests/functional/graph_selection/test_schema_test_graph_selection.py @@ -9,7 +9,7 @@ def run_schema_and_assert(project, include, exclude, expected_tests): # deps must run before seed - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["seed"]) results = run_dbt(["run", "--exclude", "never_selected"]) assert len(results) == 12 diff --git a/tests/functional/macros/test_macros.py b/tests/functional/macros/test_macros.py index 9d79576893a..a93a7d76c85 100644 --- a/tests/functional/macros/test_macros.py +++ b/tests/functional/macros/test_macros.py @@ -72,7 +72,7 @@ def project_config_update(self): } def test_working_macros(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt() assert len(results) == 6 @@ -219,7 +219,7 @@ def packages(self): } def test_overrides(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt() run_dbt() diff --git a/tests/functional/materializations/test_custom_materialization.py b/tests/functional/materializations/test_custom_materialization.py index fcb0adb261f..838eb68bb01 100644 --- a/tests/functional/materializations/test_custom_materialization.py +++ b/tests/functional/materializations/test_custom_materialization.py @@ -23,7 +23,7 @@ def packages(self): return {"packages": [{"local": "override-view-adapter-dep"}]} def test_adapter_dependency(self, project, override_view_adapter_dep): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) # this should error because the override is buggy run_dbt(["run"], expect_pass=False) @@ -34,7 +34,7 @@ def packages(self): return {"packages": [{"local": "override-view-default-dep"}]} def test_default_dependency(self, project, override_view_default_dep): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) # this should error because the override is buggy run_dbt(["run"], expect_pass=False) @@ -45,7 +45,7 @@ def packages(self): return {"packages": [{"local": "override-view-adapter-pass-dep"}]} def test_default_dependency(self, project, override_view_adapter_pass_dep): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) # this should pass because the override is ok run_dbt(["run"]) @@ -65,7 +65,7 @@ def project_config_update(self): def test_default_dependency( self, project, override_view_adapter_pass_dep, override_view_adapter_macros ): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) # this should error because the override is buggy run_dbt(["run"], expect_pass=False) @@ -76,6 +76,6 @@ def project_config_update(self): return {"macro-paths": ["override-view-return-no-relation"]} def test_default_dependency(self, project, override_view_return_no_relation): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt(["run"], expect_pass=False) assert "did not explicitly return a list of relations" in results[0].message diff --git a/tests/functional/minimal_cli/test_minimal_cli.py b/tests/functional/minimal_cli/test_minimal_cli.py index e501313609e..ae8f40dcfcc 100644 --- a/tests/functional/minimal_cli/test_minimal_cli.py +++ b/tests/functional/minimal_cli/test_minimal_cli.py @@ -19,12 +19,12 @@ def test_clean(self, runner, project): assert "logs" in result.output def test_deps(self, runner, project): - result = runner.invoke(cli, ["deps", "install"]) + result = runner.invoke(cli, ["deps"]) assert "dbt-labs/dbt_utils" in result.output assert "1.0.0" in result.output def test_ls(self, runner, project): - runner.invoke(cli, ["deps", "install"]) + runner.invoke(cli, ["deps"]) ls_result = runner.invoke(cli, ["ls"]) assert "1 seed" in ls_result.output assert "1 model" in ls_result.output @@ -32,7 +32,7 @@ def test_ls(self, runner, project): assert "1 snapshot" in ls_result.output def test_build(self, runner, project): - runner.invoke(cli, ["deps", "install"]) + runner.invoke(cli, ["deps"]) result = runner.invoke(cli, ["build"]) # 1 seed, 1 model, 2 tests assert "PASS=4" in result.output @@ -44,7 +44,7 @@ def test_build(self, runner, project): assert "SKIP=1" in result.output def test_docs_generate(self, runner, project): - runner.invoke(cli, ["deps", "install"]) + runner.invoke(cli, ["deps"]) result = runner.invoke(cli, ["docs", "generate"]) assert "Building catalog" in result.output assert "Catalog written" in result.output diff --git a/tests/functional/partial_parsing/test_partial_parsing.py b/tests/functional/partial_parsing/test_partial_parsing.py index 15552b4d55b..8d6014eb8ac 100644 --- a/tests/functional/partial_parsing/test_partial_parsing.py +++ b/tests/functional/partial_parsing/test_partial_parsing.py @@ -449,7 +449,7 @@ def packages(self): def test_parsing_with_dependency(self, project): run_dbt(["clean"]) - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["seed"]) run_dbt(["run"]) diff --git a/tests/functional/schema/test_custom_schema.py b/tests/functional/schema/test_custom_schema.py index 2c7566e3969..7262a79cce9 100644 --- a/tests/functional/schema/test_custom_schema.py +++ b/tests/functional/schema/test_custom_schema.py @@ -149,7 +149,7 @@ def test__postgres__custom_schema_with_prefix_and_dispatch( self, project, macros, project_config_update ): project.run_sql(_VALIDATION_SQL) - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["seed"]) results = run_dbt(["run"]) assert len(results) == 3 diff --git a/tests/functional/schema_tests/test_schema_v2_tests.py b/tests/functional/schema_tests/test_schema_v2_tests.py index 83e9f03700a..af85bcc290c 100644 --- a/tests/functional/schema_tests/test_schema_v2_tests.py +++ b/tests/functional/schema_tests/test_schema_v2_tests.py @@ -564,7 +564,7 @@ def test_schema_tests( self, project, ): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt() assert len(results) == 4 @@ -752,7 +752,7 @@ def packages(self): def test_test_context_tests(self, project): # This test tests the the TestContext and TestMacroNamespace # are working correctly - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt() assert len(results) == 3 @@ -841,7 +841,7 @@ def test_test_context_with_macro_namespace( ): # This test tests the the TestContext and TestMacroNamespace # are working correctly - run_dbt(["deps", "install"]) + run_dbt(["deps"]) results = run_dbt() assert len(results) == 3 @@ -1125,5 +1125,5 @@ def test_macro_resolution_test_namespace( # resolve to 'some_macro' from the 'dbt' namespace during static analysis, # if 'some_macro' also existed in an installed package, # leading to the macro being missing in the TestNamespace - run_dbt(["deps", "install"]) + run_dbt(["deps"]) run_dbt(["parse"]) diff --git a/tests/functional/source_overrides/test_simple_source_override.py b/tests/functional/source_overrides/test_simple_source_override.py index ed80726e609..da1b4856e32 100644 --- a/tests/functional/source_overrides/test_simple_source_override.py +++ b/tests/functional/source_overrides/test_simple_source_override.py @@ -93,7 +93,7 @@ def _set_updated_at_to(self, insert_id, delta, project): def test_source_overrides(self, project): insert_id = 101 - run_dbt(["deps", "install"]) + run_dbt(["deps"]) seed_results = run_dbt(["seed"]) assert len(seed_results) == 5 diff --git a/tests/functional/source_overrides/test_source_overrides_duplicate_model.py b/tests/functional/source_overrides/test_source_overrides_duplicate_model.py index 936f46c0ffb..e3cdebe4794 100644 --- a/tests/functional/source_overrides/test_source_overrides_duplicate_model.py +++ b/tests/functional/source_overrides/test_source_overrides_duplicate_model.py @@ -55,7 +55,7 @@ def project_config_update(self): } def test_source_duplicate_overrides(self, project): - run_dbt(["deps", "install"]) + run_dbt(["deps"]) with pytest.raises(CompilationError) as exc: run_dbt(["compile"]) From f46aaef906f9d9f7fd098c7fafe5d4f53ff2b2f0 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Wed, 16 Aug 2023 11:48:04 +0800 Subject: [PATCH 14/27] fix-unittest --- core/dbt/cli/flags.py | 2 ++ core/dbt/cli/main.py | 4 ++-- core/dbt/cli/types.py | 4 ++++ core/dbt/task/deps.py | 5 +++-- tests/unit/test_retry_commands.py | 2 ++ 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/dbt/cli/flags.py b/core/dbt/cli/flags.py index 863db6ed0e4..594316a46d4 100644 --- a/core/dbt/cli/flags.py +++ b/core/dbt/cli/flags.py @@ -392,6 +392,8 @@ def command_args(command: CliCommand) -> ArgsList: CliCommand.SOURCE_FRESHNESS: cli.freshness, CliCommand.TEST: cli.test, CliCommand.RETRY: cli.retry, + CliCommand.DEPS_LOCK: cli.deps_lock, + CliCommand.DEPS_ADD: cli.deps_add, } click_cmd: Optional[ClickCommand] = CMD_DICT.get(command, None) if click_cmd is None: diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index 4d366b2cdcb..5fd9731c9e8 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -452,7 +452,7 @@ def deps(ctx, **kwargs): # dbt deps lock @deps.command("lock") @click.pass_context -def lock(ctx, **kwargs): +def deps_lock(ctx, **kwargs): """Pull the most recent version of the dependencies listed in packages.yml into package-lock.yml file""" task = LockTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() @@ -467,7 +467,7 @@ def lock(ctx, **kwargs): @p.package_version @p.source @p.dry_run -def add(ctx, **kwargs): +def deps_add(ctx, **kwargs): """Add a new package to the packages.yml file""" task = AddTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() diff --git a/core/dbt/cli/types.py b/core/dbt/cli/types.py index 14028a69451..18285dd6374 100644 --- a/core/dbt/cli/types.py +++ b/core/dbt/cli/types.py @@ -24,6 +24,8 @@ class Command(Enum): SOURCE_FRESHNESS = "freshness" TEST = "test" RETRY = "retry" + DEPS_LOCK = "lock" + DEPS_ADD = "add" @classmethod def from_str(cls, s: str) -> "Command": @@ -37,4 +39,6 @@ def to_list(self) -> List[str]: Command.DOCS_GENERATE: ["docs", "generate"], Command.DOCS_SERVE: ["docs", "serve"], Command.SOURCE_FRESHNESS: ["source", "freshness"], + Command.DEPS_LOCK: ["deps", "lock"], + Command.DEPS_ADD: ["deps", "add"], }.get(self, [self.value]) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 639a815548b..b2c8119f3b7 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -77,8 +77,9 @@ def __init__(self, args: Any, project: Project): move_to_nearest_project_dir(project.project_root) super().__init__(args=args, config=None, project=project) self.cli_vars = args.vars - - if not system.path_exists(f"{self.project.project_root}/package-lock.yml"): + # TODO add some more complex logic to make sure updating the `pacakges.yml` + # or dependencies.yml will update the package lock file here. + if not system.path_exists(f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}"): LockTask(args, project).run() def track_package_install( diff --git a/tests/unit/test_retry_commands.py b/tests/unit/test_retry_commands.py index 3eb151cb6a3..f95c034785d 100644 --- a/tests/unit/test_retry_commands.py +++ b/tests/unit/test_retry_commands.py @@ -12,6 +12,8 @@ "retry", "show", "serve", + "add", + "lock", } From 56fc2d3ef4ea6771142daecbb73c5724cdf21379 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Wed, 16 Aug 2023 15:34:07 +0800 Subject: [PATCH 15/27] add hash --- core/dbt/config/project.py | 29 +++++++++++++-------------- core/dbt/constants.py | 1 + core/dbt/task/deps.py | 41 ++++++++++++++++++++++++++++++++------ 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/core/dbt/config/project.py b/core/dbt/config/project.py index b2144971698..67ca5bc131c 100644 --- a/core/dbt/config/project.py +++ b/core/dbt/config/project.py @@ -16,8 +16,12 @@ from dbt.flags import get_flags from dbt import deprecations -from dbt.constants import DEPENDENCIES_FILE_NAME, PACKAGES_FILE_NAME, PACKAGE_LOCK_FILE_NAME -from dbt.clients.system import path_exists, resolve_path_from_base, load_file_contents +from dbt.constants import ( + DEPENDENCIES_FILE_NAME, + PACKAGES_FILE_NAME, + PACKAGE_LOCK_HASH_KEY, +) +from dbt.clients.system import path_exists, load_file_contents from dbt.clients.yaml_helper import load_yaml_text from dbt.contracts.connection import QueryComment from dbt.exceptions import ( @@ -94,24 +98,17 @@ def _load_yaml(path): return load_yaml_text(contents) -def get_package_lock_data(project_root): - package_lock_path = resolve_path_from_base(PACKAGE_LOCK_FILE_NAME, project_root) +def load_yml_dict(file_path): ret = {} - if path_exists(package_lock_path): - ret = _load_yaml(package_lock_path) or {} + if path_exists(file_path): + ret = _load_yaml(file_path) or {} return ret -def package_and_project_data_from_root(project_root, package_file_name=PACKAGES_FILE_NAME): - package_filepath = resolve_path_from_base(package_file_name, project_root) - dependencies_filepath = resolve_path_from_base(DEPENDENCIES_FILE_NAME, project_root) +def package_and_project_data_from_root(project_root): - packages_yml_dict = {} - dependencies_yml_dict = {} - if path_exists(package_filepath): - packages_yml_dict = _load_yaml(package_filepath) or {} - if path_exists(dependencies_filepath): - dependencies_yml_dict = _load_yaml(dependencies_filepath) or {} + packages_yml_dict = load_yml_dict(f"{project_root}/{PACKAGES_FILE_NAME}") + dependencies_yml_dict = load_yml_dict(f"{project_root}/{DEPENDENCIES_FILE_NAME}") if "packages" in packages_yml_dict and "packages" in dependencies_yml_dict: msg = "The 'packages' key cannot be specified in both packages.yml and dependencies.yml" @@ -135,6 +132,8 @@ def package_config_from_data(packages_data: Dict[str, Any]) -> PackageConfig: if not packages_data: packages_data = {"packages": []} + if PACKAGE_LOCK_HASH_KEY in packages_data: + packages_data.pop(PACKAGE_LOCK_HASH_KEY) try: PackageConfig.validate(packages_data) packages = PackageConfig.from_dict(packages_data) diff --git a/core/dbt/constants.py b/core/dbt/constants.py index 2ceb6c1070e..6459dffafe2 100644 --- a/core/dbt/constants.py +++ b/core/dbt/constants.py @@ -15,3 +15,4 @@ MANIFEST_FILE_NAME = "manifest.json" SEMANTIC_MANIFEST_FILE_NAME = "semantic_manifest.json" PARTIAL_PARSE_FILE_NAME = "partial_parse.msgpack" +PACKAGE_LOCK_HASH_KEY = "sha1_hash" diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index b2c8119f3b7..6ae6fc92b11 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -1,3 +1,4 @@ +from hashlib import sha1 from typing import Any, Optional import yaml from pathlib import Path @@ -6,8 +7,8 @@ import dbt.exceptions from dbt.config.renderer import DbtProjectYamlRenderer -from dbt.config.project import package_config_from_data, get_package_lock_data -from dbt.constants import PACKAGE_LOCK_FILE_NAME +from dbt.config.project import package_config_from_data, load_yml_dict +from dbt.constants import PACKAGE_LOCK_FILE_NAME, PACKAGE_LOCK_HASH_KEY from dbt.deps.base import downloads_directory from dbt.deps.resolver import resolve_lock_packages, resolve_packages from dbt.deps.registry import RegistryPinnedPackage @@ -35,6 +36,23 @@ from dbt.config import Project +def _create_sha1_hash(filepath): + """Create a SHA1 hash of a file + + Args: + filepath (str): Path to file to create SHA1 hash of + + Returns: + str: SHA1 hash of file + """ + sha1_hash = sha1() + + with open(filepath, "rb") as fp: + sha1_hash.update(fp.read()) + + return sha1_hash.hexdigest() + + def _create_packages_yml_entry(package, version, source): """Create a formatted entry to add to `packages.yml` or `package-lock.yml` file @@ -77,10 +95,18 @@ def __init__(self, args: Any, project: Project): move_to_nearest_project_dir(project.project_root) super().__init__(args=args, config=None, project=project) self.cli_vars = args.vars - # TODO add some more complex logic to make sure updating the `pacakges.yml` - # or dependencies.yml will update the package lock file here. - if not system.path_exists(f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}"): + # Check lock file exist and generated by the same pacakges.yml + # or dependencies.yml. + lock_file_path = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" + if not system.path_exists(lock_file_path): LockTask(args, project).run() + else: + current_hash = _create_sha1_hash( + f"{self.project.project_root}/{self.project.packages_specified_path}" + ) + previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) + if previous_hash != current_hash: + LockTask(args, project).run() def track_package_install( self, package_name: str, source_type: str, version: Optional[str] @@ -108,7 +134,7 @@ def run(self) -> None: system.make_directory(self.project.packages_install_path) - packages_lock_dict = get_package_lock_data(self.project.project_root) + packages_lock_dict = load_yml_dict(f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}") packages_lock_config = package_config_from_data(packages_lock_dict).packages @@ -179,6 +205,9 @@ def run(self): package.name, package.get_version(), package.source_type() ) packages_installed["packages"].append(lock_entry) + packages_installed[PACKAGE_LOCK_HASH_KEY] = _create_sha1_hash( + f"{self.project.project_root}/{self.project.packages_specified_path}" + ) with open(lock_filepath, "w") as lock_obj: yaml.safe_dump(packages_installed, lock_obj) From 7cc1d46d510c34ede1472849fab0c4cfaa87e54f Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Fri, 18 Aug 2023 17:18:28 +0800 Subject: [PATCH 16/27] foramt yml and update command structure --- core/dbt/cli/flags.py | 2 -- core/dbt/cli/main.py | 46 ++++++++++----------------- core/dbt/cli/params.py | 16 +++++----- core/dbt/cli/types.py | 4 --- core/dbt/events/types.py | 8 ----- core/dbt/task/deps.py | 52 ++++++++++++++++++++----------- tests/unit/test_events.py | 1 - tests/unit/test_retry_commands.py | 2 -- 8 files changed, 57 insertions(+), 74 deletions(-) diff --git a/core/dbt/cli/flags.py b/core/dbt/cli/flags.py index 594316a46d4..863db6ed0e4 100644 --- a/core/dbt/cli/flags.py +++ b/core/dbt/cli/flags.py @@ -392,8 +392,6 @@ def command_args(command: CliCommand) -> ArgsList: CliCommand.SOURCE_FRESHNESS: cli.freshness, CliCommand.TEST: cli.test, CliCommand.RETRY: cli.retry, - CliCommand.DEPS_LOCK: cli.deps_lock, - CliCommand.DEPS_ADD: cli.deps_add, } click_cmd: Optional[ClickCommand] = CMD_DICT.get(command, None) if click_cmd is None: diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index 5fd9731c9e8..fed0a263058 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -26,7 +26,7 @@ from dbt.task.clone import CloneTask from dbt.task.compile import CompileTask from dbt.task.debug import DebugTask -from dbt.task.deps import DepsTask, LockTask, AddTask +from dbt.task.deps import DepsTask from dbt.task.freshness import FreshnessTask from dbt.task.generate import GenerateTask from dbt.task.init import InitTask @@ -435,46 +435,32 @@ def debug(ctx, **kwargs): @p.project_dir @p.target @p.vars +@p.package +@p.package_version +@p.source +@p.dry_run +@p.add_package @requires.postflight @requires.preflight @requires.unset_profile @requires.project def deps(ctx, **kwargs): - """Pull the most recent version of the dependencies listed in packages.yml""" - - """Install the most recent version of the dependencies listed in packages.yml""" + """Install dbt packages specified. + In the following case, a new `package-lock.yml` will be generated and the packages are installed: + - user updated the packages.yml + - user specify the flag --update, which means for packages that are specified as a + range, dbt-core will try to install the newer version + Otherwise, deps will use `package-lock.yml` as source of truth to install packages. + + There is a way to add new packages by providing an `--add` flag to deps command + which will allow user to specify `--package` and `--package-version`. + """ task = DepsTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() success = task.interpret_results(results) return results, success -# dbt deps lock -@deps.command("lock") -@click.pass_context -def deps_lock(ctx, **kwargs): - """Pull the most recent version of the dependencies listed in packages.yml into package-lock.yml file""" - task = LockTask(ctx.obj["flags"], ctx.obj["project"]) - results = task.run() - success = task.interpret_results(results) - return results, success - - -# dbt deps add -@deps.command("add") -@click.pass_context -@p.package -@p.package_version -@p.source -@p.dry_run -def deps_add(ctx, **kwargs): - """Add a new package to the packages.yml file""" - task = AddTask(ctx.obj["flags"], ctx.obj["project"]) - results = task.run() - success = task.interpret_results(results) - return results, success - - # dbt init @cli.command("init") @click.pass_context diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index 9ad757835f1..171b9bdde28 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -6,6 +6,12 @@ from dbt.cli.resolvers import default_project_dir, default_profiles_dir from dbt.version import get_version_information +add_package = click.option( + "--add", + help="Add a package to current package spec with `--package` and `--package-version`", + envvar=None, + is_flag=True, +) args = click.option( "--args", envvar=None, @@ -73,17 +79,9 @@ "--dry-run", envvar=None, help="Option to run `dbt deps add` without updating package-lock.yml file.", - default=False, - type=click.BOOL, + is_flag=True, ) -dry_run = click.option( - "--dry-run", - envvar=None, - help="Option to run `dbt deps add` without updating package-lock.yml file.", - default=False, - type=click.BOOL, -) enable_legacy_logger = click.option( "--enable-legacy-logger/--no-enable-legacy-logger", diff --git a/core/dbt/cli/types.py b/core/dbt/cli/types.py index 18285dd6374..14028a69451 100644 --- a/core/dbt/cli/types.py +++ b/core/dbt/cli/types.py @@ -24,8 +24,6 @@ class Command(Enum): SOURCE_FRESHNESS = "freshness" TEST = "test" RETRY = "retry" - DEPS_LOCK = "lock" - DEPS_ADD = "add" @classmethod def from_str(cls, s: str) -> "Command": @@ -39,6 +37,4 @@ def to_list(self) -> List[str]: Command.DOCS_GENERATE: ["docs", "generate"], Command.DOCS_SERVE: ["docs", "serve"], Command.SOURCE_FRESHNESS: ["source", "freshness"], - Command.DEPS_LOCK: ["deps", "lock"], - Command.DEPS_ADD: ["deps", "add"], }.get(self, [self.value]) diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index 69dcc3296fb..631de035670 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -1512,14 +1512,6 @@ def message(self) -> str: return f"Found duplicate package in packages.yml, removing: {self.removed_package}" -class DepsVersionMissing(InfoLevel): - def code(self): - return "M035" - - def message(self) -> str: - return f"Version is required to add a package when source is {self.source}" - - # ======================================================= # Q - Node execution # ======================================================= diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 6ae6fc92b11..3933bd25eed 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -26,7 +26,6 @@ DepsStartPackageInstall, DepsUpdateAvailable, DepsUpToDate, - DepsVersionMissing, Formatting, ) from dbt.clients import system @@ -36,6 +35,11 @@ from dbt.config import Project +class dbtPackageDumper(yaml.Dumper): + def increase_indent(self, flow=False, indentless=False): + return super(dbtPackageDumper, self).increase_indent(flow, False) + + def _create_sha1_hash(filepath): """Create a SHA1 hash of a file @@ -95,18 +99,6 @@ def __init__(self, args: Any, project: Project): move_to_nearest_project_dir(project.project_root) super().__init__(args=args, config=None, project=project) self.cli_vars = args.vars - # Check lock file exist and generated by the same pacakges.yml - # or dependencies.yml. - lock_file_path = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" - if not system.path_exists(lock_file_path): - LockTask(args, project).run() - else: - current_hash = _create_sha1_hash( - f"{self.project.project_root}/{self.project.packages_specified_path}" - ) - previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) - if previous_hash != current_hash: - LockTask(args, project).run() def track_package_install( self, package_name: str, source_type: str, version: Optional[str] @@ -129,6 +121,28 @@ def track_package_install( ) def run(self) -> None: + if self.args.ADD: + AddTask(self.args, self.project).run() + if self.args.dry_run: + return + else: + if self.args.dry_run: + raise dbt.exceptions.DbtRuntimeError( + "Invalid flag `--dry-run` when not using `--add`." + ) + # Check lock file exist and generated by the same pacakges.yml + # or dependencies.yml. + lock_file_path = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" + if not system.path_exists(lock_file_path): + LockTask(self.args, self.project).run() + else: + current_hash = _create_sha1_hash( + f"{self.project.project_root}/{self.project.packages_specified_path}" + ) + previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) + if previous_hash != current_hash: + LockTask(self.args, self.project).run() + if system.path_exists(self.project.packages_install_path): system.rmtree(self.project.packages_install_path) @@ -246,12 +260,12 @@ def run(self): packages_yml_filepath = f"{self.project.project_root}/packages.yml" if not system.path_exists(packages_yml_filepath): - fire_event(DepsNoPackagesFound()) - return + raise dbt.exceptions.DbtRuntimeError("No package.yml") if not self.args.version and self.args.source != "local": - fire_event(DepsVersionMissing(source=self.args.source)) - return + raise dbt.exceptions.DbtRuntimeError( + f"Version is required to add a package when source is {self.args.source}" + ) new_package_entry = _create_packages_yml_entry( self.args.package, self.args.version, self.args.source @@ -264,7 +278,9 @@ def run(self): if packages_yml: with open(packages_yml_filepath, "w") as pkg_obj: - yaml.safe_dump(packages_yml, pkg_obj) + pkg_obj.write( + yaml.dump(packages_yml, Dumper=dbtPackageDumper, default_flow_style=False) + ) fire_event( DepsAddPackage( diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index b7efa865ec5..e5dde5b0a15 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -283,7 +283,6 @@ def test_event_codes(self): types.DepsLockUpdating(lock_filepath=""), types.DepsAddPackage(package_name="", version="", packages_filepath=""), types.DepsFoundDuplicatePackage(removed_package={}), - types.DepsVersionMissing(source=""), types.SemanticValidationFailure(msg=""), # Q - Node execution ====================== types.RunningOperationCaughtError(exc=""), diff --git a/tests/unit/test_retry_commands.py b/tests/unit/test_retry_commands.py index f95c034785d..3eb151cb6a3 100644 --- a/tests/unit/test_retry_commands.py +++ b/tests/unit/test_retry_commands.py @@ -12,8 +12,6 @@ "retry", "show", "serve", - "add", - "lock", } From 96ba8ef7938d6b4757cda7261e43a1ded2a3c5f7 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 21 Aug 2023 16:54:50 +0800 Subject: [PATCH 17/27] nits --- core/dbt/task/deps.py | 232 ++++++++++++++++++++---------------------- 1 file changed, 113 insertions(+), 119 deletions(-) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 3933bd25eed..12070eab411 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -1,5 +1,5 @@ from hashlib import sha1 -from typing import Any, Optional +from typing import Any, Dict, Optional import yaml from pathlib import Path import dbt.utils @@ -120,90 +120,78 @@ def track_package_install( {"name": package_name, "source": source_type, "version": version}, ) - def run(self) -> None: - if self.args.ADD: - AddTask(self.args, self.project).run() - if self.args.dry_run: - return - else: - if self.args.dry_run: - raise dbt.exceptions.DbtRuntimeError( - "Invalid flag `--dry-run` when not using `--add`." - ) - # Check lock file exist and generated by the same pacakges.yml - # or dependencies.yml. - lock_file_path = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" - if not system.path_exists(lock_file_path): - LockTask(self.args, self.project).run() - else: - current_hash = _create_sha1_hash( - f"{self.project.project_root}/{self.project.packages_specified_path}" - ) - previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) - if previous_hash != current_hash: - LockTask(self.args, self.project).run() - - if system.path_exists(self.project.packages_install_path): - system.rmtree(self.project.packages_install_path) - - system.make_directory(self.project.packages_install_path) - - packages_lock_dict = load_yml_dict(f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}") + def check_for_duplicate_packages(self, packages_yml): + """Loop through contents of `packages.yml` to ensure no duplicate package names + versions. - packages_lock_config = package_config_from_data(packages_lock_dict).packages + This duplicate check will take into consideration exact match of a package name, as well as + a check to see if a package name exists within a name (i.e. a package name inside a git URL). - if not packages_lock_config: - fire_event(DepsNoPackagesFound()) - return + Args: + packages_yml (dict): In-memory read of `packages.yml` contents - with downloads_directory(): - lock_defined_deps = resolve_lock_packages(packages_lock_config) - renderer = DbtProjectYamlRenderer(None, self.cli_vars) + Returns: + dict: Updated or untouched packages_yml contents + """ + for i, pkg_entry in enumerate(packages_yml["packages"]): + for val in pkg_entry.values(): + if self.args.package in val: + del packages_yml["packages"][i] - packages_to_upgrade = [] + fire_event(DepsFoundDuplicatePackage(removed_package=pkg_entry)) - for package in lock_defined_deps: - package_name = package.name - source_type = package.source_type() - version = package.get_version() + return packages_yml - fire_event(DepsStartPackageInstall(package_name=package_name)) - package.install(self.project, renderer) + def add(self): + packages_yml_filepath = ( + f"{self.project.project_root}/{self.project.packages_specified_path}" + ) - fire_event(DepsInstallInfo(version_name=package.nice_version_name())) + if not system.path_exists(packages_yml_filepath): + raise dbt.exceptions.DbtRuntimeError("No packages definition file.") - if isinstance(package, RegistryPinnedPackage): - version_latest = package.get_version_latest() + if not self.args.version and self.args.source != "local": + raise dbt.exceptions.DbtRuntimeError( + f"Version is required to add a package when source is {self.args.source}" + ) - if version_latest != version: - packages_to_upgrade.append(package_name) - fire_event(DepsUpdateAvailable(version_latest=version_latest)) - else: - fire_event(DepsUpToDate()) + new_package_entry = _create_packages_yml_entry( + self.args.package, self.args.version, self.args.source + ) - if package.get_subdirectory(): - fire_event(DepsListSubdirectory(subdirectory=package.get_subdirectory())) + with open(packages_yml_filepath, "r") as user_yml_obj: + packages_yml = yaml.safe_load(user_yml_obj) + packages_yml = self.check_for_duplicate_packages(packages_yml) + packages_yml["packages"].append(new_package_entry) - self.track_package_install( - package_name=package_name, source_type=source_type, version=version + if packages_yml: + with open(packages_yml_filepath, "w") as pkg_obj: + pkg_obj.write( + yaml.dump(packages_yml, Dumper=dbtPackageDumper, default_flow_style=False) ) - if packages_to_upgrade: - fire_event(Formatting("")) - fire_event(DepsNotifyUpdatesAvailable(packages=packages_to_upgrade)) + fire_event( + DepsAddPackage( + package_name=self.args.package, + version=self.args.version, + packages_filepath=packages_yml_filepath, + ) + ) + if not self.args.dry_run: + fire_event( + DepsLockUpdating( + lock_filepath=f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" + ) + ) + self.lock() -class LockTask(BaseTask): - def __init__(self, args: Any, project: Project): - move_to_nearest_project_dir(project.project_root) - super().__init__(args=args, config=None, project=project) - self.cli_vars = args.vars + from typing import Dict, Any - def run(self): + def lock(self) -> None: lock_filepath = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" packages = self.project.packages.packages - packages_installed = {"packages": []} + packages_installed: Dict[str, Any] = {"packages": []} if not packages: fire_event(DepsNoPackagesFound()) @@ -228,72 +216,78 @@ def run(self): fire_event(DepsLockCreated(lock_filepath=lock_filepath)) + def run(self) -> None: + if self.args.ADD: + self.add() + else: + if self.args.dry_run: + raise dbt.exceptions.DbtRuntimeError( + "Invalid flag `--dry-run` when not using `--add`." + ) -class AddTask(BaseTask): - def __init__(self, args: Any, project: Project): - move_to_nearest_project_dir(project.project_root) - super().__init__(args=args, config=None, project=project) - self.cli_vars = args.vars + # Check lock file exist and generated by the same pacakges.yml + # or dependencies.yml. + lock_file_path = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" + if not system.path_exists(lock_file_path): + self.lock() + else: + # Check dependency definition is modified or not. + current_hash = _create_sha1_hash( + f"{self.project.project_root}/{self.project.packages_specified_path}" + ) + previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) + if previous_hash != current_hash: + self.lock() - def check_for_duplicate_packages(self, packages_yml): - """Loop through contents of `packages.yml` to ensure no duplicate package names + versions. + # Only specified when running add. + if self.args.dry_run: + return - This duplicate check will take into consideration exact match of a package name, as well as - a check to see if a package name exists within a name (i.e. a package name inside a git URL). + if system.path_exists(self.project.packages_install_path): + system.rmtree(self.project.packages_install_path) - Args: - packages_yml (dict): In-memory read of `packages.yml` contents + system.make_directory(self.project.packages_install_path) - Returns: - dict: Updated or untouched packages_yml contents - """ - for i, pkg_entry in enumerate(packages_yml["packages"]): - for val in pkg_entry.values(): - if self.args.package in val: - del packages_yml["packages"][i] + packages_lock_dict = load_yml_dict(f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}") - fire_event(DepsFoundDuplicatePackage(removed_package=pkg_entry)) + packages_lock_config = package_config_from_data(packages_lock_dict).packages - return packages_yml + if not packages_lock_config: + fire_event(DepsNoPackagesFound()) + return - def run(self): - packages_yml_filepath = f"{self.project.project_root}/packages.yml" + with downloads_directory(): + lock_defined_deps = resolve_lock_packages(packages_lock_config) + renderer = DbtProjectYamlRenderer(None, self.cli_vars) - if not system.path_exists(packages_yml_filepath): - raise dbt.exceptions.DbtRuntimeError("No package.yml") + packages_to_upgrade = [] - if not self.args.version and self.args.source != "local": - raise dbt.exceptions.DbtRuntimeError( - f"Version is required to add a package when source is {self.args.source}" - ) + for package in lock_defined_deps: + package_name = package.name + source_type = package.source_type() + version = package.get_version() - new_package_entry = _create_packages_yml_entry( - self.args.package, self.args.version, self.args.source - ) + fire_event(DepsStartPackageInstall(package_name=package_name)) + package.install(self.project, renderer) - with open(packages_yml_filepath, "r") as user_yml_obj: - packages_yml = yaml.safe_load(user_yml_obj) - packages_yml = self.check_for_duplicate_packages(packages_yml) - packages_yml["packages"].append(new_package_entry) + fire_event(DepsInstallInfo(version_name=package.nice_version_name())) - if packages_yml: - with open(packages_yml_filepath, "w") as pkg_obj: - pkg_obj.write( - yaml.dump(packages_yml, Dumper=dbtPackageDumper, default_flow_style=False) - ) + if isinstance(package, RegistryPinnedPackage): + version_latest = package.get_version_latest() - fire_event( - DepsAddPackage( - package_name=self.args.package, - version=self.args.version, - packages_filepath=packages_yml_filepath, - ) - ) + if version_latest != version: + packages_to_upgrade.append(package_name) + fire_event(DepsUpdateAvailable(version_latest=version_latest)) + else: + fire_event(DepsUpToDate()) - if not self.args.dry_run: - fire_event( - DepsLockUpdating( - lock_filepath=f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" + if package.get_subdirectory(): + fire_event(DepsListSubdirectory(subdirectory=package.get_subdirectory())) + + self.track_package_install( + package_name=package_name, source_type=source_type, version=version ) - ) - LockTask(self.args, self.project).run() + + if packages_to_upgrade: + fire_event(Formatting("")) + fire_event(DepsNotifyUpdatesAvailable(packages=packages_to_upgrade)) From f1da3e6dc7c1321f9ad127b803155fc30c9fe9f7 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 21 Aug 2023 17:21:47 +0800 Subject: [PATCH 18/27] add new param --- core/dbt/cli/main.py | 2 + core/dbt/cli/params.py | 16 +- core/dbt/events/types.proto | 16 +- core/dbt/events/types.py | 14 +- core/dbt/events/types_pb2.py | 666 +++++++++++++++++------------------ core/dbt/task/deps.py | 19 +- tests/unit/test_events.py | 1 - 7 files changed, 358 insertions(+), 376 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index fed0a263058..2c351ca8fa5 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -439,6 +439,8 @@ def debug(ctx, **kwargs): @p.package_version @p.source @p.dry_run +@p.lock +@p.upgrade @p.add_package @requires.postflight @requires.preflight diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index 171b9bdde28..87de724d5d2 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -78,7 +78,7 @@ dry_run = click.option( "--dry-run", envvar=None, - help="Option to run `dbt deps add` without updating package-lock.yml file.", + help="Option to run `dbt deps --add` without updating package-lock.yml file.", is_flag=True, ) @@ -133,6 +133,13 @@ default="eager", ) +lock = click.option( + "--lock", + envvar=None, + help="Generate the package-lock.yml file without install the packages.", + is_flag=True, +) + log_cache_events = click.option( "--log-cache-events/--no-log-cache-events", help="Enable verbose logging for relational cache events to help when debugging.", @@ -546,6 +553,13 @@ type=click.Path(), ) +upgrade = click.option( + "--upgrade", + envvar=None, + help="Upgrade packages to the latest version.", + is_flag=True, +) + debug_connection = click.option( "--connection", envvar=None, diff --git a/core/dbt/events/types.proto b/core/dbt/events/types.proto index 5fb5c87f4c3..9d5b48b26ae 100644 --- a/core/dbt/events/types.proto +++ b/core/dbt/events/types.proto @@ -1539,16 +1539,6 @@ message NoNodesForSelectionCriteriaMsg { } // M031 -message DepsLockCreated{ - string lock_filepath = 1; -} - -message DepsLockCreatedMsg{ - EventInfo info = 1; - DepsLockCreated data = 2; -} - -// M032 message DepsLockUpdating{ string lock_filepath = 1; } @@ -1558,7 +1548,7 @@ message DepsLockUpdatingMsg{ DepsLockUpdating data = 2; } -// M033 +// M032 message DepsAddPackage{ string package_name = 1; string version = 2; @@ -1570,7 +1560,7 @@ message DepsAddPackageMsg{ DepsAddPackage data = 2; } -//M034 +//M033 message DepsFoundDuplicatePackage{ map removed_package = 1; } @@ -1580,7 +1570,7 @@ message DepsFoundDuplicatePackageMsg{ DepsFoundDuplicatePackage data = 2; } -//M035 +//M034 message DepsVersionMissing{ string source = 1; } diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index 631de035670..56a1ac980cf 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -1480,17 +1480,9 @@ def message(self) -> str: return f"The selection criterion '{self.spec_raw}' does not match any nodes" -class DepsLockCreated(InfoLevel): - def code(self): - return "M031" - - def message(self) -> str: - return f"Created lock file in file path: {self.lock_filepath}" - - class DepsLockUpdating(InfoLevel): def code(self): - return "M032" + return "M031" def message(self) -> str: return f"Updating lock file in file path: {self.lock_filepath}" @@ -1498,7 +1490,7 @@ def message(self) -> str: class DepsAddPackage(InfoLevel): def code(self): - return "M033" + return "M032" def message(self) -> str: return f"Added new package {self.package_name}@{self.version} to {self.packages_filepath}" @@ -1506,7 +1498,7 @@ def message(self) -> str: class DepsFoundDuplicatePackage(InfoLevel): def code(self): - return "M034" + return "M033" def message(self) -> str: return f"Found duplicate package in packages.yml, removing: {self.removed_package}" diff --git a/core/dbt/events/types_pb2.py b/core/dbt/events/types_pb2.py index 2ff578ea363..f62752a9df1 100644 --- a/core/dbt/events/types_pb2.py +++ b/core/dbt/events/types_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btypes.proto\x12\x0bproto_types\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x91\x02\n\tEventInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\t\x12\x0b\n\x03msg\x18\x03 \x01(\t\x12\r\n\x05level\x18\x04 \x01(\t\x12\x15\n\rinvocation_id\x18\x05 \x01(\t\x12\x0b\n\x03pid\x18\x06 \x01(\x05\x12\x0e\n\x06thread\x18\x07 \x01(\t\x12&\n\x02ts\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x05\x65xtra\x18\t \x03(\x0b\x32!.proto_types.EventInfo.ExtraEntry\x12\x10\n\x08\x63\x61tegory\x18\n \x01(\t\x1a,\n\nExtraEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x7f\n\rTimingInfoMsg\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"V\n\x0cNodeRelation\x12\x10\n\x08\x64\x61tabase\x18\n \x01(\t\x12\x0e\n\x06schema\x18\x0b \x01(\t\x12\r\n\x05\x61lias\x18\x0c \x01(\t\x12\x15\n\rrelation_name\x18\r \x01(\t\"\x91\x02\n\x08NodeInfo\x12\x11\n\tnode_path\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x11\n\tunique_id\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x14\n\x0cmaterialized\x18\x05 \x01(\t\x12\x13\n\x0bnode_status\x18\x06 \x01(\t\x12\x17\n\x0fnode_started_at\x18\x07 \x01(\t\x12\x18\n\x10node_finished_at\x18\x08 \x01(\t\x12%\n\x04meta\x18\t \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\rnode_relation\x18\n \x01(\x0b\x32\x19.proto_types.NodeRelation\"\xd1\x01\n\x0cRunResultMsg\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12/\n\x0btiming_info\x18\x03 \x03(\x0b\x32\x1a.proto_types.TimingInfoMsg\x12\x0e\n\x06thread\x18\x04 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x31\n\x10\x61\x64\x61pter_response\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"G\n\x0fReferenceKeyMsg\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x12\n\nidentifier\x18\x03 \x01(\t\"6\n\x0eGenericMessage\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\"9\n\x11MainReportVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x13\n\x0blog_version\x18\x02 \x01(\x05\"j\n\x14MainReportVersionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.MainReportVersion\"r\n\x0eMainReportArgs\x12\x33\n\x04\x61rgs\x18\x01 \x03(\x0b\x32%.proto_types.MainReportArgs.ArgsEntry\x1a+\n\tArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11MainReportArgsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainReportArgs\"+\n\x15MainTrackingUserState\x12\x12\n\nuser_state\x18\x01 \x01(\t\"r\n\x18MainTrackingUserStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainTrackingUserState\"5\n\x0fMergedFromState\x12\x12\n\nnum_merged\x18\x01 \x01(\x05\x12\x0e\n\x06sample\x18\x02 \x03(\t\"f\n\x12MergedFromStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.MergedFromState\"A\n\x14MissingProfileTarget\x12\x14\n\x0cprofile_name\x18\x01 \x01(\t\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\"p\n\x17MissingProfileTargetMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MissingProfileTarget\"(\n\x11InvalidOptionYAML\x12\x13\n\x0boption_name\x18\x01 \x01(\t\"j\n\x14InvalidOptionYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.InvalidOptionYAML\"!\n\x12LogDbtProjectError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15LogDbtProjectErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProjectError\"3\n\x12LogDbtProfileError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08profiles\x18\x02 \x03(\t\"l\n\x15LogDbtProfileErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProfileError\"!\n\x12StarterProjectPath\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"l\n\x15StarterProjectPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StarterProjectPath\"$\n\x15\x43onfigFolderDirectory\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"r\n\x18\x43onfigFolderDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConfigFolderDirectory\"\'\n\x14NoSampleProfileFound\x12\x0f\n\x07\x61\x64\x61pter\x18\x01 \x01(\t\"p\n\x17NoSampleProfileFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NoSampleProfileFound\"6\n\x18ProfileWrittenWithSample\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"x\n\x1bProfileWrittenWithSampleMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProfileWrittenWithSample\"B\n$ProfileWrittenWithTargetTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x90\x01\n\'ProfileWrittenWithTargetTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.ProfileWrittenWithTargetTemplateYAML\"C\n%ProfileWrittenWithProjectTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x92\x01\n(ProfileWrittenWithProjectTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.ProfileWrittenWithProjectTemplateYAML\"\x12\n\x10SettingUpProfile\"h\n\x13SettingUpProfileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SettingUpProfile\"\x1c\n\x1aInvalidProfileTemplateYAML\"|\n\x1dInvalidProfileTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.InvalidProfileTemplateYAML\"(\n\x18ProjectNameAlreadyExists\x12\x0c\n\x04name\x18\x01 \x01(\t\"x\n\x1bProjectNameAlreadyExistsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProjectNameAlreadyExists\"K\n\x0eProjectCreated\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocs_url\x18\x02 \x01(\t\x12\x11\n\tslack_url\x18\x03 \x01(\t\"d\n\x11ProjectCreatedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ProjectCreated\"@\n\x1aPackageRedirectDeprecation\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1dPackageRedirectDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PackageRedirectDeprecation\"\x1f\n\x1dPackageInstallPathDeprecation\"\x82\x01\n PackageInstallPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.PackageInstallPathDeprecation\"H\n\x1b\x43onfigSourcePathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"~\n\x1e\x43onfigSourcePathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigSourcePathDeprecation\"F\n\x19\x43onfigDataPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"z\n\x1c\x43onfigDataPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConfigDataPathDeprecation\"?\n\x19\x41\x64\x61pterDeprecationWarning\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"z\n\x1c\x41\x64\x61pterDeprecationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.AdapterDeprecationWarning\".\n\x17MetricAttributesRenamed\x12\x13\n\x0bmetric_name\x18\x01 \x01(\t\"v\n\x1aMetricAttributesRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.MetricAttributesRenamed\"+\n\x17\x45xposureNameDeprecation\x12\x10\n\x08\x65xposure\x18\x01 \x01(\t\"v\n\x1a\x45xposureNameDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.ExposureNameDeprecation\"^\n\x13InternalDeprecation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x18\n\x10suggested_action\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"n\n\x16InternalDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.InternalDeprecation\"@\n\x1a\x45nvironmentVariableRenamed\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1d\x45nvironmentVariableRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.EnvironmentVariableRenamed\"3\n\x18\x43onfigLogPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"x\n\x1b\x43onfigLogPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ConfigLogPathDeprecation\"6\n\x1b\x43onfigTargetPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"~\n\x1e\x43onfigTargetPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigTargetPathDeprecation\"!\n\x1f\x43ollectFreshnessReturnSignature\"\x86\x01\n\"CollectFreshnessReturnSignatureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.CollectFreshnessReturnSignature\"\x87\x01\n\x11\x41\x64\x61pterEventDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"j\n\x14\x41\x64\x61pterEventDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventDebug\"\x86\x01\n\x10\x41\x64\x61pterEventInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"h\n\x13\x41\x64\x61pterEventInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.AdapterEventInfo\"\x89\x01\n\x13\x41\x64\x61pterEventWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"n\n\x16\x41\x64\x61pterEventWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.AdapterEventWarning\"\x99\x01\n\x11\x41\x64\x61pterEventError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x10\n\x08\x65xc_info\x18\x05 \x01(\t\"j\n\x14\x41\x64\x61pterEventErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventError\"_\n\rNewConnection\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"b\n\x10NewConnectionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NewConnection\"=\n\x10\x43onnectionReused\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x16\n\x0eorig_conn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionReusedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionReused\"0\n\x1b\x43onnectionLeftOpenInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"~\n\x1e\x43onnectionLeftOpenInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConnectionLeftOpenInCleanup\".\n\x19\x43onnectionClosedInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"z\n\x1c\x43onnectionClosedInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConnectionClosedInCleanup\"_\n\x0eRollbackFailed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"d\n\x11RollbackFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RollbackFailed\"O\n\x10\x43onnectionClosed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionClosedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionClosed\"Q\n\x12\x43onnectionLeftOpen\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"l\n\x15\x43onnectionLeftOpenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ConnectionLeftOpen\"G\n\x08Rollback\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"X\n\x0bRollbackMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.Rollback\"@\n\tCacheMiss\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\"Z\n\x0c\x43\x61\x63heMissMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.CacheMiss\"b\n\rListRelations\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12/\n\trelations\x18\x03 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10ListRelationsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ListRelations\"`\n\x0e\x43onnectionUsed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"d\n\x11\x43onnectionUsedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ConnectionUsed\"T\n\x08SQLQuery\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x0b\n\x03sql\x18\x03 \x01(\t\"X\n\x0bSQLQueryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.SQLQuery\"[\n\x0eSQLQueryStatus\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x03 \x01(\x02\"d\n\x11SQLQueryStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SQLQueryStatus\"H\n\tSQLCommit\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"Z\n\x0cSQLCommitMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.SQLCommit\"a\n\rColTypeChange\x12\x11\n\torig_type\x18\x01 \x01(\t\x12\x10\n\x08new_type\x18\x02 \x01(\t\x12+\n\x05table\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10\x43olTypeChangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ColTypeChange\"@\n\x0eSchemaCreation\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"d\n\x11SchemaCreationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SchemaCreation\"<\n\nSchemaDrop\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"\\\n\rSchemaDropMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SchemaDrop\"\xde\x01\n\x0b\x43\x61\x63heAction\x12\x0e\n\x06\x61\x63tion\x18\x01 \x01(\t\x12-\n\x07ref_key\x18\x02 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_2\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_3\x18\x04 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12.\n\x08ref_list\x18\x05 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"^\n\x0e\x43\x61\x63heActionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.CacheAction\"\x98\x01\n\x0e\x43\x61\x63heDumpGraph\x12\x33\n\x04\x64ump\x18\x01 \x03(\x0b\x32%.proto_types.CacheDumpGraph.DumpEntry\x12\x14\n\x0c\x62\x65\x66ore_after\x18\x02 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x03 \x01(\t\x1a+\n\tDumpEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11\x43\x61\x63heDumpGraphMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CacheDumpGraph\"B\n\x11\x41\x64\x61pterRegistered\x12\x14\n\x0c\x61\x64\x61pter_name\x18\x01 \x01(\t\x12\x17\n\x0f\x61\x64\x61pter_version\x18\x02 \x01(\t\"j\n\x14\x41\x64\x61pterRegisteredMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterRegistered\"!\n\x12\x41\x64\x61pterImportError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15\x41\x64\x61pterImportErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.AdapterImportError\"#\n\x0fPluginLoadError\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"f\n\x12PluginLoadErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.PluginLoadError\"Z\n\x14NewConnectionOpening\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x18\n\x10\x63onnection_state\x18\x02 \x01(\t\"p\n\x17NewConnectionOpeningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NewConnectionOpening\"8\n\rCodeExecution\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x14\n\x0c\x63ode_content\x18\x02 \x01(\t\"b\n\x10\x43odeExecutionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.CodeExecution\"6\n\x13\x43odeExecutionStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x02 \x01(\x02\"n\n\x16\x43odeExecutionStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.CodeExecutionStatus\"%\n\x16\x43\x61talogGenerationError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"t\n\x19\x43\x61talogGenerationErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.CatalogGenerationError\"-\n\x13WriteCatalogFailure\x12\x16\n\x0enum_exceptions\x18\x01 \x01(\x05\"n\n\x16WriteCatalogFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.WriteCatalogFailure\"\x1e\n\x0e\x43\x61talogWritten\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43\x61talogWrittenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CatalogWritten\"\x14\n\x12\x43\x61nnotGenerateDocs\"l\n\x15\x43\x61nnotGenerateDocsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.CannotGenerateDocs\"\x11\n\x0f\x42uildingCatalog\"f\n\x12\x42uildingCatalogMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.BuildingCatalog\"-\n\x18\x44\x61tabaseErrorRunningHook\x12\x11\n\thook_type\x18\x01 \x01(\t\"x\n\x1b\x44\x61tabaseErrorRunningHookMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DatabaseErrorRunningHook\"4\n\x0cHooksRunning\x12\x11\n\tnum_hooks\x18\x01 \x01(\x05\x12\x11\n\thook_type\x18\x02 \x01(\t\"`\n\x0fHooksRunningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.HooksRunning\"T\n\x14\x46inishedRunningStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\x12\x11\n\texecution\x18\x02 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x03 \x01(\x02\"p\n\x17\x46inishedRunningStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.FinishedRunningStats\"<\n\x15\x43onstraintNotEnforced\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"r\n\x18\x43onstraintNotEnforcedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConstraintNotEnforced\"=\n\x16\x43onstraintNotSupported\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"t\n\x19\x43onstraintNotSupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.ConstraintNotSupported\"7\n\x12InputFileDiffError\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"l\n\x15InputFileDiffErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InputFileDiffError\"?\n\x14InvalidValueForField\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_value\x18\x02 \x01(\t\"p\n\x17InvalidValueForFieldMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.InvalidValueForField\"Q\n\x11ValidationWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12\x11\n\tnode_name\x18\x03 \x01(\t\"j\n\x14ValidationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ValidationWarning\"!\n\x11ParsePerfInfoPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"j\n\x14ParsePerfInfoPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ParsePerfInfoPath\"1\n!PartialParsingErrorProcessingFile\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\"\x8a\x01\n$PartialParsingErrorProcessingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.PartialParsingErrorProcessingFile\"\x86\x01\n\x13PartialParsingError\x12?\n\x08\x65xc_info\x18\x01 \x03(\x0b\x32-.proto_types.PartialParsingError.ExcInfoEntry\x1a.\n\x0c\x45xcInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x16PartialParsingErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.PartialParsingError\"\x1b\n\x19PartialParsingSkipParsing\"z\n\x1cPartialParsingSkipParsingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.PartialParsingSkipParsing\"&\n\x14UnableToPartialParse\x12\x0e\n\x06reason\x18\x01 \x01(\t\"p\n\x17UnableToPartialParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.UnableToPartialParse\"f\n\x12StateCheckVarsHash\x12\x10\n\x08\x63hecksum\x18\x01 \x01(\t\x12\x0c\n\x04vars\x18\x02 \x01(\t\x12\x0f\n\x07profile\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\"l\n\x15StateCheckVarsHashMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StateCheckVarsHash\"\x1a\n\x18PartialParsingNotEnabled\"x\n\x1bPartialParsingNotEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.PartialParsingNotEnabled\"C\n\x14ParsedFileLoadFailed\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"p\n\x17ParsedFileLoadFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParsedFileLoadFailed\"H\n\x15PartialParsingEnabled\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x05\x12\r\n\x05\x61\x64\x64\x65\x64\x18\x02 \x01(\x05\x12\x0f\n\x07\x63hanged\x18\x03 \x01(\x05\"r\n\x18PartialParsingEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.PartialParsingEnabled\"8\n\x12PartialParsingFile\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x11\n\toperation\x18\x02 \x01(\t\"l\n\x15PartialParsingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.PartialParsingFile\"\xaf\x01\n\x1fInvalidDisabledTargetInTestNode\x12\x1b\n\x13resource_type_title\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1a\n\x12original_file_path\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\x12\x13\n\x0btarget_name\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\"\x86\x01\n\"InvalidDisabledTargetInTestNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.InvalidDisabledTargetInTestNode\"7\n\x18UnusedResourceConfigPath\x12\x1b\n\x13unused_config_paths\x18\x01 \x03(\t\"x\n\x1bUnusedResourceConfigPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.UnusedResourceConfigPath\"3\n\rSeedIncreased\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"b\n\x10SeedIncreasedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.SeedIncreased\">\n\x18SeedExceedsLimitSamePath\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"x\n\x1bSeedExceedsLimitSamePathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.SeedExceedsLimitSamePath\"D\n\x1eSeedExceedsLimitAndPathChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x84\x01\n!SeedExceedsLimitAndPathChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.SeedExceedsLimitAndPathChanged\"\\\n\x1fSeedExceedsLimitChecksumChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rchecksum_name\x18\x03 \x01(\t\"\x86\x01\n\"SeedExceedsLimitChecksumChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SeedExceedsLimitChecksumChanged\"%\n\x0cUnusedTables\x12\x15\n\runused_tables\x18\x01 \x03(\t\"`\n\x0fUnusedTablesMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.UnusedTables\"\x87\x01\n\x17WrongResourceSchemaFile\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x1c\n\x14plural_resource_type\x18\x03 \x01(\t\x12\x10\n\x08yaml_key\x18\x04 \x01(\t\x12\x11\n\tfile_path\x18\x05 \x01(\t\"v\n\x1aWrongResourceSchemaFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.WrongResourceSchemaFile\"K\n\x10NoNodeForYamlKey\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x10\n\x08yaml_key\x18\x02 \x01(\t\x12\x11\n\tfile_path\x18\x03 \x01(\t\"h\n\x13NoNodeForYamlKeyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.NoNodeForYamlKey\"+\n\x15MacroNotFoundForPatch\x12\x12\n\npatch_name\x18\x01 \x01(\t\"r\n\x18MacroNotFoundForPatchMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MacroNotFoundForPatch\"\xb8\x01\n\x16NodeNotFoundOrDisabled\x12\x1a\n\x12original_file_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1b\n\x13resource_type_title\x18\x03 \x01(\t\x12\x13\n\x0btarget_name\x18\x04 \x01(\t\x12\x13\n\x0btarget_kind\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\x12\x10\n\x08\x64isabled\x18\x07 \x01(\t\"t\n\x19NodeNotFoundOrDisabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.NodeNotFoundOrDisabled\"H\n\x0fJinjaLogWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"f\n\x12JinjaLogWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.JinjaLogWarning\"E\n\x0cJinjaLogInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"`\n\x0fJinjaLogInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.JinjaLogInfo\"F\n\rJinjaLogDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"b\n\x10JinjaLogDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.JinjaLogDebug\"\xae\x01\n\x1eUnpinnedRefNewVersionAvailable\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rref_node_name\x18\x02 \x01(\t\x12\x18\n\x10ref_node_package\x18\x03 \x01(\t\x12\x18\n\x10ref_node_version\x18\x04 \x01(\t\x12\x17\n\x0fref_max_version\x18\x05 \x01(\t\"\x84\x01\n!UnpinnedRefNewVersionAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.UnpinnedRefNewVersionAvailable\"V\n\x0f\x44\x65precatedModel\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x15\n\rmodel_version\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65precation_date\x18\x03 \x01(\t\"f\n\x12\x44\x65precatedModelMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DeprecatedModel\"\xc6\x01\n\x1cUpcomingReferenceDeprecation\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"\x80\x01\n\x1fUpcomingReferenceDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x37\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32).proto_types.UpcomingReferenceDeprecation\"\xbd\x01\n\x13\x44\x65precatedReference\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"n\n\x16\x44\x65precatedReferenceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DeprecatedReference\"<\n$UnsupportedConstraintMaterialization\x12\x14\n\x0cmaterialized\x18\x01 \x01(\t\"\x90\x01\n\'UnsupportedConstraintMaterializationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.UnsupportedConstraintMaterialization\"M\n\x14ParseInlineNodeError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"p\n\x17ParseInlineNodeErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParseInlineNodeError\"(\n\x19SemanticValidationFailure\x12\x0b\n\x03msg\x18\x02 \x01(\t\"z\n\x1cSemanticValidationFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.SemanticValidationFailure\"/\n\x1dGitSparseCheckoutSubdirectory\x12\x0e\n\x06subdir\x18\x01 \x01(\t\"\x82\x01\n GitSparseCheckoutSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.GitSparseCheckoutSubdirectory\"/\n\x1bGitProgressCheckoutRevision\x12\x10\n\x08revision\x18\x01 \x01(\t\"~\n\x1eGitProgressCheckoutRevisionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.GitProgressCheckoutRevision\"4\n%GitProgressUpdatingExistingDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x92\x01\n(GitProgressUpdatingExistingDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.GitProgressUpdatingExistingDependency\".\n\x1fGitProgressPullingNewDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x86\x01\n\"GitProgressPullingNewDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressPullingNewDependency\"\x1d\n\x0eGitNothingToDo\x12\x0b\n\x03sha\x18\x01 \x01(\t\"d\n\x11GitNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.GitNothingToDo\"E\n\x1fGitProgressUpdatedCheckoutRange\x12\x11\n\tstart_sha\x18\x01 \x01(\t\x12\x0f\n\x07\x65nd_sha\x18\x02 \x01(\t\"\x86\x01\n\"GitProgressUpdatedCheckoutRangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressUpdatedCheckoutRange\"*\n\x17GitProgressCheckedOutAt\x12\x0f\n\x07\x65nd_sha\x18\x01 \x01(\t\"v\n\x1aGitProgressCheckedOutAtMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.GitProgressCheckedOutAt\")\n\x1aRegistryProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"|\n\x1dRegistryProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.RegistryProgressGETRequest\"=\n\x1bRegistryProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"~\n\x1eRegistryProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RegistryProgressGETResponse\"_\n\x1dSelectorReportInvalidSelector\x12\x17\n\x0fvalid_selectors\x18\x01 \x01(\t\x12\x13\n\x0bspec_method\x18\x02 \x01(\t\x12\x10\n\x08raw_spec\x18\x03 \x01(\t\"\x82\x01\n SelectorReportInvalidSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.SelectorReportInvalidSelector\"\x15\n\x13\x44\x65psNoPackagesFound\"n\n\x16\x44\x65psNoPackagesFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsNoPackagesFound\"/\n\x17\x44\x65psStartPackageInstall\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\"v\n\x1a\x44\x65psStartPackageInstallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsStartPackageInstall\"\'\n\x0f\x44\x65psInstallInfo\x12\x14\n\x0cversion_name\x18\x01 \x01(\t\"f\n\x12\x44\x65psInstallInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DepsInstallInfo\"-\n\x13\x44\x65psUpdateAvailable\x12\x16\n\x0eversion_latest\x18\x01 \x01(\t\"n\n\x16\x44\x65psUpdateAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsUpdateAvailable\"\x0e\n\x0c\x44\x65psUpToDate\"`\n\x0f\x44\x65psUpToDateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUpToDate\",\n\x14\x44\x65psListSubdirectory\x12\x14\n\x0csubdirectory\x18\x01 \x01(\t\"p\n\x17\x44\x65psListSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.DepsListSubdirectory\".\n\x1a\x44\x65psNotifyUpdatesAvailable\x12\x10\n\x08packages\x18\x01 \x03(\t\"|\n\x1d\x44\x65psNotifyUpdatesAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.DepsNotifyUpdatesAvailable\"1\n\x11RetryExternalCall\x12\x0f\n\x07\x61ttempt\x18\x01 \x01(\x05\x12\x0b\n\x03max\x18\x02 \x01(\x05\"j\n\x14RetryExternalCallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.RetryExternalCall\"#\n\x14RecordRetryException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17RecordRetryExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.RecordRetryException\".\n\x1fRegistryIndexProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x86\x01\n\"RegistryIndexProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryIndexProgressGETRequest\"B\n RegistryIndexProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"\x88\x01\n#RegistryIndexProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.RegistryIndexProgressGETResponse\"2\n\x1eRegistryResponseUnexpectedType\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseUnexpectedTypeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseUnexpectedType\"2\n\x1eRegistryResponseMissingTopKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseMissingTopKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseMissingTopKeys\"5\n!RegistryResponseMissingNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x8a\x01\n$RegistryResponseMissingNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.RegistryResponseMissingNestedKeys\"3\n\x1fRegistryResponseExtraNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x86\x01\n\"RegistryResponseExtraNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryResponseExtraNestedKeys\"(\n\x18\x44\x65psSetDownloadDirectory\x12\x0c\n\x04path\x18\x01 \x01(\t\"x\n\x1b\x44\x65psSetDownloadDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsSetDownloadDirectory\"-\n\x0c\x44\x65psUnpinned\x12\x10\n\x08revision\x18\x01 \x01(\t\x12\x0b\n\x03git\x18\x02 \x01(\t\"`\n\x0f\x44\x65psUnpinnedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUnpinned\"/\n\x1bNoNodesForSelectionCriteria\x12\x10\n\x08spec_raw\x18\x01 \x01(\t\"~\n\x1eNoNodesForSelectionCriteriaMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.NoNodesForSelectionCriteria\"(\n\x0f\x44\x65psLockCreated\x12\x15\n\rlock_filepath\x18\x01 \x01(\t\"f\n\x12\x44\x65psLockCreatedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DepsLockCreated\")\n\x10\x44\x65psLockUpdating\x12\x15\n\rlock_filepath\x18\x01 \x01(\t\"h\n\x13\x44\x65psLockUpdatingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.DepsLockUpdating\"R\n\x0e\x44\x65psAddPackage\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x19\n\x11packages_filepath\x18\x03 \x01(\t\"d\n\x11\x44\x65psAddPackageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DepsAddPackage\"\xa7\x01\n\x19\x44\x65psFoundDuplicatePackage\x12S\n\x0fremoved_package\x18\x01 \x03(\x0b\x32:.proto_types.DepsFoundDuplicatePackage.RemovedPackageEntry\x1a\x35\n\x13RemovedPackageEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"z\n\x1c\x44\x65psFoundDuplicatePackageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.DepsFoundDuplicatePackage\"$\n\x12\x44\x65psVersionMissing\x12\x0e\n\x06source\x18\x01 \x01(\t\"l\n\x15\x44\x65psVersionMissingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.DepsVersionMissing\"*\n\x1bRunningOperationCaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"~\n\x1eRunningOperationCaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RunningOperationCaughtError\"\x11\n\x0f\x43ompileComplete\"f\n\x12\x43ompileCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.CompileComplete\"\x18\n\x16\x46reshnessCheckComplete\"t\n\x19\x46reshnessCheckCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.FreshnessCheckComplete\"\x1c\n\nSeedHeader\x12\x0e\n\x06header\x18\x01 \x01(\t\"\\\n\rSeedHeaderMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SeedHeader\"3\n\x12SQLRunnerException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x02 \x01(\t\"l\n\x15SQLRunnerExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SQLRunnerException\"\xa8\x01\n\rLogTestResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\x12\n\nnum_models\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"b\n\x10LogTestResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogTestResult\"k\n\x0cLogStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"`\n\x0fLogStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.LogStartLine\"\x95\x01\n\x0eLogModelResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogModelResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogModelResult\"\xfa\x01\n\x11LogSnapshotResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x34\n\x03\x63\x66g\x18\x07 \x03(\x0b\x32\'.proto_types.LogSnapshotResult.CfgEntry\x1a*\n\x08\x43\x66gEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"j\n\x14LogSnapshotResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.LogSnapshotResult\"\xb9\x01\n\rLogSeedResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x16\n\x0eresult_message\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x0e\n\x06schema\x18\x07 \x01(\t\x12\x10\n\x08relation\x18\x08 \x01(\t\"b\n\x10LogSeedResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogSeedResult\"\xad\x01\n\x12LogFreshnessResult\x12\x0e\n\x06status\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x13\n\x0bsource_name\x18\x06 \x01(\t\x12\x12\n\ntable_name\x18\x07 \x01(\t\"l\n\x15LogFreshnessResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogFreshnessResult\"\"\n\rLogCancelLine\x12\x11\n\tconn_name\x18\x01 \x01(\t\"b\n\x10LogCancelLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogCancelLine\"\x1f\n\x0f\x44\x65\x66\x61ultSelector\x12\x0c\n\x04name\x18\x01 \x01(\t\"f\n\x12\x44\x65\x66\x61ultSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DefaultSelector\"5\n\tNodeStart\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"Z\n\x0cNodeStartMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.NodeStart\"g\n\x0cNodeFinished\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12-\n\nrun_result\x18\x02 \x01(\x0b\x32\x19.proto_types.RunResultMsg\"`\n\x0fNodeFinishedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.NodeFinished\"+\n\x1bQueryCancelationUnsupported\x12\x0c\n\x04type\x18\x01 \x01(\t\"~\n\x1eQueryCancelationUnsupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.QueryCancelationUnsupported\"O\n\x0f\x43oncurrencyLine\x12\x13\n\x0bnum_threads\x18\x01 \x01(\x05\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\x12\x12\n\nnode_count\x18\x03 \x01(\x05\"f\n\x12\x43oncurrencyLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ConcurrencyLine\"E\n\x19WritingInjectedSQLForNode\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1cWritingInjectedSQLForNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.WritingInjectedSQLForNode\"9\n\rNodeCompiling\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeCompilingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeCompiling\"9\n\rNodeExecuting\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeExecutingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeExecuting\"m\n\x10LogHookStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"h\n\x13LogHookStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.LogHookStartLine\"\x93\x01\n\x0eLogHookEndLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogHookEndLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogHookEndLine\"\x93\x01\n\x0fSkippingDetails\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\x12\x11\n\tnode_name\x18\x04 \x01(\t\x12\r\n\x05index\x18\x05 \x01(\x05\x12\r\n\x05total\x18\x06 \x01(\x05\"f\n\x12SkippingDetailsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SkippingDetails\"\r\n\x0bNothingToDo\"^\n\x0eNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.NothingToDo\",\n\x1dRunningOperationUncaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"\x82\x01\n RunningOperationUncaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.RunningOperationUncaughtError\"\x93\x01\n\x0c\x45ndRunResult\x12*\n\x07results\x18\x01 \x03(\x0b\x32\x19.proto_types.RunResultMsg\x12\x14\n\x0c\x65lapsed_time\x18\x02 \x01(\x02\x12\x30\n\x0cgenerated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07success\x18\x04 \x01(\x08\"`\n\x0f\x45ndRunResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.EndRunResult\"\x11\n\x0fNoNodesSelected\"f\n\x12NoNodesSelectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.NoNodesSelected\"w\n\x10\x43ommandCompleted\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07\x65lapsed\x18\x04 \x01(\x02\"h\n\x13\x43ommandCompletedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.CommandCompleted\"k\n\x08ShowNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0f\n\x07preview\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"X\n\x0bShowNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.ShowNode\"p\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"`\n\x0f\x43ompiledNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.CompiledNode\"b\n\x17\x43\x61tchableExceptionOnRun\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"v\n\x1a\x43\x61tchableExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.CatchableExceptionOnRun\"5\n\x12InternalErrorOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"l\n\x15InternalErrorOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InternalErrorOnRun\"K\n\x15GenericExceptionOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"r\n\x18GenericExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.GenericExceptionOnRun\"N\n\x1aNodeConnectionReleaseError\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"|\n\x1dNodeConnectionReleaseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.NodeConnectionReleaseError\"\x1f\n\nFoundStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\"\\\n\rFoundStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.FoundStats\"\x17\n\x15MainKeyboardInterrupt\"r\n\x18MainKeyboardInterruptMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainKeyboardInterrupt\"#\n\x14MainEncounteredError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17MainEncounteredErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MainEncounteredError\"%\n\x0eMainStackTrace\x12\x13\n\x0bstack_trace\x18\x01 \x01(\t\"d\n\x11MainStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainStackTrace\"@\n\x13SystemCouldNotWrite\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"n\n\x16SystemCouldNotWriteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.SystemCouldNotWrite\"!\n\x12SystemExecutingCmd\x12\x0b\n\x03\x63md\x18\x01 \x03(\t\"l\n\x15SystemExecutingCmdMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SystemExecutingCmd\"\x1c\n\x0cSystemStdOut\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdOut\"\x1c\n\x0cSystemStdErr\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdErrMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdErr\",\n\x16SystemReportReturnCode\x12\x12\n\nreturncode\x18\x01 \x01(\x05\"t\n\x19SystemReportReturnCodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.SystemReportReturnCode\"p\n\x13TimingInfoCollected\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12/\n\x0btiming_info\x18\x02 \x01(\x0b\x32\x1a.proto_types.TimingInfoMsg\"n\n\x16TimingInfoCollectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.TimingInfoCollected\"&\n\x12LogDebugStackTrace\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"l\n\x15LogDebugStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDebugStackTrace\"\x1e\n\x0e\x43heckCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43heckCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CheckCleanPath\" \n\x10\x43onfirmCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"h\n\x13\x43onfirmCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConfirmCleanPath\"\"\n\x12ProtectedCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"l\n\x15ProtectedCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ProtectedCleanPath\"\x14\n\x12\x46inishedCleanPaths\"l\n\x15\x46inishedCleanPathsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FinishedCleanPaths\"5\n\x0bOpenCommand\x12\x10\n\x08open_cmd\x18\x01 \x01(\t\x12\x14\n\x0cprofiles_dir\x18\x02 \x01(\t\"^\n\x0eOpenCommandMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.OpenCommand\"\x19\n\nFormatting\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rFormattingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.Formatting\"0\n\x0fServingDocsPort\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"f\n\x12ServingDocsPortMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ServingDocsPort\"%\n\x15ServingDocsAccessInfo\x12\x0c\n\x04port\x18\x01 \x01(\t\"r\n\x18ServingDocsAccessInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ServingDocsAccessInfo\"\x15\n\x13ServingDocsExitInfo\"n\n\x16ServingDocsExitInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.ServingDocsExitInfo\"J\n\x10RunResultWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultWarning\"J\n\x10RunResultFailure\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultFailure\"k\n\tStatsLine\x12\x30\n\x05stats\x18\x01 \x03(\x0b\x32!.proto_types.StatsLine.StatsEntry\x1a,\n\nStatsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"Z\n\x0cStatsLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.StatsLine\"\x1d\n\x0eRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11RunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RunResultError\")\n\x17RunResultErrorNoMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\"v\n\x1aRunResultErrorNoMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultErrorNoMessage\"\x1f\n\x0fSQLCompiledPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"f\n\x12SQLCompiledPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SQLCompiledPath\"-\n\x14\x43heckNodeTestFailure\x12\x15\n\rrelation_name\x18\x01 \x01(\t\"p\n\x17\x43heckNodeTestFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.CheckNodeTestFailure\"W\n\x0f\x45ndOfRunSummary\x12\x12\n\nnum_errors\x18\x01 \x01(\x05\x12\x14\n\x0cnum_warnings\x18\x02 \x01(\x05\x12\x1a\n\x12keyboard_interrupt\x18\x03 \x01(\x08\"f\n\x12\x45ndOfRunSummaryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.EndOfRunSummary\"U\n\x13LogSkipBecauseError\x12\x0e\n\x06schema\x18\x01 \x01(\t\x12\x10\n\x08relation\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"n\n\x16LogSkipBecauseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.LogSkipBecauseError\"\x14\n\x12\x45nsureGitInstalled\"l\n\x15\x45nsureGitInstalledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.EnsureGitInstalled\"\x1a\n\x18\x44\x65psCreatingLocalSymlink\"x\n\x1b\x44\x65psCreatingLocalSymlinkMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsCreatingLocalSymlink\"\x19\n\x17\x44\x65psSymlinkNotAvailable\"v\n\x1a\x44\x65psSymlinkNotAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsSymlinkNotAvailable\"\x11\n\x0f\x44isableTracking\"f\n\x12\x44isableTrackingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DisableTracking\"\x1e\n\x0cSendingEvent\x12\x0e\n\x06kwargs\x18\x01 \x01(\t\"`\n\x0fSendingEventMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SendingEvent\"\x12\n\x10SendEventFailure\"h\n\x13SendEventFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SendEventFailure\"\r\n\x0b\x46lushEvents\"^\n\x0e\x46lushEventsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.FlushEvents\"\x14\n\x12\x46lushEventsFailure\"l\n\x15\x46lushEventsFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FlushEventsFailure\"-\n\x19TrackingInitializeFailure\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"z\n\x1cTrackingInitializeFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.TrackingInitializeFailure\"&\n\x17RunResultWarningMessage\x12\x0b\n\x03msg\x18\x01 \x01(\t\"v\n\x1aRunResultWarningMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultWarningMessage\"\x1a\n\x0b\x44\x65\x62ugCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"^\n\x0e\x44\x65\x62ugCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.DebugCmdOut\"\x1d\n\x0e\x44\x65\x62ugCmdResult\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11\x44\x65\x62ugCmdResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DebugCmdResult\"\x19\n\nListCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rListCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.ListCmdOut\"\x13\n\x04Note\x12\x0b\n\x03msg\x18\x01 \x01(\t\"P\n\x07NoteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x11.proto_types.Noteb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btypes.proto\x12\x0bproto_types\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x91\x02\n\tEventInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x63ode\x18\x02 \x01(\t\x12\x0b\n\x03msg\x18\x03 \x01(\t\x12\r\n\x05level\x18\x04 \x01(\t\x12\x15\n\rinvocation_id\x18\x05 \x01(\t\x12\x0b\n\x03pid\x18\x06 \x01(\x05\x12\x0e\n\x06thread\x18\x07 \x01(\t\x12&\n\x02ts\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x05\x65xtra\x18\t \x03(\x0b\x32!.proto_types.EventInfo.ExtraEntry\x12\x10\n\x08\x63\x61tegory\x18\n \x01(\t\x1a,\n\nExtraEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x7f\n\rTimingInfoMsg\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\nstarted_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"V\n\x0cNodeRelation\x12\x10\n\x08\x64\x61tabase\x18\n \x01(\t\x12\x0e\n\x06schema\x18\x0b \x01(\t\x12\r\n\x05\x61lias\x18\x0c \x01(\t\x12\x15\n\rrelation_name\x18\r \x01(\t\"\x91\x02\n\x08NodeInfo\x12\x11\n\tnode_path\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x11\n\tunique_id\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x14\n\x0cmaterialized\x18\x05 \x01(\t\x12\x13\n\x0bnode_status\x18\x06 \x01(\t\x12\x17\n\x0fnode_started_at\x18\x07 \x01(\t\x12\x18\n\x10node_finished_at\x18\x08 \x01(\t\x12%\n\x04meta\x18\t \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\rnode_relation\x18\n \x01(\x0b\x32\x19.proto_types.NodeRelation\"\xd1\x01\n\x0cRunResultMsg\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12/\n\x0btiming_info\x18\x03 \x03(\x0b\x32\x1a.proto_types.TimingInfoMsg\x12\x0e\n\x06thread\x18\x04 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x31\n\x10\x61\x64\x61pter_response\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"G\n\x0fReferenceKeyMsg\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x12\n\nidentifier\x18\x03 \x01(\t\"6\n\x0eGenericMessage\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\"9\n\x11MainReportVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x13\n\x0blog_version\x18\x02 \x01(\x05\"j\n\x14MainReportVersionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.MainReportVersion\"r\n\x0eMainReportArgs\x12\x33\n\x04\x61rgs\x18\x01 \x03(\x0b\x32%.proto_types.MainReportArgs.ArgsEntry\x1a+\n\tArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11MainReportArgsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainReportArgs\"+\n\x15MainTrackingUserState\x12\x12\n\nuser_state\x18\x01 \x01(\t\"r\n\x18MainTrackingUserStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainTrackingUserState\"5\n\x0fMergedFromState\x12\x12\n\nnum_merged\x18\x01 \x01(\x05\x12\x0e\n\x06sample\x18\x02 \x03(\t\"f\n\x12MergedFromStateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.MergedFromState\"A\n\x14MissingProfileTarget\x12\x14\n\x0cprofile_name\x18\x01 \x01(\t\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\"p\n\x17MissingProfileTargetMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MissingProfileTarget\"(\n\x11InvalidOptionYAML\x12\x13\n\x0boption_name\x18\x01 \x01(\t\"j\n\x14InvalidOptionYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.InvalidOptionYAML\"!\n\x12LogDbtProjectError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15LogDbtProjectErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProjectError\"3\n\x12LogDbtProfileError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08profiles\x18\x02 \x03(\t\"l\n\x15LogDbtProfileErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDbtProfileError\"!\n\x12StarterProjectPath\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"l\n\x15StarterProjectPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StarterProjectPath\"$\n\x15\x43onfigFolderDirectory\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"r\n\x18\x43onfigFolderDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConfigFolderDirectory\"\'\n\x14NoSampleProfileFound\x12\x0f\n\x07\x61\x64\x61pter\x18\x01 \x01(\t\"p\n\x17NoSampleProfileFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NoSampleProfileFound\"6\n\x18ProfileWrittenWithSample\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"x\n\x1bProfileWrittenWithSampleMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProfileWrittenWithSample\"B\n$ProfileWrittenWithTargetTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x90\x01\n\'ProfileWrittenWithTargetTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.ProfileWrittenWithTargetTemplateYAML\"C\n%ProfileWrittenWithProjectTemplateYAML\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x92\x01\n(ProfileWrittenWithProjectTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.ProfileWrittenWithProjectTemplateYAML\"\x12\n\x10SettingUpProfile\"h\n\x13SettingUpProfileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SettingUpProfile\"\x1c\n\x1aInvalidProfileTemplateYAML\"|\n\x1dInvalidProfileTemplateYAMLMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.InvalidProfileTemplateYAML\"(\n\x18ProjectNameAlreadyExists\x12\x0c\n\x04name\x18\x01 \x01(\t\"x\n\x1bProjectNameAlreadyExistsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ProjectNameAlreadyExists\"K\n\x0eProjectCreated\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08\x64ocs_url\x18\x02 \x01(\t\x12\x11\n\tslack_url\x18\x03 \x01(\t\"d\n\x11ProjectCreatedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ProjectCreated\"@\n\x1aPackageRedirectDeprecation\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1dPackageRedirectDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PackageRedirectDeprecation\"\x1f\n\x1dPackageInstallPathDeprecation\"\x82\x01\n PackageInstallPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.PackageInstallPathDeprecation\"H\n\x1b\x43onfigSourcePathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"~\n\x1e\x43onfigSourcePathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigSourcePathDeprecation\"F\n\x19\x43onfigDataPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"z\n\x1c\x43onfigDataPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConfigDataPathDeprecation\"?\n\x19\x41\x64\x61pterDeprecationWarning\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"z\n\x1c\x41\x64\x61pterDeprecationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.AdapterDeprecationWarning\".\n\x17MetricAttributesRenamed\x12\x13\n\x0bmetric_name\x18\x01 \x01(\t\"v\n\x1aMetricAttributesRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.MetricAttributesRenamed\"+\n\x17\x45xposureNameDeprecation\x12\x10\n\x08\x65xposure\x18\x01 \x01(\t\"v\n\x1a\x45xposureNameDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.ExposureNameDeprecation\"^\n\x13InternalDeprecation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x18\n\x10suggested_action\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"n\n\x16InternalDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.InternalDeprecation\"@\n\x1a\x45nvironmentVariableRenamed\x12\x10\n\x08old_name\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"|\n\x1d\x45nvironmentVariableRenamedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.EnvironmentVariableRenamed\"3\n\x18\x43onfigLogPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"x\n\x1b\x43onfigLogPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.ConfigLogPathDeprecation\"6\n\x1b\x43onfigTargetPathDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\"~\n\x1e\x43onfigTargetPathDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigTargetPathDeprecation\"!\n\x1f\x43ollectFreshnessReturnSignature\"\x86\x01\n\"CollectFreshnessReturnSignatureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.CollectFreshnessReturnSignature\"\x87\x01\n\x11\x41\x64\x61pterEventDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"j\n\x14\x41\x64\x61pterEventDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventDebug\"\x86\x01\n\x10\x41\x64\x61pterEventInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"h\n\x13\x41\x64\x61pterEventInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.AdapterEventInfo\"\x89\x01\n\x13\x41\x64\x61pterEventWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\"n\n\x16\x41\x64\x61pterEventWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.AdapterEventWarning\"\x99\x01\n\x11\x41\x64\x61pterEventError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08\x62\x61se_msg\x18\x03 \x01(\t\x12(\n\x04\x61rgs\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12\x10\n\x08\x65xc_info\x18\x05 \x01(\t\"j\n\x14\x41\x64\x61pterEventErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterEventError\"_\n\rNewConnection\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"b\n\x10NewConnectionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NewConnection\"=\n\x10\x43onnectionReused\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x16\n\x0eorig_conn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionReusedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionReused\"0\n\x1b\x43onnectionLeftOpenInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"~\n\x1e\x43onnectionLeftOpenInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConnectionLeftOpenInCleanup\".\n\x19\x43onnectionClosedInCleanup\x12\x11\n\tconn_name\x18\x01 \x01(\t\"z\n\x1c\x43onnectionClosedInCleanupMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConnectionClosedInCleanup\"_\n\x0eRollbackFailed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"d\n\x11RollbackFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RollbackFailed\"O\n\x10\x43onnectionClosed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"h\n\x13\x43onnectionClosedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConnectionClosed\"Q\n\x12\x43onnectionLeftOpen\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"l\n\x15\x43onnectionLeftOpenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ConnectionLeftOpen\"G\n\x08Rollback\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"X\n\x0bRollbackMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.Rollback\"@\n\tCacheMiss\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\"Z\n\x0c\x43\x61\x63heMissMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.CacheMiss\"b\n\rListRelations\x12\x10\n\x08\x64\x61tabase\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12/\n\trelations\x18\x03 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10ListRelationsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ListRelations\"`\n\x0e\x43onnectionUsed\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_type\x18\x02 \x01(\t\x12\x11\n\tconn_name\x18\x03 \x01(\t\"d\n\x11\x43onnectionUsedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ConnectionUsed\"T\n\x08SQLQuery\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\x12\x0b\n\x03sql\x18\x03 \x01(\t\"X\n\x0bSQLQueryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.SQLQuery\"[\n\x0eSQLQueryStatus\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x03 \x01(\x02\"d\n\x11SQLQueryStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SQLQueryStatus\"H\n\tSQLCommit\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tconn_name\x18\x02 \x01(\t\"Z\n\x0cSQLCommitMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.SQLCommit\"a\n\rColTypeChange\x12\x11\n\torig_type\x18\x01 \x01(\t\x12\x10\n\x08new_type\x18\x02 \x01(\t\x12+\n\x05table\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"b\n\x10\x43olTypeChangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.ColTypeChange\"@\n\x0eSchemaCreation\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"d\n\x11SchemaCreationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.SchemaCreation\"<\n\nSchemaDrop\x12.\n\x08relation\x18\x01 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"\\\n\rSchemaDropMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SchemaDrop\"\xde\x01\n\x0b\x43\x61\x63heAction\x12\x0e\n\x06\x61\x63tion\x18\x01 \x01(\t\x12-\n\x07ref_key\x18\x02 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_2\x18\x03 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12/\n\tref_key_3\x18\x04 \x01(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\x12.\n\x08ref_list\x18\x05 \x03(\x0b\x32\x1c.proto_types.ReferenceKeyMsg\"^\n\x0e\x43\x61\x63heActionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.CacheAction\"\x98\x01\n\x0e\x43\x61\x63heDumpGraph\x12\x33\n\x04\x64ump\x18\x01 \x03(\x0b\x32%.proto_types.CacheDumpGraph.DumpEntry\x12\x14\n\x0c\x62\x65\x66ore_after\x18\x02 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x03 \x01(\t\x1a+\n\tDumpEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"d\n\x11\x43\x61\x63heDumpGraphMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CacheDumpGraph\"B\n\x11\x41\x64\x61pterRegistered\x12\x14\n\x0c\x61\x64\x61pter_name\x18\x01 \x01(\t\x12\x17\n\x0f\x61\x64\x61pter_version\x18\x02 \x01(\t\"j\n\x14\x41\x64\x61pterRegisteredMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.AdapterRegistered\"!\n\x12\x41\x64\x61pterImportError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"l\n\x15\x41\x64\x61pterImportErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.AdapterImportError\"#\n\x0fPluginLoadError\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"f\n\x12PluginLoadErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.PluginLoadError\"Z\n\x14NewConnectionOpening\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x18\n\x10\x63onnection_state\x18\x02 \x01(\t\"p\n\x17NewConnectionOpeningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.NewConnectionOpening\"8\n\rCodeExecution\x12\x11\n\tconn_name\x18\x01 \x01(\t\x12\x14\n\x0c\x63ode_content\x18\x02 \x01(\t\"b\n\x10\x43odeExecutionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.CodeExecution\"6\n\x13\x43odeExecutionStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07\x65lapsed\x18\x02 \x01(\x02\"n\n\x16\x43odeExecutionStatusMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.CodeExecutionStatus\"%\n\x16\x43\x61talogGenerationError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"t\n\x19\x43\x61talogGenerationErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.CatalogGenerationError\"-\n\x13WriteCatalogFailure\x12\x16\n\x0enum_exceptions\x18\x01 \x01(\x05\"n\n\x16WriteCatalogFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.WriteCatalogFailure\"\x1e\n\x0e\x43\x61talogWritten\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43\x61talogWrittenMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CatalogWritten\"\x14\n\x12\x43\x61nnotGenerateDocs\"l\n\x15\x43\x61nnotGenerateDocsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.CannotGenerateDocs\"\x11\n\x0f\x42uildingCatalog\"f\n\x12\x42uildingCatalogMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.BuildingCatalog\"-\n\x18\x44\x61tabaseErrorRunningHook\x12\x11\n\thook_type\x18\x01 \x01(\t\"x\n\x1b\x44\x61tabaseErrorRunningHookMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DatabaseErrorRunningHook\"4\n\x0cHooksRunning\x12\x11\n\tnum_hooks\x18\x01 \x01(\x05\x12\x11\n\thook_type\x18\x02 \x01(\t\"`\n\x0fHooksRunningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.HooksRunning\"T\n\x14\x46inishedRunningStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\x12\x11\n\texecution\x18\x02 \x01(\t\x12\x16\n\x0e\x65xecution_time\x18\x03 \x01(\x02\"p\n\x17\x46inishedRunningStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.FinishedRunningStats\"<\n\x15\x43onstraintNotEnforced\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"r\n\x18\x43onstraintNotEnforcedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ConstraintNotEnforced\"=\n\x16\x43onstraintNotSupported\x12\x12\n\nconstraint\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x61pter\x18\x02 \x01(\t\"t\n\x19\x43onstraintNotSupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.ConstraintNotSupported\"7\n\x12InputFileDiffError\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"l\n\x15InputFileDiffErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InputFileDiffError\"?\n\x14InvalidValueForField\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x13\n\x0b\x66ield_value\x18\x02 \x01(\t\"p\n\x17InvalidValueForFieldMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.InvalidValueForField\"Q\n\x11ValidationWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12\x11\n\tnode_name\x18\x03 \x01(\t\"j\n\x14ValidationWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ValidationWarning\"!\n\x11ParsePerfInfoPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"j\n\x14ParsePerfInfoPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ParsePerfInfoPath\"1\n!PartialParsingErrorProcessingFile\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\"\x8a\x01\n$PartialParsingErrorProcessingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.PartialParsingErrorProcessingFile\"\x86\x01\n\x13PartialParsingError\x12?\n\x08\x65xc_info\x18\x01 \x03(\x0b\x32-.proto_types.PartialParsingError.ExcInfoEntry\x1a.\n\x0c\x45xcInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x16PartialParsingErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.PartialParsingError\"\x1b\n\x19PartialParsingSkipParsing\"z\n\x1cPartialParsingSkipParsingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.PartialParsingSkipParsing\"&\n\x14UnableToPartialParse\x12\x0e\n\x06reason\x18\x01 \x01(\t\"p\n\x17UnableToPartialParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.UnableToPartialParse\"f\n\x12StateCheckVarsHash\x12\x10\n\x08\x63hecksum\x18\x01 \x01(\t\x12\x0c\n\x04vars\x18\x02 \x01(\t\x12\x0f\n\x07profile\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\"l\n\x15StateCheckVarsHashMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StateCheckVarsHash\"\x1a\n\x18PartialParsingNotEnabled\"x\n\x1bPartialParsingNotEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.PartialParsingNotEnabled\"C\n\x14ParsedFileLoadFailed\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"p\n\x17ParsedFileLoadFailedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParsedFileLoadFailed\"H\n\x15PartialParsingEnabled\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x05\x12\r\n\x05\x61\x64\x64\x65\x64\x18\x02 \x01(\x05\x12\x0f\n\x07\x63hanged\x18\x03 \x01(\x05\"r\n\x18PartialParsingEnabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.PartialParsingEnabled\"8\n\x12PartialParsingFile\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x11\n\toperation\x18\x02 \x01(\t\"l\n\x15PartialParsingFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.PartialParsingFile\"\xaf\x01\n\x1fInvalidDisabledTargetInTestNode\x12\x1b\n\x13resource_type_title\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1a\n\x12original_file_path\x18\x03 \x01(\t\x12\x13\n\x0btarget_kind\x18\x04 \x01(\t\x12\x13\n\x0btarget_name\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\"\x86\x01\n\"InvalidDisabledTargetInTestNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.InvalidDisabledTargetInTestNode\"7\n\x18UnusedResourceConfigPath\x12\x1b\n\x13unused_config_paths\x18\x01 \x03(\t\"x\n\x1bUnusedResourceConfigPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.UnusedResourceConfigPath\"3\n\rSeedIncreased\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"b\n\x10SeedIncreasedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.SeedIncreased\">\n\x18SeedExceedsLimitSamePath\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"x\n\x1bSeedExceedsLimitSamePathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.SeedExceedsLimitSamePath\"D\n\x1eSeedExceedsLimitAndPathChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x84\x01\n!SeedExceedsLimitAndPathChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.SeedExceedsLimitAndPathChanged\"\\\n\x1fSeedExceedsLimitChecksumChanged\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rchecksum_name\x18\x03 \x01(\t\"\x86\x01\n\"SeedExceedsLimitChecksumChangedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SeedExceedsLimitChecksumChanged\"%\n\x0cUnusedTables\x12\x15\n\runused_tables\x18\x01 \x03(\t\"`\n\x0fUnusedTablesMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.UnusedTables\"\x87\x01\n\x17WrongResourceSchemaFile\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x1c\n\x14plural_resource_type\x18\x03 \x01(\t\x12\x10\n\x08yaml_key\x18\x04 \x01(\t\x12\x11\n\tfile_path\x18\x05 \x01(\t\"v\n\x1aWrongResourceSchemaFileMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.WrongResourceSchemaFile\"K\n\x10NoNodeForYamlKey\x12\x12\n\npatch_name\x18\x01 \x01(\t\x12\x10\n\x08yaml_key\x18\x02 \x01(\t\x12\x11\n\tfile_path\x18\x03 \x01(\t\"h\n\x13NoNodeForYamlKeyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.NoNodeForYamlKey\"+\n\x15MacroNotFoundForPatch\x12\x12\n\npatch_name\x18\x01 \x01(\t\"r\n\x18MacroNotFoundForPatchMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MacroNotFoundForPatch\"\xb8\x01\n\x16NodeNotFoundOrDisabled\x12\x1a\n\x12original_file_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x1b\n\x13resource_type_title\x18\x03 \x01(\t\x12\x13\n\x0btarget_name\x18\x04 \x01(\t\x12\x13\n\x0btarget_kind\x18\x05 \x01(\t\x12\x16\n\x0etarget_package\x18\x06 \x01(\t\x12\x10\n\x08\x64isabled\x18\x07 \x01(\t\"t\n\x19NodeNotFoundOrDisabledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.NodeNotFoundOrDisabled\"H\n\x0fJinjaLogWarning\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"f\n\x12JinjaLogWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.JinjaLogWarning\"E\n\x0cJinjaLogInfo\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"`\n\x0fJinjaLogInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.JinjaLogInfo\"F\n\rJinjaLogDebug\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03msg\x18\x02 \x01(\t\"b\n\x10JinjaLogDebugMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.JinjaLogDebug\"\xae\x01\n\x1eUnpinnedRefNewVersionAvailable\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rref_node_name\x18\x02 \x01(\t\x12\x18\n\x10ref_node_package\x18\x03 \x01(\t\x12\x18\n\x10ref_node_version\x18\x04 \x01(\t\x12\x17\n\x0fref_max_version\x18\x05 \x01(\t\"\x84\x01\n!UnpinnedRefNewVersionAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.UnpinnedRefNewVersionAvailable\"V\n\x0f\x44\x65precatedModel\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x15\n\rmodel_version\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65precation_date\x18\x03 \x01(\t\"f\n\x12\x44\x65precatedModelMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DeprecatedModel\"\xc6\x01\n\x1cUpcomingReferenceDeprecation\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"\x80\x01\n\x1fUpcomingReferenceDeprecationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x37\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32).proto_types.UpcomingReferenceDeprecation\"\xbd\x01\n\x13\x44\x65precatedReference\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"n\n\x16\x44\x65precatedReferenceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DeprecatedReference\"<\n$UnsupportedConstraintMaterialization\x12\x14\n\x0cmaterialized\x18\x01 \x01(\t\"\x90\x01\n\'UnsupportedConstraintMaterializationMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.UnsupportedConstraintMaterialization\"M\n\x14ParseInlineNodeError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"p\n\x17ParseInlineNodeErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParseInlineNodeError\"(\n\x19SemanticValidationFailure\x12\x0b\n\x03msg\x18\x02 \x01(\t\"z\n\x1cSemanticValidationFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.SemanticValidationFailure\"/\n\x1dGitSparseCheckoutSubdirectory\x12\x0e\n\x06subdir\x18\x01 \x01(\t\"\x82\x01\n GitSparseCheckoutSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.GitSparseCheckoutSubdirectory\"/\n\x1bGitProgressCheckoutRevision\x12\x10\n\x08revision\x18\x01 \x01(\t\"~\n\x1eGitProgressCheckoutRevisionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.GitProgressCheckoutRevision\"4\n%GitProgressUpdatingExistingDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x92\x01\n(GitProgressUpdatingExistingDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.GitProgressUpdatingExistingDependency\".\n\x1fGitProgressPullingNewDependency\x12\x0b\n\x03\x64ir\x18\x01 \x01(\t\"\x86\x01\n\"GitProgressPullingNewDependencyMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressPullingNewDependency\"\x1d\n\x0eGitNothingToDo\x12\x0b\n\x03sha\x18\x01 \x01(\t\"d\n\x11GitNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.GitNothingToDo\"E\n\x1fGitProgressUpdatedCheckoutRange\x12\x11\n\tstart_sha\x18\x01 \x01(\t\x12\x0f\n\x07\x65nd_sha\x18\x02 \x01(\t\"\x86\x01\n\"GitProgressUpdatedCheckoutRangeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressUpdatedCheckoutRange\"*\n\x17GitProgressCheckedOutAt\x12\x0f\n\x07\x65nd_sha\x18\x01 \x01(\t\"v\n\x1aGitProgressCheckedOutAtMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.GitProgressCheckedOutAt\")\n\x1aRegistryProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"|\n\x1dRegistryProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.RegistryProgressGETRequest\"=\n\x1bRegistryProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"~\n\x1eRegistryProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RegistryProgressGETResponse\"_\n\x1dSelectorReportInvalidSelector\x12\x17\n\x0fvalid_selectors\x18\x01 \x01(\t\x12\x13\n\x0bspec_method\x18\x02 \x01(\t\x12\x10\n\x08raw_spec\x18\x03 \x01(\t\"\x82\x01\n SelectorReportInvalidSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.SelectorReportInvalidSelector\"\x15\n\x13\x44\x65psNoPackagesFound\"n\n\x16\x44\x65psNoPackagesFoundMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsNoPackagesFound\"/\n\x17\x44\x65psStartPackageInstall\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\"v\n\x1a\x44\x65psStartPackageInstallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsStartPackageInstall\"\'\n\x0f\x44\x65psInstallInfo\x12\x14\n\x0cversion_name\x18\x01 \x01(\t\"f\n\x12\x44\x65psInstallInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DepsInstallInfo\"-\n\x13\x44\x65psUpdateAvailable\x12\x16\n\x0eversion_latest\x18\x01 \x01(\t\"n\n\x16\x44\x65psUpdateAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsUpdateAvailable\"\x0e\n\x0c\x44\x65psUpToDate\"`\n\x0f\x44\x65psUpToDateMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUpToDate\",\n\x14\x44\x65psListSubdirectory\x12\x14\n\x0csubdirectory\x18\x01 \x01(\t\"p\n\x17\x44\x65psListSubdirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.DepsListSubdirectory\".\n\x1a\x44\x65psNotifyUpdatesAvailable\x12\x10\n\x08packages\x18\x01 \x03(\t\"|\n\x1d\x44\x65psNotifyUpdatesAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.DepsNotifyUpdatesAvailable\"1\n\x11RetryExternalCall\x12\x0f\n\x07\x61ttempt\x18\x01 \x01(\x05\x12\x0b\n\x03max\x18\x02 \x01(\x05\"j\n\x14RetryExternalCallMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.RetryExternalCall\"#\n\x14RecordRetryException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17RecordRetryExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.RecordRetryException\".\n\x1fRegistryIndexProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x86\x01\n\"RegistryIndexProgressGETRequestMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryIndexProgressGETRequest\"B\n RegistryIndexProgressGETResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x11\n\tresp_code\x18\x02 \x01(\x05\"\x88\x01\n#RegistryIndexProgressGETResponseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.RegistryIndexProgressGETResponse\"2\n\x1eRegistryResponseUnexpectedType\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseUnexpectedTypeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseUnexpectedType\"2\n\x1eRegistryResponseMissingTopKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x84\x01\n!RegistryResponseMissingTopKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.RegistryResponseMissingTopKeys\"5\n!RegistryResponseMissingNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x8a\x01\n$RegistryResponseMissingNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.RegistryResponseMissingNestedKeys\"3\n\x1fRegistryResponseExtraNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x86\x01\n\"RegistryResponseExtraNestedKeysMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.RegistryResponseExtraNestedKeys\"(\n\x18\x44\x65psSetDownloadDirectory\x12\x0c\n\x04path\x18\x01 \x01(\t\"x\n\x1b\x44\x65psSetDownloadDirectoryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsSetDownloadDirectory\"-\n\x0c\x44\x65psUnpinned\x12\x10\n\x08revision\x18\x01 \x01(\t\x12\x0b\n\x03git\x18\x02 \x01(\t\"`\n\x0f\x44\x65psUnpinnedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.DepsUnpinned\"/\n\x1bNoNodesForSelectionCriteria\x12\x10\n\x08spec_raw\x18\x01 \x01(\t\"~\n\x1eNoNodesForSelectionCriteriaMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.NoNodesForSelectionCriteria\")\n\x10\x44\x65psLockUpdating\x12\x15\n\rlock_filepath\x18\x01 \x01(\t\"h\n\x13\x44\x65psLockUpdatingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.DepsLockUpdating\"R\n\x0e\x44\x65psAddPackage\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x19\n\x11packages_filepath\x18\x03 \x01(\t\"d\n\x11\x44\x65psAddPackageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DepsAddPackage\"\xa7\x01\n\x19\x44\x65psFoundDuplicatePackage\x12S\n\x0fremoved_package\x18\x01 \x03(\x0b\x32:.proto_types.DepsFoundDuplicatePackage.RemovedPackageEntry\x1a\x35\n\x13RemovedPackageEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"z\n\x1c\x44\x65psFoundDuplicatePackageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.DepsFoundDuplicatePackage\"$\n\x12\x44\x65psVersionMissing\x12\x0e\n\x06source\x18\x01 \x01(\t\"l\n\x15\x44\x65psVersionMissingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.DepsVersionMissing\"*\n\x1bRunningOperationCaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"~\n\x1eRunningOperationCaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RunningOperationCaughtError\"\x11\n\x0f\x43ompileComplete\"f\n\x12\x43ompileCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.CompileComplete\"\x18\n\x16\x46reshnessCheckComplete\"t\n\x19\x46reshnessCheckCompleteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.FreshnessCheckComplete\"\x1c\n\nSeedHeader\x12\x0e\n\x06header\x18\x01 \x01(\t\"\\\n\rSeedHeaderMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SeedHeader\"3\n\x12SQLRunnerException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x02 \x01(\t\"l\n\x15SQLRunnerExceptionMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SQLRunnerException\"\xa8\x01\n\rLogTestResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\x12\n\nnum_models\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x14\n\x0cnum_failures\x18\x07 \x01(\x05\"b\n\x10LogTestResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogTestResult\"k\n\x0cLogStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"`\n\x0fLogStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.LogStartLine\"\x95\x01\n\x0eLogModelResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogModelResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogModelResult\"\xfa\x01\n\x11LogSnapshotResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x34\n\x03\x63\x66g\x18\x07 \x03(\x0b\x32\'.proto_types.LogSnapshotResult.CfgEntry\x1a*\n\x08\x43\x66gEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"j\n\x14LogSnapshotResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.LogSnapshotResult\"\xb9\x01\n\rLogSeedResult\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x16\n\x0eresult_message\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12\x0e\n\x06schema\x18\x07 \x01(\t\x12\x10\n\x08relation\x18\x08 \x01(\t\"b\n\x10LogSeedResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogSeedResult\"\xad\x01\n\x12LogFreshnessResult\x12\x0e\n\x06status\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x05 \x01(\x02\x12\x13\n\x0bsource_name\x18\x06 \x01(\t\x12\x12\n\ntable_name\x18\x07 \x01(\t\"l\n\x15LogFreshnessResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogFreshnessResult\"\"\n\rLogCancelLine\x12\x11\n\tconn_name\x18\x01 \x01(\t\"b\n\x10LogCancelLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogCancelLine\"\x1f\n\x0f\x44\x65\x66\x61ultSelector\x12\x0c\n\x04name\x18\x01 \x01(\t\"f\n\x12\x44\x65\x66\x61ultSelectorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DefaultSelector\"5\n\tNodeStart\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"Z\n\x0cNodeStartMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.NodeStart\"g\n\x0cNodeFinished\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12-\n\nrun_result\x18\x02 \x01(\x0b\x32\x19.proto_types.RunResultMsg\"`\n\x0fNodeFinishedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.NodeFinished\"+\n\x1bQueryCancelationUnsupported\x12\x0c\n\x04type\x18\x01 \x01(\t\"~\n\x1eQueryCancelationUnsupportedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.QueryCancelationUnsupported\"O\n\x0f\x43oncurrencyLine\x12\x13\n\x0bnum_threads\x18\x01 \x01(\x05\x12\x13\n\x0btarget_name\x18\x02 \x01(\t\x12\x12\n\nnode_count\x18\x03 \x01(\x05\"f\n\x12\x43oncurrencyLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ConcurrencyLine\"E\n\x19WritingInjectedSQLForNode\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1cWritingInjectedSQLForNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.WritingInjectedSQLForNode\"9\n\rNodeCompiling\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeCompilingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeCompiling\"9\n\rNodeExecuting\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"b\n\x10NodeExecutingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.NodeExecuting\"m\n\x10LogHookStartLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"h\n\x13LogHookStartLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.LogHookStartLine\"\x93\x01\n\x0eLogHookEndLine\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x11\n\tstatement\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\r\n\x05index\x18\x04 \x01(\x05\x12\r\n\x05total\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\"d\n\x11LogHookEndLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogHookEndLine\"\x93\x01\n\x0fSkippingDetails\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rresource_type\x18\x02 \x01(\t\x12\x0e\n\x06schema\x18\x03 \x01(\t\x12\x11\n\tnode_name\x18\x04 \x01(\t\x12\r\n\x05index\x18\x05 \x01(\x05\x12\r\n\x05total\x18\x06 \x01(\x05\"f\n\x12SkippingDetailsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SkippingDetails\"\r\n\x0bNothingToDo\"^\n\x0eNothingToDoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.NothingToDo\",\n\x1dRunningOperationUncaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"\x82\x01\n RunningOperationUncaughtErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.RunningOperationUncaughtError\"\x93\x01\n\x0c\x45ndRunResult\x12*\n\x07results\x18\x01 \x03(\x0b\x32\x19.proto_types.RunResultMsg\x12\x14\n\x0c\x65lapsed_time\x18\x02 \x01(\x02\x12\x30\n\x0cgenerated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07success\x18\x04 \x01(\x08\"`\n\x0f\x45ndRunResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.EndRunResult\"\x11\n\x0fNoNodesSelected\"f\n\x12NoNodesSelectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.NoNodesSelected\"w\n\x10\x43ommandCompleted\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x30\n\x0c\x63ompleted_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07\x65lapsed\x18\x04 \x01(\x02\"h\n\x13\x43ommandCompletedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.CommandCompleted\"k\n\x08ShowNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0f\n\x07preview\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"X\n\x0bShowNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.ShowNode\"p\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\"`\n\x0f\x43ompiledNodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.CompiledNode\"b\n\x17\x43\x61tchableExceptionOnRun\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"v\n\x1a\x43\x61tchableExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.CatchableExceptionOnRun\"5\n\x12InternalErrorOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"l\n\x15InternalErrorOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InternalErrorOnRun\"K\n\x15GenericExceptionOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"r\n\x18GenericExceptionOnRunMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.GenericExceptionOnRun\"N\n\x1aNodeConnectionReleaseError\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x03 \x01(\t\"|\n\x1dNodeConnectionReleaseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.NodeConnectionReleaseError\"\x1f\n\nFoundStats\x12\x11\n\tstat_line\x18\x01 \x01(\t\"\\\n\rFoundStatsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.FoundStats\"\x17\n\x15MainKeyboardInterrupt\"r\n\x18MainKeyboardInterruptMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.MainKeyboardInterrupt\"#\n\x14MainEncounteredError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"p\n\x17MainEncounteredErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MainEncounteredError\"%\n\x0eMainStackTrace\x12\x13\n\x0bstack_trace\x18\x01 \x01(\t\"d\n\x11MainStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainStackTrace\"@\n\x13SystemCouldNotWrite\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0b\n\x03\x65xc\x18\x03 \x01(\t\"n\n\x16SystemCouldNotWriteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.SystemCouldNotWrite\"!\n\x12SystemExecutingCmd\x12\x0b\n\x03\x63md\x18\x01 \x03(\t\"l\n\x15SystemExecutingCmdMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SystemExecutingCmd\"\x1c\n\x0cSystemStdOut\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdOut\"\x1c\n\x0cSystemStdErr\x12\x0c\n\x04\x62msg\x18\x01 \x01(\t\"`\n\x0fSystemStdErrMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SystemStdErr\",\n\x16SystemReportReturnCode\x12\x12\n\nreturncode\x18\x01 \x01(\x05\"t\n\x19SystemReportReturnCodeMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.SystemReportReturnCode\"p\n\x13TimingInfoCollected\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12/\n\x0btiming_info\x18\x02 \x01(\x0b\x32\x1a.proto_types.TimingInfoMsg\"n\n\x16TimingInfoCollectedMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.TimingInfoCollected\"&\n\x12LogDebugStackTrace\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"l\n\x15LogDebugStackTraceMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogDebugStackTrace\"\x1e\n\x0e\x43heckCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11\x43heckCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.CheckCleanPath\" \n\x10\x43onfirmCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"h\n\x13\x43onfirmCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConfirmCleanPath\"\"\n\x12ProtectedCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"l\n\x15ProtectedCleanPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ProtectedCleanPath\"\x14\n\x12\x46inishedCleanPaths\"l\n\x15\x46inishedCleanPathsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FinishedCleanPaths\"5\n\x0bOpenCommand\x12\x10\n\x08open_cmd\x18\x01 \x01(\t\x12\x14\n\x0cprofiles_dir\x18\x02 \x01(\t\"^\n\x0eOpenCommandMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.OpenCommand\"\x19\n\nFormatting\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rFormattingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.Formatting\"0\n\x0fServingDocsPort\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"f\n\x12ServingDocsPortMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ServingDocsPort\"%\n\x15ServingDocsAccessInfo\x12\x0c\n\x04port\x18\x01 \x01(\t\"r\n\x18ServingDocsAccessInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ServingDocsAccessInfo\"\x15\n\x13ServingDocsExitInfo\"n\n\x16ServingDocsExitInfoMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.ServingDocsExitInfo\"J\n\x10RunResultWarning\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultWarningMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultWarning\"J\n\x10RunResultFailure\x12\x15\n\rresource_type\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"h\n\x13RunResultFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultFailure\"k\n\tStatsLine\x12\x30\n\x05stats\x18\x01 \x03(\x0b\x32!.proto_types.StatsLine.StatsEntry\x1a,\n\nStatsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"Z\n\x0cStatsLineMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.StatsLine\"\x1d\n\x0eRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11RunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RunResultError\")\n\x17RunResultErrorNoMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\"v\n\x1aRunResultErrorNoMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultErrorNoMessage\"\x1f\n\x0fSQLCompiledPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"f\n\x12SQLCompiledPathMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SQLCompiledPath\"-\n\x14\x43heckNodeTestFailure\x12\x15\n\rrelation_name\x18\x01 \x01(\t\"p\n\x17\x43heckNodeTestFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.CheckNodeTestFailure\"W\n\x0f\x45ndOfRunSummary\x12\x12\n\nnum_errors\x18\x01 \x01(\x05\x12\x14\n\x0cnum_warnings\x18\x02 \x01(\x05\x12\x1a\n\x12keyboard_interrupt\x18\x03 \x01(\x08\"f\n\x12\x45ndOfRunSummaryMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.EndOfRunSummary\"U\n\x13LogSkipBecauseError\x12\x0e\n\x06schema\x18\x01 \x01(\t\x12\x10\n\x08relation\x18\x02 \x01(\t\x12\r\n\x05index\x18\x03 \x01(\x05\x12\r\n\x05total\x18\x04 \x01(\x05\"n\n\x16LogSkipBecauseErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.LogSkipBecauseError\"\x14\n\x12\x45nsureGitInstalled\"l\n\x15\x45nsureGitInstalledMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.EnsureGitInstalled\"\x1a\n\x18\x44\x65psCreatingLocalSymlink\"x\n\x1b\x44\x65psCreatingLocalSymlinkMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsCreatingLocalSymlink\"\x19\n\x17\x44\x65psSymlinkNotAvailable\"v\n\x1a\x44\x65psSymlinkNotAvailableMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsSymlinkNotAvailable\"\x11\n\x0f\x44isableTracking\"f\n\x12\x44isableTrackingMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DisableTracking\"\x1e\n\x0cSendingEvent\x12\x0e\n\x06kwargs\x18\x01 \x01(\t\"`\n\x0fSendingEventMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SendingEvent\"\x12\n\x10SendEventFailure\"h\n\x13SendEventFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SendEventFailure\"\r\n\x0b\x46lushEvents\"^\n\x0e\x46lushEventsMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.FlushEvents\"\x14\n\x12\x46lushEventsFailure\"l\n\x15\x46lushEventsFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.FlushEventsFailure\"-\n\x19TrackingInitializeFailure\x12\x10\n\x08\x65xc_info\x18\x01 \x01(\t\"z\n\x1cTrackingInitializeFailureMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.TrackingInitializeFailure\"&\n\x17RunResultWarningMessage\x12\x0b\n\x03msg\x18\x01 \x01(\t\"v\n\x1aRunResultWarningMessageMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultWarningMessage\"\x1a\n\x0b\x44\x65\x62ugCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"^\n\x0e\x44\x65\x62ugCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.DebugCmdOut\"\x1d\n\x0e\x44\x65\x62ugCmdResult\x12\x0b\n\x03msg\x18\x01 \x01(\t\"d\n\x11\x44\x65\x62ugCmdResultMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DebugCmdResult\"\x19\n\nListCmdOut\x12\x0b\n\x03msg\x18\x01 \x01(\t\"\\\n\rListCmdOutMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.ListCmdOut\"\x13\n\x04Note\x12\x0b\n\x03msg\x18\x01 \x01(\t\"P\n\x07NoteMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x11.proto_types.Noteb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -583,338 +583,334 @@ _globals['_NONODESFORSELECTIONCRITERIA']._serialized_end=25271 _globals['_NONODESFORSELECTIONCRITERIAMSG']._serialized_start=25273 _globals['_NONODESFORSELECTIONCRITERIAMSG']._serialized_end=25399 - _globals['_DEPSLOCKCREATED']._serialized_start=25401 - _globals['_DEPSLOCKCREATED']._serialized_end=25441 - _globals['_DEPSLOCKCREATEDMSG']._serialized_start=25443 - _globals['_DEPSLOCKCREATEDMSG']._serialized_end=25545 - _globals['_DEPSLOCKUPDATING']._serialized_start=25547 - _globals['_DEPSLOCKUPDATING']._serialized_end=25588 - _globals['_DEPSLOCKUPDATINGMSG']._serialized_start=25590 - _globals['_DEPSLOCKUPDATINGMSG']._serialized_end=25694 - _globals['_DEPSADDPACKAGE']._serialized_start=25696 - _globals['_DEPSADDPACKAGE']._serialized_end=25778 - _globals['_DEPSADDPACKAGEMSG']._serialized_start=25780 - _globals['_DEPSADDPACKAGEMSG']._serialized_end=25880 - _globals['_DEPSFOUNDDUPLICATEPACKAGE']._serialized_start=25883 - _globals['_DEPSFOUNDDUPLICATEPACKAGE']._serialized_end=26050 - _globals['_DEPSFOUNDDUPLICATEPACKAGE_REMOVEDPACKAGEENTRY']._serialized_start=25997 - _globals['_DEPSFOUNDDUPLICATEPACKAGE_REMOVEDPACKAGEENTRY']._serialized_end=26050 - _globals['_DEPSFOUNDDUPLICATEPACKAGEMSG']._serialized_start=26052 - _globals['_DEPSFOUNDDUPLICATEPACKAGEMSG']._serialized_end=26174 - _globals['_DEPSVERSIONMISSING']._serialized_start=26176 - _globals['_DEPSVERSIONMISSING']._serialized_end=26212 - _globals['_DEPSVERSIONMISSINGMSG']._serialized_start=26214 - _globals['_DEPSVERSIONMISSINGMSG']._serialized_end=26322 - _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_start=26324 - _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_end=26366 - _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_start=26368 - _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_end=26494 - _globals['_COMPILECOMPLETE']._serialized_start=26496 - _globals['_COMPILECOMPLETE']._serialized_end=26513 - _globals['_COMPILECOMPLETEMSG']._serialized_start=26515 - _globals['_COMPILECOMPLETEMSG']._serialized_end=26617 - _globals['_FRESHNESSCHECKCOMPLETE']._serialized_start=26619 - _globals['_FRESHNESSCHECKCOMPLETE']._serialized_end=26643 - _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_start=26645 - _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_end=26761 - _globals['_SEEDHEADER']._serialized_start=26763 - _globals['_SEEDHEADER']._serialized_end=26791 - _globals['_SEEDHEADERMSG']._serialized_start=26793 - _globals['_SEEDHEADERMSG']._serialized_end=26885 - _globals['_SQLRUNNEREXCEPTION']._serialized_start=26887 - _globals['_SQLRUNNEREXCEPTION']._serialized_end=26938 - _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_start=26940 - _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_end=27048 - _globals['_LOGTESTRESULT']._serialized_start=27051 - _globals['_LOGTESTRESULT']._serialized_end=27219 - _globals['_LOGTESTRESULTMSG']._serialized_start=27221 - _globals['_LOGTESTRESULTMSG']._serialized_end=27319 - _globals['_LOGSTARTLINE']._serialized_start=27321 - _globals['_LOGSTARTLINE']._serialized_end=27428 - _globals['_LOGSTARTLINEMSG']._serialized_start=27430 - _globals['_LOGSTARTLINEMSG']._serialized_end=27526 - _globals['_LOGMODELRESULT']._serialized_start=27529 - _globals['_LOGMODELRESULT']._serialized_end=27678 - _globals['_LOGMODELRESULTMSG']._serialized_start=27680 - _globals['_LOGMODELRESULTMSG']._serialized_end=27780 - _globals['_LOGSNAPSHOTRESULT']._serialized_start=27783 - _globals['_LOGSNAPSHOTRESULT']._serialized_end=28033 - _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_start=27991 - _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_end=28033 - _globals['_LOGSNAPSHOTRESULTMSG']._serialized_start=28035 - _globals['_LOGSNAPSHOTRESULTMSG']._serialized_end=28141 - _globals['_LOGSEEDRESULT']._serialized_start=28144 - _globals['_LOGSEEDRESULT']._serialized_end=28329 - _globals['_LOGSEEDRESULTMSG']._serialized_start=28331 - _globals['_LOGSEEDRESULTMSG']._serialized_end=28429 - _globals['_LOGFRESHNESSRESULT']._serialized_start=28432 - _globals['_LOGFRESHNESSRESULT']._serialized_end=28605 - _globals['_LOGFRESHNESSRESULTMSG']._serialized_start=28607 - _globals['_LOGFRESHNESSRESULTMSG']._serialized_end=28715 - _globals['_LOGCANCELLINE']._serialized_start=28717 - _globals['_LOGCANCELLINE']._serialized_end=28751 - _globals['_LOGCANCELLINEMSG']._serialized_start=28753 - _globals['_LOGCANCELLINEMSG']._serialized_end=28851 - _globals['_DEFAULTSELECTOR']._serialized_start=28853 - _globals['_DEFAULTSELECTOR']._serialized_end=28884 - _globals['_DEFAULTSELECTORMSG']._serialized_start=28886 - _globals['_DEFAULTSELECTORMSG']._serialized_end=28988 - _globals['_NODESTART']._serialized_start=28990 - _globals['_NODESTART']._serialized_end=29043 - _globals['_NODESTARTMSG']._serialized_start=29045 - _globals['_NODESTARTMSG']._serialized_end=29135 - _globals['_NODEFINISHED']._serialized_start=29137 - _globals['_NODEFINISHED']._serialized_end=29240 - _globals['_NODEFINISHEDMSG']._serialized_start=29242 - _globals['_NODEFINISHEDMSG']._serialized_end=29338 - _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_start=29340 - _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_end=29383 - _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_start=29385 - _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_end=29511 - _globals['_CONCURRENCYLINE']._serialized_start=29513 - _globals['_CONCURRENCYLINE']._serialized_end=29592 - _globals['_CONCURRENCYLINEMSG']._serialized_start=29594 - _globals['_CONCURRENCYLINEMSG']._serialized_end=29696 - _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_start=29698 - _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_end=29767 - _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_start=29769 - _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_end=29891 - _globals['_NODECOMPILING']._serialized_start=29893 - _globals['_NODECOMPILING']._serialized_end=29950 - _globals['_NODECOMPILINGMSG']._serialized_start=29952 - _globals['_NODECOMPILINGMSG']._serialized_end=30050 - _globals['_NODEEXECUTING']._serialized_start=30052 - _globals['_NODEEXECUTING']._serialized_end=30109 - _globals['_NODEEXECUTINGMSG']._serialized_start=30111 - _globals['_NODEEXECUTINGMSG']._serialized_end=30209 - _globals['_LOGHOOKSTARTLINE']._serialized_start=30211 - _globals['_LOGHOOKSTARTLINE']._serialized_end=30320 - _globals['_LOGHOOKSTARTLINEMSG']._serialized_start=30322 - _globals['_LOGHOOKSTARTLINEMSG']._serialized_end=30426 - _globals['_LOGHOOKENDLINE']._serialized_start=30429 - _globals['_LOGHOOKENDLINE']._serialized_end=30576 - _globals['_LOGHOOKENDLINEMSG']._serialized_start=30578 - _globals['_LOGHOOKENDLINEMSG']._serialized_end=30678 - _globals['_SKIPPINGDETAILS']._serialized_start=30681 - _globals['_SKIPPINGDETAILS']._serialized_end=30828 - _globals['_SKIPPINGDETAILSMSG']._serialized_start=30830 - _globals['_SKIPPINGDETAILSMSG']._serialized_end=30932 - _globals['_NOTHINGTODO']._serialized_start=30934 - _globals['_NOTHINGTODO']._serialized_end=30947 - _globals['_NOTHINGTODOMSG']._serialized_start=30949 - _globals['_NOTHINGTODOMSG']._serialized_end=31043 - _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_start=31045 - _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_end=31089 - _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_start=31092 - _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_end=31222 - _globals['_ENDRUNRESULT']._serialized_start=31225 - _globals['_ENDRUNRESULT']._serialized_end=31372 - _globals['_ENDRUNRESULTMSG']._serialized_start=31374 - _globals['_ENDRUNRESULTMSG']._serialized_end=31470 - _globals['_NONODESSELECTED']._serialized_start=31472 - _globals['_NONODESSELECTED']._serialized_end=31489 - _globals['_NONODESSELECTEDMSG']._serialized_start=31491 - _globals['_NONODESSELECTEDMSG']._serialized_end=31593 - _globals['_COMMANDCOMPLETED']._serialized_start=31595 - _globals['_COMMANDCOMPLETED']._serialized_end=31714 - _globals['_COMMANDCOMPLETEDMSG']._serialized_start=31716 - _globals['_COMMANDCOMPLETEDMSG']._serialized_end=31820 - _globals['_SHOWNODE']._serialized_start=31822 - _globals['_SHOWNODE']._serialized_end=31929 - _globals['_SHOWNODEMSG']._serialized_start=31931 - _globals['_SHOWNODEMSG']._serialized_end=32019 - _globals['_COMPILEDNODE']._serialized_start=32021 - _globals['_COMPILEDNODE']._serialized_end=32133 - _globals['_COMPILEDNODEMSG']._serialized_start=32135 - _globals['_COMPILEDNODEMSG']._serialized_end=32231 - _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_start=32233 - _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_end=32331 - _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_start=32333 - _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_end=32451 - _globals['_INTERNALERRORONRUN']._serialized_start=32453 - _globals['_INTERNALERRORONRUN']._serialized_end=32506 - _globals['_INTERNALERRORONRUNMSG']._serialized_start=32508 - _globals['_INTERNALERRORONRUNMSG']._serialized_end=32616 - _globals['_GENERICEXCEPTIONONRUN']._serialized_start=32618 - _globals['_GENERICEXCEPTIONONRUN']._serialized_end=32693 - _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_start=32695 - _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_end=32809 - _globals['_NODECONNECTIONRELEASEERROR']._serialized_start=32811 - _globals['_NODECONNECTIONRELEASEERROR']._serialized_end=32889 - _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_start=32891 - _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_end=33015 - _globals['_FOUNDSTATS']._serialized_start=33017 - _globals['_FOUNDSTATS']._serialized_end=33048 - _globals['_FOUNDSTATSMSG']._serialized_start=33050 - _globals['_FOUNDSTATSMSG']._serialized_end=33142 - _globals['_MAINKEYBOARDINTERRUPT']._serialized_start=33144 - _globals['_MAINKEYBOARDINTERRUPT']._serialized_end=33167 - _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_start=33169 - _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_end=33283 - _globals['_MAINENCOUNTEREDERROR']._serialized_start=33285 - _globals['_MAINENCOUNTEREDERROR']._serialized_end=33320 - _globals['_MAINENCOUNTEREDERRORMSG']._serialized_start=33322 - _globals['_MAINENCOUNTEREDERRORMSG']._serialized_end=33434 - _globals['_MAINSTACKTRACE']._serialized_start=33436 - _globals['_MAINSTACKTRACE']._serialized_end=33473 - _globals['_MAINSTACKTRACEMSG']._serialized_start=33475 - _globals['_MAINSTACKTRACEMSG']._serialized_end=33575 - _globals['_SYSTEMCOULDNOTWRITE']._serialized_start=33577 - _globals['_SYSTEMCOULDNOTWRITE']._serialized_end=33641 - _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_start=33643 - _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_end=33753 - _globals['_SYSTEMEXECUTINGCMD']._serialized_start=33755 - _globals['_SYSTEMEXECUTINGCMD']._serialized_end=33788 - _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_start=33790 - _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_end=33898 - _globals['_SYSTEMSTDOUT']._serialized_start=33900 - _globals['_SYSTEMSTDOUT']._serialized_end=33928 - _globals['_SYSTEMSTDOUTMSG']._serialized_start=33930 - _globals['_SYSTEMSTDOUTMSG']._serialized_end=34026 - _globals['_SYSTEMSTDERR']._serialized_start=34028 - _globals['_SYSTEMSTDERR']._serialized_end=34056 - _globals['_SYSTEMSTDERRMSG']._serialized_start=34058 - _globals['_SYSTEMSTDERRMSG']._serialized_end=34154 - _globals['_SYSTEMREPORTRETURNCODE']._serialized_start=34156 - _globals['_SYSTEMREPORTRETURNCODE']._serialized_end=34200 - _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_start=34202 - _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_end=34318 - _globals['_TIMINGINFOCOLLECTED']._serialized_start=34320 - _globals['_TIMINGINFOCOLLECTED']._serialized_end=34432 - _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_start=34434 - _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_end=34544 - _globals['_LOGDEBUGSTACKTRACE']._serialized_start=34546 - _globals['_LOGDEBUGSTACKTRACE']._serialized_end=34584 - _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_start=34586 - _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_end=34694 - _globals['_CHECKCLEANPATH']._serialized_start=34696 - _globals['_CHECKCLEANPATH']._serialized_end=34726 - _globals['_CHECKCLEANPATHMSG']._serialized_start=34728 - _globals['_CHECKCLEANPATHMSG']._serialized_end=34828 - _globals['_CONFIRMCLEANPATH']._serialized_start=34830 - _globals['_CONFIRMCLEANPATH']._serialized_end=34862 - _globals['_CONFIRMCLEANPATHMSG']._serialized_start=34864 - _globals['_CONFIRMCLEANPATHMSG']._serialized_end=34968 - _globals['_PROTECTEDCLEANPATH']._serialized_start=34970 - _globals['_PROTECTEDCLEANPATH']._serialized_end=35004 - _globals['_PROTECTEDCLEANPATHMSG']._serialized_start=35006 - _globals['_PROTECTEDCLEANPATHMSG']._serialized_end=35114 - _globals['_FINISHEDCLEANPATHS']._serialized_start=35116 - _globals['_FINISHEDCLEANPATHS']._serialized_end=35136 - _globals['_FINISHEDCLEANPATHSMSG']._serialized_start=35138 - _globals['_FINISHEDCLEANPATHSMSG']._serialized_end=35246 - _globals['_OPENCOMMAND']._serialized_start=35248 - _globals['_OPENCOMMAND']._serialized_end=35301 - _globals['_OPENCOMMANDMSG']._serialized_start=35303 - _globals['_OPENCOMMANDMSG']._serialized_end=35397 - _globals['_FORMATTING']._serialized_start=35399 - _globals['_FORMATTING']._serialized_end=35424 - _globals['_FORMATTINGMSG']._serialized_start=35426 - _globals['_FORMATTINGMSG']._serialized_end=35518 - _globals['_SERVINGDOCSPORT']._serialized_start=35520 - _globals['_SERVINGDOCSPORT']._serialized_end=35568 - _globals['_SERVINGDOCSPORTMSG']._serialized_start=35570 - _globals['_SERVINGDOCSPORTMSG']._serialized_end=35672 - _globals['_SERVINGDOCSACCESSINFO']._serialized_start=35674 - _globals['_SERVINGDOCSACCESSINFO']._serialized_end=35711 - _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_start=35713 - _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_end=35827 - _globals['_SERVINGDOCSEXITINFO']._serialized_start=35829 - _globals['_SERVINGDOCSEXITINFO']._serialized_end=35850 - _globals['_SERVINGDOCSEXITINFOMSG']._serialized_start=35852 - _globals['_SERVINGDOCSEXITINFOMSG']._serialized_end=35962 - _globals['_RUNRESULTWARNING']._serialized_start=35964 - _globals['_RUNRESULTWARNING']._serialized_end=36038 - _globals['_RUNRESULTWARNINGMSG']._serialized_start=36040 - _globals['_RUNRESULTWARNINGMSG']._serialized_end=36144 - _globals['_RUNRESULTFAILURE']._serialized_start=36146 - _globals['_RUNRESULTFAILURE']._serialized_end=36220 - _globals['_RUNRESULTFAILUREMSG']._serialized_start=36222 - _globals['_RUNRESULTFAILUREMSG']._serialized_end=36326 - _globals['_STATSLINE']._serialized_start=36328 - _globals['_STATSLINE']._serialized_end=36435 - _globals['_STATSLINE_STATSENTRY']._serialized_start=36391 - _globals['_STATSLINE_STATSENTRY']._serialized_end=36435 - _globals['_STATSLINEMSG']._serialized_start=36437 - _globals['_STATSLINEMSG']._serialized_end=36527 - _globals['_RUNRESULTERROR']._serialized_start=36529 - _globals['_RUNRESULTERROR']._serialized_end=36558 - _globals['_RUNRESULTERRORMSG']._serialized_start=36560 - _globals['_RUNRESULTERRORMSG']._serialized_end=36660 - _globals['_RUNRESULTERRORNOMESSAGE']._serialized_start=36662 - _globals['_RUNRESULTERRORNOMESSAGE']._serialized_end=36703 - _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_start=36705 - _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_end=36823 - _globals['_SQLCOMPILEDPATH']._serialized_start=36825 - _globals['_SQLCOMPILEDPATH']._serialized_end=36856 - _globals['_SQLCOMPILEDPATHMSG']._serialized_start=36858 - _globals['_SQLCOMPILEDPATHMSG']._serialized_end=36960 - _globals['_CHECKNODETESTFAILURE']._serialized_start=36962 - _globals['_CHECKNODETESTFAILURE']._serialized_end=37007 - _globals['_CHECKNODETESTFAILUREMSG']._serialized_start=37009 - _globals['_CHECKNODETESTFAILUREMSG']._serialized_end=37121 - _globals['_ENDOFRUNSUMMARY']._serialized_start=37123 - _globals['_ENDOFRUNSUMMARY']._serialized_end=37210 - _globals['_ENDOFRUNSUMMARYMSG']._serialized_start=37212 - _globals['_ENDOFRUNSUMMARYMSG']._serialized_end=37314 - _globals['_LOGSKIPBECAUSEERROR']._serialized_start=37316 - _globals['_LOGSKIPBECAUSEERROR']._serialized_end=37401 - _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_start=37403 - _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_end=37513 - _globals['_ENSUREGITINSTALLED']._serialized_start=37515 - _globals['_ENSUREGITINSTALLED']._serialized_end=37535 - _globals['_ENSUREGITINSTALLEDMSG']._serialized_start=37537 - _globals['_ENSUREGITINSTALLEDMSG']._serialized_end=37645 - _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_start=37647 - _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_end=37673 - _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_start=37675 - _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_end=37795 - _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_start=37797 - _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_end=37822 - _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_start=37824 - _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_end=37942 - _globals['_DISABLETRACKING']._serialized_start=37944 - _globals['_DISABLETRACKING']._serialized_end=37961 - _globals['_DISABLETRACKINGMSG']._serialized_start=37963 - _globals['_DISABLETRACKINGMSG']._serialized_end=38065 - _globals['_SENDINGEVENT']._serialized_start=38067 - _globals['_SENDINGEVENT']._serialized_end=38097 - _globals['_SENDINGEVENTMSG']._serialized_start=38099 - _globals['_SENDINGEVENTMSG']._serialized_end=38195 - _globals['_SENDEVENTFAILURE']._serialized_start=38197 - _globals['_SENDEVENTFAILURE']._serialized_end=38215 - _globals['_SENDEVENTFAILUREMSG']._serialized_start=38217 - _globals['_SENDEVENTFAILUREMSG']._serialized_end=38321 - _globals['_FLUSHEVENTS']._serialized_start=38323 - _globals['_FLUSHEVENTS']._serialized_end=38336 - _globals['_FLUSHEVENTSMSG']._serialized_start=38338 - _globals['_FLUSHEVENTSMSG']._serialized_end=38432 - _globals['_FLUSHEVENTSFAILURE']._serialized_start=38434 - _globals['_FLUSHEVENTSFAILURE']._serialized_end=38454 - _globals['_FLUSHEVENTSFAILUREMSG']._serialized_start=38456 - _globals['_FLUSHEVENTSFAILUREMSG']._serialized_end=38564 - _globals['_TRACKINGINITIALIZEFAILURE']._serialized_start=38566 - _globals['_TRACKINGINITIALIZEFAILURE']._serialized_end=38611 - _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_start=38613 - _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_end=38735 - _globals['_RUNRESULTWARNINGMESSAGE']._serialized_start=38737 - _globals['_RUNRESULTWARNINGMESSAGE']._serialized_end=38775 - _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_start=38777 - _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_end=38895 - _globals['_DEBUGCMDOUT']._serialized_start=38897 - _globals['_DEBUGCMDOUT']._serialized_end=38923 - _globals['_DEBUGCMDOUTMSG']._serialized_start=38925 - _globals['_DEBUGCMDOUTMSG']._serialized_end=39019 - _globals['_DEBUGCMDRESULT']._serialized_start=39021 - _globals['_DEBUGCMDRESULT']._serialized_end=39050 - _globals['_DEBUGCMDRESULTMSG']._serialized_start=39052 - _globals['_DEBUGCMDRESULTMSG']._serialized_end=39152 - _globals['_LISTCMDOUT']._serialized_start=39154 - _globals['_LISTCMDOUT']._serialized_end=39179 - _globals['_LISTCMDOUTMSG']._serialized_start=39181 - _globals['_LISTCMDOUTMSG']._serialized_end=39273 - _globals['_NOTE']._serialized_start=39275 - _globals['_NOTE']._serialized_end=39294 - _globals['_NOTEMSG']._serialized_start=39296 - _globals['_NOTEMSG']._serialized_end=39376 + _globals['_DEPSLOCKUPDATING']._serialized_start=25401 + _globals['_DEPSLOCKUPDATING']._serialized_end=25442 + _globals['_DEPSLOCKUPDATINGMSG']._serialized_start=25444 + _globals['_DEPSLOCKUPDATINGMSG']._serialized_end=25548 + _globals['_DEPSADDPACKAGE']._serialized_start=25550 + _globals['_DEPSADDPACKAGE']._serialized_end=25632 + _globals['_DEPSADDPACKAGEMSG']._serialized_start=25634 + _globals['_DEPSADDPACKAGEMSG']._serialized_end=25734 + _globals['_DEPSFOUNDDUPLICATEPACKAGE']._serialized_start=25737 + _globals['_DEPSFOUNDDUPLICATEPACKAGE']._serialized_end=25904 + _globals['_DEPSFOUNDDUPLICATEPACKAGE_REMOVEDPACKAGEENTRY']._serialized_start=25851 + _globals['_DEPSFOUNDDUPLICATEPACKAGE_REMOVEDPACKAGEENTRY']._serialized_end=25904 + _globals['_DEPSFOUNDDUPLICATEPACKAGEMSG']._serialized_start=25906 + _globals['_DEPSFOUNDDUPLICATEPACKAGEMSG']._serialized_end=26028 + _globals['_DEPSVERSIONMISSING']._serialized_start=26030 + _globals['_DEPSVERSIONMISSING']._serialized_end=26066 + _globals['_DEPSVERSIONMISSINGMSG']._serialized_start=26068 + _globals['_DEPSVERSIONMISSINGMSG']._serialized_end=26176 + _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_start=26178 + _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_end=26220 + _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_start=26222 + _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_end=26348 + _globals['_COMPILECOMPLETE']._serialized_start=26350 + _globals['_COMPILECOMPLETE']._serialized_end=26367 + _globals['_COMPILECOMPLETEMSG']._serialized_start=26369 + _globals['_COMPILECOMPLETEMSG']._serialized_end=26471 + _globals['_FRESHNESSCHECKCOMPLETE']._serialized_start=26473 + _globals['_FRESHNESSCHECKCOMPLETE']._serialized_end=26497 + _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_start=26499 + _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_end=26615 + _globals['_SEEDHEADER']._serialized_start=26617 + _globals['_SEEDHEADER']._serialized_end=26645 + _globals['_SEEDHEADERMSG']._serialized_start=26647 + _globals['_SEEDHEADERMSG']._serialized_end=26739 + _globals['_SQLRUNNEREXCEPTION']._serialized_start=26741 + _globals['_SQLRUNNEREXCEPTION']._serialized_end=26792 + _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_start=26794 + _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_end=26902 + _globals['_LOGTESTRESULT']._serialized_start=26905 + _globals['_LOGTESTRESULT']._serialized_end=27073 + _globals['_LOGTESTRESULTMSG']._serialized_start=27075 + _globals['_LOGTESTRESULTMSG']._serialized_end=27173 + _globals['_LOGSTARTLINE']._serialized_start=27175 + _globals['_LOGSTARTLINE']._serialized_end=27282 + _globals['_LOGSTARTLINEMSG']._serialized_start=27284 + _globals['_LOGSTARTLINEMSG']._serialized_end=27380 + _globals['_LOGMODELRESULT']._serialized_start=27383 + _globals['_LOGMODELRESULT']._serialized_end=27532 + _globals['_LOGMODELRESULTMSG']._serialized_start=27534 + _globals['_LOGMODELRESULTMSG']._serialized_end=27634 + _globals['_LOGSNAPSHOTRESULT']._serialized_start=27637 + _globals['_LOGSNAPSHOTRESULT']._serialized_end=27887 + _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_start=27845 + _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_end=27887 + _globals['_LOGSNAPSHOTRESULTMSG']._serialized_start=27889 + _globals['_LOGSNAPSHOTRESULTMSG']._serialized_end=27995 + _globals['_LOGSEEDRESULT']._serialized_start=27998 + _globals['_LOGSEEDRESULT']._serialized_end=28183 + _globals['_LOGSEEDRESULTMSG']._serialized_start=28185 + _globals['_LOGSEEDRESULTMSG']._serialized_end=28283 + _globals['_LOGFRESHNESSRESULT']._serialized_start=28286 + _globals['_LOGFRESHNESSRESULT']._serialized_end=28459 + _globals['_LOGFRESHNESSRESULTMSG']._serialized_start=28461 + _globals['_LOGFRESHNESSRESULTMSG']._serialized_end=28569 + _globals['_LOGCANCELLINE']._serialized_start=28571 + _globals['_LOGCANCELLINE']._serialized_end=28605 + _globals['_LOGCANCELLINEMSG']._serialized_start=28607 + _globals['_LOGCANCELLINEMSG']._serialized_end=28705 + _globals['_DEFAULTSELECTOR']._serialized_start=28707 + _globals['_DEFAULTSELECTOR']._serialized_end=28738 + _globals['_DEFAULTSELECTORMSG']._serialized_start=28740 + _globals['_DEFAULTSELECTORMSG']._serialized_end=28842 + _globals['_NODESTART']._serialized_start=28844 + _globals['_NODESTART']._serialized_end=28897 + _globals['_NODESTARTMSG']._serialized_start=28899 + _globals['_NODESTARTMSG']._serialized_end=28989 + _globals['_NODEFINISHED']._serialized_start=28991 + _globals['_NODEFINISHED']._serialized_end=29094 + _globals['_NODEFINISHEDMSG']._serialized_start=29096 + _globals['_NODEFINISHEDMSG']._serialized_end=29192 + _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_start=29194 + _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_end=29237 + _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_start=29239 + _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_end=29365 + _globals['_CONCURRENCYLINE']._serialized_start=29367 + _globals['_CONCURRENCYLINE']._serialized_end=29446 + _globals['_CONCURRENCYLINEMSG']._serialized_start=29448 + _globals['_CONCURRENCYLINEMSG']._serialized_end=29550 + _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_start=29552 + _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_end=29621 + _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_start=29623 + _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_end=29745 + _globals['_NODECOMPILING']._serialized_start=29747 + _globals['_NODECOMPILING']._serialized_end=29804 + _globals['_NODECOMPILINGMSG']._serialized_start=29806 + _globals['_NODECOMPILINGMSG']._serialized_end=29904 + _globals['_NODEEXECUTING']._serialized_start=29906 + _globals['_NODEEXECUTING']._serialized_end=29963 + _globals['_NODEEXECUTINGMSG']._serialized_start=29965 + _globals['_NODEEXECUTINGMSG']._serialized_end=30063 + _globals['_LOGHOOKSTARTLINE']._serialized_start=30065 + _globals['_LOGHOOKSTARTLINE']._serialized_end=30174 + _globals['_LOGHOOKSTARTLINEMSG']._serialized_start=30176 + _globals['_LOGHOOKSTARTLINEMSG']._serialized_end=30280 + _globals['_LOGHOOKENDLINE']._serialized_start=30283 + _globals['_LOGHOOKENDLINE']._serialized_end=30430 + _globals['_LOGHOOKENDLINEMSG']._serialized_start=30432 + _globals['_LOGHOOKENDLINEMSG']._serialized_end=30532 + _globals['_SKIPPINGDETAILS']._serialized_start=30535 + _globals['_SKIPPINGDETAILS']._serialized_end=30682 + _globals['_SKIPPINGDETAILSMSG']._serialized_start=30684 + _globals['_SKIPPINGDETAILSMSG']._serialized_end=30786 + _globals['_NOTHINGTODO']._serialized_start=30788 + _globals['_NOTHINGTODO']._serialized_end=30801 + _globals['_NOTHINGTODOMSG']._serialized_start=30803 + _globals['_NOTHINGTODOMSG']._serialized_end=30897 + _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_start=30899 + _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_end=30943 + _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_start=30946 + _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_end=31076 + _globals['_ENDRUNRESULT']._serialized_start=31079 + _globals['_ENDRUNRESULT']._serialized_end=31226 + _globals['_ENDRUNRESULTMSG']._serialized_start=31228 + _globals['_ENDRUNRESULTMSG']._serialized_end=31324 + _globals['_NONODESSELECTED']._serialized_start=31326 + _globals['_NONODESSELECTED']._serialized_end=31343 + _globals['_NONODESSELECTEDMSG']._serialized_start=31345 + _globals['_NONODESSELECTEDMSG']._serialized_end=31447 + _globals['_COMMANDCOMPLETED']._serialized_start=31449 + _globals['_COMMANDCOMPLETED']._serialized_end=31568 + _globals['_COMMANDCOMPLETEDMSG']._serialized_start=31570 + _globals['_COMMANDCOMPLETEDMSG']._serialized_end=31674 + _globals['_SHOWNODE']._serialized_start=31676 + _globals['_SHOWNODE']._serialized_end=31783 + _globals['_SHOWNODEMSG']._serialized_start=31785 + _globals['_SHOWNODEMSG']._serialized_end=31873 + _globals['_COMPILEDNODE']._serialized_start=31875 + _globals['_COMPILEDNODE']._serialized_end=31987 + _globals['_COMPILEDNODEMSG']._serialized_start=31989 + _globals['_COMPILEDNODEMSG']._serialized_end=32085 + _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_start=32087 + _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_end=32185 + _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_start=32187 + _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_end=32305 + _globals['_INTERNALERRORONRUN']._serialized_start=32307 + _globals['_INTERNALERRORONRUN']._serialized_end=32360 + _globals['_INTERNALERRORONRUNMSG']._serialized_start=32362 + _globals['_INTERNALERRORONRUNMSG']._serialized_end=32470 + _globals['_GENERICEXCEPTIONONRUN']._serialized_start=32472 + _globals['_GENERICEXCEPTIONONRUN']._serialized_end=32547 + _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_start=32549 + _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_end=32663 + _globals['_NODECONNECTIONRELEASEERROR']._serialized_start=32665 + _globals['_NODECONNECTIONRELEASEERROR']._serialized_end=32743 + _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_start=32745 + _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_end=32869 + _globals['_FOUNDSTATS']._serialized_start=32871 + _globals['_FOUNDSTATS']._serialized_end=32902 + _globals['_FOUNDSTATSMSG']._serialized_start=32904 + _globals['_FOUNDSTATSMSG']._serialized_end=32996 + _globals['_MAINKEYBOARDINTERRUPT']._serialized_start=32998 + _globals['_MAINKEYBOARDINTERRUPT']._serialized_end=33021 + _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_start=33023 + _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_end=33137 + _globals['_MAINENCOUNTEREDERROR']._serialized_start=33139 + _globals['_MAINENCOUNTEREDERROR']._serialized_end=33174 + _globals['_MAINENCOUNTEREDERRORMSG']._serialized_start=33176 + _globals['_MAINENCOUNTEREDERRORMSG']._serialized_end=33288 + _globals['_MAINSTACKTRACE']._serialized_start=33290 + _globals['_MAINSTACKTRACE']._serialized_end=33327 + _globals['_MAINSTACKTRACEMSG']._serialized_start=33329 + _globals['_MAINSTACKTRACEMSG']._serialized_end=33429 + _globals['_SYSTEMCOULDNOTWRITE']._serialized_start=33431 + _globals['_SYSTEMCOULDNOTWRITE']._serialized_end=33495 + _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_start=33497 + _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_end=33607 + _globals['_SYSTEMEXECUTINGCMD']._serialized_start=33609 + _globals['_SYSTEMEXECUTINGCMD']._serialized_end=33642 + _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_start=33644 + _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_end=33752 + _globals['_SYSTEMSTDOUT']._serialized_start=33754 + _globals['_SYSTEMSTDOUT']._serialized_end=33782 + _globals['_SYSTEMSTDOUTMSG']._serialized_start=33784 + _globals['_SYSTEMSTDOUTMSG']._serialized_end=33880 + _globals['_SYSTEMSTDERR']._serialized_start=33882 + _globals['_SYSTEMSTDERR']._serialized_end=33910 + _globals['_SYSTEMSTDERRMSG']._serialized_start=33912 + _globals['_SYSTEMSTDERRMSG']._serialized_end=34008 + _globals['_SYSTEMREPORTRETURNCODE']._serialized_start=34010 + _globals['_SYSTEMREPORTRETURNCODE']._serialized_end=34054 + _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_start=34056 + _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_end=34172 + _globals['_TIMINGINFOCOLLECTED']._serialized_start=34174 + _globals['_TIMINGINFOCOLLECTED']._serialized_end=34286 + _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_start=34288 + _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_end=34398 + _globals['_LOGDEBUGSTACKTRACE']._serialized_start=34400 + _globals['_LOGDEBUGSTACKTRACE']._serialized_end=34438 + _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_start=34440 + _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_end=34548 + _globals['_CHECKCLEANPATH']._serialized_start=34550 + _globals['_CHECKCLEANPATH']._serialized_end=34580 + _globals['_CHECKCLEANPATHMSG']._serialized_start=34582 + _globals['_CHECKCLEANPATHMSG']._serialized_end=34682 + _globals['_CONFIRMCLEANPATH']._serialized_start=34684 + _globals['_CONFIRMCLEANPATH']._serialized_end=34716 + _globals['_CONFIRMCLEANPATHMSG']._serialized_start=34718 + _globals['_CONFIRMCLEANPATHMSG']._serialized_end=34822 + _globals['_PROTECTEDCLEANPATH']._serialized_start=34824 + _globals['_PROTECTEDCLEANPATH']._serialized_end=34858 + _globals['_PROTECTEDCLEANPATHMSG']._serialized_start=34860 + _globals['_PROTECTEDCLEANPATHMSG']._serialized_end=34968 + _globals['_FINISHEDCLEANPATHS']._serialized_start=34970 + _globals['_FINISHEDCLEANPATHS']._serialized_end=34990 + _globals['_FINISHEDCLEANPATHSMSG']._serialized_start=34992 + _globals['_FINISHEDCLEANPATHSMSG']._serialized_end=35100 + _globals['_OPENCOMMAND']._serialized_start=35102 + _globals['_OPENCOMMAND']._serialized_end=35155 + _globals['_OPENCOMMANDMSG']._serialized_start=35157 + _globals['_OPENCOMMANDMSG']._serialized_end=35251 + _globals['_FORMATTING']._serialized_start=35253 + _globals['_FORMATTING']._serialized_end=35278 + _globals['_FORMATTINGMSG']._serialized_start=35280 + _globals['_FORMATTINGMSG']._serialized_end=35372 + _globals['_SERVINGDOCSPORT']._serialized_start=35374 + _globals['_SERVINGDOCSPORT']._serialized_end=35422 + _globals['_SERVINGDOCSPORTMSG']._serialized_start=35424 + _globals['_SERVINGDOCSPORTMSG']._serialized_end=35526 + _globals['_SERVINGDOCSACCESSINFO']._serialized_start=35528 + _globals['_SERVINGDOCSACCESSINFO']._serialized_end=35565 + _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_start=35567 + _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_end=35681 + _globals['_SERVINGDOCSEXITINFO']._serialized_start=35683 + _globals['_SERVINGDOCSEXITINFO']._serialized_end=35704 + _globals['_SERVINGDOCSEXITINFOMSG']._serialized_start=35706 + _globals['_SERVINGDOCSEXITINFOMSG']._serialized_end=35816 + _globals['_RUNRESULTWARNING']._serialized_start=35818 + _globals['_RUNRESULTWARNING']._serialized_end=35892 + _globals['_RUNRESULTWARNINGMSG']._serialized_start=35894 + _globals['_RUNRESULTWARNINGMSG']._serialized_end=35998 + _globals['_RUNRESULTFAILURE']._serialized_start=36000 + _globals['_RUNRESULTFAILURE']._serialized_end=36074 + _globals['_RUNRESULTFAILUREMSG']._serialized_start=36076 + _globals['_RUNRESULTFAILUREMSG']._serialized_end=36180 + _globals['_STATSLINE']._serialized_start=36182 + _globals['_STATSLINE']._serialized_end=36289 + _globals['_STATSLINE_STATSENTRY']._serialized_start=36245 + _globals['_STATSLINE_STATSENTRY']._serialized_end=36289 + _globals['_STATSLINEMSG']._serialized_start=36291 + _globals['_STATSLINEMSG']._serialized_end=36381 + _globals['_RUNRESULTERROR']._serialized_start=36383 + _globals['_RUNRESULTERROR']._serialized_end=36412 + _globals['_RUNRESULTERRORMSG']._serialized_start=36414 + _globals['_RUNRESULTERRORMSG']._serialized_end=36514 + _globals['_RUNRESULTERRORNOMESSAGE']._serialized_start=36516 + _globals['_RUNRESULTERRORNOMESSAGE']._serialized_end=36557 + _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_start=36559 + _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_end=36677 + _globals['_SQLCOMPILEDPATH']._serialized_start=36679 + _globals['_SQLCOMPILEDPATH']._serialized_end=36710 + _globals['_SQLCOMPILEDPATHMSG']._serialized_start=36712 + _globals['_SQLCOMPILEDPATHMSG']._serialized_end=36814 + _globals['_CHECKNODETESTFAILURE']._serialized_start=36816 + _globals['_CHECKNODETESTFAILURE']._serialized_end=36861 + _globals['_CHECKNODETESTFAILUREMSG']._serialized_start=36863 + _globals['_CHECKNODETESTFAILUREMSG']._serialized_end=36975 + _globals['_ENDOFRUNSUMMARY']._serialized_start=36977 + _globals['_ENDOFRUNSUMMARY']._serialized_end=37064 + _globals['_ENDOFRUNSUMMARYMSG']._serialized_start=37066 + _globals['_ENDOFRUNSUMMARYMSG']._serialized_end=37168 + _globals['_LOGSKIPBECAUSEERROR']._serialized_start=37170 + _globals['_LOGSKIPBECAUSEERROR']._serialized_end=37255 + _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_start=37257 + _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_end=37367 + _globals['_ENSUREGITINSTALLED']._serialized_start=37369 + _globals['_ENSUREGITINSTALLED']._serialized_end=37389 + _globals['_ENSUREGITINSTALLEDMSG']._serialized_start=37391 + _globals['_ENSUREGITINSTALLEDMSG']._serialized_end=37499 + _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_start=37501 + _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_end=37527 + _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_start=37529 + _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_end=37649 + _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_start=37651 + _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_end=37676 + _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_start=37678 + _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_end=37796 + _globals['_DISABLETRACKING']._serialized_start=37798 + _globals['_DISABLETRACKING']._serialized_end=37815 + _globals['_DISABLETRACKINGMSG']._serialized_start=37817 + _globals['_DISABLETRACKINGMSG']._serialized_end=37919 + _globals['_SENDINGEVENT']._serialized_start=37921 + _globals['_SENDINGEVENT']._serialized_end=37951 + _globals['_SENDINGEVENTMSG']._serialized_start=37953 + _globals['_SENDINGEVENTMSG']._serialized_end=38049 + _globals['_SENDEVENTFAILURE']._serialized_start=38051 + _globals['_SENDEVENTFAILURE']._serialized_end=38069 + _globals['_SENDEVENTFAILUREMSG']._serialized_start=38071 + _globals['_SENDEVENTFAILUREMSG']._serialized_end=38175 + _globals['_FLUSHEVENTS']._serialized_start=38177 + _globals['_FLUSHEVENTS']._serialized_end=38190 + _globals['_FLUSHEVENTSMSG']._serialized_start=38192 + _globals['_FLUSHEVENTSMSG']._serialized_end=38286 + _globals['_FLUSHEVENTSFAILURE']._serialized_start=38288 + _globals['_FLUSHEVENTSFAILURE']._serialized_end=38308 + _globals['_FLUSHEVENTSFAILUREMSG']._serialized_start=38310 + _globals['_FLUSHEVENTSFAILUREMSG']._serialized_end=38418 + _globals['_TRACKINGINITIALIZEFAILURE']._serialized_start=38420 + _globals['_TRACKINGINITIALIZEFAILURE']._serialized_end=38465 + _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_start=38467 + _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_end=38589 + _globals['_RUNRESULTWARNINGMESSAGE']._serialized_start=38591 + _globals['_RUNRESULTWARNINGMESSAGE']._serialized_end=38629 + _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_start=38631 + _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_end=38749 + _globals['_DEBUGCMDOUT']._serialized_start=38751 + _globals['_DEBUGCMDOUT']._serialized_end=38777 + _globals['_DEBUGCMDOUTMSG']._serialized_start=38779 + _globals['_DEBUGCMDOUTMSG']._serialized_end=38873 + _globals['_DEBUGCMDRESULT']._serialized_start=38875 + _globals['_DEBUGCMDRESULT']._serialized_end=38904 + _globals['_DEBUGCMDRESULTMSG']._serialized_start=38906 + _globals['_DEBUGCMDRESULTMSG']._serialized_end=39006 + _globals['_LISTCMDOUT']._serialized_start=39008 + _globals['_LISTCMDOUT']._serialized_end=39033 + _globals['_LISTCMDOUTMSG']._serialized_start=39035 + _globals['_LISTCMDOUTMSG']._serialized_end=39127 + _globals['_NOTE']._serialized_start=39129 + _globals['_NOTE']._serialized_end=39148 + _globals['_NOTEMSG']._serialized_start=39150 + _globals['_NOTEMSG']._serialized_end=39230 # @@protoc_insertion_point(module_scope) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 12070eab411..e2bfd49bf37 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -19,7 +19,6 @@ DepsFoundDuplicatePackage, DepsInstallInfo, DepsListSubdirectory, - DepsLockCreated, DepsLockUpdating, DepsNoPackagesFound, DepsNotifyUpdatesAvailable, @@ -177,16 +176,6 @@ def add(self): ) ) - if not self.args.dry_run: - fire_event( - DepsLockUpdating( - lock_filepath=f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" - ) - ) - self.lock() - - from typing import Dict, Any - def lock(self) -> None: lock_filepath = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" @@ -214,7 +203,7 @@ def lock(self) -> None: with open(lock_filepath, "w") as lock_obj: yaml.safe_dump(packages_installed, lock_obj) - fire_event(DepsLockCreated(lock_filepath=lock_filepath)) + fire_event(DepsLockUpdating(lock_filepath=lock_filepath)) def run(self) -> None: if self.args.ADD: @@ -236,11 +225,11 @@ def run(self) -> None: f"{self.project.project_root}/{self.project.packages_specified_path}" ) previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) - if previous_hash != current_hash: + if previous_hash != current_hash or self.args.upgrade: self.lock() - # Only specified when running add. - if self.args.dry_run: + # Early return when dry run or lock only. + if self.args.dry_run or self.args.lock: return if system.path_exists(self.project.packages_install_path): diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index e5dde5b0a15..bdd5a71b778 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -279,7 +279,6 @@ def test_event_codes(self): types.RegistryResponseMissingNestedKeys(response=""), types.RegistryResponseExtraNestedKeys(response=""), types.DepsSetDownloadDirectory(path=""), - types.DepsLockCreated(lock_filepath=""), types.DepsLockUpdating(lock_filepath=""), types.DepsAddPackage(package_name="", version="", packages_filepath=""), types.DepsFoundDuplicatePackage(removed_package={}), From 9e5017f88080b33b6084bc8e7b7e0e5853a3be63 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 21 Aug 2023 21:59:51 +0800 Subject: [PATCH 19/27] nits --- core/dbt/task/deps.py | 6 +- .../dependencies/test_dependency_options.py | 109 ++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 tests/functional/dependencies/test_dependency_options.py diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index e2bfd49bf37..4731847b17f 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -162,6 +162,8 @@ def add(self): packages_yml = self.check_for_duplicate_packages(packages_yml) packages_yml["packages"].append(new_package_entry) + self.project.packages.packages = package_config_from_data(packages_yml).packages + if packages_yml: with open(packages_yml_filepath, "w") as pkg_obj: pkg_obj.write( @@ -219,13 +221,15 @@ def run(self) -> None: lock_file_path = f"{self.project.project_root}/{PACKAGE_LOCK_FILE_NAME}" if not system.path_exists(lock_file_path): self.lock() + elif self.args.upgrade: + self.lock() else: # Check dependency definition is modified or not. current_hash = _create_sha1_hash( f"{self.project.project_root}/{self.project.packages_specified_path}" ) previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) - if previous_hash != current_hash or self.args.upgrade: + if previous_hash != current_hash: self.lock() # Early return when dry run or lock only. diff --git a/tests/functional/dependencies/test_dependency_options.py b/tests/functional/dependencies/test_dependency_options.py new file mode 100644 index 00000000000..5e72f2decc8 --- /dev/null +++ b/tests/functional/dependencies/test_dependency_options.py @@ -0,0 +1,109 @@ +import os +import shutil +import pytest + +from dbt.tests.util import run_dbt + + +class TestDepsOptions(object): + # this revision of dbt-integration-project requires dbt-utils.git@0.5.0, which the + # package config handling should detect + @pytest.fixture(scope="class") + def packages(self): + return { + "packages": [ + { + "package": "fivetran/fivetran_utils", + "version": "0.4.7", + }, + ] + } + + @pytest.fixture + def clean_start(self, project): + if os.path.exists("dbt_packages"): + shutil.rmtree("dbt_packages") + if os.path.exists("package-lock.yml"): + os.remove("package-lock.yml") + + def test_deps_lock(self, clean_start): + run_dbt(["deps", "--lock"]) + assert not os.path.exists("dbt_packages") + assert os.path.exists("package-lock.yml") + with open("package-lock.yml") as fp: + contents = fp.read() + assert ( + contents + == """packages: +- package: fivetran/fivetran_utils + version: 0.4.7 +- package: dbt-labs/dbt_utils + version: 1.1.1 +sha1_hash: 3878a8e26d5f2a42b8b034c9f1548f250f8c5038 +""" + ) + + def test_deps_default(self, clean_start): + run_dbt(["deps"]) + assert len(os.listdir("dbt_packages")) == 2 + assert os.path.exists("package-lock.yml") + with open("package-lock.yml") as fp: + contents = fp.read() + assert ( + contents + == """packages: +- package: fivetran/fivetran_utils + version: 0.4.7 +- package: dbt-labs/dbt_utils + version: 1.1.1 +sha1_hash: 3878a8e26d5f2a42b8b034c9f1548f250f8c5038 +""" + ) + + def test_deps_add(self, clean_start): + run_dbt(["deps", "--add", "--package", "dbt-labs/audit_helper", "--version", "0.9.0"]) + with open("packages.yml") as fp: + contents = fp.read() + assert ( + contents + == """packages: + - package: fivetran/fivetran_utils + version: 0.4.7 + - package: dbt-labs/audit_helper + version: 0.9.0 +""" + ) + assert len(os.listdir("dbt_packages")) == 3 + + def test_deps_add_dry_run(self, clean_start): + os.rename("packages.yml", "dependencies.yml") + run_dbt( + [ + "deps", + "--add", + "--package", + "dbt-labs/audit_helper", + "--version", + "0.9.0", + "--dry-run", + ] + ) + assert not os.path.exists("dbt_packages") + assert not os.path.exists("packages.yml") + with open("dependencies.yml") as fp: + contents = fp.read() + assert ( + contents + == """packages: + - package: fivetran/fivetran_utils + version: 0.4.7 + - package: dbt-labs/audit_helper + version: 0.9.0 +""" + ) + + def test_deps_upgrade(self, clean_start, mocker): + run_dbt(["deps", "--lock"]) + patched_lock = mocker.patch("dbt.task.deps.DepsTask.lock") + run_dbt(["deps", "--upgrade"]) + assert patched_lock.call_count == 1 From 3d9ae41ec18c31aefc2d1eb2b4a8ed1e59df7145 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Tue, 22 Aug 2023 11:17:23 +0800 Subject: [PATCH 20/27] nits --- core/dbt/task/deps.py | 26 +++++++++---------- .../dependencies/test_dependency_options.py | 4 +-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 4731847b17f..45358bb6847 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -5,6 +5,7 @@ import dbt.utils import dbt.deprecations import dbt.exceptions +import json from dbt.config.renderer import DbtProjectYamlRenderer from dbt.config.project import package_config_from_data, load_yml_dict @@ -12,6 +13,7 @@ from dbt.deps.base import downloads_directory from dbt.deps.resolver import resolve_lock_packages, resolve_packages from dbt.deps.registry import RegistryPinnedPackage +from dbt.contracts.project import Package from dbt.events.functions import fire_event from dbt.events.types import ( @@ -39,21 +41,21 @@ def increase_indent(self, flow=False, indentless=False): return super(dbtPackageDumper, self).increase_indent(flow, False) -def _create_sha1_hash(filepath): - """Create a SHA1 hash of a file +def _create_sha1_hash(packages: list[Package]): + """Create a SHA1 hash of the packages list, + this is used to determine if the packages for current execution matches + the previous lock. Args: - filepath (str): Path to file to create SHA1 hash of + list[Packages]: list of packages specified that are already rendered Returns: - str: SHA1 hash of file + str: SHA1 hash of the packages list """ - sha1_hash = sha1() + package_strs = [json.dumps(package.to_dict(), sort_keys=True) for package in packages] + package_strs = sorted(package_strs) - with open(filepath, "rb") as fp: - sha1_hash.update(fp.read()) - - return sha1_hash.hexdigest() + return sha1("\n".join(package_strs).encode("utf-8")).hexdigest() def _create_packages_yml_entry(package, version, source): @@ -199,7 +201,7 @@ def lock(self) -> None: ) packages_installed["packages"].append(lock_entry) packages_installed[PACKAGE_LOCK_HASH_KEY] = _create_sha1_hash( - f"{self.project.project_root}/{self.project.packages_specified_path}" + self.project.packages.packages ) with open(lock_filepath, "w") as lock_obj: @@ -225,9 +227,7 @@ def run(self) -> None: self.lock() else: # Check dependency definition is modified or not. - current_hash = _create_sha1_hash( - f"{self.project.project_root}/{self.project.packages_specified_path}" - ) + current_hash = _create_sha1_hash(self.project.packages.packages) previous_hash = load_yml_dict(lock_file_path).get(PACKAGE_LOCK_HASH_KEY, None) if previous_hash != current_hash: self.lock() diff --git a/tests/functional/dependencies/test_dependency_options.py b/tests/functional/dependencies/test_dependency_options.py index 5e72f2decc8..eafeb08baea 100644 --- a/tests/functional/dependencies/test_dependency_options.py +++ b/tests/functional/dependencies/test_dependency_options.py @@ -39,7 +39,7 @@ def test_deps_lock(self, clean_start): version: 0.4.7 - package: dbt-labs/dbt_utils version: 1.1.1 -sha1_hash: 3878a8e26d5f2a42b8b034c9f1548f250f8c5038 +sha1_hash: aa75fb5fbd81cfa88ca4b8275736dc157826edea """ ) @@ -56,7 +56,7 @@ def test_deps_default(self, clean_start): version: 0.4.7 - package: dbt-labs/dbt_utils version: 1.1.1 -sha1_hash: 3878a8e26d5f2a42b8b034c9f1548f250f8c5038 +sha1_hash: aa75fb5fbd81cfa88ca4b8275736dc157826edea """ ) From 80e18376577e70e99fefb8386463d84a9b6f4819 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Tue, 22 Aug 2023 13:02:52 +0800 Subject: [PATCH 21/27] nits --- core/dbt/task/deps.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 45358bb6847..c8487885359 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -1,5 +1,5 @@ from hashlib import sha1 -from typing import Any, Dict, Optional +from typing import Any, Dict, Optional, List import yaml from pathlib import Path import dbt.utils @@ -41,7 +41,7 @@ def increase_indent(self, flow=False, indentless=False): return super(dbtPackageDumper, self).increase_indent(flow, False) -def _create_sha1_hash(packages: list[Package]): +def _create_sha1_hash(packages: List[Package]): """Create a SHA1 hash of the packages list, this is used to determine if the packages for current execution matches the previous lock. From cc5611a6ec455ec354e365b530d9b83ae9a32261 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Wed, 4 Oct 2023 16:20:00 -0700 Subject: [PATCH 22/27] fix_tests --- core/dbt/cli/main.py | 2 +- core/dbt/cli/params.py | 2 +- core/dbt/task/deps.py | 6 +++--- .../functional/dependencies/test_dependency_options.py | 10 ++++++---- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index 5dc29dce2d5..d269e4a97e4 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -445,7 +445,7 @@ def debug(ctx, **kwargs): # dbt deps -@cli.group(invoke_without_command=True) +@cli.command("deps") @click.pass_context @global_flags @p.profile diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index 1f2f311df91..5cc841c728f 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -274,7 +274,7 @@ ) package_version = click.option( - "--version", envvar=None, help="Version of the package to install.", type=click.STRING + "--package-version", envvar=None, help="Version of the package to install.", type=click.STRING ) partial_parse = click.option( diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 03f0ad9ee99..3b965bd1aa1 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -150,13 +150,13 @@ def add(self): if not system.path_exists(packages_yml_filepath): raise dbt.exceptions.DbtRuntimeError("No packages definition file.") - if not self.args.version and self.args.source != "local": + if not self.args.package_version and self.args.source != "local": raise dbt.exceptions.DbtRuntimeError( f"Version is required to add a package when source is {self.args.source}" ) new_package_entry = _create_packages_yml_entry( - self.args.package, self.args.version, self.args.source + self.args.package, self.args.package_version, self.args.source ) with open(packages_yml_filepath, "r") as user_yml_obj: @@ -175,7 +175,7 @@ def add(self): fire_event( DepsAddPackage( package_name=self.args.package, - version=self.args.version, + version=self.args.package_version, packages_filepath=packages_yml_filepath, ) ) diff --git a/tests/functional/dependencies/test_dependency_options.py b/tests/functional/dependencies/test_dependency_options.py index eafeb08baea..fc28872e019 100644 --- a/tests/functional/dependencies/test_dependency_options.py +++ b/tests/functional/dependencies/test_dependency_options.py @@ -39,7 +39,7 @@ def test_deps_lock(self, clean_start): version: 0.4.7 - package: dbt-labs/dbt_utils version: 1.1.1 -sha1_hash: aa75fb5fbd81cfa88ca4b8275736dc157826edea +sha1_hash: 0592fbd3e387012e8f7c12ed04688689858f5196 """ ) @@ -56,12 +56,14 @@ def test_deps_default(self, clean_start): version: 0.4.7 - package: dbt-labs/dbt_utils version: 1.1.1 -sha1_hash: aa75fb5fbd81cfa88ca4b8275736dc157826edea +sha1_hash: 0592fbd3e387012e8f7c12ed04688689858f5196 """ ) def test_deps_add(self, clean_start): - run_dbt(["deps", "--add", "--package", "dbt-labs/audit_helper", "--version", "0.9.0"]) + run_dbt( + ["deps", "--add", "--package", "dbt-labs/audit_helper", "--package-version", "0.9.0"] + ) with open("packages.yml") as fp: contents = fp.read() assert ( @@ -83,7 +85,7 @@ def test_deps_add_dry_run(self, clean_start): "--add", "--package", "dbt-labs/audit_helper", - "--version", + "--package-version", "0.9.0", "--dry-run", ] From 4a5c15f948be4c4c3869006043e539db18bdb659 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 9 Oct 2023 12:44:48 -0700 Subject: [PATCH 23/27] pr_feedback --- core/dbt/cli/main.py | 6 ++--- core/dbt/cli/option_types.py | 20 ++++++++++++++++ core/dbt/cli/params.py | 24 ++++--------------- core/dbt/task/deps.py | 21 ++++++++-------- .../dependencies/test_dependency_options.py | 11 +++------ 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index d269e4a97e4..a015bc1a5cf 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -453,8 +453,6 @@ def debug(ctx, **kwargs): @p.project_dir @p.target @p.vars -@p.package -@p.package_version @p.source @p.dry_run @p.lock @@ -472,8 +470,8 @@ def deps(ctx, **kwargs): range, dbt-core will try to install the newer version Otherwise, deps will use `package-lock.yml` as source of truth to install packages. - There is a way to add new packages by providing an `--add` flag to deps command - which will allow user to specify `--package` and `--package-version`. + There is a way to add new packages by providing an `--add-package` flag to deps command + which will allow user to specify a package they want to add in the format of packagename@version. """ task = DepsTask(ctx.obj["flags"], ctx.obj["project"]) results = task.run() diff --git a/core/dbt/cli/option_types.py b/core/dbt/cli/option_types.py index 34d7314e867..fbb8ceb76c9 100644 --- a/core/dbt/cli/option_types.py +++ b/core/dbt/cli/option_types.py @@ -22,6 +22,26 @@ def convert(self, value, param, ctx): self.fail(f"String '{value}' is not valid YAML", param, ctx) +class Package(ParamType): + """The Click STRING type. Converts string into dict with package name and version. + Example package: + package-name@1.0.0 + package-name + """ + + name = "NewPackage" + + def convert(self, value, param, ctx): + # assume non-string values are a problem + if not isinstance(value, str): + self.fail(f"Cannot load Package from type {type(value)}", param, ctx) + try: + package_name, package_version = value.split("@") + return {"name": package_name, "version": package_version} + except ValueError: + return {"name": value, "version": None} + + class WarnErrorOptionsType(YAML): """The Click WarnErrorOptions type. Converts YAML strings into objects.""" diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index 5cc841c728f..75581122016 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -2,15 +2,15 @@ import click from dbt.cli.options import MultiOption -from dbt.cli.option_types import YAML, ChoiceTuple, WarnErrorOptionsType +from dbt.cli.option_types import YAML, ChoiceTuple, WarnErrorOptionsType, Package from dbt.cli.resolvers import default_project_dir, default_profiles_dir from dbt.version import get_version_information add_package = click.option( - "--add", - help="Add a package to current package spec with `--package` and `--package-version`", + "--add-package", + help="Add a package to current package spec, specify it as package-name@version. Change the source with --source flag.", envvar=None, - is_flag=True, + type=Package(), ) args = click.option( "--args", @@ -86,7 +86,7 @@ dry_run = click.option( "--dry-run", envvar=None, - help="Option to run `dbt deps --add` without updating package-lock.yml file.", + help="Option to run `dbt deps --add-package` without updating package-lock.yml file.", is_flag=True, ) @@ -269,13 +269,6 @@ type=click.Path(file_okay=True, dir_okay=False, writable=True), default=None, ) -package = click.option( - "--package", envvar=None, help="Name of package to add to packages.yml.", type=click.STRING -) - -package_version = click.option( - "--package-version", envvar=None, help="Version of the package to install.", type=click.STRING -) partial_parse = click.option( "--partial-parse/--no-partial-parse", @@ -501,13 +494,6 @@ default="hub", ) -source = click.option( - "--source", - envvar=None, - help="Source to download page from, must be one of hub, git, or local. Defaults to hub.", - type=click.Choice(["hub", "git", "local"], case_sensitive=True), - default="hub", -) state = click.option( "--state", diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 3b965bd1aa1..f1d116f6639 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -135,7 +135,7 @@ def check_for_duplicate_packages(self, packages_yml): """ for i, pkg_entry in enumerate(packages_yml["packages"]): for val in pkg_entry.values(): - if self.args.package in val: + if self.args.add_package["name"] in val: del packages_yml["packages"][i] fire_event(DepsFoundDuplicatePackage(removed_package=pkg_entry)) @@ -146,17 +146,18 @@ def add(self): packages_yml_filepath = ( f"{self.project.project_root}/{self.project.packages_specified_path}" ) - if not system.path_exists(packages_yml_filepath): - raise dbt.exceptions.DbtRuntimeError("No packages definition file.") + with open(packages_yml_filepath, "w") as package_yml: + yaml.safe_dump({"packages": []}, package_yml) + fire_event(Formatting("Created packages.yml")) - if not self.args.package_version and self.args.source != "local": + if not self.args.add_package["version"] and self.args.source != "local": raise dbt.exceptions.DbtRuntimeError( - f"Version is required to add a package when source is {self.args.source}" + f"Version is required in --add-package when a package when source is {self.args.source}" ) new_package_entry = _create_packages_yml_entry( - self.args.package, self.args.package_version, self.args.source + self.args.add_package["name"], self.args.add_package["version"], self.args.source ) with open(packages_yml_filepath, "r") as user_yml_obj: @@ -174,8 +175,8 @@ def add(self): fire_event( DepsAddPackage( - package_name=self.args.package, - version=self.args.package_version, + package_name=self.args.add_package["name"], + version=self.args.add_package["version"], packages_filepath=packages_yml_filepath, ) ) @@ -210,12 +211,12 @@ def lock(self) -> None: fire_event(DepsLockUpdating(lock_filepath=lock_filepath)) def run(self) -> None: - if self.args.ADD: + if self.args.add_package: self.add() else: if self.args.dry_run: raise dbt.exceptions.DbtRuntimeError( - "Invalid flag `--dry-run` when not using `--add`." + "Invalid flag `--dry-run` when not using `--add-package`." ) # Check lock file exist and generated by the same pacakges.yml diff --git a/tests/functional/dependencies/test_dependency_options.py b/tests/functional/dependencies/test_dependency_options.py index fc28872e019..13a44d8cfe5 100644 --- a/tests/functional/dependencies/test_dependency_options.py +++ b/tests/functional/dependencies/test_dependency_options.py @@ -61,9 +61,7 @@ def test_deps_default(self, clean_start): ) def test_deps_add(self, clean_start): - run_dbt( - ["deps", "--add", "--package", "dbt-labs/audit_helper", "--package-version", "0.9.0"] - ) + run_dbt(["deps", "--add-package", "dbt-labs/audit_helper@0.9.0"]) with open("packages.yml") as fp: contents = fp.read() assert ( @@ -82,11 +80,8 @@ def test_deps_add_dry_run(self, clean_start): run_dbt( [ "deps", - "--add", - "--package", - "dbt-labs/audit_helper", - "--package-version", - "0.9.0", + "--add-package", + "dbt-labs/audit_helper@0.9.0", "--dry-run", ] ) From d312b095f3b0378083007a838fd2a8b8d70f81be Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 9 Oct 2023 12:52:41 -0700 Subject: [PATCH 24/27] nits --- core/dbt/task/deps.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index f1d116f6639..9d41c9b6098 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -58,7 +58,7 @@ def _create_sha1_hash(packages: List[Package]): return sha1("\n".join(package_strs).encode("utf-8")).hexdigest() -def _create_packages_yml_entry(package, version, source): +def _create_packages_yml_entry(package: str, version: Optional[str], source: str) -> dict: """Create a formatted entry to add to `packages.yml` or `package-lock.yml` file Args: @@ -82,7 +82,7 @@ def _create_packages_yml_entry(package, version, source): if version: if "," in version: - version = version.split(",") + version = version.split(",") # type: ignore packages_yml_entry[version_key] = version From 0ebb1ace2c37f0fe4b038e5d818d41198a14fe26 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 9 Oct 2023 12:53:44 -0700 Subject: [PATCH 25/27] nits --- core/dbt/task/deps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 9d41c9b6098..113c2f6672c 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -41,7 +41,7 @@ def increase_indent(self, flow=False, indentless=False): return super(dbtPackageDumper, self).increase_indent(flow, False) -def _create_sha1_hash(packages: List[Package]): +def _create_sha1_hash(packages: List[Package]) -> str: """Create a SHA1 hash of the packages list, this is used to determine if the packages for current execution matches the previous lock. From 22f917d89b33f93cea2fe799f2a1edbfc2aed9ba Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 9 Oct 2023 16:37:14 -0700 Subject: [PATCH 26/27] move_check --- core/dbt/cli/main.py | 15 ++++++++++++++- core/dbt/task/deps.py | 10 ---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index a015bc1a5cf..fa3f6663e93 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -473,7 +473,20 @@ def deps(ctx, **kwargs): There is a way to add new packages by providing an `--add-package` flag to deps command which will allow user to specify a package they want to add in the format of packagename@version. """ - task = DepsTask(ctx.obj["flags"], ctx.obj["project"]) + flags = ctx.obj["flags"] + if flags.ADD_PACKAGE: + if not flags.ADD_PACKAGE["version"] and flags.SOURCE != "local": + raise BadOptionUsage( + message=f"Version is required in --add-package when a package when source is {flags.SOURCE}", + option_name="--add-package", + ) + else: + if flags.DRY_RUN: + raise BadOptionUsage( + message="Invalid flag `--dry-run` when not using `--add-package`.", + option_name="--dry-run", + ) + task = DepsTask(flags, ctx.obj["project"]) results = task.run() success = task.interpret_results(results) return results, success diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 113c2f6672c..1433c9a48ca 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -151,11 +151,6 @@ def add(self): yaml.safe_dump({"packages": []}, package_yml) fire_event(Formatting("Created packages.yml")) - if not self.args.add_package["version"] and self.args.source != "local": - raise dbt.exceptions.DbtRuntimeError( - f"Version is required in --add-package when a package when source is {self.args.source}" - ) - new_package_entry = _create_packages_yml_entry( self.args.add_package["name"], self.args.add_package["version"], self.args.source ) @@ -213,11 +208,6 @@ def lock(self) -> None: def run(self) -> None: if self.args.add_package: self.add() - else: - if self.args.dry_run: - raise dbt.exceptions.DbtRuntimeError( - "Invalid flag `--dry-run` when not using `--add-package`." - ) # Check lock file exist and generated by the same pacakges.yml # or dependencies.yml. From 567677127db0dea95dbda192c1c008b064721315 Mon Sep 17 00:00:00 2001 From: Chenyu Li Date: Mon, 9 Oct 2023 20:16:34 -0700 Subject: [PATCH 27/27] Update Features-20230125-165933.yaml --- .changes/unreleased/Features-20230125-165933.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/unreleased/Features-20230125-165933.yaml b/.changes/unreleased/Features-20230125-165933.yaml index 28d8132d5a4..0a20fe23b7e 100644 --- a/.changes/unreleased/Features-20230125-165933.yaml +++ b/.changes/unreleased/Features-20230125-165933.yaml @@ -2,5 +2,5 @@ kind: Features body: add log file of installed packages via dbt deps time: 2023-01-25T16:59:33.786304-05:00 custom: - Author: jusbaldw + Author: jusbaldw ChenyuLInx Issue: "6643"