From f9ee27b4d4e20e390f71afb4e88e35af18847d72 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 11:08:24 -0400 Subject: [PATCH 01/15] first pass: external nodes --- core/dbt/cli/main.py | 1 - core/dbt/cli/requires.py | 9 +- core/dbt/contracts/graph/manifest.py | 5 - core/dbt/contracts/publication.py | 70 +- core/dbt/events/types.proto | 12 - core/dbt/events/types.py | 13 - core/dbt/events/types_pb2.py | 646 +++++++++--------- core/dbt/exceptions.py | 31 +- core/dbt/parser/manifest.py | 135 +--- core/dbt/plugins/__init__.py | 18 + core/dbt/plugins/contracts.py | 6 + core/dbt/plugins/exceptions.py | 2 + core/dbt/plugins/manager.py | 85 +++ core/dbt/plugins/manifest.py | 6 + core/dbt/tests/util.py | 7 +- schemas/dbt/publication/v1.json | 189 ----- scripts/collect-artifact-schema.py | 4 +- tests/functional/multi_project/conftest.py | 78 --- .../multi_project/test_publication.py | 300 -------- tests/functional/partial_parsing/fixtures.py | 64 -- .../partial_parsing/test_partial_parsing.py | 50 -- tests/unit/test_events.py | 2 - 22 files changed, 462 insertions(+), 1271 deletions(-) create mode 100644 core/dbt/plugins/__init__.py create mode 100644 core/dbt/plugins/contracts.py create mode 100644 core/dbt/plugins/exceptions.py create mode 100644 core/dbt/plugins/manager.py create mode 100644 core/dbt/plugins/manifest.py delete mode 100644 schemas/dbt/publication/v1.json delete mode 100644 tests/functional/multi_project/conftest.py delete mode 100644 tests/functional/multi_project/test_publication.py diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index bd8d92a4d62..8d036a972a6 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -76,7 +76,6 @@ def invoke(self, args: List[str], **kwargs) -> dbtRunnerResult: dbt_ctx.obj = { "manifest": self.manifest, "callbacks": self.callbacks, - "_publications": kwargs.get("publications"), } for key, value in kwargs.items(): diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index 340fc2380fe..b262bf6e547 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -23,6 +23,7 @@ from dbt.profiler import profiler from dbt.tracking import active_user, initialize_from_flags, track_run from dbt.utils import cast_dict_to_dict_of_strings +from dbt.plugins import setup_plugin_manager, get_plugin_manager from click import Context from functools import update_wrapper @@ -68,6 +69,9 @@ def wrapper(*args, **kwargs): # Adapter management ctx.with_resource(adapter_management()) + # Plugins + setup_plugin_manager() + return func(*args, **kwargs) return update_wrapper(wrapper, func) @@ -242,12 +246,15 @@ def wrapper(*args, **kwargs): manifest = ManifestLoader.get_full_manifest( runtime_config, write_perf_info=write_perf_info, - publications=ctx.obj.get("_publications"), ) ctx.obj["manifest"] = manifest if write and ctx.obj["flags"].write_json: write_manifest(manifest, ctx.obj["runtime_config"].project_target_path) + pm = get_plugin_manager() + artifacts = pm.get_external_artifacts(manifest, runtime_config) + for path, artifact in artifacts.items(): + artifact.write(path) return func(*args, **kwargs) diff --git a/core/dbt/contracts/graph/manifest.py b/core/dbt/contracts/graph/manifest.py index 92f82dff4b8..971383c831d 100644 --- a/core/dbt/contracts/graph/manifest.py +++ b/core/dbt/contracts/graph/manifest.py @@ -22,8 +22,6 @@ from typing_extensions import Protocol from uuid import UUID -from dbt.contracts.publication import PublicationConfig - from dbt.contracts.graph.nodes import ( BaseNode, Documentation, @@ -700,7 +698,6 @@ class Manifest(MacroMethods, DataClassMessagePackMixin, dbtClassMixin): source_patches: MutableMapping[SourceKey, SourcePatch] = field(default_factory=dict) disabled: MutableMapping[str, List[GraphMemberNode]] = field(default_factory=dict) env_vars: MutableMapping[str, str] = field(default_factory=dict) - publications: MutableMapping[str, PublicationConfig] = field(default_factory=dict) semantic_models: MutableMapping[str, SemanticModel] = field(default_factory=dict) _doc_lookup: Optional[DocLookup] = field( @@ -851,7 +848,6 @@ def deepcopy(self): disabled={k: _deepcopy(v) for k, v in self.disabled.items()}, files={k: _deepcopy(v) for k, v in self.files.items()}, state_check=_deepcopy(self.state_check), - publications={k: _deepcopy(v) for k, v in self.publications.items()}, semantic_models={k: _deepcopy(v) for k, v in self.semantic_models.items()}, ) copy.build_flat_graph() @@ -1297,7 +1293,6 @@ def __reduce_ex__(self, protocol): self.source_patches, self.disabled, self.env_vars, - self.publications, self.semantic_models, self._doc_lookup, self._source_lookup, diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py index c546708913e..b54e66fee37 100644 --- a/core/dbt/contracts/publication.py +++ b/core/dbt/contracts/publication.py @@ -1,16 +1,11 @@ -from typing import Any, Dict, List, Optional -from datetime import datetime +from typing import Any, Dict, List from dataclasses import dataclass, field from dbt.contracts.util import ( AdditionalPropertiesMixin, - ArtifactMixin, - BaseArtifactMetadata, - schema_version, ) -from dbt.contracts.graph.unparsed import NodeVersion from dbt.dataclass_schema import dbtClassMixin, ExtensibleDbtClassMixin @@ -23,66 +18,3 @@ class ProjectDependency(AdditionalPropertiesMixin, ExtensibleDbtClassMixin): @dataclass class ProjectDependencies(dbtClassMixin): projects: List[ProjectDependency] = field(default_factory=list) - - -@dataclass -class PublicationMetadata(BaseArtifactMetadata): - dbt_schema_version: str = field( - default_factory=lambda: str(PublicationArtifact.dbt_schema_version) - ) - adapter_type: Optional[str] = None - quoting: Dict[str, Any] = field(default_factory=dict) - - -@dataclass -class PublicModel(dbtClassMixin): - """Used to represent cross-project models""" - - name: str - package_name: str - unique_id: str - relation_name: str - identifier: str - schema: str - database: Optional[str] = None - version: Optional[NodeVersion] = None - latest_version: Optional[NodeVersion] = None - # list of model unique_ids - public_node_dependencies: List[str] = field(default_factory=list) - generated_at: datetime = field(default_factory=datetime.utcnow) - deprecation_date: Optional[datetime] = None - - -@dataclass -class PublicationMandatory: - project_name: str - - -@dataclass -@schema_version("publication", 1) -class PublicationArtifact(ArtifactMixin, PublicationMandatory): - public_models: Dict[str, PublicModel] = field(default_factory=dict) - metadata: PublicationMetadata = field(default_factory=PublicationMetadata) - # list of project name strings - dependencies: List[str] = field(default_factory=list) - - -@dataclass -class PublicationConfig(ArtifactMixin, PublicationMandatory): - """This is for the part of the publication artifact which is stored in - the internal manifest. The public_nodes are stored separately in the manifest, - and just the unique_ids of the public models are stored here.""" - - metadata: PublicationMetadata = field(default_factory=PublicationMetadata) - # list of project name strings - dependencies: List[str] = field(default_factory=list) - public_node_ids: List[str] = field(default_factory=list) - - @classmethod - def from_publication(cls, publication: PublicationArtifact): - return cls( - project_name=publication.project_name, - metadata=publication.metadata, - dependencies=publication.dependencies, - public_node_ids=list(publication.public_models.keys()), - ) diff --git a/core/dbt/events/types.proto b/core/dbt/events/types.proto index 428507f32c1..9739e60f08b 100644 --- a/core/dbt/events/types.proto +++ b/core/dbt/events/types.proto @@ -1517,18 +1517,6 @@ message NoNodesForSelectionCriteriaMsg { NoNodesForSelectionCriteria data = 2; } -// P - Artifacts - -// P001 -message PublicationArtifactAvailable { - google.protobuf.Struct pub_artifact = 1; -} - -message PublicationArtifactAvailableMsg { - EventInfo info = 1; - PublicationArtifactAvailable data = 2; -} - // Q - Node execution // Q001 diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index bcfacc17894..796eb4f0410 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -1468,19 +1468,6 @@ def message(self) -> str: # ======================================================= -class PublicationArtifactAvailable(DebugLevel): - def code(self): - return "P001" - - def message(self) -> str: - return "Publication artifact available" - - -# ======================================================= -# Q - Node execution -# ======================================================= - - class RunningOperationCaughtError(ErrorLevel): def code(self): return "Q001" diff --git a/core/dbt/events/types_pb2.py b/core/dbt/events/types_pb2.py index feb62dc3534..bca70a30ef4 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\"/\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\"M\n\x1cPublicationArtifactAvailable\x12-\n\x0cpub_artifact\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x80\x01\n\x1fPublicationArtifactAvailableMsg\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.PublicationArtifactAvailable\"*\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\"\"\n\x13\x46irstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"n\n\x16\x46irstRunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.FirstRunResultError\"\'\n\x18\x41\x66terFirstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"x\n\x1b\x41\x66terFirstRunResultErrorMsg\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.AfterFirstRunResultError\"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\"/\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\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\"\"\n\x13\x46irstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"n\n\x16\x46irstRunResultErrorMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.FirstRunResultError\"\'\n\x18\x41\x66terFirstRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\"x\n\x1b\x41\x66terFirstRunResultErrorMsg\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.AfterFirstRunResultError\"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) @@ -573,328 +573,324 @@ _globals['_NONODESFORSELECTIONCRITERIA']._serialized_end=24912 _globals['_NONODESFORSELECTIONCRITERIAMSG']._serialized_start=24914 _globals['_NONODESFORSELECTIONCRITERIAMSG']._serialized_end=25040 - _globals['_PUBLICATIONARTIFACTAVAILABLE']._serialized_start=25042 - _globals['_PUBLICATIONARTIFACTAVAILABLE']._serialized_end=25119 - _globals['_PUBLICATIONARTIFACTAVAILABLEMSG']._serialized_start=25122 - _globals['_PUBLICATIONARTIFACTAVAILABLEMSG']._serialized_end=25250 - _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_start=25252 - _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_end=25294 - _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_start=25296 - _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_end=25422 - _globals['_COMPILECOMPLETE']._serialized_start=25424 - _globals['_COMPILECOMPLETE']._serialized_end=25441 - _globals['_COMPILECOMPLETEMSG']._serialized_start=25443 - _globals['_COMPILECOMPLETEMSG']._serialized_end=25545 - _globals['_FRESHNESSCHECKCOMPLETE']._serialized_start=25547 - _globals['_FRESHNESSCHECKCOMPLETE']._serialized_end=25571 - _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_start=25573 - _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_end=25689 - _globals['_SEEDHEADER']._serialized_start=25691 - _globals['_SEEDHEADER']._serialized_end=25719 - _globals['_SEEDHEADERMSG']._serialized_start=25721 - _globals['_SEEDHEADERMSG']._serialized_end=25813 - _globals['_SQLRUNNEREXCEPTION']._serialized_start=25815 - _globals['_SQLRUNNEREXCEPTION']._serialized_end=25866 - _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_start=25868 - _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_end=25976 - _globals['_LOGTESTRESULT']._serialized_start=25979 - _globals['_LOGTESTRESULT']._serialized_end=26147 - _globals['_LOGTESTRESULTMSG']._serialized_start=26149 - _globals['_LOGTESTRESULTMSG']._serialized_end=26247 - _globals['_LOGSTARTLINE']._serialized_start=26249 - _globals['_LOGSTARTLINE']._serialized_end=26356 - _globals['_LOGSTARTLINEMSG']._serialized_start=26358 - _globals['_LOGSTARTLINEMSG']._serialized_end=26454 - _globals['_LOGMODELRESULT']._serialized_start=26457 - _globals['_LOGMODELRESULT']._serialized_end=26606 - _globals['_LOGMODELRESULTMSG']._serialized_start=26608 - _globals['_LOGMODELRESULTMSG']._serialized_end=26708 - _globals['_LOGSNAPSHOTRESULT']._serialized_start=26711 - _globals['_LOGSNAPSHOTRESULT']._serialized_end=26961 - _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_start=26919 - _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_end=26961 - _globals['_LOGSNAPSHOTRESULTMSG']._serialized_start=26963 - _globals['_LOGSNAPSHOTRESULTMSG']._serialized_end=27069 - _globals['_LOGSEEDRESULT']._serialized_start=27072 - _globals['_LOGSEEDRESULT']._serialized_end=27257 - _globals['_LOGSEEDRESULTMSG']._serialized_start=27259 - _globals['_LOGSEEDRESULTMSG']._serialized_end=27357 - _globals['_LOGFRESHNESSRESULT']._serialized_start=27360 - _globals['_LOGFRESHNESSRESULT']._serialized_end=27533 - _globals['_LOGFRESHNESSRESULTMSG']._serialized_start=27535 - _globals['_LOGFRESHNESSRESULTMSG']._serialized_end=27643 - _globals['_LOGCANCELLINE']._serialized_start=27645 - _globals['_LOGCANCELLINE']._serialized_end=27679 - _globals['_LOGCANCELLINEMSG']._serialized_start=27681 - _globals['_LOGCANCELLINEMSG']._serialized_end=27779 - _globals['_DEFAULTSELECTOR']._serialized_start=27781 - _globals['_DEFAULTSELECTOR']._serialized_end=27812 - _globals['_DEFAULTSELECTORMSG']._serialized_start=27814 - _globals['_DEFAULTSELECTORMSG']._serialized_end=27916 - _globals['_NODESTART']._serialized_start=27918 - _globals['_NODESTART']._serialized_end=27971 - _globals['_NODESTARTMSG']._serialized_start=27973 - _globals['_NODESTARTMSG']._serialized_end=28063 - _globals['_NODEFINISHED']._serialized_start=28065 - _globals['_NODEFINISHED']._serialized_end=28168 - _globals['_NODEFINISHEDMSG']._serialized_start=28170 - _globals['_NODEFINISHEDMSG']._serialized_end=28266 - _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_start=28268 - _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_end=28311 - _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_start=28313 - _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_end=28439 - _globals['_CONCURRENCYLINE']._serialized_start=28441 - _globals['_CONCURRENCYLINE']._serialized_end=28520 - _globals['_CONCURRENCYLINEMSG']._serialized_start=28522 - _globals['_CONCURRENCYLINEMSG']._serialized_end=28624 - _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_start=28626 - _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_end=28695 - _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_start=28697 - _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_end=28819 - _globals['_NODECOMPILING']._serialized_start=28821 - _globals['_NODECOMPILING']._serialized_end=28878 - _globals['_NODECOMPILINGMSG']._serialized_start=28880 - _globals['_NODECOMPILINGMSG']._serialized_end=28978 - _globals['_NODEEXECUTING']._serialized_start=28980 - _globals['_NODEEXECUTING']._serialized_end=29037 - _globals['_NODEEXECUTINGMSG']._serialized_start=29039 - _globals['_NODEEXECUTINGMSG']._serialized_end=29137 - _globals['_LOGHOOKSTARTLINE']._serialized_start=29139 - _globals['_LOGHOOKSTARTLINE']._serialized_end=29248 - _globals['_LOGHOOKSTARTLINEMSG']._serialized_start=29250 - _globals['_LOGHOOKSTARTLINEMSG']._serialized_end=29354 - _globals['_LOGHOOKENDLINE']._serialized_start=29357 - _globals['_LOGHOOKENDLINE']._serialized_end=29504 - _globals['_LOGHOOKENDLINEMSG']._serialized_start=29506 - _globals['_LOGHOOKENDLINEMSG']._serialized_end=29606 - _globals['_SKIPPINGDETAILS']._serialized_start=29609 - _globals['_SKIPPINGDETAILS']._serialized_end=29756 - _globals['_SKIPPINGDETAILSMSG']._serialized_start=29758 - _globals['_SKIPPINGDETAILSMSG']._serialized_end=29860 - _globals['_NOTHINGTODO']._serialized_start=29862 - _globals['_NOTHINGTODO']._serialized_end=29875 - _globals['_NOTHINGTODOMSG']._serialized_start=29877 - _globals['_NOTHINGTODOMSG']._serialized_end=29971 - _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_start=29973 - _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_end=30017 - _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_start=30020 - _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_end=30150 - _globals['_ENDRUNRESULT']._serialized_start=30153 - _globals['_ENDRUNRESULT']._serialized_end=30300 - _globals['_ENDRUNRESULTMSG']._serialized_start=30302 - _globals['_ENDRUNRESULTMSG']._serialized_end=30398 - _globals['_NONODESSELECTED']._serialized_start=30400 - _globals['_NONODESSELECTED']._serialized_end=30417 - _globals['_NONODESSELECTEDMSG']._serialized_start=30419 - _globals['_NONODESSELECTEDMSG']._serialized_end=30521 - _globals['_COMMANDCOMPLETED']._serialized_start=30523 - _globals['_COMMANDCOMPLETED']._serialized_end=30642 - _globals['_COMMANDCOMPLETEDMSG']._serialized_start=30644 - _globals['_COMMANDCOMPLETEDMSG']._serialized_end=30748 - _globals['_SHOWNODE']._serialized_start=30750 - _globals['_SHOWNODE']._serialized_end=30857 - _globals['_SHOWNODEMSG']._serialized_start=30859 - _globals['_SHOWNODEMSG']._serialized_end=30947 - _globals['_COMPILEDNODE']._serialized_start=30949 - _globals['_COMPILEDNODE']._serialized_end=31061 - _globals['_COMPILEDNODEMSG']._serialized_start=31063 - _globals['_COMPILEDNODEMSG']._serialized_end=31159 - _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_start=31161 - _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_end=31259 - _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_start=31261 - _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_end=31379 - _globals['_INTERNALERRORONRUN']._serialized_start=31381 - _globals['_INTERNALERRORONRUN']._serialized_end=31434 - _globals['_INTERNALERRORONRUNMSG']._serialized_start=31436 - _globals['_INTERNALERRORONRUNMSG']._serialized_end=31544 - _globals['_GENERICEXCEPTIONONRUN']._serialized_start=31546 - _globals['_GENERICEXCEPTIONONRUN']._serialized_end=31621 - _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_start=31623 - _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_end=31737 - _globals['_NODECONNECTIONRELEASEERROR']._serialized_start=31739 - _globals['_NODECONNECTIONRELEASEERROR']._serialized_end=31817 - _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_start=31819 - _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_end=31943 - _globals['_FOUNDSTATS']._serialized_start=31945 - _globals['_FOUNDSTATS']._serialized_end=31976 - _globals['_FOUNDSTATSMSG']._serialized_start=31978 - _globals['_FOUNDSTATSMSG']._serialized_end=32070 - _globals['_MAINKEYBOARDINTERRUPT']._serialized_start=32072 - _globals['_MAINKEYBOARDINTERRUPT']._serialized_end=32095 - _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_start=32097 - _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_end=32211 - _globals['_MAINENCOUNTEREDERROR']._serialized_start=32213 - _globals['_MAINENCOUNTEREDERROR']._serialized_end=32248 - _globals['_MAINENCOUNTEREDERRORMSG']._serialized_start=32250 - _globals['_MAINENCOUNTEREDERRORMSG']._serialized_end=32362 - _globals['_MAINSTACKTRACE']._serialized_start=32364 - _globals['_MAINSTACKTRACE']._serialized_end=32401 - _globals['_MAINSTACKTRACEMSG']._serialized_start=32403 - _globals['_MAINSTACKTRACEMSG']._serialized_end=32503 - _globals['_SYSTEMCOULDNOTWRITE']._serialized_start=32505 - _globals['_SYSTEMCOULDNOTWRITE']._serialized_end=32569 - _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_start=32571 - _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_end=32681 - _globals['_SYSTEMEXECUTINGCMD']._serialized_start=32683 - _globals['_SYSTEMEXECUTINGCMD']._serialized_end=32716 - _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_start=32718 - _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_end=32826 - _globals['_SYSTEMSTDOUT']._serialized_start=32828 - _globals['_SYSTEMSTDOUT']._serialized_end=32856 - _globals['_SYSTEMSTDOUTMSG']._serialized_start=32858 - _globals['_SYSTEMSTDOUTMSG']._serialized_end=32954 - _globals['_SYSTEMSTDERR']._serialized_start=32956 - _globals['_SYSTEMSTDERR']._serialized_end=32984 - _globals['_SYSTEMSTDERRMSG']._serialized_start=32986 - _globals['_SYSTEMSTDERRMSG']._serialized_end=33082 - _globals['_SYSTEMREPORTRETURNCODE']._serialized_start=33084 - _globals['_SYSTEMREPORTRETURNCODE']._serialized_end=33128 - _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_start=33130 - _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_end=33246 - _globals['_TIMINGINFOCOLLECTED']._serialized_start=33248 - _globals['_TIMINGINFOCOLLECTED']._serialized_end=33360 - _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_start=33362 - _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_end=33472 - _globals['_LOGDEBUGSTACKTRACE']._serialized_start=33474 - _globals['_LOGDEBUGSTACKTRACE']._serialized_end=33512 - _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_start=33514 - _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_end=33622 - _globals['_CHECKCLEANPATH']._serialized_start=33624 - _globals['_CHECKCLEANPATH']._serialized_end=33654 - _globals['_CHECKCLEANPATHMSG']._serialized_start=33656 - _globals['_CHECKCLEANPATHMSG']._serialized_end=33756 - _globals['_CONFIRMCLEANPATH']._serialized_start=33758 - _globals['_CONFIRMCLEANPATH']._serialized_end=33790 - _globals['_CONFIRMCLEANPATHMSG']._serialized_start=33792 - _globals['_CONFIRMCLEANPATHMSG']._serialized_end=33896 - _globals['_PROTECTEDCLEANPATH']._serialized_start=33898 - _globals['_PROTECTEDCLEANPATH']._serialized_end=33932 - _globals['_PROTECTEDCLEANPATHMSG']._serialized_start=33934 - _globals['_PROTECTEDCLEANPATHMSG']._serialized_end=34042 - _globals['_FINISHEDCLEANPATHS']._serialized_start=34044 - _globals['_FINISHEDCLEANPATHS']._serialized_end=34064 - _globals['_FINISHEDCLEANPATHSMSG']._serialized_start=34066 - _globals['_FINISHEDCLEANPATHSMSG']._serialized_end=34174 - _globals['_OPENCOMMAND']._serialized_start=34176 - _globals['_OPENCOMMAND']._serialized_end=34229 - _globals['_OPENCOMMANDMSG']._serialized_start=34231 - _globals['_OPENCOMMANDMSG']._serialized_end=34325 - _globals['_FORMATTING']._serialized_start=34327 - _globals['_FORMATTING']._serialized_end=34352 - _globals['_FORMATTINGMSG']._serialized_start=34354 - _globals['_FORMATTINGMSG']._serialized_end=34446 - _globals['_SERVINGDOCSPORT']._serialized_start=34448 - _globals['_SERVINGDOCSPORT']._serialized_end=34496 - _globals['_SERVINGDOCSPORTMSG']._serialized_start=34498 - _globals['_SERVINGDOCSPORTMSG']._serialized_end=34600 - _globals['_SERVINGDOCSACCESSINFO']._serialized_start=34602 - _globals['_SERVINGDOCSACCESSINFO']._serialized_end=34639 - _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_start=34641 - _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_end=34755 - _globals['_SERVINGDOCSEXITINFO']._serialized_start=34757 - _globals['_SERVINGDOCSEXITINFO']._serialized_end=34778 - _globals['_SERVINGDOCSEXITINFOMSG']._serialized_start=34780 - _globals['_SERVINGDOCSEXITINFOMSG']._serialized_end=34890 - _globals['_RUNRESULTWARNING']._serialized_start=34892 - _globals['_RUNRESULTWARNING']._serialized_end=34966 - _globals['_RUNRESULTWARNINGMSG']._serialized_start=34968 - _globals['_RUNRESULTWARNINGMSG']._serialized_end=35072 - _globals['_RUNRESULTFAILURE']._serialized_start=35074 - _globals['_RUNRESULTFAILURE']._serialized_end=35148 - _globals['_RUNRESULTFAILUREMSG']._serialized_start=35150 - _globals['_RUNRESULTFAILUREMSG']._serialized_end=35254 - _globals['_STATSLINE']._serialized_start=35256 - _globals['_STATSLINE']._serialized_end=35363 - _globals['_STATSLINE_STATSENTRY']._serialized_start=35319 - _globals['_STATSLINE_STATSENTRY']._serialized_end=35363 - _globals['_STATSLINEMSG']._serialized_start=35365 - _globals['_STATSLINEMSG']._serialized_end=35455 - _globals['_RUNRESULTERROR']._serialized_start=35457 - _globals['_RUNRESULTERROR']._serialized_end=35486 - _globals['_RUNRESULTERRORMSG']._serialized_start=35488 - _globals['_RUNRESULTERRORMSG']._serialized_end=35588 - _globals['_RUNRESULTERRORNOMESSAGE']._serialized_start=35590 - _globals['_RUNRESULTERRORNOMESSAGE']._serialized_end=35631 - _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_start=35633 - _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_end=35751 - _globals['_SQLCOMPILEDPATH']._serialized_start=35753 - _globals['_SQLCOMPILEDPATH']._serialized_end=35784 - _globals['_SQLCOMPILEDPATHMSG']._serialized_start=35786 - _globals['_SQLCOMPILEDPATHMSG']._serialized_end=35888 - _globals['_CHECKNODETESTFAILURE']._serialized_start=35890 - _globals['_CHECKNODETESTFAILURE']._serialized_end=35935 - _globals['_CHECKNODETESTFAILUREMSG']._serialized_start=35937 - _globals['_CHECKNODETESTFAILUREMSG']._serialized_end=36049 - _globals['_FIRSTRUNRESULTERROR']._serialized_start=36051 - _globals['_FIRSTRUNRESULTERROR']._serialized_end=36085 - _globals['_FIRSTRUNRESULTERRORMSG']._serialized_start=36087 - _globals['_FIRSTRUNRESULTERRORMSG']._serialized_end=36197 - _globals['_AFTERFIRSTRUNRESULTERROR']._serialized_start=36199 - _globals['_AFTERFIRSTRUNRESULTERROR']._serialized_end=36238 - _globals['_AFTERFIRSTRUNRESULTERRORMSG']._serialized_start=36240 - _globals['_AFTERFIRSTRUNRESULTERRORMSG']._serialized_end=36360 - _globals['_ENDOFRUNSUMMARY']._serialized_start=36362 - _globals['_ENDOFRUNSUMMARY']._serialized_end=36449 - _globals['_ENDOFRUNSUMMARYMSG']._serialized_start=36451 - _globals['_ENDOFRUNSUMMARYMSG']._serialized_end=36553 - _globals['_LOGSKIPBECAUSEERROR']._serialized_start=36555 - _globals['_LOGSKIPBECAUSEERROR']._serialized_end=36640 - _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_start=36642 - _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_end=36752 - _globals['_ENSUREGITINSTALLED']._serialized_start=36754 - _globals['_ENSUREGITINSTALLED']._serialized_end=36774 - _globals['_ENSUREGITINSTALLEDMSG']._serialized_start=36776 - _globals['_ENSUREGITINSTALLEDMSG']._serialized_end=36884 - _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_start=36886 - _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_end=36912 - _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_start=36914 - _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_end=37034 - _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_start=37036 - _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_end=37061 - _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_start=37063 - _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_end=37181 - _globals['_DISABLETRACKING']._serialized_start=37183 - _globals['_DISABLETRACKING']._serialized_end=37200 - _globals['_DISABLETRACKINGMSG']._serialized_start=37202 - _globals['_DISABLETRACKINGMSG']._serialized_end=37304 - _globals['_SENDINGEVENT']._serialized_start=37306 - _globals['_SENDINGEVENT']._serialized_end=37336 - _globals['_SENDINGEVENTMSG']._serialized_start=37338 - _globals['_SENDINGEVENTMSG']._serialized_end=37434 - _globals['_SENDEVENTFAILURE']._serialized_start=37436 - _globals['_SENDEVENTFAILURE']._serialized_end=37454 - _globals['_SENDEVENTFAILUREMSG']._serialized_start=37456 - _globals['_SENDEVENTFAILUREMSG']._serialized_end=37560 - _globals['_FLUSHEVENTS']._serialized_start=37562 - _globals['_FLUSHEVENTS']._serialized_end=37575 - _globals['_FLUSHEVENTSMSG']._serialized_start=37577 - _globals['_FLUSHEVENTSMSG']._serialized_end=37671 - _globals['_FLUSHEVENTSFAILURE']._serialized_start=37673 - _globals['_FLUSHEVENTSFAILURE']._serialized_end=37693 - _globals['_FLUSHEVENTSFAILUREMSG']._serialized_start=37695 - _globals['_FLUSHEVENTSFAILUREMSG']._serialized_end=37803 - _globals['_TRACKINGINITIALIZEFAILURE']._serialized_start=37805 - _globals['_TRACKINGINITIALIZEFAILURE']._serialized_end=37850 - _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_start=37852 - _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_end=37974 - _globals['_RUNRESULTWARNINGMESSAGE']._serialized_start=37976 - _globals['_RUNRESULTWARNINGMESSAGE']._serialized_end=38014 - _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_start=38016 - _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_end=38134 - _globals['_DEBUGCMDOUT']._serialized_start=38136 - _globals['_DEBUGCMDOUT']._serialized_end=38162 - _globals['_DEBUGCMDOUTMSG']._serialized_start=38164 - _globals['_DEBUGCMDOUTMSG']._serialized_end=38258 - _globals['_DEBUGCMDRESULT']._serialized_start=38260 - _globals['_DEBUGCMDRESULT']._serialized_end=38289 - _globals['_DEBUGCMDRESULTMSG']._serialized_start=38291 - _globals['_DEBUGCMDRESULTMSG']._serialized_end=38391 - _globals['_LISTCMDOUT']._serialized_start=38393 - _globals['_LISTCMDOUT']._serialized_end=38418 - _globals['_LISTCMDOUTMSG']._serialized_start=38420 - _globals['_LISTCMDOUTMSG']._serialized_end=38512 - _globals['_NOTE']._serialized_start=38514 - _globals['_NOTE']._serialized_end=38533 - _globals['_NOTEMSG']._serialized_start=38535 - _globals['_NOTEMSG']._serialized_end=38615 + _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_start=25042 + _globals['_RUNNINGOPERATIONCAUGHTERROR']._serialized_end=25084 + _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_start=25086 + _globals['_RUNNINGOPERATIONCAUGHTERRORMSG']._serialized_end=25212 + _globals['_COMPILECOMPLETE']._serialized_start=25214 + _globals['_COMPILECOMPLETE']._serialized_end=25231 + _globals['_COMPILECOMPLETEMSG']._serialized_start=25233 + _globals['_COMPILECOMPLETEMSG']._serialized_end=25335 + _globals['_FRESHNESSCHECKCOMPLETE']._serialized_start=25337 + _globals['_FRESHNESSCHECKCOMPLETE']._serialized_end=25361 + _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_start=25363 + _globals['_FRESHNESSCHECKCOMPLETEMSG']._serialized_end=25479 + _globals['_SEEDHEADER']._serialized_start=25481 + _globals['_SEEDHEADER']._serialized_end=25509 + _globals['_SEEDHEADERMSG']._serialized_start=25511 + _globals['_SEEDHEADERMSG']._serialized_end=25603 + _globals['_SQLRUNNEREXCEPTION']._serialized_start=25605 + _globals['_SQLRUNNEREXCEPTION']._serialized_end=25656 + _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_start=25658 + _globals['_SQLRUNNEREXCEPTIONMSG']._serialized_end=25766 + _globals['_LOGTESTRESULT']._serialized_start=25769 + _globals['_LOGTESTRESULT']._serialized_end=25937 + _globals['_LOGTESTRESULTMSG']._serialized_start=25939 + _globals['_LOGTESTRESULTMSG']._serialized_end=26037 + _globals['_LOGSTARTLINE']._serialized_start=26039 + _globals['_LOGSTARTLINE']._serialized_end=26146 + _globals['_LOGSTARTLINEMSG']._serialized_start=26148 + _globals['_LOGSTARTLINEMSG']._serialized_end=26244 + _globals['_LOGMODELRESULT']._serialized_start=26247 + _globals['_LOGMODELRESULT']._serialized_end=26396 + _globals['_LOGMODELRESULTMSG']._serialized_start=26398 + _globals['_LOGMODELRESULTMSG']._serialized_end=26498 + _globals['_LOGSNAPSHOTRESULT']._serialized_start=26501 + _globals['_LOGSNAPSHOTRESULT']._serialized_end=26751 + _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_start=26709 + _globals['_LOGSNAPSHOTRESULT_CFGENTRY']._serialized_end=26751 + _globals['_LOGSNAPSHOTRESULTMSG']._serialized_start=26753 + _globals['_LOGSNAPSHOTRESULTMSG']._serialized_end=26859 + _globals['_LOGSEEDRESULT']._serialized_start=26862 + _globals['_LOGSEEDRESULT']._serialized_end=27047 + _globals['_LOGSEEDRESULTMSG']._serialized_start=27049 + _globals['_LOGSEEDRESULTMSG']._serialized_end=27147 + _globals['_LOGFRESHNESSRESULT']._serialized_start=27150 + _globals['_LOGFRESHNESSRESULT']._serialized_end=27323 + _globals['_LOGFRESHNESSRESULTMSG']._serialized_start=27325 + _globals['_LOGFRESHNESSRESULTMSG']._serialized_end=27433 + _globals['_LOGCANCELLINE']._serialized_start=27435 + _globals['_LOGCANCELLINE']._serialized_end=27469 + _globals['_LOGCANCELLINEMSG']._serialized_start=27471 + _globals['_LOGCANCELLINEMSG']._serialized_end=27569 + _globals['_DEFAULTSELECTOR']._serialized_start=27571 + _globals['_DEFAULTSELECTOR']._serialized_end=27602 + _globals['_DEFAULTSELECTORMSG']._serialized_start=27604 + _globals['_DEFAULTSELECTORMSG']._serialized_end=27706 + _globals['_NODESTART']._serialized_start=27708 + _globals['_NODESTART']._serialized_end=27761 + _globals['_NODESTARTMSG']._serialized_start=27763 + _globals['_NODESTARTMSG']._serialized_end=27853 + _globals['_NODEFINISHED']._serialized_start=27855 + _globals['_NODEFINISHED']._serialized_end=27958 + _globals['_NODEFINISHEDMSG']._serialized_start=27960 + _globals['_NODEFINISHEDMSG']._serialized_end=28056 + _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_start=28058 + _globals['_QUERYCANCELATIONUNSUPPORTED']._serialized_end=28101 + _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_start=28103 + _globals['_QUERYCANCELATIONUNSUPPORTEDMSG']._serialized_end=28229 + _globals['_CONCURRENCYLINE']._serialized_start=28231 + _globals['_CONCURRENCYLINE']._serialized_end=28310 + _globals['_CONCURRENCYLINEMSG']._serialized_start=28312 + _globals['_CONCURRENCYLINEMSG']._serialized_end=28414 + _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_start=28416 + _globals['_WRITINGINJECTEDSQLFORNODE']._serialized_end=28485 + _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_start=28487 + _globals['_WRITINGINJECTEDSQLFORNODEMSG']._serialized_end=28609 + _globals['_NODECOMPILING']._serialized_start=28611 + _globals['_NODECOMPILING']._serialized_end=28668 + _globals['_NODECOMPILINGMSG']._serialized_start=28670 + _globals['_NODECOMPILINGMSG']._serialized_end=28768 + _globals['_NODEEXECUTING']._serialized_start=28770 + _globals['_NODEEXECUTING']._serialized_end=28827 + _globals['_NODEEXECUTINGMSG']._serialized_start=28829 + _globals['_NODEEXECUTINGMSG']._serialized_end=28927 + _globals['_LOGHOOKSTARTLINE']._serialized_start=28929 + _globals['_LOGHOOKSTARTLINE']._serialized_end=29038 + _globals['_LOGHOOKSTARTLINEMSG']._serialized_start=29040 + _globals['_LOGHOOKSTARTLINEMSG']._serialized_end=29144 + _globals['_LOGHOOKENDLINE']._serialized_start=29147 + _globals['_LOGHOOKENDLINE']._serialized_end=29294 + _globals['_LOGHOOKENDLINEMSG']._serialized_start=29296 + _globals['_LOGHOOKENDLINEMSG']._serialized_end=29396 + _globals['_SKIPPINGDETAILS']._serialized_start=29399 + _globals['_SKIPPINGDETAILS']._serialized_end=29546 + _globals['_SKIPPINGDETAILSMSG']._serialized_start=29548 + _globals['_SKIPPINGDETAILSMSG']._serialized_end=29650 + _globals['_NOTHINGTODO']._serialized_start=29652 + _globals['_NOTHINGTODO']._serialized_end=29665 + _globals['_NOTHINGTODOMSG']._serialized_start=29667 + _globals['_NOTHINGTODOMSG']._serialized_end=29761 + _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_start=29763 + _globals['_RUNNINGOPERATIONUNCAUGHTERROR']._serialized_end=29807 + _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_start=29810 + _globals['_RUNNINGOPERATIONUNCAUGHTERRORMSG']._serialized_end=29940 + _globals['_ENDRUNRESULT']._serialized_start=29943 + _globals['_ENDRUNRESULT']._serialized_end=30090 + _globals['_ENDRUNRESULTMSG']._serialized_start=30092 + _globals['_ENDRUNRESULTMSG']._serialized_end=30188 + _globals['_NONODESSELECTED']._serialized_start=30190 + _globals['_NONODESSELECTED']._serialized_end=30207 + _globals['_NONODESSELECTEDMSG']._serialized_start=30209 + _globals['_NONODESSELECTEDMSG']._serialized_end=30311 + _globals['_COMMANDCOMPLETED']._serialized_start=30313 + _globals['_COMMANDCOMPLETED']._serialized_end=30432 + _globals['_COMMANDCOMPLETEDMSG']._serialized_start=30434 + _globals['_COMMANDCOMPLETEDMSG']._serialized_end=30538 + _globals['_SHOWNODE']._serialized_start=30540 + _globals['_SHOWNODE']._serialized_end=30647 + _globals['_SHOWNODEMSG']._serialized_start=30649 + _globals['_SHOWNODEMSG']._serialized_end=30737 + _globals['_COMPILEDNODE']._serialized_start=30739 + _globals['_COMPILEDNODE']._serialized_end=30851 + _globals['_COMPILEDNODEMSG']._serialized_start=30853 + _globals['_COMPILEDNODEMSG']._serialized_end=30949 + _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_start=30951 + _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_end=31049 + _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_start=31051 + _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_end=31169 + _globals['_INTERNALERRORONRUN']._serialized_start=31171 + _globals['_INTERNALERRORONRUN']._serialized_end=31224 + _globals['_INTERNALERRORONRUNMSG']._serialized_start=31226 + _globals['_INTERNALERRORONRUNMSG']._serialized_end=31334 + _globals['_GENERICEXCEPTIONONRUN']._serialized_start=31336 + _globals['_GENERICEXCEPTIONONRUN']._serialized_end=31411 + _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_start=31413 + _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_end=31527 + _globals['_NODECONNECTIONRELEASEERROR']._serialized_start=31529 + _globals['_NODECONNECTIONRELEASEERROR']._serialized_end=31607 + _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_start=31609 + _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_end=31733 + _globals['_FOUNDSTATS']._serialized_start=31735 + _globals['_FOUNDSTATS']._serialized_end=31766 + _globals['_FOUNDSTATSMSG']._serialized_start=31768 + _globals['_FOUNDSTATSMSG']._serialized_end=31860 + _globals['_MAINKEYBOARDINTERRUPT']._serialized_start=31862 + _globals['_MAINKEYBOARDINTERRUPT']._serialized_end=31885 + _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_start=31887 + _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_end=32001 + _globals['_MAINENCOUNTEREDERROR']._serialized_start=32003 + _globals['_MAINENCOUNTEREDERROR']._serialized_end=32038 + _globals['_MAINENCOUNTEREDERRORMSG']._serialized_start=32040 + _globals['_MAINENCOUNTEREDERRORMSG']._serialized_end=32152 + _globals['_MAINSTACKTRACE']._serialized_start=32154 + _globals['_MAINSTACKTRACE']._serialized_end=32191 + _globals['_MAINSTACKTRACEMSG']._serialized_start=32193 + _globals['_MAINSTACKTRACEMSG']._serialized_end=32293 + _globals['_SYSTEMCOULDNOTWRITE']._serialized_start=32295 + _globals['_SYSTEMCOULDNOTWRITE']._serialized_end=32359 + _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_start=32361 + _globals['_SYSTEMCOULDNOTWRITEMSG']._serialized_end=32471 + _globals['_SYSTEMEXECUTINGCMD']._serialized_start=32473 + _globals['_SYSTEMEXECUTINGCMD']._serialized_end=32506 + _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_start=32508 + _globals['_SYSTEMEXECUTINGCMDMSG']._serialized_end=32616 + _globals['_SYSTEMSTDOUT']._serialized_start=32618 + _globals['_SYSTEMSTDOUT']._serialized_end=32646 + _globals['_SYSTEMSTDOUTMSG']._serialized_start=32648 + _globals['_SYSTEMSTDOUTMSG']._serialized_end=32744 + _globals['_SYSTEMSTDERR']._serialized_start=32746 + _globals['_SYSTEMSTDERR']._serialized_end=32774 + _globals['_SYSTEMSTDERRMSG']._serialized_start=32776 + _globals['_SYSTEMSTDERRMSG']._serialized_end=32872 + _globals['_SYSTEMREPORTRETURNCODE']._serialized_start=32874 + _globals['_SYSTEMREPORTRETURNCODE']._serialized_end=32918 + _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_start=32920 + _globals['_SYSTEMREPORTRETURNCODEMSG']._serialized_end=33036 + _globals['_TIMINGINFOCOLLECTED']._serialized_start=33038 + _globals['_TIMINGINFOCOLLECTED']._serialized_end=33150 + _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_start=33152 + _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_end=33262 + _globals['_LOGDEBUGSTACKTRACE']._serialized_start=33264 + _globals['_LOGDEBUGSTACKTRACE']._serialized_end=33302 + _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_start=33304 + _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_end=33412 + _globals['_CHECKCLEANPATH']._serialized_start=33414 + _globals['_CHECKCLEANPATH']._serialized_end=33444 + _globals['_CHECKCLEANPATHMSG']._serialized_start=33446 + _globals['_CHECKCLEANPATHMSG']._serialized_end=33546 + _globals['_CONFIRMCLEANPATH']._serialized_start=33548 + _globals['_CONFIRMCLEANPATH']._serialized_end=33580 + _globals['_CONFIRMCLEANPATHMSG']._serialized_start=33582 + _globals['_CONFIRMCLEANPATHMSG']._serialized_end=33686 + _globals['_PROTECTEDCLEANPATH']._serialized_start=33688 + _globals['_PROTECTEDCLEANPATH']._serialized_end=33722 + _globals['_PROTECTEDCLEANPATHMSG']._serialized_start=33724 + _globals['_PROTECTEDCLEANPATHMSG']._serialized_end=33832 + _globals['_FINISHEDCLEANPATHS']._serialized_start=33834 + _globals['_FINISHEDCLEANPATHS']._serialized_end=33854 + _globals['_FINISHEDCLEANPATHSMSG']._serialized_start=33856 + _globals['_FINISHEDCLEANPATHSMSG']._serialized_end=33964 + _globals['_OPENCOMMAND']._serialized_start=33966 + _globals['_OPENCOMMAND']._serialized_end=34019 + _globals['_OPENCOMMANDMSG']._serialized_start=34021 + _globals['_OPENCOMMANDMSG']._serialized_end=34115 + _globals['_FORMATTING']._serialized_start=34117 + _globals['_FORMATTING']._serialized_end=34142 + _globals['_FORMATTINGMSG']._serialized_start=34144 + _globals['_FORMATTINGMSG']._serialized_end=34236 + _globals['_SERVINGDOCSPORT']._serialized_start=34238 + _globals['_SERVINGDOCSPORT']._serialized_end=34286 + _globals['_SERVINGDOCSPORTMSG']._serialized_start=34288 + _globals['_SERVINGDOCSPORTMSG']._serialized_end=34390 + _globals['_SERVINGDOCSACCESSINFO']._serialized_start=34392 + _globals['_SERVINGDOCSACCESSINFO']._serialized_end=34429 + _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_start=34431 + _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_end=34545 + _globals['_SERVINGDOCSEXITINFO']._serialized_start=34547 + _globals['_SERVINGDOCSEXITINFO']._serialized_end=34568 + _globals['_SERVINGDOCSEXITINFOMSG']._serialized_start=34570 + _globals['_SERVINGDOCSEXITINFOMSG']._serialized_end=34680 + _globals['_RUNRESULTWARNING']._serialized_start=34682 + _globals['_RUNRESULTWARNING']._serialized_end=34756 + _globals['_RUNRESULTWARNINGMSG']._serialized_start=34758 + _globals['_RUNRESULTWARNINGMSG']._serialized_end=34862 + _globals['_RUNRESULTFAILURE']._serialized_start=34864 + _globals['_RUNRESULTFAILURE']._serialized_end=34938 + _globals['_RUNRESULTFAILUREMSG']._serialized_start=34940 + _globals['_RUNRESULTFAILUREMSG']._serialized_end=35044 + _globals['_STATSLINE']._serialized_start=35046 + _globals['_STATSLINE']._serialized_end=35153 + _globals['_STATSLINE_STATSENTRY']._serialized_start=35109 + _globals['_STATSLINE_STATSENTRY']._serialized_end=35153 + _globals['_STATSLINEMSG']._serialized_start=35155 + _globals['_STATSLINEMSG']._serialized_end=35245 + _globals['_RUNRESULTERROR']._serialized_start=35247 + _globals['_RUNRESULTERROR']._serialized_end=35276 + _globals['_RUNRESULTERRORMSG']._serialized_start=35278 + _globals['_RUNRESULTERRORMSG']._serialized_end=35378 + _globals['_RUNRESULTERRORNOMESSAGE']._serialized_start=35380 + _globals['_RUNRESULTERRORNOMESSAGE']._serialized_end=35421 + _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_start=35423 + _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_end=35541 + _globals['_SQLCOMPILEDPATH']._serialized_start=35543 + _globals['_SQLCOMPILEDPATH']._serialized_end=35574 + _globals['_SQLCOMPILEDPATHMSG']._serialized_start=35576 + _globals['_SQLCOMPILEDPATHMSG']._serialized_end=35678 + _globals['_CHECKNODETESTFAILURE']._serialized_start=35680 + _globals['_CHECKNODETESTFAILURE']._serialized_end=35725 + _globals['_CHECKNODETESTFAILUREMSG']._serialized_start=35727 + _globals['_CHECKNODETESTFAILUREMSG']._serialized_end=35839 + _globals['_FIRSTRUNRESULTERROR']._serialized_start=35841 + _globals['_FIRSTRUNRESULTERROR']._serialized_end=35875 + _globals['_FIRSTRUNRESULTERRORMSG']._serialized_start=35877 + _globals['_FIRSTRUNRESULTERRORMSG']._serialized_end=35987 + _globals['_AFTERFIRSTRUNRESULTERROR']._serialized_start=35989 + _globals['_AFTERFIRSTRUNRESULTERROR']._serialized_end=36028 + _globals['_AFTERFIRSTRUNRESULTERRORMSG']._serialized_start=36030 + _globals['_AFTERFIRSTRUNRESULTERRORMSG']._serialized_end=36150 + _globals['_ENDOFRUNSUMMARY']._serialized_start=36152 + _globals['_ENDOFRUNSUMMARY']._serialized_end=36239 + _globals['_ENDOFRUNSUMMARYMSG']._serialized_start=36241 + _globals['_ENDOFRUNSUMMARYMSG']._serialized_end=36343 + _globals['_LOGSKIPBECAUSEERROR']._serialized_start=36345 + _globals['_LOGSKIPBECAUSEERROR']._serialized_end=36430 + _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_start=36432 + _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_end=36542 + _globals['_ENSUREGITINSTALLED']._serialized_start=36544 + _globals['_ENSUREGITINSTALLED']._serialized_end=36564 + _globals['_ENSUREGITINSTALLEDMSG']._serialized_start=36566 + _globals['_ENSUREGITINSTALLEDMSG']._serialized_end=36674 + _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_start=36676 + _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_end=36702 + _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_start=36704 + _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_end=36824 + _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_start=36826 + _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_end=36851 + _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_start=36853 + _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_end=36971 + _globals['_DISABLETRACKING']._serialized_start=36973 + _globals['_DISABLETRACKING']._serialized_end=36990 + _globals['_DISABLETRACKINGMSG']._serialized_start=36992 + _globals['_DISABLETRACKINGMSG']._serialized_end=37094 + _globals['_SENDINGEVENT']._serialized_start=37096 + _globals['_SENDINGEVENT']._serialized_end=37126 + _globals['_SENDINGEVENTMSG']._serialized_start=37128 + _globals['_SENDINGEVENTMSG']._serialized_end=37224 + _globals['_SENDEVENTFAILURE']._serialized_start=37226 + _globals['_SENDEVENTFAILURE']._serialized_end=37244 + _globals['_SENDEVENTFAILUREMSG']._serialized_start=37246 + _globals['_SENDEVENTFAILUREMSG']._serialized_end=37350 + _globals['_FLUSHEVENTS']._serialized_start=37352 + _globals['_FLUSHEVENTS']._serialized_end=37365 + _globals['_FLUSHEVENTSMSG']._serialized_start=37367 + _globals['_FLUSHEVENTSMSG']._serialized_end=37461 + _globals['_FLUSHEVENTSFAILURE']._serialized_start=37463 + _globals['_FLUSHEVENTSFAILURE']._serialized_end=37483 + _globals['_FLUSHEVENTSFAILUREMSG']._serialized_start=37485 + _globals['_FLUSHEVENTSFAILUREMSG']._serialized_end=37593 + _globals['_TRACKINGINITIALIZEFAILURE']._serialized_start=37595 + _globals['_TRACKINGINITIALIZEFAILURE']._serialized_end=37640 + _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_start=37642 + _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_end=37764 + _globals['_RUNRESULTWARNINGMESSAGE']._serialized_start=37766 + _globals['_RUNRESULTWARNINGMESSAGE']._serialized_end=37804 + _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_start=37806 + _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_end=37924 + _globals['_DEBUGCMDOUT']._serialized_start=37926 + _globals['_DEBUGCMDOUT']._serialized_end=37952 + _globals['_DEBUGCMDOUTMSG']._serialized_start=37954 + _globals['_DEBUGCMDOUTMSG']._serialized_end=38048 + _globals['_DEBUGCMDRESULT']._serialized_start=38050 + _globals['_DEBUGCMDRESULT']._serialized_end=38079 + _globals['_DEBUGCMDRESULTMSG']._serialized_start=38081 + _globals['_DEBUGCMDRESULTMSG']._serialized_end=38181 + _globals['_LISTCMDOUT']._serialized_start=38183 + _globals['_LISTCMDOUT']._serialized_end=38208 + _globals['_LISTCMDOUTMSG']._serialized_start=38210 + _globals['_LISTCMDOUTMSG']._serialized_end=38302 + _globals['_NOTE']._serialized_start=38304 + _globals['_NOTE']._serialized_end=38323 + _globals['_NOTEMSG']._serialized_start=38325 + _globals['_NOTEMSG']._serialized_end=38405 # @@protoc_insertion_point(module_scope) diff --git a/core/dbt/exceptions.py b/core/dbt/exceptions.py index 4445ceffd75..2f714921292 100644 --- a/core/dbt/exceptions.py +++ b/core/dbt/exceptions.py @@ -297,6 +297,11 @@ def type(self): return "Parsing" +class dbtPluginError(DbtRuntimeError): + CODE = 10020 + MESSAGE = "Plugin Error" + + # TODO: this isn't raised in the core codebase. Is it raised elsewhere? class JSONValidationError(DbtValidationError): def __init__(self, typename, errors): @@ -405,19 +410,6 @@ class DbtProfileError(DbtConfigError): pass -class PublicationConfigNotFound(DbtConfigError): - def __init__(self, project=None, file_name=None): - self.project = project - msg = self.message() - super().__init__(msg, project=project) - - def message(self): - return ( - f"A dependency on project {self.project} was specified, " - f"but a publication for {self.project} was not found." - ) - - class SemverError(Exception): def __init__(self, msg: Optional[str] = None): self.msg = msg @@ -910,19 +902,6 @@ def get_message(self) -> str: return msg -class ProjectDependencyCycleError(ParsingError): - def __init__(self, pub_project_name, project_name): - self.pub_project_name = pub_project_name - self.project_name = project_name - super().__init__(msg=self.get_message()) - - def get_message(self) -> str: - return ( - f"A project dependency cycle has been detected. The current project {self.project_name} " - f"depends on {self.pub_project_name} which also depends on the current project." - ) - - class MacroArgTypeError(CompilationError): def __init__(self, method_name: str, arg_name: str, got_value: Any, expected_type): self.method_name = method_name diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 797b2534215..319154576fc 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -52,7 +52,6 @@ NodeNotFoundOrDisabled, StateCheckVarsHash, Note, - PublicationArtifactAvailable, DeprecatedModel, DeprecatedReference, UpcomingReferenceDeprecation, @@ -102,17 +101,9 @@ from dbt.contracts.graph.node_args import ModelNodeArgs from dbt.contracts.graph.unparsed import NodeVersion from dbt.contracts.util import Writable -from dbt.contracts.publication import ( - PublicationConfig, - PublicationArtifact, - PublicationMetadata, - PublicModel, -) from dbt.exceptions import ( TargetNotFoundError, AmbiguousAliasError, - PublicationConfigNotFound, - ProjectDependencyCycleError, InvalidAccessTypeError, ) from dbt.parser.base import Parser @@ -131,6 +122,8 @@ from dbt.version import __version__ from dbt.dataclass_schema import StrEnum, dbtClassMixin +from dbt.plugins import setup_plugin_manager, get_plugin_manager + PARSING_STATE = DbtProcessState("parsing") PERF_INFO_FILE_NAME = "perf_info.json" @@ -238,16 +231,10 @@ def __init__( all_projects: Mapping[str, Project], macro_hook: Optional[Callable[[Manifest], Any]] = None, file_diff: Optional[FileDiff] = None, - publications: Optional[List[PublicationArtifact]] = None, ) -> None: self.root_project: RuntimeConfig = root_project self.all_projects: Mapping[str, Project] = all_projects self.file_diff = file_diff - self.publications: Mapping[str, PublicationArtifact] = ( - {publication.project_name: publication for publication in publications} - if publications - else {} - ) self.manifest: Manifest = Manifest() self.new_manifest = self.manifest self.manifest.metadata = root_project.get_metadata() @@ -285,7 +272,6 @@ def get_full_manifest( file_diff: Optional[FileDiff] = None, reset: bool = False, write_perf_info=False, - publications: Optional[List[PublicationArtifact]] = None, ) -> Manifest: adapter = get_adapter(config) # type: ignore @@ -313,7 +299,6 @@ def get_full_manifest( projects, macro_hook=macro_hook, file_diff=file_diff, - publications=publications, ) manifest = loader.load() @@ -515,7 +500,7 @@ def load(self): # copy the selectors from the root_project to the manifest self.manifest.selectors = self.root_project.manifest_selectors - # load manifest.dependencies and associated publication artifacts to create the external nodes + # inject any available external nodes external_nodes_modified = self.inject_external_nodes() if external_nodes_modified: self.manifest.rebuild_ref_lookup() @@ -540,13 +525,12 @@ def load(self): self.manifest._parsing_info.static_analysis_path_count ) - # Load dependencies, load the publication artifacts and create the external nodes. - # Reprocess refs if changes. + # Inject any available external nodes, reprocess refs if changes to the manifest were made. external_nodes_modified = False if skip_parsing: # If we didn't skip parsing, this will have already run because it must run # before process_refs. If we did skip parsing, then it's possible that only - # publications have changed and we need to run this to capture that. + # external nodes have changed and we need to run this to capture that. self.manifest.build_parent_and_child_maps() external_nodes_modified = self.inject_external_nodes() if external_nodes_modified: @@ -554,9 +538,6 @@ def load(self): self.process_refs(self.root_project.project_name) # parent and child maps will be rebuilt by write_manifest - # Log the publication artifact for this project - log_publication_artifact(self.root_project, self.manifest) - if not skip_parsing: # write out the fully parsed manifest self.write_manifest_for_partial_parse() @@ -752,40 +733,9 @@ def write_manifest_for_partial_parse(self): except Exception: raise - def build_external_nodes(self) -> List[ModelNodeArgs]: - external_node_args = [] - for project in self.root_project.dependent_projects.projects: - try: - publication = self.publications[project.name] - except KeyError: - raise PublicationConfigNotFound(project=project.name) - - publication_config = PublicationConfig.from_publication(publication) - self.manifest.publications[project.name] = publication_config - - # Add public models to list of external nodes - for public_node in publication.public_models.values(): - external_node_args.append( - ModelNodeArgs( - name=public_node.name, - package_name=public_node.package_name, - version=public_node.version, - latest_version=public_node.latest_version, - relation_name=public_node.relation_name, - database=public_node.database, - schema=public_node.schema, - identifier=public_node.identifier, - deprecation_date=public_node.deprecation_date, - ) - ) - - return external_node_args - def inject_external_nodes(self) -> bool: - # TODO: remove manifest.publications - self.manifest.publications = {} - - external_node_args = self.build_external_nodes() + pm = get_plugin_manager() + external_node_args = pm.build_external_nodes() # Remove previously existing external nodes since we are regenerating them manifest_nodes_modified = False @@ -1634,77 +1584,6 @@ def process_node(config: RuntimeConfig, manifest: Manifest, node: ManifestNode): _process_docs_for_node(ctx, node) -def log_publication_artifact(root_project: RuntimeConfig, manifest: Manifest): - # The manifest.json is written out in a task, so we're not writing it here - - # build publication metadata - metadata = PublicationMetadata( - adapter_type=root_project.credentials.type, - quoting=root_project.quoting, - ) - - # get a set of public model ids first so it can be used in constructing dependencies - public_node_ids = { - node.unique_id - for node in manifest.nodes.values() - if isinstance(node, ModelNode) and node.access == AccessType.Public - } - - # Get the Graph object from the Linker - from dbt.compilation import Linker - - linker = Linker() - graph = linker.get_graph(manifest) - - public_models = {} - for unique_id in public_node_ids: - model = manifest.nodes[unique_id] - assert isinstance(model, ModelNode) - # public_node_dependencies is the intersection of all parent nodes plus public nodes - parents: Set[UniqueId] = graph.select_parents({UniqueId(unique_id)}) - public_node_dependencies: Set[UniqueId] = parents.intersection(public_node_ids) - - public_model = PublicModel( - name=model.name, - package_name=model.package_name, - unique_id=model.unique_id, - relation_name=dbt.utils.cast_to_str(model.relation_name), - database=model.database, - schema=model.schema, - identifier=model.alias, - version=model.version, - latest_version=model.latest_version, - public_node_dependencies=list(public_node_dependencies), - generated_at=metadata.generated_at, - deprecation_date=model.deprecation_date, - ) - public_models[unique_id] = public_model - - dependencies = [] - # Get dependencies from dependencies.yml - if root_project.dependent_projects.projects: - for dep_project in root_project.dependent_projects.projects: - dependencies.append(dep_project.name) - # Get dependencies from publication dependencies - for pub_project in manifest.publications.values(): - for project_name in pub_project.dependencies: - if project_name == root_project.project_name: - raise ProjectDependencyCycleError( - pub_project_name=pub_project.project_name, project_name=project_name - ) - if project_name not in dependencies: - dependencies.append(project_name) - - publication = PublicationArtifact( - metadata=metadata, - project_name=root_project.project_name, - public_models=public_models, - dependencies=dependencies, - ) - - fire_event(PublicationArtifactAvailable(pub_artifact=publication.to_dict())) - - def write_semantic_manifest(manifest: Manifest, target_path: str) -> None: path = os.path.join(target_path, SEMANTIC_MANIFEST_FILE_NAME) write_file(path, manifest.pydantic_semantic_manifest.json()) diff --git a/core/dbt/plugins/__init__.py b/core/dbt/plugins/__init__.py new file mode 100644 index 00000000000..f9a59f599a6 --- /dev/null +++ b/core/dbt/plugins/__init__.py @@ -0,0 +1,18 @@ +from typing import Optional + +from .manager import PluginManager + +# these are just exports, they need "noqa" so flake8 will not complain. +from .manager import dbtPlugin, dbt_hook # noqa + +PLUGIN_MANAGER: Optional[PluginManager] = None + + +def setup_plugin_manager(): + global PLUGIN_MANAGER + PLUGIN_MANAGER = PluginManager() + + +def get_plugin_manager() -> PluginManager: + global PLUGIN_MANAGER + return PLUGIN_MANAGER diff --git a/core/dbt/plugins/contracts.py b/core/dbt/plugins/contracts.py new file mode 100644 index 00000000000..08a64ac5504 --- /dev/null +++ b/core/dbt/plugins/contracts.py @@ -0,0 +1,6 @@ +from dataclasses import dataclass, field +from pathlib import Path + +from dbt.contracts.util import ArtifactMixin as ExternalArtifact +from dbt.contracts.util import BaseArtifactMetadata, schema_version, AdditionalPropertiesMixin +from dbt.dataclass_schema import dbtClassMixin diff --git a/core/dbt/plugins/exceptions.py b/core/dbt/plugins/exceptions.py new file mode 100644 index 00000000000..a4d95467bfb --- /dev/null +++ b/core/dbt/plugins/exceptions.py @@ -0,0 +1,2 @@ +# just exports, they need "noqa" so flake8 will not complain. +from dbt.exceptions import dbtPluginError # noqa diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py new file mode 100644 index 00000000000..bd2f18100c9 --- /dev/null +++ b/core/dbt/plugins/manager.py @@ -0,0 +1,85 @@ +import importlib +import pkgutil +from typing import List, Dict + +from dbt.contracts.graph.node_args import ModelNodeArgs +from dbt.contracts.graph.manifest import Manifest +from dbt.config import RuntimeConfig +from dbt.plugins.contracts import ExternalArtifact + + +def dbt_hook(func): + setattr(func, "is_dbt_hook", True) + return func + + +class dbtPlugin: + def __init__(self): + pass + + def build_external_nodes(self) -> List[ModelNodeArgs]: + pass + + def get_external_artifacts( + self, manifest: Manifest, config: RuntimeConfig + ) -> Dict[str, ExternalArtifact]: + pass + + +class PluginManager: + PLUGIN_PREFIX = "dbt_" + + def __init__(self): + self.plugins = {} + discovered_dbt_modules = { + name: importlib.import_module(name) + for finder, name, ispkg in pkgutil.iter_modules() + if name.startswith(self.PLUGIN_PREFIX) + } + + for name, module in discovered_dbt_modules.items(): + if hasattr(module, "plugin"): + plugin_cls = getattr(module, "plugin") + assert issubclass( + plugin_cls, dbtPlugin + ), f"'plugin' in {plugin_name} must be subclass of dbtPlugin" + + plugin = plugin_cls() + self.plugins[name] = plugin + + self.valid_hook_names = set() + # default hook implementations from dbtPlugin + for hook_name in dir(dbtPlugin): + if not hook_name.startswith("_"): + self.valid_hook_names.add(hook_name) + + self.hooks = {} + for plugin_name, plugin_cls in self.plugins.items(): + for hook_name in dir(plugin): + hook = getattr(plugin, hook_name) + if ( + callable(hook) + and hasattr(hook, "is_dbt_hook") + and hook_name in self.valid_hook_names + ): + if hook_name in self.hooks: + self.hooks[hook_name].append(hook) + else: + self.hooks[hook_name] = [hook] + + def get_external_artifacts( + self, manifest: Manifest, config: RuntimeConfig + ) -> Dict[str, ExternalArtifact]: + external_artifacts = {} + for hook_method in self.hooks.get("get_external_artifacts", []): + plugin_external_artifact = hook_method(manifest, config) + external_artifacts.update(plugin_external_artifact) + return external_artifacts + + def build_external_nodes(self) -> List[ModelNodeArgs]: + external_nodes = [] + for hook_method in self.hooks.get("build_external_nodes", []): + plugin_external_nodes = hook_method() + # TODO: ensure uniqueness + external_nodes += plugin_external_nodes + return external_nodes diff --git a/core/dbt/plugins/manifest.py b/core/dbt/plugins/manifest.py new file mode 100644 index 00000000000..194212f0310 --- /dev/null +++ b/core/dbt/plugins/manifest.py @@ -0,0 +1,6 @@ +# all these are just exports, they need "noqa" so flake8 will not complain. +from dbt.contracts.graph.manifest import Manifest # noqa +from dbt.node_types import AccessType, NodeType # noqa +from dbt.contracts.graph.node_args import ModelNodeArgs # noqa +from dbt.contracts.graph.unparsed import NodeVersion # noqa +from dbt.graph.graph import UniqueId # noqa diff --git a/core/dbt/tests/util.py b/core/dbt/tests/util.py index e901d8b9d82..5179ceb2f04 100644 --- a/core/dbt/tests/util.py +++ b/core/dbt/tests/util.py @@ -20,7 +20,6 @@ ) from dbt.events.base_types import EventLevel from dbt.events.types import Note -from dbt.contracts.publication import PublicationArtifact # ============================================================================= @@ -73,7 +72,6 @@ def run_dbt( args: Optional[List[str]] = None, expect_pass: bool = True, - publications: Optional[List[PublicationArtifact]] = None, ): # Ignore logbook warnings warnings.filterwarnings("ignore", category=DeprecationWarning, module="logbook") @@ -99,7 +97,7 @@ def run_dbt( args.extend(["--profiles-dir", profiles_dir]) dbt = dbtRunner() - res = dbt.invoke(args, publications=publications) + res = dbt.invoke(args) # the exception is immediately raised to be caught in tests # using a pattern like `with pytest.raises(SomeException):` @@ -119,12 +117,11 @@ def run_dbt( def run_dbt_and_capture( args: Optional[List[str]] = None, expect_pass: bool = True, - publications: Optional[List[PublicationArtifact]] = None, ): try: stringbuf = StringIO() capture_stdout_logs(stringbuf) - res = run_dbt(args, expect_pass=expect_pass, publications=publications) + res = run_dbt(args, expect_pass=expect_pass) stdout = stringbuf.getvalue() finally: diff --git a/schemas/dbt/publication/v1.json b/schemas/dbt/publication/v1.json deleted file mode 100644 index 629fb1d7fcf..00000000000 --- a/schemas/dbt/publication/v1.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "type": "object", - "required": [ - "project_name" - ], - "properties": { - "project_name": { - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/PublicationMetadata", - "default": { - "dbt_schema_version": "https://schemas.getdbt.com/dbt/publication/v1.json", - "dbt_version": "1.6.0a1", - "generated_at": "2023-05-10T21:14:13.453864Z", - "invocation_id": "4c07a953-57d0-4a7c-8872-35e877336644", - "env": {}, - "adapter_type": null, - "quoting": {} - } - }, - "public_models": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/PublicModel" - }, - "default": {} - }, - "dependencies": { - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false, - "description": "This represents the _publication.json artifact", - "definitions": { - "PublicationMetadata": { - "type": "object", - "required": [], - "properties": { - "dbt_schema_version": { - "type": "string", - "default": "https://schemas.getdbt.com/dbt/publication/v1.json" - }, - "dbt_version": { - "type": "string", - "default": "1.6.0a1" - }, - "generated_at": { - "type": "string", - "format": "date-time", - "default": "2023-05-10T21:14:13.454034Z" - }, - "invocation_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": "4c07a953-57d0-4a7c-8872-35e877336644" - }, - "env": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "default": {} - }, - "adapter_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "quoting": { - "type": "object", - "default": {} - } - }, - "additionalProperties": false, - "description": "PublicationMetadata(dbt_schema_version: str = , dbt_version: str = '1.6.0a1', generated_at: datetime.datetime = , invocation_id: Optional[str] = , env: Dict[str, str] = , adapter_type: Optional[str] = None, quoting: Dict[str, Any] = )" - }, - "PublicModel": { - "type": "object", - "required": [ - "name", - "package_name", - "unique_id", - "relation_name" - ], - "properties": { - "name": { - "type": "string" - }, - "package_name": { - "type": "string" - }, - "unique_id": { - "type": "string" - }, - "relation_name": { - "type": "string" - }, - "database": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "identifier": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "version": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "latest_version": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "public_node_dependencies": { - "type": "array", - "items": { - "type": "string" - }, - "default": [] - }, - "generated_at": { - "type": "string", - "format": "date-time", - "default": "2023-05-10T21:14:13.454454Z" - } - }, - "additionalProperties": false, - "description": "Used to represent cross-project models" - } - }, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.getdbt.com/dbt/publication/v1.json" -} diff --git a/scripts/collect-artifact-schema.py b/scripts/collect-artifact-schema.py index aec5f9a6cbd..da2c6448830 100755 --- a/scripts/collect-artifact-schema.py +++ b/scripts/collect-artifact-schema.py @@ -11,7 +11,6 @@ RunResultsArtifact, FreshnessExecutionResultArtifact, ) -from dbt.contracts.publication import PublicationArtifact from dbt.contracts.util import VersionedSchema from dbt.clients.system import write_file @@ -54,7 +53,7 @@ def parse(cls) -> "Arguments": parser.add_argument( "--artifact", type=str, - choices=["manifest", "publication", "sources", "run-results", "catalog"], + choices=["manifest", "sources", "run-results", "catalog"], help="The name of the artifact to update", ) @@ -67,7 +66,6 @@ def collect_artifact_schema(args: Arguments): FreshnessExecutionResultArtifact, RunResultsArtifact, CatalogArtifact, - PublicationArtifact, # WritableManifest introduces new definitions in hologram which are likely # getting persisted across invocations of json_schema and making their # way to other written artifacts - so write it last as a short-term fix. diff --git a/tests/functional/multi_project/conftest.py b/tests/functional/multi_project/conftest.py deleted file mode 100644 index d8f95361cc3..00000000000 --- a/tests/functional/multi_project/conftest.py +++ /dev/null @@ -1,78 +0,0 @@ -import pytest -import yaml -from dbt.tests.util import write_file -from dbt.tests.fixtures.project import write_project_files_recursively - -# This fixture should always run after the standard "project" fixture, because -# it skips a lot of setup with the assumption that the "project" fixture has done it. -# In particular, you can't execute sql or do other things on this fixture. It uses -# the same unique schema as the base project fixture. - - -@pytest.fixture(scope="class") -def project_root_alt(tmpdir_factory): - # tmpdir docs - https://docs.pytest.org/en/6.2.x/tmpdir.html - project_root = tmpdir_factory.mktemp("project") - print(f"\n=== Test project_root alt: {project_root}") - return project_root - - -# Data used to update the dbt_project config data. -@pytest.fixture(scope="class") -def project_config_update_alt(): - return {} - - -# Combines the project_config_update dictionary with project_config defaults to -# produce a project_yml config and write it out as dbt_project.yml -@pytest.fixture(scope="class") -def dbt_project_yml_alt(project_root_alt, project_config_update_alt): - project_config = { - "name": "test_alt", - "profile": "test", - } - if project_config_update_alt: - if isinstance(project_config_update_alt, dict): - project_config.update(project_config_update_alt) - elif isinstance(project_config_update_alt, str): - updates = yaml.safe_load(project_config_update_alt) - project_config.update(updates) - write_file(yaml.safe_dump(project_config), project_root_alt, "dbt_project.yml") - return project_config - - -def write_project_files_alt(project_root_alt, dir_name, file_dict): - path = project_root_alt.mkdir(dir_name) - if file_dict: - write_project_files_recursively(path, file_dict) - - -@pytest.fixture(scope="class") -def models_alt(): - return {} - - -@pytest.fixture(scope="class") -def project_files_alt(project_root_alt, models_alt): - write_project_files_alt(project_root_alt, "models", {**models_alt}) - - -class TestProjInfoAlt: - def __init__( - self, - project_root_alt, - ): - self.project_root = project_root_alt - - -@pytest.fixture(scope="class") -def project_alt( - project_root_alt, - dbt_project_yml_alt, - project_files_alt, -): - project_alt = TestProjInfoAlt( - project_root_alt=project_root_alt, - ) - - yield project_alt diff --git a/tests/functional/multi_project/test_publication.py b/tests/functional/multi_project/test_publication.py deleted file mode 100644 index 24d9b8cca5a..00000000000 --- a/tests/functional/multi_project/test_publication.py +++ /dev/null @@ -1,300 +0,0 @@ -import json -import pytest - -from dbt.tests.util import ( - run_dbt, - write_file, - run_dbt_and_capture, - get_logging_events, -) -from dbt.contracts.publication import PublicationArtifact -from dbt.contracts.graph.nodes import ModelNode -from dbt.exceptions import ( - PublicationConfigNotFound, - TargetNotFoundError, - ProjectDependencyCycleError, -) - - -model_one_sql = """ -select 1 as fun -""" - -model_two_sql = """ -select fun from {{ ref('model_one') }} -""" - -model_three_sql = """ -select fun from {{ ref('model_two') }} -""" - -models_yml = """ -models: - - name: model_one - description: model one - access: public - - name: model_two - description: non-public model - - name: model_three - description: model three - access: public -""" - - -dependencies_yml = """ -projects: - - name: marketing - custom_field: some value -""" - -marketing_pub_json = """ -{ - "project_name": "marketing", - "metadata": { - "dbt_schema_version": "https://schemas.getdbt.com/dbt/publication/v1.json", - "dbt_version": "1.5.0", - "generated_at": "2023-04-13T17:17:58.128706Z", - "invocation_id": "56e3126f-78c7-470c-8eb0-c94af7c3eaac", - "env": {}, - "adapter_type": "postgres", - "quoting": { - "database": true, - "schema": true, - "identifier": true - } - }, - "public_models": { - "model.marketing.fct_one": { - "name": "fct_one", - "package_name": "marketing", - "unique_id": "model.marketing.fct_one", - "relation_name": "\\"dbt\\".\\"test_schema\\".\\"fct_one\\"", - "database": "dbt", - "schema": "test_schema", - "identifier": "fct_one", - "version": null, - "latest_version": null, - "public_node_dependencies": [], - "generated_at": "2023-04-13T17:17:58.128706Z" - }, - "model.marketing.fct_two": { - "name": "fct_two", - "package_name": "marketing", - "unique_id": "model.marketing.fct_two", - "relation_name": "\\"dbt\\".\\"test_schema\\".\\"fct_two\\"", - "database": "dbt", - "schema": "test_schema", - "identifier": "fct_two", - "version": null, - "latest_version": null, - "public_node_dependencies": ["model.test.fct_one"], - "generated_at": "2023-04-13T17:17:58.128706Z" - } - }, - "dependencies": [] -} -""" - -ext_node_model_sql = """ -select * from {{ ref('marketing', 'fct_one') }} -""" - -ext_node_model_sql_modified = """ -select * from {{ ref('marketing', 'fct_three') }} -""" - - -class TestPublicationArtifact: - @pytest.fixture(scope="class") - def models(self): - return { - "model_one.sql": model_one_sql, - "model_two.sql": model_two_sql, - "model_three.sql": model_three_sql, - "models.yml": models_yml, - } - - def test_publication_artifact(self, project): - results, log_output = run_dbt_and_capture(["--debug", "--log-format=json", "run"]) - assert len(results) == 3 - - pub_available_events = get_logging_events(log_output, "PublicationArtifactAvailable") - publication_dict = pub_available_events[0]["data"]["pub_artifact"] - publication = PublicationArtifact.from_dict(publication_dict) - assert publication - assert len(publication.public_models) == 2 - assert publication.public_models["model.test.model_three"].public_node_dependencies == [ - "model.test.model_one" - ] - - -class TestPublicationArtifacts: - @pytest.fixture(scope="class") - def models(self): - return { - "model_one.sql": model_one_sql, - "model_two.sql": model_two_sql, - "model_three.sql": model_three_sql, - "models.yml": models_yml, - } - - @pytest.fixture(scope="class") - def dependencies(self): - return dependencies_yml - - def test_pub_artifacts(self, project): - - # Dependencies lists "marketing" project, but no publications provided - with pytest.raises(PublicationConfigNotFound): - run_dbt(["parse"]) - - # Dependencies lists "marketing" project, but no "marketing" publication provided - with pytest.raises(PublicationConfigNotFound): - run_dbt(["parse"], publications=[PublicationArtifact(project_name="not_marketing")]) - - # Provide publication and try again - m_pub_json = marketing_pub_json.replace("test_schema", project.test_schema) - publications = [PublicationArtifact.from_dict(json.loads(m_pub_json))] - manifest, log_output = run_dbt_and_capture( - ["--debug", "--log-format=json", "parse"], publications=publications - ) - assert manifest.publications - assert "marketing" in manifest.publications - assert "model.marketing.fct_one" in manifest.publications["marketing"].public_node_ids - - # Check dependencies in publication_artifact - pub_available_events = get_logging_events(log_output, "PublicationArtifactAvailable") - publication_dict = pub_available_events[0]["data"]["pub_artifact"] - publication = PublicationArtifact.from_dict(publication_dict) - assert publication.dependencies == ["marketing"] - - # source_node, target_model_name, target_model_package, target_model_version, current_project, node_package - resolved_node = manifest.resolve_ref(None, "fct_one", "marketing", None, "test", "test") - assert resolved_node - assert isinstance(resolved_node, ModelNode) - assert resolved_node.unique_id == "model.marketing.fct_one" - - # add new model that references external_node and parse - write_file(ext_node_model_sql, project.project_root, "models", "test_model_one.sql") - manifest = run_dbt(["parse"], publications=publications) - - model_id = "model.test.test_model_one" - public_model_id = "model.marketing.fct_one" - model = manifest.nodes[model_id] - assert model.depends_on.nodes == [public_model_id] - assert public_model_id in manifest.parent_map - assert manifest.parent_map[model_id] == [public_model_id] - # check that publication configs contain correct list of public model unique_ids - assert manifest.publications["marketing"].public_node_ids == [ - "model.marketing.fct_one", - "model.marketing.fct_two", - ] - assert len([node for node in manifest.nodes.values() if node.is_external_node]) == 2 - - # Create the relation for the public node (fct_one) - project.run_sql(f'create table "{project.test_schema}"."fct_one" (id integer)') - project.run_sql(f'insert into "{project.test_schema}"."fct_one" values (1), (2)') - results = run_dbt(["run"], publications=publications) - assert len(results) == 4 - - # Test for only publication artifact has changed, no partial parsing - # Change public node name from fct_one to fct_three - m_pub_json = m_pub_json.replace("fct_one", "fct_three") - # Change generated_at field - m_pub_json = m_pub_json.replace("04-13", "04-24") - publications = [PublicationArtifact.from_dict(json.loads(m_pub_json))] - # test_model_one references a missing public model - with pytest.raises(TargetNotFoundError): - manifest = run_dbt(["parse"], publications=publications) - - # With public node changed from fct_one to fct_three, also update test_model_one's reference - write_file( - ext_node_model_sql_modified, project.project_root, "models", "test_model_one.sql" - ) - manifest = run_dbt(["parse"], publications=publications) - # undo test_model_one changes - write_file(ext_node_model_sql, project.project_root, "models", "test_model_one.sql") - - # Add another public reference - m_pub_json = m_pub_json.replace("fct_three", "fct_one") - m_pub_json = m_pub_json.replace("04-13", "04-25") - publications = [PublicationArtifact.from_dict(json.loads(m_pub_json))] - write_file(ext_node_model_sql, project.project_root, "models", "test_model_two.sql") - results = run_dbt(["run"], publications=publications) - assert len(results) == 5 - - -dependencies_alt_yml = """ -projects: - - name: test_alt -""" - -model_alt_yml = """ -models: - - name: model_alt - description: model alt - access: public -""" - -model_alt_ref_sql = """ -select * from {{ ref('test_alt', 'model_alt') }} -""" - - -# This test case uses the conftest.py in this test directory to allow -# creating a minimal second project (project_alt) so that we can have two projects in -# the same test. -class TestMultiProjects: - @pytest.fixture(scope="class") - def models(self): - return { - "model_one.sql": model_one_sql, - "model_two.sql": model_two_sql, - "model_three.sql": model_three_sql, - "model_alt_ref.sql": model_alt_ref_sql, - "models.yml": models_yml, - } - - @pytest.fixture(scope="class") - def models_alt(self): - return { - "model_alt.sql": "select 1 as fun", - "model_alt.yml": model_alt_yml, - } - - def test_multi_projects(self, project, project_alt): - # run the alternate project by using the alternate project root - results, log_output = run_dbt_and_capture( - ["--debug", "--log-format=json", "run", "--project-dir", str(project_alt.project_root)] - ) - assert len(results) == 1 - - # Check publication artifact - pub_available_events = get_logging_events(log_output, "PublicationArtifactAvailable") - publication_dict = pub_available_events[0]["data"]["pub_artifact"] - publication = PublicationArtifact.from_dict(publication_dict) - assert len(publication.public_models) == 1 - - # run the base project - write_file(dependencies_alt_yml, project.project_root, "dependencies.yml") - results = run_dbt( - ["run", "--project-dir", str(project.project_root)], publications=[publication] - ) - assert len(results) == 4 - - -class TestProjectCycles: - @pytest.fixture(scope="class") - def models(self): - return { - "model_one.sql": model_one_sql, - } - - def test_project_cycles(self, project): - write_file(dependencies_yml, "dependencies.yml") - # Create a project dependency that's the same as the current project - m_pub_json = marketing_pub_json.replace('"dependencies": []', '"dependencies": ["test"]') - publication = PublicationArtifact.from_dict(json.loads(m_pub_json)) - - with pytest.raises(ProjectDependencyCycleError): - run_dbt(["parse"], publications=[publication]) diff --git a/tests/functional/partial_parsing/fixtures.py b/tests/functional/partial_parsing/fixtures.py index 9d329ab88bc..12ec77b178e 100644 --- a/tests/functional/partial_parsing/fixtures.py +++ b/tests/functional/partial_parsing/fixtures.py @@ -1195,67 +1195,3 @@ """ - -dependencies_yml = """ -projects: - - name: marketing -""" - -empty_dependencies_yml = """ -projects: [] -""" - -marketing_pub_json = """ -{ - "project_name": "marketing", - "metadata": { - "dbt_schema_version": "https://schemas.getdbt.com/dbt/publication/v1.json", - "dbt_version": "1.5.0", - "generated_at": "2023-04-13T17:17:58.128706Z", - "invocation_id": "56e3126f-78c7-470c-8eb0-c94af7c3eaac", - "env": {}, - "adapter_type": "postgres", - "quoting": { - "database": true, - "schema": true, - "identifier": true - } - }, - "public_models": { - "model.marketing.fct_one": { - "name": "fct_one", - "package_name": "marketing", - "unique_id": "model.marketing.fct_one", - "relation_name": "\\"dbt\\".\\"test_schema\\".\\"fct_one\\"", - "database": "dbt", - "schema": "test_schema", - "identifier": "fct_one", - "version": null, - "latest_version": null, - "public_node_dependencies": [], - "generated_at": "2023-04-13T17:17:58.128706Z" - }, - "model.marketing.fct_two": { - "name": "fct_two", - "package_name": "marketing", - "unique_id": "model.marketing.fct_two", - "relation_name": "\\"dbt\\".\\"test_schema\\".\\"fct_two\\"", - "database": "dbt", - "schema": "test_schema", - "identifier": "fct_two", - "version": null, - "latest_version": null, - "public_node_dependencies": ["model.test.fct_one"], - "generated_at": "2023-04-13T17:17:58.128706Z" - } - }, - "dependencies": [] -} -""" - -public_models_schema_yml = """ -models: - - name: orders - access: public - description: "Some order data" -""" diff --git a/tests/functional/partial_parsing/test_partial_parsing.py b/tests/functional/partial_parsing/test_partial_parsing.py index 2714a64cca4..aa42bdb4e13 100644 --- a/tests/functional/partial_parsing/test_partial_parsing.py +++ b/tests/functional/partial_parsing/test_partial_parsing.py @@ -78,9 +78,7 @@ from dbt.exceptions import CompilationError, ParsingError, DuplicateVersionedUnversionedError from dbt.contracts.files import ParseFileType from dbt.contracts.results import TestStatus -from dbt.contracts.publication import PublicationArtifact -import json import re import os @@ -811,51 +809,3 @@ def test_pp_groups(self, project): ) with pytest.raises(ParsingError): results = run_dbt(["--partial-parse", "run"]) - - -class TestDependencies: - @pytest.fixture(scope="class") - def models(self): - return {"orders.sql": orders_sql} - - @pytest.fixture(scope="class") - def marketing_publication(self): - return PublicationArtifact.from_dict(json.loads(marketing_pub_json)) - - @pytest.fixture(scope="class") - def dependencies(self): - return dependencies_yml - - def test_dependencies(self, project, marketing_publication): - # initial run with dependencies - manifest = run_dbt(["parse"], publications=[marketing_publication]) - assert len(manifest.publications) == 1 - - # remove dependencies - write_file(empty_dependencies_yml, "dependencies.yml") - manifest = run_dbt(["parse"], publications=[marketing_publication]) - assert len(manifest.publications) == 0 - - -class TestPublicationArtifactAvailable: - @pytest.fixture(scope="class") - def models(self): - return { - "orders.sql": orders_sql, - "schema.yml": public_models_schema_yml, - } - - def test_pp_publication_artifact_available(self, project): - # initial run with public model logs PublicationArtifactAvailable - manifest, log_output = run_dbt_and_capture(["--debug", "--log-format", "json", "parse"]) - orders_node = manifest.nodes["model.test.orders"] - assert orders_node.access == "public" - assert "PublicationArtifactAvailable" in log_output - - # unchanged project - partial parse run with public model logs PublicationArtifactAvailable - manifest, log_output = run_dbt_and_capture( - ["--partial-parse", "--debug", "--log-format", "json", "parse"] - ) - orders_node = manifest.nodes["model.test.orders"] - assert orders_node.access == "public" - assert "PublicationArtifactAvailable" in log_output diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index d6ca51e664d..0099b8aeae4 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -274,8 +274,6 @@ def test_event_codes(self): types.RegistryResponseMissingNestedKeys(response=""), types.RegistryResponseExtraNestedKeys(response=""), types.DepsSetDownloadDirectory(path=""), - # P - Artifacts =================== - types.PublicationArtifactAvailable(), # Q - Node execution ====================== types.RunningOperationCaughtError(exc=""), types.CompileComplete(), From 7521053777e2d2d3c5e74aea926be40c87c7f6ff Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 15:24:34 -0400 Subject: [PATCH 02/15] flake8 + mypy --- core/dbt/parser/manifest.py | 4 +--- core/dbt/plugins/__init__.py | 4 ++++ core/dbt/plugins/contracts.py | 10 ++++------ core/dbt/plugins/manager.py | 20 ++++++++++--------- .../partial_parsing/test_partial_parsing.py | 4 ---- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 319154576fc..c47a992cd80 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -86,7 +86,6 @@ ManifestStateCheck, ParsingInfo, ) -from dbt.graph.graph import UniqueId from dbt.contracts.graph.nodes import ( SourceDefinition, Macro, @@ -98,7 +97,6 @@ ModelNode, NodeRelation, ) -from dbt.contracts.graph.node_args import ModelNodeArgs from dbt.contracts.graph.unparsed import NodeVersion from dbt.contracts.util import Writable from dbt.exceptions import ( @@ -122,7 +120,7 @@ from dbt.version import __version__ from dbt.dataclass_schema import StrEnum, dbtClassMixin -from dbt.plugins import setup_plugin_manager, get_plugin_manager +from dbt.plugins import get_plugin_manager PARSING_STATE = DbtProcessState("parsing") diff --git a/core/dbt/plugins/__init__.py b/core/dbt/plugins/__init__.py index f9a59f599a6..4652de35601 100644 --- a/core/dbt/plugins/__init__.py +++ b/core/dbt/plugins/__init__.py @@ -1,5 +1,7 @@ from typing import Optional +from dbt.exceptions import DbtInternalError + from .manager import PluginManager # these are just exports, they need "noqa" so flake8 will not complain. @@ -15,4 +17,6 @@ def setup_plugin_manager(): def get_plugin_manager() -> PluginManager: global PLUGIN_MANAGER + if not PLUGIN_MANAGER: + raise DbtInternalError("get_plugin_manager called before plugin manager is set!") return PLUGIN_MANAGER diff --git a/core/dbt/plugins/contracts.py b/core/dbt/plugins/contracts.py index 08a64ac5504..778dee8717f 100644 --- a/core/dbt/plugins/contracts.py +++ b/core/dbt/plugins/contracts.py @@ -1,6 +1,4 @@ -from dataclasses import dataclass, field -from pathlib import Path - -from dbt.contracts.util import ArtifactMixin as ExternalArtifact -from dbt.contracts.util import BaseArtifactMetadata, schema_version, AdditionalPropertiesMixin -from dbt.dataclass_schema import dbtClassMixin +# just exports, they need "noqa" so flake8 will not complain. +from dbt.contracts.util import ArtifactMixin as ExternalArtifact, schema_version # noqa +from dbt.contracts.util import BaseArtifactMetadata, AdditionalPropertiesMixin # noqa +from dbt.dataclass_schema import dbtClassMixin # noqa diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index bd2f18100c9..c47ae6822aa 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -18,49 +18,51 @@ def __init__(self): pass def build_external_nodes(self) -> List[ModelNodeArgs]: - pass + """TODO""" + raise NotImplementedError def get_external_artifacts( self, manifest: Manifest, config: RuntimeConfig ) -> Dict[str, ExternalArtifact]: - pass + """TODO""" + raise NotImplementedError class PluginManager: PLUGIN_PREFIX = "dbt_" def __init__(self): - self.plugins = {} discovered_dbt_modules = { name: importlib.import_module(name) for finder, name, ispkg in pkgutil.iter_modules() if name.startswith(self.PLUGIN_PREFIX) } + plugins = {} for name, module in discovered_dbt_modules.items(): if hasattr(module, "plugin"): plugin_cls = getattr(module, "plugin") assert issubclass( plugin_cls, dbtPlugin - ), f"'plugin' in {plugin_name} must be subclass of dbtPlugin" + ), f"'plugin' in {name} must be subclass of dbtPlugin" plugin = plugin_cls() - self.plugins[name] = plugin + plugins[name] = plugin - self.valid_hook_names = set() + valid_hook_names = set() # default hook implementations from dbtPlugin for hook_name in dir(dbtPlugin): if not hook_name.startswith("_"): - self.valid_hook_names.add(hook_name) + valid_hook_names.add(hook_name) self.hooks = {} - for plugin_name, plugin_cls in self.plugins.items(): + for plugin_cls in plugins.values(): for hook_name in dir(plugin): hook = getattr(plugin, hook_name) if ( callable(hook) and hasattr(hook, "is_dbt_hook") - and hook_name in self.valid_hook_names + and hook_name in valid_hook_names ): if hook_name in self.hooks: self.hooks[hook_name].append(hook) diff --git a/tests/functional/partial_parsing/test_partial_parsing.py b/tests/functional/partial_parsing/test_partial_parsing.py index aa42bdb4e13..83c9c88c022 100644 --- a/tests/functional/partial_parsing/test_partial_parsing.py +++ b/tests/functional/partial_parsing/test_partial_parsing.py @@ -69,10 +69,6 @@ groups_schema_yml_one_group_model_in_group2, groups_schema_yml_two_groups_private_orders_valid_access, groups_schema_yml_two_groups_private_orders_invalid_access, - dependencies_yml, - empty_dependencies_yml, - marketing_pub_json, - public_models_schema_yml, ) from dbt.exceptions import CompilationError, ParsingError, DuplicateVersionedUnversionedError From 7e37bcbf1a89d0b6191a188cf7edc3da4dbae429 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 15:27:26 -0400 Subject: [PATCH 03/15] fix unit tests --- core/dbt/plugins/__init__.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/dbt/plugins/__init__.py b/core/dbt/plugins/__init__.py index 4652de35601..a1a42f7a624 100644 --- a/core/dbt/plugins/__init__.py +++ b/core/dbt/plugins/__init__.py @@ -1,7 +1,4 @@ from typing import Optional - -from dbt.exceptions import DbtInternalError - from .manager import PluginManager # these are just exports, they need "noqa" so flake8 will not complain. @@ -18,5 +15,7 @@ def setup_plugin_manager(): def get_plugin_manager() -> PluginManager: global PLUGIN_MANAGER if not PLUGIN_MANAGER: - raise DbtInternalError("get_plugin_manager called before plugin manager is set!") + setup_plugin_manager() + + assert PLUGIN_MANAGER return PLUGIN_MANAGER From 67b6a671d778ae5b90b368718c0ae562df2d5f21 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 16:03:49 -0400 Subject: [PATCH 04/15] tighten up interfaces --- core/dbt/cli/requires.py | 11 ++++++--- core/dbt/contracts/graph/node_args.py | 5 +++++ core/dbt/contracts/graph/nodes.py | 2 +- core/dbt/parser/manifest.py | 8 +++---- core/dbt/plugins/contracts.py | 11 ++++++++- core/dbt/plugins/manager.py | 32 +++++++++++++-------------- core/dbt/plugins/manifest.py | 17 +++++++++++++- 7 files changed, 59 insertions(+), 27 deletions(-) diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index b262bf6e547..40c03ce8f06 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -252,9 +252,14 @@ def wrapper(*args, **kwargs): if write and ctx.obj["flags"].write_json: write_manifest(manifest, ctx.obj["runtime_config"].project_target_path) pm = get_plugin_manager() - artifacts = pm.get_external_artifacts(manifest, runtime_config) - for path, artifact in artifacts.items(): - artifact.write(path) + external_artifacts = pm.get_external_artifacts( + manifest, + runtime_config.project_name, + runtime_config.credentials.type, + runtime_config.quoting, + ) + for external_artifact in external_artifacts: + external_artifact.artifact.write(external_artifact.path) return func(*args, **kwargs) diff --git a/core/dbt/contracts/graph/node_args.py b/core/dbt/contracts/graph/node_args.py index 0694952aef5..0e678497ae2 100644 --- a/core/dbt/contracts/graph/node_args.py +++ b/core/dbt/contracts/graph/node_args.py @@ -3,6 +3,7 @@ from typing import Optional from dbt.contracts.graph.unparsed import NodeVersion +from dbt.node_types import NodeType @dataclass @@ -17,3 +18,7 @@ class ModelNodeArgs: latest_version: Optional[NodeVersion] = None deprecation_date: Optional[datetime] = None generated_at: datetime = field(default_factory=datetime.utcnow) + + @property + def unique_id(self): + return f"{NodeType.Model}.{self.package_name}.{self.name}.{self.version}" diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index d24384f6cad..8a0641cf753 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -581,7 +581,7 @@ class ModelNode(CompiledNode): @classmethod def from_args(cls, args: ModelNodeArgs) -> "ModelNode": - unique_id = f"{NodeType.Model}.{args.package_name}.{args.name}" + unique_id = args.unique_id return cls( resource_type=NodeType.Model, diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index c47a992cd80..3610ab28555 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -732,9 +732,6 @@ def write_manifest_for_partial_parse(self): raise def inject_external_nodes(self) -> bool: - pm = get_plugin_manager() - external_node_args = pm.build_external_nodes() - # Remove previously existing external nodes since we are regenerating them manifest_nodes_modified = False for unique_id in self.manifest.external_node_unique_ids: @@ -742,7 +739,10 @@ def inject_external_nodes(self) -> bool: remove_dependent_project_references(self.manifest, unique_id) manifest_nodes_modified = True - for node_arg in external_node_args: + # Inject any newly-available external nodes + pm = get_plugin_manager() + external_model_nodes = pm.get_external_nodes().models + for node_arg in external_model_nodes.values(): node = ModelNode.from_args(node_arg) # node may already exist from package or running project - in which case we should avoid clobbering it with an external node if node.unique_id not in self.manifest.nodes: diff --git a/core/dbt/plugins/contracts.py b/core/dbt/plugins/contracts.py index 778dee8717f..30fa23ce4fb 100644 --- a/core/dbt/plugins/contracts.py +++ b/core/dbt/plugins/contracts.py @@ -1,4 +1,13 @@ +from dataclasses import dataclass +from pathlib import Path + # just exports, they need "noqa" so flake8 will not complain. -from dbt.contracts.util import ArtifactMixin as ExternalArtifact, schema_version # noqa +from dbt.contracts.util import ArtifactMixin, schema_version # noqa from dbt.contracts.util import BaseArtifactMetadata, AdditionalPropertiesMixin # noqa from dbt.dataclass_schema import dbtClassMixin # noqa + + +@dataclass +class ExternalArtifact: + path: Path + artifact: ArtifactMixin diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index c47ae6822aa..1566f03ab7f 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -1,11 +1,10 @@ import importlib import pkgutil -from typing import List, Dict +from typing import Dict, List -from dbt.contracts.graph.node_args import ModelNodeArgs from dbt.contracts.graph.manifest import Manifest -from dbt.config import RuntimeConfig from dbt.plugins.contracts import ExternalArtifact +from dbt.plugins.manifest import ExternalNodes def dbt_hook(func): @@ -17,13 +16,13 @@ class dbtPlugin: def __init__(self): pass - def build_external_nodes(self) -> List[ModelNodeArgs]: + def get_external_nodes(self) -> ExternalNodes: """TODO""" raise NotImplementedError def get_external_artifacts( - self, manifest: Manifest, config: RuntimeConfig - ) -> Dict[str, ExternalArtifact]: + self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] + ) -> List[ExternalArtifact]: """TODO""" raise NotImplementedError @@ -34,7 +33,7 @@ class PluginManager: def __init__(self): discovered_dbt_modules = { name: importlib.import_module(name) - for finder, name, ispkg in pkgutil.iter_modules() + for _, name, _ in pkgutil.iter_modules() if name.startswith(self.PLUGIN_PREFIX) } @@ -70,18 +69,17 @@ def __init__(self): self.hooks[hook_name] = [hook] def get_external_artifacts( - self, manifest: Manifest, config: RuntimeConfig - ) -> Dict[str, ExternalArtifact]: - external_artifacts = {} + self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] + ) -> List[ExternalArtifact]: + external_artifacts = [] for hook_method in self.hooks.get("get_external_artifacts", []): - plugin_external_artifact = hook_method(manifest, config) - external_artifacts.update(plugin_external_artifact) + plugin_external_artifact = hook_method(manifest, project_name, adapter_type, quoting) + external_artifacts += plugin_external_artifact return external_artifacts - def build_external_nodes(self) -> List[ModelNodeArgs]: - external_nodes = [] - for hook_method in self.hooks.get("build_external_nodes", []): + def get_external_nodes(self) -> ExternalNodes: + external_nodes = ExternalNodes() + for hook_method in self.hooks.get("get_external_nodes", []): plugin_external_nodes = hook_method() - # TODO: ensure uniqueness - external_nodes += plugin_external_nodes + external_nodes.update(plugin_external_nodes) return external_nodes diff --git a/core/dbt/plugins/manifest.py b/core/dbt/plugins/manifest.py index 194212f0310..176b2cf2eba 100644 --- a/core/dbt/plugins/manifest.py +++ b/core/dbt/plugins/manifest.py @@ -1,6 +1,21 @@ +from dataclasses import dataclass, field +from typing import Dict + +from dbt.contracts.graph.node_args import ModelNodeArgs + # all these are just exports, they need "noqa" so flake8 will not complain. from dbt.contracts.graph.manifest import Manifest # noqa from dbt.node_types import AccessType, NodeType # noqa -from dbt.contracts.graph.node_args import ModelNodeArgs # noqa from dbt.contracts.graph.unparsed import NodeVersion # noqa from dbt.graph.graph import UniqueId # noqa + + +@dataclass +class ExternalNodes: + models: Dict[str, ModelNodeArgs] = field(default_factory=dict) + + def add_model(self, model_args: ModelNodeArgs) -> None: + self.models[model_args.unique_id] = model_args + + def update(self, other: "ExternalNodes"): + self.models.update(other.models) From 94e36356263d68f05c7ad63dcdfe60aa8ba0133b Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 16:26:55 -0400 Subject: [PATCH 05/15] wrap dbt_hook in try/except --- core/dbt/plugins/manager.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index 1566f03ab7f..a6a29fe93bf 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -3,13 +3,20 @@ from typing import Dict, List from dbt.contracts.graph.manifest import Manifest +from dbt.exceptions import DbtRuntimeError from dbt.plugins.contracts import ExternalArtifact from dbt.plugins.manifest import ExternalNodes def dbt_hook(func): - setattr(func, "is_dbt_hook", True) - return func + def inner(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception as e: + raise DbtRuntimeError(f"{func.__name__}: {e}") + + setattr(inner, "is_dbt_hook", True) + return inner class dbtPlugin: From 9513549bccede852742cde585ba38d78c768d2f0 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 16:28:09 -0400 Subject: [PATCH 06/15] s/setup/set_up --- core/dbt/cli/requires.py | 4 ++-- core/dbt/plugins/__init__.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index 40c03ce8f06..e09c2067d7e 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -23,7 +23,7 @@ from dbt.profiler import profiler from dbt.tracking import active_user, initialize_from_flags, track_run from dbt.utils import cast_dict_to_dict_of_strings -from dbt.plugins import setup_plugin_manager, get_plugin_manager +from dbt.plugins import set_up_plugin_manager, get_plugin_manager from click import Context from functools import update_wrapper @@ -70,7 +70,7 @@ def wrapper(*args, **kwargs): ctx.with_resource(adapter_management()) # Plugins - setup_plugin_manager() + set_up_plugin_manager() return func(*args, **kwargs) diff --git a/core/dbt/plugins/__init__.py b/core/dbt/plugins/__init__.py index a1a42f7a624..abc0980217e 100644 --- a/core/dbt/plugins/__init__.py +++ b/core/dbt/plugins/__init__.py @@ -7,7 +7,7 @@ PLUGIN_MANAGER: Optional[PluginManager] = None -def setup_plugin_manager(): +def set_up_plugin_manager(): global PLUGIN_MANAGER PLUGIN_MANAGER = PluginManager() @@ -15,7 +15,7 @@ def setup_plugin_manager(): def get_plugin_manager() -> PluginManager: global PLUGIN_MANAGER if not PLUGIN_MANAGER: - setup_plugin_manager() + set_up_plugin_manager() assert PLUGIN_MANAGER return PLUGIN_MANAGER From 71407fc356f89b7ad2643073ddfbf84dd429ee7b Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Mon, 26 Jun 2023 18:41:04 -0400 Subject: [PATCH 07/15] ExternalArtifacts --- core/dbt/cli/requires.py | 4 ++-- core/dbt/plugins/contracts.py | 10 +++------- core/dbt/plugins/manager.py | 12 ++++++------ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index e09c2067d7e..8c10990e6cb 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -258,8 +258,8 @@ def wrapper(*args, **kwargs): runtime_config.credentials.type, runtime_config.quoting, ) - for external_artifact in external_artifacts: - external_artifact.artifact.write(external_artifact.path) + for path, external_artifact in external_artifacts.items(): + external_artifact.write(path) return func(*args, **kwargs) diff --git a/core/dbt/plugins/contracts.py b/core/dbt/plugins/contracts.py index 30fa23ce4fb..e9b4a3cce89 100644 --- a/core/dbt/plugins/contracts.py +++ b/core/dbt/plugins/contracts.py @@ -1,13 +1,9 @@ -from dataclasses import dataclass -from pathlib import Path +from typing import Dict # just exports, they need "noqa" so flake8 will not complain. -from dbt.contracts.util import ArtifactMixin, schema_version # noqa +from dbt.contracts.util import ArtifactMixin as ExternalArtifact, schema_version # noqa from dbt.contracts.util import BaseArtifactMetadata, AdditionalPropertiesMixin # noqa from dbt.dataclass_schema import dbtClassMixin # noqa -@dataclass -class ExternalArtifact: - path: Path - artifact: ArtifactMixin +ExternalArtifacts = Dict[str, ExternalArtifact] diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index a6a29fe93bf..219592d5b2b 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -1,10 +1,10 @@ import importlib import pkgutil -from typing import Dict, List +from typing import Dict from dbt.contracts.graph.manifest import Manifest from dbt.exceptions import DbtRuntimeError -from dbt.plugins.contracts import ExternalArtifact +from dbt.plugins.contracts import ExternalArtifacts from dbt.plugins.manifest import ExternalNodes @@ -29,7 +29,7 @@ def get_external_nodes(self) -> ExternalNodes: def get_external_artifacts( self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] - ) -> List[ExternalArtifact]: + ) -> ExternalArtifacts: """TODO""" raise NotImplementedError @@ -77,11 +77,11 @@ def __init__(self): def get_external_artifacts( self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] - ) -> List[ExternalArtifact]: - external_artifacts = [] + ) -> ExternalArtifacts: + external_artifacts = {} for hook_method in self.hooks.get("get_external_artifacts", []): plugin_external_artifact = hook_method(manifest, project_name, adapter_type, quoting) - external_artifacts += plugin_external_artifact + external_artifacts.update(plugin_external_artifact) return external_artifacts def get_external_nodes(self) -> ExternalNodes: From 8d373f7dbadffbd96ef06d564ec54c11813cf967 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Tue, 27 Jun 2023 17:11:00 -0400 Subject: [PATCH 08/15] renaming, PluginManager.from_modules --- core/dbt/cli/requires.py | 14 ++--- core/dbt/config/project.py | 7 --- core/dbt/parser/manifest.py | 6 +-- core/dbt/plugins/__init__.py | 12 +++-- core/dbt/plugins/contracts.py | 4 +- core/dbt/plugins/manager.py | 97 ++++++++++++++++++----------------- core/dbt/plugins/manifest.py | 4 +- 7 files changed, 73 insertions(+), 71 deletions(-) diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index 8c10990e6cb..07ea318afb3 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -69,9 +69,6 @@ def wrapper(*args, **kwargs): # Adapter management ctx.with_resource(adapter_management()) - # Plugins - set_up_plugin_manager() - return func(*args, **kwargs) return update_wrapper(wrapper, func) @@ -164,6 +161,9 @@ def wrapper(*args, **kwargs): ) ctx.obj["project"] = project + # Plugins + set_up_plugin_manager(project=project) + if dbt.tracking.active_user is not None: project_id = None if project is None else project.hashed_name() @@ -251,15 +251,15 @@ def wrapper(*args, **kwargs): ctx.obj["manifest"] = manifest if write and ctx.obj["flags"].write_json: write_manifest(manifest, ctx.obj["runtime_config"].project_target_path) - pm = get_plugin_manager() - external_artifacts = pm.get_external_artifacts( + pm = get_plugin_manager(ctx.obj["runtime_config"]) + plugin_artifacts = pm.get_manifest_artifacts( manifest, runtime_config.project_name, runtime_config.credentials.type, runtime_config.quoting, ) - for path, external_artifact in external_artifacts.items(): - external_artifact.write(path) + for path, plugin_artifact in plugin_artifacts.items(): + plugin_artifact.write(path) return func(*args, **kwargs) diff --git a/core/dbt/config/project.py b/core/dbt/config/project.py index f22436c68a3..6b74533c96a 100644 --- a/core/dbt/config/project.py +++ b/core/dbt/config/project.py @@ -727,13 +727,6 @@ def validate(self): except ValidationError as e: raise ProjectContractBrokenError(e) from e - @classmethod - def partial_load(cls, project_root: str, *, verify_version: bool = False) -> PartialProject: - return PartialProject.from_project_root( - project_root, - verify_version=verify_version, - ) - # Called by: # RtConfig.load_dependencies => RtConfig.load_projects => RtConfig.new_project => Project.from_project_root # RtConfig.from_args => RtConfig.collect_parts => load_project => Project.from_project_root diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 3610ab28555..8df29741eed 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -740,9 +740,9 @@ def inject_external_nodes(self) -> bool: manifest_nodes_modified = True # Inject any newly-available external nodes - pm = get_plugin_manager() - external_model_nodes = pm.get_external_nodes().models - for node_arg in external_model_nodes.values(): + pm = get_plugin_manager(self.root_project) + plugin_model_nodes = pm.get_nodes().models + for node_arg in plugin_model_nodes.values(): node = ModelNode.from_args(node_arg) # node may already exist from package or running project - in which case we should avoid clobbering it with an external node if node.unique_id not in self.manifest.nodes: diff --git a/core/dbt/plugins/__init__.py b/core/dbt/plugins/__init__.py index abc0980217e..35218915cf9 100644 --- a/core/dbt/plugins/__init__.py +++ b/core/dbt/plugins/__init__.py @@ -1,21 +1,25 @@ from typing import Optional + from .manager import PluginManager # these are just exports, they need "noqa" so flake8 will not complain. from .manager import dbtPlugin, dbt_hook # noqa +from dbt.config import Project + + PLUGIN_MANAGER: Optional[PluginManager] = None -def set_up_plugin_manager(): +def set_up_plugin_manager(project: Project): global PLUGIN_MANAGER - PLUGIN_MANAGER = PluginManager() + PLUGIN_MANAGER = PluginManager.from_modules(project) -def get_plugin_manager() -> PluginManager: +def get_plugin_manager(project: Project) -> PluginManager: global PLUGIN_MANAGER if not PLUGIN_MANAGER: - set_up_plugin_manager() + set_up_plugin_manager(project) assert PLUGIN_MANAGER return PLUGIN_MANAGER diff --git a/core/dbt/plugins/contracts.py b/core/dbt/plugins/contracts.py index e9b4a3cce89..9a34ce30300 100644 --- a/core/dbt/plugins/contracts.py +++ b/core/dbt/plugins/contracts.py @@ -1,9 +1,9 @@ from typing import Dict # just exports, they need "noqa" so flake8 will not complain. -from dbt.contracts.util import ArtifactMixin as ExternalArtifact, schema_version # noqa +from dbt.contracts.util import ArtifactMixin as PluginArtifact, schema_version # noqa from dbt.contracts.util import BaseArtifactMetadata, AdditionalPropertiesMixin # noqa from dbt.dataclass_schema import dbtClassMixin # noqa -ExternalArtifacts = Dict[str, ExternalArtifact] +PluginArtifacts = Dict[str, PluginArtifact] diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index 219592d5b2b..e85b8e14b45 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -1,11 +1,12 @@ import importlib import pkgutil -from typing import Dict +from typing import Dict, List, Callable +from dbt.config.project import Project from dbt.contracts.graph.manifest import Manifest from dbt.exceptions import DbtRuntimeError -from dbt.plugins.contracts import ExternalArtifacts -from dbt.plugins.manifest import ExternalNodes +from dbt.plugins.contracts import PluginArtifacts +from dbt.plugins.manifest import PluginNodes def dbt_hook(func): @@ -20,16 +21,15 @@ def inner(*args, **kwargs): class dbtPlugin: - def __init__(self): - pass + def __init__(self, name: str, project: Project): + self.name = name + self.project = project - def get_external_nodes(self) -> ExternalNodes: + def get_nodes(self) -> PluginNodes: """TODO""" raise NotImplementedError - def get_external_artifacts( - self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] - ) -> ExternalArtifacts: + def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts: """TODO""" raise NotImplementedError @@ -37,56 +37,61 @@ def get_external_artifacts( class PluginManager: PLUGIN_PREFIX = "dbt_" - def __init__(self): - discovered_dbt_modules = { - name: importlib.import_module(name) - for _, name, _ in pkgutil.iter_modules() - if name.startswith(self.PLUGIN_PREFIX) - } - - plugins = {} - for name, module in discovered_dbt_modules.items(): - if hasattr(module, "plugin"): - plugin_cls = getattr(module, "plugin") - assert issubclass( - plugin_cls, dbtPlugin - ), f"'plugin' in {name} must be subclass of dbtPlugin" - - plugin = plugin_cls() - plugins[name] = plugin - - valid_hook_names = set() + def __init__(self, plugins: List[dbtPlugin]): + self._plugins = plugins + self._valid_hook_names = set() # default hook implementations from dbtPlugin for hook_name in dir(dbtPlugin): if not hook_name.startswith("_"): - valid_hook_names.add(hook_name) + self._valid_hook_names.add(hook_name) - self.hooks = {} - for plugin_cls in plugins.values(): + self.hooks: Dict[str, List[Callable]] = {} + for plugin in self._plugins: for hook_name in dir(plugin): hook = getattr(plugin, hook_name) if ( callable(hook) and hasattr(hook, "is_dbt_hook") - and hook_name in valid_hook_names + and hook_name in self._valid_hook_names ): if hook_name in self.hooks: self.hooks[hook_name].append(hook) else: self.hooks[hook_name] = [hook] - def get_external_artifacts( + @classmethod + def from_modules(cls, project: Project) -> "PluginManager": + discovered_dbt_modules = { + name: importlib.import_module(name) + for _, name, _ in pkgutil.iter_modules() + if name.startswith(cls.PLUGIN_PREFIX) + } + + plugins = [] + for name, module in discovered_dbt_modules.items(): + if hasattr(module, "plugin"): + plugin_cls = getattr(module, "plugin") + assert issubclass( + plugin_cls, dbtPlugin + ), f"'plugin' in {name} must be subclass of dbtPlugin" + + plugin = plugin_cls(name=name, project=project) + plugins.append(plugin) + + return cls(plugins=plugins) + + def get_manifest_artifacts( self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] - ) -> ExternalArtifacts: - external_artifacts = {} - for hook_method in self.hooks.get("get_external_artifacts", []): - plugin_external_artifact = hook_method(manifest, project_name, adapter_type, quoting) - external_artifacts.update(plugin_external_artifact) - return external_artifacts - - def get_external_nodes(self) -> ExternalNodes: - external_nodes = ExternalNodes() - for hook_method in self.hooks.get("get_external_nodes", []): - plugin_external_nodes = hook_method() - external_nodes.update(plugin_external_nodes) - return external_nodes + ) -> PluginArtifacts: + plugin_artifacts = {} + for hook_method in self.hooks.get("get_manifest_artifacts", []): + plugin_artifact = hook_method(manifest) + plugin_artifacts.update(plugin_artifact) + return plugin_artifacts + + def get_nodes(self) -> PluginNodes: + plugin_nodes = PluginNodes() + for hook_method in self.hooks.get("get_nodes", []): + plugin_nodes = hook_method() + plugin_nodes.update(plugin_nodes) + return plugin_nodes diff --git a/core/dbt/plugins/manifest.py b/core/dbt/plugins/manifest.py index 176b2cf2eba..112cd1565b3 100644 --- a/core/dbt/plugins/manifest.py +++ b/core/dbt/plugins/manifest.py @@ -11,11 +11,11 @@ @dataclass -class ExternalNodes: +class PluginNodes: models: Dict[str, ModelNodeArgs] = field(default_factory=dict) def add_model(self, model_args: ModelNodeArgs) -> None: self.models[model_args.unique_id] = model_args - def update(self, other: "ExternalNodes"): + def update(self, other: "PluginNodes"): self.models.update(other.models) From eed0cbf9a51fe1fc350a2d841bf62c23a019363d Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Tue, 27 Jun 2023 18:36:31 -0400 Subject: [PATCH 09/15] look for list of dbtPlugin classes --- core/dbt/plugins/manager.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index e85b8e14b45..9cba25ec3f6 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -35,7 +35,8 @@ def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts: class PluginManager: - PLUGIN_PREFIX = "dbt_" + PLUGIN_MODULE_PREFIX = "dbt_" + PLUGIN_ATTR_NAME = "plugins" def __init__(self, plugins: List[dbtPlugin]): self._plugins = plugins @@ -64,20 +65,20 @@ def from_modules(cls, project: Project) -> "PluginManager": discovered_dbt_modules = { name: importlib.import_module(name) for _, name, _ in pkgutil.iter_modules() - if name.startswith(cls.PLUGIN_PREFIX) + if name.startswith(cls.PLUGIN_MODULE_PREFIX) } plugins = [] for name, module in discovered_dbt_modules.items(): - if hasattr(module, "plugin"): - plugin_cls = getattr(module, "plugin") - assert issubclass( - plugin_cls, dbtPlugin - ), f"'plugin' in {name} must be subclass of dbtPlugin" - - plugin = plugin_cls(name=name, project=project) - plugins.append(plugin) - + if hasattr(module, cls.PLUGIN_ATTR_NAME): + available_plugins = getattr(module, cls.PLUGIN_ATTR_NAME, []) + for plugin_cls in available_plugins: + assert issubclass( + plugin_cls, dbtPlugin + ), f"'plugin' in {name} must be subclass of dbtPlugin" + + plugin = plugin_cls(name=name, project=project) + plugins.append(plugin) return cls(plugins=plugins) def get_manifest_artifacts( From 552ea1ca566618b6253eea00d8173cb4b936eb48 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Tue, 27 Jun 2023 19:00:05 -0400 Subject: [PATCH 10/15] dbtPlugin.initialize --- core/dbt/cli/requires.py | 7 +------ core/dbt/plugins/manager.py | 37 ++++++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index 07ea318afb3..df4e17483fb 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -252,12 +252,7 @@ def wrapper(*args, **kwargs): if write and ctx.obj["flags"].write_json: write_manifest(manifest, ctx.obj["runtime_config"].project_target_path) pm = get_plugin_manager(ctx.obj["runtime_config"]) - plugin_artifacts = pm.get_manifest_artifacts( - manifest, - runtime_config.project_name, - runtime_config.credentials.type, - runtime_config.quoting, - ) + plugin_artifacts = pm.get_manifest_artifacts(manifest) for path, plugin_artifact in plugin_artifacts.items(): plugin_artifact.write(path) diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index 9cba25ec3f6..92da899c825 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -21,17 +21,35 @@ def inner(*args, **kwargs): class dbtPlugin: - def __init__(self, name: str, project: Project): - self.name = name + def __init__(self, project: Project): self.project = project + self.initialize() + + @property + def name(self) -> str: + return self.__class__.__name__ + + def initialize(self) -> None: + """ + Initialize the plugin. This function may be overridden by subclasses that have + additional initialization steps. + """ + pass def get_nodes(self) -> PluginNodes: - """TODO""" - raise NotImplementedError + """ + Provide PluginNodes to dbt for injection into dbt's DAG. + Currently the only node types that are accepted are model nodes. + """ + raise NotImplementedError(f"get_nodes hook not implemented for {self.name}") def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts: - """TODO""" - raise NotImplementedError + """ + Given a manifest, provide PluginArtifacts derived for writing by core. + PluginArtifacts share the same lifecycle as the manifest.json file -- they + will either be written or not depending on whether the manifest is written. + """ + raise NotImplementedError(f"get_manifest_artifacts hook not implemented for {self.name}") class PluginManager: @@ -76,14 +94,11 @@ def from_modules(cls, project: Project) -> "PluginManager": assert issubclass( plugin_cls, dbtPlugin ), f"'plugin' in {name} must be subclass of dbtPlugin" - - plugin = plugin_cls(name=name, project=project) + plugin = plugin_cls(project=project) plugins.append(plugin) return cls(plugins=plugins) - def get_manifest_artifacts( - self, manifest: Manifest, project_name: str, adapter_type: str, quoting: Dict[str, str] - ) -> PluginArtifacts: + def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts: plugin_artifacts = {} for hook_method in self.hooks.get("get_manifest_artifacts", []): plugin_artifact = hook_method(manifest) From 4980779f6fa9c3756a9e81dd354a61b60aea9a17 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Tue, 27 Jun 2023 22:06:04 -0400 Subject: [PATCH 11/15] remove dependent_projects --- core/dbt/config/project.py | 38 +------------------------------ core/dbt/config/renderer.py | 4 ---- core/dbt/config/runtime.py | 1 - core/dbt/contracts/publication.py | 20 ---------------- core/dbt/plugins/contracts.py | 2 +- tests/unit/test_config.py | 3 --- tests/unit/utils.py | 1 - 7 files changed, 2 insertions(+), 67 deletions(-) delete mode 100644 core/dbt/contracts/publication.py diff --git a/core/dbt/config/project.py b/core/dbt/config/project.py index 6b74533c96a..0fd2165f660 100644 --- a/core/dbt/config/project.py +++ b/core/dbt/config/project.py @@ -39,7 +39,6 @@ SemverString, ) from dbt.contracts.project import PackageConfig, ProjectPackageMetadata -from dbt.contracts.publication import ProjectDependencies from dbt.dataclass_schema import ValidationError from .renderer import DbtProjectYamlRenderer, PackageRenderer from .selectors import ( @@ -115,16 +114,13 @@ def package_and_project_data_from_root(project_root): packages_specified_path = PACKAGES_FILE_NAME packages_dict = {} - dependent_projects_dict = {} if "packages" in dependencies_yml_dict: packages_dict["packages"] = dependencies_yml_dict["packages"] packages_specified_path = DEPENDENCIES_FILE_NAME else: # don't check for "packages" here so we capture invalid keys in packages.yml packages_dict = packages_yml_dict - if "projects" in dependencies_yml_dict: - dependent_projects_dict["projects"] = dependencies_yml_dict["projects"] - return packages_dict, dependent_projects_dict, packages_specified_path + return packages_dict, packages_specified_path def package_config_from_data(packages_data: Dict[str, Any]) -> PackageConfig: @@ -139,21 +135,6 @@ def package_config_from_data(packages_data: Dict[str, Any]) -> PackageConfig: return packages -def dependent_project_config_from_data( - dependent_projects_data: Dict[str, Any] -) -> ProjectDependencies: - if not dependent_projects_data: - dependent_projects_data = {"projects": []} - - try: - ProjectDependencies.validate(dependent_projects_data) - dependent_projects = ProjectDependencies.from_dict(dependent_projects_data) - except ValidationError as e: - msg = f"Malformed dependencies.yml: {e}" - raise DbtProjectError(msg) - return dependent_projects - - def _parse_versions(versions: Union[List[str], str]) -> List[VersionSpecifier]: """Parse multiple versions as read from disk. The versions value may be any one of: @@ -278,9 +259,6 @@ def _get_required_version( class RenderComponents: project_dict: Dict[str, Any] = field(metadata=dict(description="The project dictionary")) packages_dict: Dict[str, Any] = field(metadata=dict(description="The packages dictionary")) - dependent_projects_dict: Dict[str, Any] = field( - metadata=dict(description="The dependent projects dictionary") - ) selectors_dict: Dict[str, Any] = field(metadata=dict(description="The selectors dictionary")) @@ -321,15 +299,11 @@ def get_rendered( rendered_packages = renderer.render_packages( self.packages_dict, self.packages_specified_path ) - rendered_dependent_projects = renderer.render_dependent_projects( - self.dependent_projects_dict - ) rendered_selectors = renderer.render_selectors(self.selectors_dict) return RenderComponents( project_dict=rendered_project, packages_dict=rendered_packages, - dependent_projects_dict=rendered_dependent_projects, selectors_dict=rendered_selectors, ) @@ -376,7 +350,6 @@ def create_project(self, rendered: RenderComponents) -> "Project": unrendered = RenderComponents( project_dict=self.project_dict, packages_dict=self.packages_dict, - dependent_projects_dict=self.dependent_projects_dict, selectors_dict=self.selectors_dict, ) dbt_version = _get_required_version( @@ -478,9 +451,6 @@ def create_project(self, rendered: RenderComponents) -> "Project": query_comment = _query_comment_from_cfg(cfg.query_comment) packages: PackageConfig = package_config_from_data(rendered.packages_dict) - dependent_projects: ProjectDependencies = dependent_project_config_from_data( - rendered.dependent_projects_dict - ) selectors = selector_config_from_data(rendered.selectors_dict) manifest_selectors: Dict[str, Any] = {} if rendered.selectors_dict and rendered.selectors_dict["selectors"]: @@ -516,7 +486,6 @@ def create_project(self, rendered: RenderComponents) -> "Project": snapshots=snapshots, dbt_version=dbt_version, packages=packages, - dependent_projects=dependent_projects, manifest_selectors=manifest_selectors, selectors=selectors, query_comment=query_comment, @@ -539,7 +508,6 @@ def from_dicts( project_root: str, project_dict: Dict[str, Any], packages_dict: Dict[str, Any], - dependent_projects_dict: Dict[str, Any], selectors_dict: Dict[str, Any], *, verify_version: bool = False, @@ -556,7 +524,6 @@ def from_dicts( project_root=project_root, project_dict=project_dict, packages_dict=packages_dict, - dependent_projects_dict=dependent_projects_dict, selectors_dict=selectors_dict, verify_version=verify_version, packages_specified_path=packages_specified_path, @@ -570,7 +537,6 @@ def from_project_root( project_dict = load_raw_project(project_root) ( packages_dict, - dependent_projects_dict, packages_specified_path, ) = package_and_project_data_from_root(project_root) selectors_dict = selector_data_from_root(project_root) @@ -579,7 +545,6 @@ def from_project_root( project_dict=project_dict, selectors_dict=selectors_dict, packages_dict=packages_dict, - dependent_projects_dict=dependent_projects_dict, verify_version=verify_version, packages_specified_path=packages_specified_path, ) @@ -636,7 +601,6 @@ class Project: vars: VarProvider dbt_version: List[VersionSpecifier] packages: PackageConfig - dependent_projects: ProjectDependencies manifest_selectors: Dict[str, Any] selectors: SelectorConfig query_comment: QueryComment diff --git a/core/dbt/config/renderer.py b/core/dbt/config/renderer.py index 3b9c934ed38..aba4791c86c 100644 --- a/core/dbt/config/renderer.py +++ b/core/dbt/config/renderer.py @@ -142,10 +142,6 @@ def render_packages(self, packages: Dict[str, Any], packages_specified_path: str else: return package_renderer.render_data(packages) - def render_dependent_projects(self, dependent_projects: Dict[str, Any]): - """This is a no-op to maintain regularity in the interfaces. We don't render dependencies.yml.""" - return dependent_projects - def render_selectors(self, selectors: Dict[str, Any]): return self.render_data(selectors) diff --git a/core/dbt/config/runtime.py b/core/dbt/config/runtime.py index d6119318e3c..28416f68519 100644 --- a/core/dbt/config/runtime.py +++ b/core/dbt/config/runtime.py @@ -161,7 +161,6 @@ def from_parts( snapshots=project.snapshots, dbt_version=project.dbt_version, packages=project.packages, - dependent_projects=project.dependent_projects, manifest_selectors=project.manifest_selectors, selectors=project.selectors, query_comment=project.query_comment, diff --git a/core/dbt/contracts/publication.py b/core/dbt/contracts/publication.py deleted file mode 100644 index b54e66fee37..00000000000 --- a/core/dbt/contracts/publication.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Any, Dict, List - - -from dataclasses import dataclass, field - -from dbt.contracts.util import ( - AdditionalPropertiesMixin, -) -from dbt.dataclass_schema import dbtClassMixin, ExtensibleDbtClassMixin - - -@dataclass -class ProjectDependency(AdditionalPropertiesMixin, ExtensibleDbtClassMixin): - name: str - _extra: Dict[str, Any] = field(default_factory=dict) - - -@dataclass -class ProjectDependencies(dbtClassMixin): - projects: List[ProjectDependency] = field(default_factory=list) diff --git a/core/dbt/plugins/contracts.py b/core/dbt/plugins/contracts.py index 9a34ce30300..a9db066dfca 100644 --- a/core/dbt/plugins/contracts.py +++ b/core/dbt/plugins/contracts.py @@ -3,7 +3,7 @@ # just exports, they need "noqa" so flake8 will not complain. from dbt.contracts.util import ArtifactMixin as PluginArtifact, schema_version # noqa from dbt.contracts.util import BaseArtifactMetadata, AdditionalPropertiesMixin # noqa -from dbt.dataclass_schema import dbtClassMixin # noqa +from dbt.dataclass_schema import dbtClassMixin, ExtensibleDbtClassMixin # noqa PluginArtifacts = Dict[str, PluginArtifact] diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 293de172e74..2ebe5766986 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -576,7 +576,6 @@ def project_from_config_norender( project_dict=cfg, packages_dict=packages, selectors_dict={}, - dependent_projects_dict={}, verify_version=verify_version, ) # no rendering @@ -584,7 +583,6 @@ def project_from_config_norender( project_dict=partial.project_dict, packages_dict=partial.packages_dict, selectors_dict=partial.selectors_dict, - dependent_projects_dict=partial.dependent_projects_dict, ) return partial.create_project(rendered) @@ -603,7 +601,6 @@ def project_from_config_rendered( project_dict=cfg, packages_dict=packages, selectors_dict={}, - dependent_projects_dict={}, verify_version=verify_version, packages_specified_path=packages_specified_path, ) diff --git a/tests/unit/utils.py b/tests/unit/utils.py index 48571cb0d54..0f5c12ebbfd 100644 --- a/tests/unit/utils.py +++ b/tests/unit/utils.py @@ -70,7 +70,6 @@ def project_from_dict(project, profile, packages=None, selectors=None, cli_vars= project_root=project_root, project_dict=project, packages_dict=packages, - dependent_projects_dict={}, selectors_dict=selectors, ) return partial.render(renderer) From 03d921b0c7c738c62b44e1975fbc25102f76ef55 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Tue, 27 Jun 2023 22:23:34 -0400 Subject: [PATCH 12/15] changelog entry --- .changes/unreleased/Under the Hood-20230627-222328.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changes/unreleased/Under the Hood-20230627-222328.yaml diff --git a/.changes/unreleased/Under the Hood-20230627-222328.yaml b/.changes/unreleased/Under the Hood-20230627-222328.yaml new file mode 100644 index 00000000000..59566c5fd62 --- /dev/null +++ b/.changes/unreleased/Under the Hood-20230627-222328.yaml @@ -0,0 +1,6 @@ +kind: Under the Hood +body: 'Refactor: entry point for cross-project ref' +time: 2023-06-27T22:23:28.73069-04:00 +custom: + Author: michelleark + Issue: "7954" From 88669bd60a93118c588d5074666cbf0b06117cfb Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Wed, 28 Jun 2023 00:20:59 -0400 Subject: [PATCH 13/15] remove full project from dbtPlugin init + unit test PluginManager --- core/dbt/cli/requires.py | 6 +-- core/dbt/parser/manifest.py | 2 +- core/dbt/plugins/__init__.py | 10 ++-- core/dbt/plugins/manager.py | 23 +++++---- tests/unit/test_plugin_manager.py | 82 +++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+), 22 deletions(-) create mode 100644 tests/unit/test_plugin_manager.py diff --git a/core/dbt/cli/requires.py b/core/dbt/cli/requires.py index df4e17483fb..e8d9e69cc80 100644 --- a/core/dbt/cli/requires.py +++ b/core/dbt/cli/requires.py @@ -162,7 +162,7 @@ def wrapper(*args, **kwargs): ctx.obj["project"] = project # Plugins - set_up_plugin_manager(project=project) + set_up_plugin_manager(project_name=project.project_name) if dbt.tracking.active_user is not None: project_id = None if project is None else project.hashed_name() @@ -250,8 +250,8 @@ def wrapper(*args, **kwargs): ctx.obj["manifest"] = manifest if write and ctx.obj["flags"].write_json: - write_manifest(manifest, ctx.obj["runtime_config"].project_target_path) - pm = get_plugin_manager(ctx.obj["runtime_config"]) + write_manifest(manifest, runtime_config.project_target_path) + pm = get_plugin_manager(runtime_config.project_name) plugin_artifacts = pm.get_manifest_artifacts(manifest) for path, plugin_artifact in plugin_artifacts.items(): plugin_artifact.write(path) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 8df29741eed..93f4d21fb7c 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -740,7 +740,7 @@ def inject_external_nodes(self) -> bool: manifest_nodes_modified = True # Inject any newly-available external nodes - pm = get_plugin_manager(self.root_project) + pm = get_plugin_manager(self.root_project.project_name) plugin_model_nodes = pm.get_nodes().models for node_arg in plugin_model_nodes.values(): node = ModelNode.from_args(node_arg) diff --git a/core/dbt/plugins/__init__.py b/core/dbt/plugins/__init__.py index 35218915cf9..e6ed7198d80 100644 --- a/core/dbt/plugins/__init__.py +++ b/core/dbt/plugins/__init__.py @@ -5,21 +5,19 @@ # these are just exports, they need "noqa" so flake8 will not complain. from .manager import dbtPlugin, dbt_hook # noqa -from dbt.config import Project - PLUGIN_MANAGER: Optional[PluginManager] = None -def set_up_plugin_manager(project: Project): +def set_up_plugin_manager(project_name: str): global PLUGIN_MANAGER - PLUGIN_MANAGER = PluginManager.from_modules(project) + PLUGIN_MANAGER = PluginManager.from_modules(project_name) -def get_plugin_manager(project: Project) -> PluginManager: +def get_plugin_manager(project_name: str) -> PluginManager: global PLUGIN_MANAGER if not PLUGIN_MANAGER: - set_up_plugin_manager(project) + set_up_plugin_manager(project_name) assert PLUGIN_MANAGER return PLUGIN_MANAGER diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index 92da899c825..1d594f96795 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -2,7 +2,6 @@ import pkgutil from typing import Dict, List, Callable -from dbt.config.project import Project from dbt.contracts.graph.manifest import Manifest from dbt.exceptions import DbtRuntimeError from dbt.plugins.contracts import PluginArtifacts @@ -21,8 +20,8 @@ def inner(*args, **kwargs): class dbtPlugin: - def __init__(self, project: Project): - self.project = project + def __init__(self, project_name: str): + self.project_name = project_name self.initialize() @property @@ -79,7 +78,7 @@ def __init__(self, plugins: List[dbtPlugin]): self.hooks[hook_name] = [hook] @classmethod - def from_modules(cls, project: Project) -> "PluginManager": + def from_modules(cls, project_name: str) -> "PluginManager": discovered_dbt_modules = { name: importlib.import_module(name) for _, name, _ in pkgutil.iter_modules() @@ -94,20 +93,20 @@ def from_modules(cls, project: Project) -> "PluginManager": assert issubclass( plugin_cls, dbtPlugin ), f"'plugin' in {name} must be subclass of dbtPlugin" - plugin = plugin_cls(project=project) + plugin = plugin_cls(project_name=project_name) plugins.append(plugin) return cls(plugins=plugins) def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts: - plugin_artifacts = {} + all_plugin_artifacts = {} for hook_method in self.hooks.get("get_manifest_artifacts", []): - plugin_artifact = hook_method(manifest) - plugin_artifacts.update(plugin_artifact) - return plugin_artifacts + plugin_artifacts = hook_method(manifest) + all_plugin_artifacts.update(plugin_artifacts) + return all_plugin_artifacts def get_nodes(self) -> PluginNodes: - plugin_nodes = PluginNodes() + all_plugin_nodes = PluginNodes() for hook_method in self.hooks.get("get_nodes", []): plugin_nodes = hook_method() - plugin_nodes.update(plugin_nodes) - return plugin_nodes + all_plugin_nodes.update(plugin_nodes) + return all_plugin_nodes diff --git a/tests/unit/test_plugin_manager.py b/tests/unit/test_plugin_manager.py new file mode 100644 index 00000000000..40e4154a872 --- /dev/null +++ b/tests/unit/test_plugin_manager.py @@ -0,0 +1,82 @@ +import pytest +from dbt.plugins import PluginManager, dbtPlugin, dbt_hook +from dbt.plugins.manifest import PluginNodes, ModelNodeArgs +from dbt.plugins.contracts import PluginArtifacts, PluginArtifact + + +class GetNodesPlugin(dbtPlugin): + @dbt_hook + def get_nodes(self) -> PluginNodes: + nodes = PluginNodes() + nodes.add_model( + ModelNodeArgs( + name="test_name", + package_name=self.project_name, + identifier="test_identifier", + schema="test_schema", + ) + ) + return nodes + + +class GetArtifactsPlugin(dbtPlugin): + @dbt_hook + def get_manifest_artifacts(self, manifest) -> PluginArtifacts: + return {self.project_name: PluginArtifact()} + + +class TestPluginManager: + @pytest.fixture + def get_nodes_plugin(self): + return GetNodesPlugin(project_name="test") + + @pytest.fixture + def get_nodes_plugins(self, get_nodes_plugin): + return [get_nodes_plugin, GetNodesPlugin(project_name="test2")] + + @pytest.fixture + def get_artifacts_plugin(self): + return GetArtifactsPlugin(project_name="test") + + @pytest.fixture + def get_artifacts_plugins(self, get_artifacts_plugin): + return [get_artifacts_plugin, GetArtifactsPlugin(project_name="test2")] + + def test_plugin_manager_init_single_hook(self, get_nodes_plugin): + pm = PluginManager(plugins=[get_nodes_plugin]) + assert len(pm.hooks) == 1 + + assert "get_nodes" in pm.hooks + assert len(pm.hooks["get_nodes"]) == 1 + assert pm.hooks["get_nodes"][0] == get_nodes_plugin.get_nodes + + def test_plugin_manager_init_single_hook_multiple_methods(self, get_nodes_plugins): + pm = PluginManager(plugins=get_nodes_plugins) + assert len(pm.hooks) == 1 + + assert "get_nodes" in pm.hooks + assert len(pm.hooks["get_nodes"]) == 2 + assert pm.hooks["get_nodes"][0] == get_nodes_plugins[0].get_nodes + assert pm.hooks["get_nodes"][1] == get_nodes_plugins[1].get_nodes + + def test_plugin_manager_multiple_hooks(self, get_nodes_plugin, get_artifacts_plugin): + pm = PluginManager(plugins=[get_nodes_plugin, get_artifacts_plugin]) + assert len(pm.hooks) == 2 + + assert "get_nodes" in pm.hooks + assert len(pm.hooks["get_nodes"]) == 1 + assert pm.hooks["get_nodes"][0] == get_nodes_plugin.get_nodes + + assert "get_manifest_artifacts" in pm.hooks + assert len(pm.hooks["get_manifest_artifacts"]) == 1 + assert pm.hooks["get_manifest_artifacts"][0] == get_artifacts_plugin.get_manifest_artifacts + + def test_get_nodes(self, get_nodes_plugins): + pm = PluginManager(plugins=get_nodes_plugins) + nodes = pm.get_nodes() + assert len(nodes.models) == 2 + + def test_get_manifest_artifact(self, get_artifacts_plugins): + pm = PluginManager(plugins=get_artifacts_plugins) + artifacts = pm.get_manifest_artifacts(None) + assert len(artifacts) == 2 From 32215979b33601b8ae44f2077abc95943c2ff1b0 Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Wed, 28 Jun 2023 00:47:34 -0400 Subject: [PATCH 14/15] add comment --- core/dbt/plugins/manager.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index 1d594f96795..b44eb302045 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -20,6 +20,11 @@ def inner(*args, **kwargs): class dbtPlugin: + """ + EXPERIMENTAL: dbtPlugin is the base class for creating plugins. + Its interface is **not** stable and will likely change between dbt-core versions. + """ + def __init__(self, project_name: str): self.project_name = project_name self.initialize() From 51d8c8cd3ac0a6c281806a2fb14d730a544a9aca Mon Sep 17 00:00:00 2001 From: Michelle Ark Date: Wed, 28 Jun 2023 09:40:56 -0400 Subject: [PATCH 15/15] exception handling for plugin.initialize() --- core/dbt/plugins/manager.py | 5 ++++- tests/unit/test_plugin_manager.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/dbt/plugins/manager.py b/core/dbt/plugins/manager.py index b44eb302045..3a52a5c5180 100644 --- a/core/dbt/plugins/manager.py +++ b/core/dbt/plugins/manager.py @@ -27,7 +27,10 @@ class dbtPlugin: def __init__(self, project_name: str): self.project_name = project_name - self.initialize() + try: + self.initialize() + except Exception as e: + raise DbtRuntimeError(f"initialize: {e}") @property def name(self) -> str: diff --git a/tests/unit/test_plugin_manager.py b/tests/unit/test_plugin_manager.py index 40e4154a872..db68fe95c30 100644 --- a/tests/unit/test_plugin_manager.py +++ b/tests/unit/test_plugin_manager.py @@ -59,7 +59,7 @@ def test_plugin_manager_init_single_hook_multiple_methods(self, get_nodes_plugin assert pm.hooks["get_nodes"][0] == get_nodes_plugins[0].get_nodes assert pm.hooks["get_nodes"][1] == get_nodes_plugins[1].get_nodes - def test_plugin_manager_multiple_hooks(self, get_nodes_plugin, get_artifacts_plugin): + def test_plugin_manager_init_multiple_hooks(self, get_nodes_plugin, get_artifacts_plugin): pm = PluginManager(plugins=[get_nodes_plugin, get_artifacts_plugin]) assert len(pm.hooks) == 2