From ae485f996a4a92edfea7fe9f3d0cf9f9d3a255e6 Mon Sep 17 00:00:00 2001 From: Gerda Shank Date: Wed, 22 Mar 2023 15:59:50 -0400 Subject: [PATCH] CT 1998 use google protobuf to enable more flexible dictionaries (#7190) --- .../unreleased/Features-20230318-164326.yaml | 7 + .gitattributes | 1 + .pre-commit-config.yaml | 2 +- Makefile | 4 + core/dbt/adapters/base/impl.py | 4 +- core/dbt/adapters/cache.py | 33 +- core/dbt/adapters/reference_keys.py | 15 +- core/dbt/adapters/sql/impl.py | 8 +- core/dbt/clients/system.py | 4 +- core/dbt/contracts/graph/nodes.py | 9 +- core/dbt/contracts/results.py | 39 +- core/dbt/events/README.md | 22 +- core/dbt/events/adapter_endpoint.py | 18 +- core/dbt/events/base_types.py | 152 +- core/dbt/events/contextvars.py | 3 +- core/dbt/events/eventmgr.py | 13 +- core/dbt/events/functions.py | 30 +- core/dbt/events/helpers.py | 16 +- core/dbt/events/proto_types.py | 2964 ----------------- core/dbt/events/test_types.py | 63 - core/dbt/events/types.proto | 83 +- core/dbt/events/types.py | 650 ++-- core/dbt/events/types_pb2.py | 863 +++++ core/dbt/parser/models.py | 25 +- core/dbt/task/deps.py | 3 +- core/dbt/task/runnable.py | 6 +- core/dbt/tests/util.py | 5 +- core/setup.py | 2 +- dev-requirements.txt | 1 - docs/arch/adr-005-betterproto.md | 28 +- test/unit/test_cache.py | 4 + test/unit/test_context.py | 21 +- tests/functional/compile/test_compile.py | 2 +- tests/functional/logging/test_logging.py | 38 + tests/functional/logging/test_meta_logging.py | 4 +- tests/unit/test_events.py | 52 +- tests/unit/test_proto_events.py | 62 +- 37 files changed, 1463 insertions(+), 3793 deletions(-) create mode 100644 .changes/unreleased/Features-20230318-164326.yaml delete mode 100644 core/dbt/events/proto_types.py delete mode 100644 core/dbt/events/test_types.py create mode 100644 core/dbt/events/types_pb2.py diff --git a/.changes/unreleased/Features-20230318-164326.yaml b/.changes/unreleased/Features-20230318-164326.yaml new file mode 100644 index 00000000000..95630b42c65 --- /dev/null +++ b/.changes/unreleased/Features-20230318-164326.yaml @@ -0,0 +1,7 @@ +kind: Features +body: Switch from betterproto to google protobuf and enable more flexible meta dictionary + in logs +time: 2023-03-18T16:43:26.782738-04:00 +custom: + Author: gshank + Issue: "6832" diff --git a/.gitattributes b/.gitattributes index ff6cbc4608f..c68778d873a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ core/dbt/include/index.html binary tests/functional/artifacts/data/state/*/manifest.json binary +core/dbt/events/types_pb2.py binary diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65012a01407..2c01d584893 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ # Configuration for pre-commit hooks (see https://pre-commit.com/). # Eventually the hooks described here will be run as tests before merging each PR. -exclude: ^(core/dbt/docs/build/) +exclude: ^(core/dbt/docs/build/|core/dbt/events/types_pb2.py) # Force all unspecified python hooks to run python 3.8 default_language_version: diff --git a/Makefile b/Makefile index 62ee6f66e8c..845e1eb12e2 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,10 @@ dev: dev_req ## Installs dbt-* packages in develop mode along with development d @\ pre-commit install +.PHONY: proto_types +proto_types: ## generates google protobuf python file from types.proto + protoc -I=./core/dbt/events --python_out=./core/dbt/events ./core/dbt/events/types.proto + .PHONY: mypy mypy: .env ## Runs mypy against staged changes for static type checking. @\ diff --git a/core/dbt/adapters/base/impl.py b/core/dbt/adapters/base/impl.py index de0323be2b0..6bf86b90bde 100644 --- a/core/dbt/adapters/base/impl.py +++ b/core/dbt/adapters/base/impl.py @@ -66,7 +66,7 @@ ) from dbt.adapters.base import Column as BaseColumn from dbt.adapters.base import Credentials -from dbt.adapters.cache import RelationsCache, _make_ref_key_msg +from dbt.adapters.cache import RelationsCache, _make_ref_key_dict GET_CATALOG_MACRO_NAME = "get_catalog" @@ -722,7 +722,7 @@ def list_relations(self, database: Optional[str], schema: str) -> List[BaseRelat ListRelations( database=cast_to_str(database), schema=schema, - relations=[_make_ref_key_msg(x) for x in relations], + relations=[_make_ref_key_dict(x) for x in relations], ) ) diff --git a/core/dbt/adapters/cache.py b/core/dbt/adapters/cache.py index dc8ff14e67e..3e783de21e9 100644 --- a/core/dbt/adapters/cache.py +++ b/core/dbt/adapters/cache.py @@ -4,8 +4,7 @@ from dbt.adapters.reference_keys import ( _make_ref_key, - _make_ref_key_msg, - _make_msg_from_ref_key, + _make_ref_key_dict, _ReferenceKey, ) from dbt.exceptions import ( @@ -230,7 +229,7 @@ def dump_graph(self): # self.relations or any cache entry's referenced_by during iteration # it's a runtime error! with self.lock: - return {dot_separated(k): v.dump_graph_entry() for k, v in self.relations.items()} + return {dot_separated(k): str(v.dump_graph_entry()) for k, v in self.relations.items()} def _setdefault(self, relation: _CachedRelation): """Add a relation to the cache, or return it if it already exists. @@ -290,8 +289,8 @@ def add_link(self, referenced, dependent): # a link - we will never drop the referenced relation during a run. fire_event( CacheAction( - ref_key=_make_msg_from_ref_key(ref_key), - ref_key_2=_make_msg_from_ref_key(dep_key), + ref_key=ref_key._asdict(), + ref_key_2=dep_key._asdict(), ) ) return @@ -306,8 +305,8 @@ def add_link(self, referenced, dependent): fire_event( CacheAction( action="add_link", - ref_key=_make_msg_from_ref_key(dep_key), - ref_key_2=_make_msg_from_ref_key(ref_key), + ref_key=dep_key._asdict(), + ref_key_2=ref_key._asdict(), ) ) with self.lock: @@ -325,7 +324,7 @@ def add(self, relation): flags.LOG_CACHE_EVENTS, lambda: CacheDumpGraph(before_after="before", action="adding", dump=self.dump_graph()), ) - fire_event(CacheAction(action="add_relation", ref_key=_make_ref_key_msg(cached))) + fire_event(CacheAction(action="add_relation", ref_key=_make_ref_key_dict(cached))) with self.lock: self._setdefault(cached) @@ -359,7 +358,7 @@ def drop(self, relation): :param str identifier: The identifier of the relation to drop. """ dropped_key = _make_ref_key(relation) - dropped_key_msg = _make_ref_key_msg(relation) + dropped_key_msg = _make_ref_key_dict(relation) fire_event(CacheAction(action="drop_relation", ref_key=dropped_key_msg)) with self.lock: if dropped_key not in self.relations: @@ -367,7 +366,7 @@ def drop(self, relation): return consequences = self.relations[dropped_key].collect_consequences() # convert from a list of _ReferenceKeys to a list of ReferenceKeyMsgs - consequence_msgs = [_make_msg_from_ref_key(key) for key in consequences] + consequence_msgs = [key._asdict() for key in consequences] fire_event( CacheAction( action="drop_cascade", ref_key=dropped_key_msg, ref_list=consequence_msgs @@ -397,9 +396,9 @@ def _rename_relation(self, old_key, new_relation): fire_event( CacheAction( action="update_reference", - ref_key=_make_ref_key_msg(old_key), - ref_key_2=_make_ref_key_msg(new_key), - ref_key_3=_make_ref_key_msg(cached.key()), + ref_key=_make_ref_key_dict(old_key), + ref_key_2=_make_ref_key_dict(new_key), + ref_key_3=_make_ref_key_dict(cached.key()), ) ) @@ -430,9 +429,7 @@ def _check_rename_constraints(self, old_key, new_key): raise TruncatedModelNameCausedCollisionError(new_key, self.relations) if old_key not in self.relations: - fire_event( - CacheAction(action="temporary_relation", ref_key=_make_msg_from_ref_key(old_key)) - ) + fire_event(CacheAction(action="temporary_relation", ref_key=old_key._asdict())) return False return True @@ -453,8 +450,8 @@ def rename(self, old, new): fire_event( CacheAction( action="rename_relation", - ref_key=_make_msg_from_ref_key(old_key), - ref_key_2=_make_msg_from_ref_key(new), + ref_key=old_key._asdict(), + ref_key_2=new_key._asdict(), ) ) flags = get_flags() diff --git a/core/dbt/adapters/reference_keys.py b/core/dbt/adapters/reference_keys.py index 3644234d93d..53a0a9d9819 100644 --- a/core/dbt/adapters/reference_keys.py +++ b/core/dbt/adapters/reference_keys.py @@ -2,7 +2,6 @@ from collections import namedtuple from typing import Any, Optional -from dbt.events.proto_types import ReferenceKeyMsg _ReferenceKey = namedtuple("_ReferenceKey", "database schema identifier") @@ -30,11 +29,9 @@ def _make_ref_key(relation: Any) -> _ReferenceKey: ) -def _make_ref_key_msg(relation: Any): - return _make_msg_from_ref_key(_make_ref_key(relation)) - - -def _make_msg_from_ref_key(ref_key: _ReferenceKey) -> ReferenceKeyMsg: - return ReferenceKeyMsg( - database=ref_key.database, schema=ref_key.schema, identifier=ref_key.identifier - ) +def _make_ref_key_dict(relation: Any): + return { + "database": relation.database, + "schema": relation.schema, + "identifier": relation.identifier, + } diff --git a/core/dbt/adapters/sql/impl.py b/core/dbt/adapters/sql/impl.py index fc787f0c834..835302a9b0d 100644 --- a/core/dbt/adapters/sql/impl.py +++ b/core/dbt/adapters/sql/impl.py @@ -4,7 +4,7 @@ from dbt.contracts.connection import Connection from dbt.exceptions import RelationTypeNullError from dbt.adapters.base import BaseAdapter, available -from dbt.adapters.cache import _make_ref_key_msg +from dbt.adapters.cache import _make_ref_key_dict from dbt.adapters.sql import SQLConnectionManager from dbt.events.functions import fire_event from dbt.events.types import ColTypeChange, SchemaCreation, SchemaDrop @@ -109,7 +109,7 @@ def expand_column_types(self, goal, current): ColTypeChange( orig_type=target_column.data_type, new_type=new_type, - table=_make_ref_key_msg(current), + table=_make_ref_key_dict(current), ) ) @@ -152,7 +152,7 @@ def get_columns_in_relation(self, relation): def create_schema(self, relation: BaseRelation) -> None: relation = relation.without_identifier() - fire_event(SchemaCreation(relation=_make_ref_key_msg(relation))) + fire_event(SchemaCreation(relation=_make_ref_key_dict(relation))) kwargs = { "relation": relation, } @@ -163,7 +163,7 @@ def create_schema(self, relation: BaseRelation) -> None: def drop_schema(self, relation: BaseRelation) -> None: relation = relation.without_identifier() - fire_event(SchemaDrop(relation=_make_ref_key_msg(relation))) + fire_event(SchemaDrop(relation=_make_ref_key_dict(relation))) kwargs = { "relation": relation, } diff --git a/core/dbt/clients/system.py b/core/dbt/clients/system.py index 831f80f2f22..24e1d59fd25 100644 --- a/core/dbt/clients/system.py +++ b/core/dbt/clients/system.py @@ -449,8 +449,8 @@ def run_cmd(cwd: str, cmd: List[str], env: Optional[Dict[str, Any]] = None) -> T except OSError as exc: _interpret_oserror(exc, cwd, cmd) - fire_event(SystemStdOut(bmsg=out)) - fire_event(SystemStdErr(bmsg=err)) + fire_event(SystemStdOut(bmsg=str(out))) + fire_event(SystemStdErr(bmsg=str(err))) if proc.returncode != 0: fire_event(SystemReportReturnCode(returncode=proc.returncode)) diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index 017f372adb8..8595349607f 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -37,7 +37,6 @@ MetricTime, ) from dbt.contracts.util import Replaceable, AdditionalPropertiesMixin -from dbt.events.proto_types import NodeInfo from dbt.events.functions import warn_or_error from dbt.exceptions import ParsingError, InvalidAccessTypeError from dbt.events.types import ( @@ -50,7 +49,6 @@ from dbt.events.contextvars import set_contextvars from dbt.flags import get_flags from dbt.node_types import ModelLanguage, NodeType, AccessType -from dbt.utils import cast_dict_to_dict_of_strings from .model_config import ( @@ -243,8 +241,6 @@ class NodeInfoMixin: @property def node_info(self): - meta = getattr(self, "meta", {}) - meta_stringified = cast_dict_to_dict_of_strings(meta) node_info = { "node_path": getattr(self, "path", None), "node_name": getattr(self, "name", None), @@ -254,10 +250,9 @@ def node_info(self): "node_status": str(self._event_status.get("node_status")), "node_started_at": self._event_status.get("started_at"), "node_finished_at": self._event_status.get("finished_at"), - "meta": meta_stringified, + "meta": getattr(self, "meta", {}), } - node_info_msg = NodeInfo(**node_info) - return node_info_msg + return node_info def update_event_status(self, **kwargs): for k, v in kwargs.items(): diff --git a/core/dbt/contracts/results.py b/core/dbt/contracts/results.py index 4378d207ac2..7c4b553ed8b 100644 --- a/core/dbt/contracts/results.py +++ b/core/dbt/contracts/results.py @@ -10,10 +10,10 @@ from dbt.exceptions import DbtInternalError from dbt.events.functions import fire_event from dbt.events.types import TimingInfoCollected -from dbt.events.proto_types import RunResultMsg, TimingInfoMsg from dbt.events.contextvars import get_node_info +from dbt.events.helpers import datetime_to_json_string from dbt.logger import TimingProcessor -from dbt.utils import lowercase, cast_to_str, cast_to_int, cast_dict_to_dict_of_strings +from dbt.utils import lowercase, cast_to_str, cast_to_int from dbt.dataclass_schema import dbtClassMixin, StrEnum import agate @@ -45,11 +45,13 @@ def begin(self): def end(self): self.completed_at = datetime.utcnow() - def to_msg(self): - timsg = TimingInfoMsg( - name=self.name, started_at=self.started_at, completed_at=self.completed_at - ) - return timsg + def to_msg_dict(self): + msg_dict = {"name": self.name} + if self.started_at: + msg_dict["started_at"] = datetime_to_json_string(self.started_at) + if self.completed_at: + msg_dict["completed_at"] = datetime_to_json_string(self.completed_at) + return msg_dict # This is a context manager @@ -67,7 +69,7 @@ def __exit__(self, exc_type, exc_value, traceback): with TimingProcessor(self.timing_info): fire_event( TimingInfoCollected( - timing_info=self.timing_info.to_msg(), node_info=get_node_info() + timing_info=self.timing_info.to_msg_dict(), node_info=get_node_info() ) ) @@ -129,16 +131,17 @@ def __pre_deserialize__(cls, data): data["failures"] = None return data - def to_msg(self): - msg = RunResultMsg() - msg.status = str(self.status) - msg.message = cast_to_str(self.message) - msg.thread = self.thread_id - msg.execution_time = self.execution_time - msg.num_failures = cast_to_int(self.failures) - msg.timing_info = [ti.to_msg() for ti in self.timing] - msg.adapter_response = cast_dict_to_dict_of_strings(self.adapter_response) - return msg + def to_msg_dict(self): + msg_dict = { + "status": str(self.status), + "message": cast_to_str(self.message), + "thread": self.thread_id, + "execution_time": self.execution_time, + "num_failures": cast_to_int(self.failures), + "timing_info": [ti.to_msg_dict() for ti in self.timing], + "adapter_response": self.adapter_response, + } + return msg_dict @dataclass diff --git a/core/dbt/events/README.md b/core/dbt/events/README.md index c4674ccf40d..d1269ad2017 100644 --- a/core/dbt/events/README.md +++ b/core/dbt/events/README.md @@ -8,13 +8,14 @@ The event module provides types that represent what is happening in dbt in `even When events are processed via `fire_event`, nearly everything is logged. Whether or not the user has enabled the debug flag, all debug messages are still logged to the file. However, some events are particularly time consuming to construct because they return a huge amount of data. Today, the only messages in this category are cache events and are only logged if the `--log-cache-events` flag is on. This is important because these messages should not be created unless they are going to be logged, because they cause a noticable performance degredation. These events use a "fire_event_if" functions. # Adding a New Event -* Add a new message in types.proto with an EventInfo field first -* run the protoc compiler to update proto_types.py: ```protoc --python_betterproto_out . types.proto``` -* Add a wrapping class in core/dbt/event/types.py with a Level superclass and the superclass from proto_types.py, plus code and message methods +* Add a new message in types.proto, and a second message with the same name + "Msg". The "Msg" message should have two fields, an "info" field of EventInfo, and a "data" field referring to the message name without "Msg" +* run the protoc compiler to update types_pb2.py: make proto_types +* Add a wrapping class in core/dbt/event/types.py with a Level superclass plus code and message methods * Add the class to tests/unit/test_events.py -Note that no attributes can exist in these event classes except for fields defined in the protobuf definitions, because the betterproto metaclass will throw an error. Betterproto provides a to_dict() method to convert the generated classes to a dictionary and from that to json. However some attributes will successfully convert to dictionaries but not to serialized protobufs, so we need to test both output formats. +We have switched from using betterproto to using google protobuf, because of a lack of support for Struct fields in betterproto. +The google protobuf interface is janky and very much non-Pythonic. The "generated" classes in types_pb2.py do not resemble regular Python classes. They do not have normal constructors; they can only be constructed empty. They can be "filled" by setting fields individually or using a json_format method like ParseDict. We have wrapped the logging events with a class (in types.py) which allows using a constructor -- keywords only, no positional parameters. ## Required for Every Event @@ -24,8 +25,7 @@ Note that no attributes can exist in these event classes except for fields defin Example ``` -@dataclass -class PartialParsingDeletedExposure(DebugLevel, pt.PartialParsingDeletedExposure): +class PartialParsingDeletedExposure(DebugLevel): def code(self): return "I049" @@ -50,8 +50,8 @@ logger = AdapterLogger("") ## Compiling types.proto -After adding a new message in types.proto: -``` -cd core/dbt/events -protoc --python_betterproto_out . types.proto -``` +After adding a new message in types.proto, execute Makefile target: + +make proto_types in the repository root directory, or +`protoc -I=. --python_out=. types.proto` +in the core/dbt/events directory diff --git a/core/dbt/events/adapter_endpoint.py b/core/dbt/events/adapter_endpoint.py index 5870834bb12..7e5cf0cd1d3 100644 --- a/core/dbt/events/adapter_endpoint.py +++ b/core/dbt/events/adapter_endpoint.py @@ -17,38 +17,42 @@ class AdapterLogger: def debug(self, msg, *args): event = AdapterEventDebug( - name=self.name, base_msg=msg, args=list(args), node_info=get_node_info() + name=self.name, base_msg=str(msg), args=list(args), node_info=get_node_info() ) fire_event(event) def info(self, msg, *args): event = AdapterEventInfo( - name=self.name, base_msg=msg, args=list(args), node_info=get_node_info() + name=self.name, base_msg=str(msg), args=list(args), node_info=get_node_info() ) fire_event(event) def warning(self, msg, *args): event = AdapterEventWarning( - name=self.name, base_msg=msg, args=list(args), node_info=get_node_info() + name=self.name, base_msg=str(msg), args=list(args), node_info=get_node_info() ) fire_event(event) def error(self, msg, *args): event = AdapterEventError( - name=self.name, base_msg=msg, args=list(args), node_info=get_node_info() + name=self.name, base_msg=str(msg), args=list(args), node_info=get_node_info() ) fire_event(event) # The default exc_info=True is what makes this method different def exception(self, msg, *args): + exc_info = str(traceback.format_exc()) event = AdapterEventError( - name=self.name, base_msg=msg, args=list(args), node_info=get_node_info() + name=self.name, + base_msg=str(msg), + args=list(args), + node_info=get_node_info(), + exc_info=exc_info, ) - event.exc_info = traceback.format_exc() fire_event(event) def critical(self, msg, *args): event = AdapterEventError( - name=self.name, base_msg=msg, args=list(args), node_info=get_node_info() + name=self.name, base_msg=str(msg), args=list(args), node_info=get_node_info() ) fire_event(event) diff --git a/core/dbt/events/base_types.py b/core/dbt/events/base_types.py index fbd35b58fa1..64c869847ad 100644 --- a/core/dbt/events/base_types.py +++ b/core/dbt/events/base_types.py @@ -1,27 +1,24 @@ -from dataclasses import dataclass from enum import Enum import os import threading -from datetime import datetime -import dbt.events.proto_types as pt +from dbt.events import types_pb2 import sys +from google.protobuf.json_format import ParseDict, MessageToDict, MessageToJson +from google.protobuf.message import Message +from dbt.events.helpers import get_json_string_utcnow if sys.version_info >= (3, 8): from typing import Protocol else: from typing_extensions import Protocol + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # These base types define the _required structure_ for the concrete event # # types defined in types.py # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -class Cache: - # Events with this class will only be logged when the `--log-cache-events` flag is passed - pass - - def get_global_metadata_vars() -> dict: from dbt.events.functions import get_metadata_vars @@ -39,13 +36,6 @@ def get_pid() -> int: return os.getpid() -# preformatted time stamp -def get_ts_rfc3339() -> str: - ts = datetime.utcnow() - ts_rfc3339 = ts.strftime("%Y-%m-%dT%H:%M:%S.%fZ") - return ts_rfc3339 - - # in theory threads can change so we don't cache them. def get_thread_name() -> str: return threading.current_thread().name @@ -61,24 +51,53 @@ class EventLevel(str, Enum): ERROR = "error" -@dataclass class BaseEvent: """BaseEvent for proto message generated python events""" - # def __post_init__(self): - # super().__post_init__() - # if not self.info.level: - # self.info.level = self.level_tag() - # assert self.info.level in ["info", "warn", "error", "debug", "test"] - # if not hasattr(self.info, "msg") or not self.info.msg: - # self.info.msg = self.message() - # self.info.invocation_id = get_invocation_id() - # self.info.extra = get_global_metadata_vars() - # self.info.ts = datetime.utcnow() - # self.info.pid = get_pid() - # self.info.thread = get_thread_name() - # self.info.code = self.code() - # self.info.name = type(self).__name__ + def __init__(self, *args, **kwargs): + class_name = type(self).__name__ + msg_cls = getattr(types_pb2, class_name) + if class_name == "Formatting" and len(args) > 0: + kwargs["msg"] = args[0] + args = () + assert ( + len(args) == 0 + ), f"[{class_name}] Don't use positional arguments when constructing logging events" + if "base_msg" in kwargs: + kwargs["base_msg"] = str(kwargs["base_msg"]) + if "msg" in kwargs: + kwargs["msg"] = str(kwargs["msg"]) + try: + self.pb_msg = ParseDict(kwargs, msg_cls()) + except Exception: + # Imports need to be here to avoid circular imports + from dbt.events.types import Note + from dbt.events.functions import fire_event + + fire_event(Note(msg=f"[{class_name}]: Unable to parse dict {kwargs}")) + self.pb_msg = msg_cls() + + def __setattr__(self, key, value): + if key == "pb_msg": + super().__setattr__(key, value) + else: + super().__getattribute__("pb_msg").__setattr__(key, value) + + def __getattr__(self, key): + if key == "pb_msg": + return super().__getattribute__(key) + else: + return super().__getattribute__("pb_msg").__getattribute__(key) + + def to_dict(self): + return MessageToDict( + self.pb_msg, preserving_proto_field_name=True, including_default_value_fields=True + ) + + def to_json(self): + return MessageToJson( + self.pb_msg, preserving_proto_field_name=True, including_default_valud_fields=True + ) def level_tag(self) -> EventLevel: return EventLevel.DEBUG @@ -90,42 +109,48 @@ def code(self) -> str: raise Exception("code() not implemented for event") +class EventInfo(Protocol): + level: str + name: str + ts: str + code: str + + class EventMsg(Protocol): - info: pt.EventInfo - data: BaseEvent + info: EventInfo + data: Message def msg_from_base_event(event: BaseEvent, level: EventLevel = None): msg_class_name = f"{type(event).__name__}Msg" - msg_cls = getattr(pt, msg_class_name) + msg_cls = getattr(types_pb2, msg_class_name) # level in EventInfo must be a string, not an EventLevel msg_level: str = level.value if level else event.level_tag().value assert msg_level is not None - event_info = pt.EventInfo( - level=msg_level, - msg=event.message(), - invocation_id=get_invocation_id(), - extra=get_global_metadata_vars(), - ts=datetime.utcnow(), - pid=get_pid(), - thread=get_thread_name(), - code=event.code(), - name=type(event).__name__, - ) - new_event = msg_cls(data=event, info=event_info) + event_info = { + "level": msg_level, + "msg": event.message(), + "invocation_id": get_invocation_id(), + "extra": get_global_metadata_vars(), + "ts": get_json_string_utcnow(), + "pid": get_pid(), + "thread": get_thread_name(), + "code": event.code(), + "name": type(event).__name__, + } + new_event = ParseDict({"info": event_info}, msg_cls()) + new_event.data.CopyFrom(event.pb_msg) return new_event # DynamicLevel requires that the level be supplied on the # event construction call using the "info" function from functions.py -@dataclass # type: ignore[misc] class DynamicLevel(BaseEvent): pass -@dataclass class TestLevel(BaseEvent): __test__ = False @@ -133,54 +158,21 @@ def level_tag(self) -> EventLevel: return EventLevel.TEST -@dataclass # type: ignore[misc] class DebugLevel(BaseEvent): def level_tag(self) -> EventLevel: return EventLevel.DEBUG -@dataclass # type: ignore[misc] class InfoLevel(BaseEvent): def level_tag(self) -> EventLevel: return EventLevel.INFO -@dataclass # type: ignore[misc] class WarnLevel(BaseEvent): def level_tag(self) -> EventLevel: return EventLevel.WARN -@dataclass # type: ignore[misc] class ErrorLevel(BaseEvent): def level_tag(self) -> EventLevel: return EventLevel.ERROR - - -# Included to ensure classes with str-type message members are initialized correctly. -@dataclass # type: ignore[misc] -class AdapterEventStringFunctor: - def __post_init__(self): - super().__post_init__() - if not isinstance(self.base_msg, str): - self.base_msg = str(self.base_msg) - - -@dataclass # type: ignore[misc] -class EventStringFunctor: - def __post_init__(self): - super().__post_init__() - if not isinstance(self.msg, str): - self.msg = str(self.msg) - - -# prevents an event from going to the file -# This should rarely be used in core code. It is currently -# only used in integration tests and for the 'clean' command. -class NoFile: - pass - - -# prevents an event from going to stdout -class NoStdOut: - pass diff --git a/core/dbt/events/contextvars.py b/core/dbt/events/contextvars.py index 4aa507eb29b..8688a992ee4 100644 --- a/core/dbt/events/contextvars.py +++ b/core/dbt/events/contextvars.py @@ -2,7 +2,6 @@ import contextvars from typing import Any, Generator, Mapping, Dict -from dbt.events.proto_types import NodeInfo LOG_PREFIX = "log_" @@ -27,7 +26,7 @@ def get_node_info(): if "node_info" in cvars: return cvars["node_info"] else: - return NodeInfo() + return {} def clear_contextvars() -> None: diff --git a/core/dbt/events/eventmgr.py b/core/dbt/events/eventmgr.py index 4e832449756..c49ff36f8ef 100644 --- a/core/dbt/events/eventmgr.py +++ b/core/dbt/events/eventmgr.py @@ -144,12 +144,10 @@ def create_debug_line(self, msg: EventMsg) -> str: log_line: str = "" # Create a separator if this is the beginning of an invocation # TODO: This is an ugly hack, get rid of it if we can + ts: str = timestamp_to_datetime_string(msg.info.ts) if msg.info.name == "MainReportVersion": separator = 30 * "=" - log_line = ( - f"\n\n{separator} {msg.info.ts} | {self.event_manager.invocation_id} {separator}\n" - ) - ts: str = msg.info.ts.strftime("%H:%M:%S.%f") + log_line = f"\n\n{separator} {ts} | {self.event_manager.invocation_id} {separator}\n" scrubbed_msg: str = self.scrubber(msg.info.msg) # type: ignore level = msg.info.level log_line += ( @@ -192,7 +190,7 @@ def fire_event(self, e: BaseEvent, level: EventLevel = None) -> None: if os.environ.get("DBT_TEST_BINARY_SERIALIZATION"): print(f"--- {msg.info.name}") try: - bytes(msg) + msg.SerializeToString() except Exception as exc: raise Exception( f"{msg.info.name} is not serializable to binary. Originating exception: {exc}, {traceback.format_exc()}" @@ -217,3 +215,8 @@ def add_logger(self, config: LoggerConfig): def flush(self): for logger in self.loggers: logger.flush() + + +def timestamp_to_datetime_string(ts): + timestamp_dt = datetime.fromtimestamp(ts.seconds + ts.nanos / 1e9) + return timestamp_dt.strftime("%H:%M:%S.%f") diff --git a/core/dbt/events/functions.py b/core/dbt/events/functions.py index a4e69710483..5970ec59cb3 100644 --- a/core/dbt/events/functions.py +++ b/core/dbt/events/functions.py @@ -1,6 +1,5 @@ -import betterproto from dbt.constants import METADATA_ENV_PREFIX -from dbt.events.base_types import BaseEvent, Cache, EventLevel, NoFile, NoStdOut, EventMsg +from dbt.events.base_types import BaseEvent, EventLevel, EventMsg from dbt.events.eventmgr import EventManager, LoggerConfig, LineFormat, NoFilter from dbt.events.helpers import env_secrets, scrub_secrets from dbt.events.types import Formatting @@ -12,11 +11,19 @@ import sys from typing import Callable, Dict, Optional, TextIO import uuid +from google.protobuf.json_format import MessageToDict LOG_VERSION = 3 metadata_vars: Optional[Dict[str, str]] = None +# These are the logging events issued by the "clean" command, +# where we can't count on having a log directory. We've removed +# the "class" flags on the events in types.py. If necessary we +# could still use class or method flags, but we'd have to get +# the type class from the msg and then get the information from the class. +nofile_codes = ["Z012", "Z013", "Z014", "Z015"] + def setup_event_logger(flags) -> None: cleanup_event_logger() @@ -105,8 +112,7 @@ def _stdout_filter( msg: EventMsg, ) -> bool: return ( - not isinstance(msg.data, NoStdOut) - and (not isinstance(msg.data, Cache) or log_cache_events) + (msg.info.name not in ["CacheAction", "CacheDumpGraph"] or log_cache_events) and (EventLevel(msg.info.level) != EventLevel.DEBUG or debug_mode) and (EventLevel(msg.info.level) == EventLevel.ERROR or not quiet_mode) and not (line_format == LineFormat.Json and type(msg.data) == Formatting) @@ -129,8 +135,8 @@ def _get_logfile_config( def _logfile_filter(log_cache_events: bool, line_format: LineFormat, msg: EventMsg) -> bool: return ( - not isinstance(msg.data, NoFile) - and not (isinstance(msg.data, Cache) and not log_cache_events) + msg.info.code not in nofile_codes + and not (msg.info.name in ["CacheAction", "CacheDumpGraph"] and not log_cache_events) and not (line_format == LineFormat.Json and type(msg.data) == Formatting) ) @@ -147,7 +153,11 @@ def _get_logbook_log_config( quiet, ) config.name = "logbook_log" - config.filter = NoFilter if log_cache_events else lambda e: not isinstance(e.data, Cache) + config.filter = ( + NoFilter + if log_cache_events + else lambda e: e.info.name not in ["CacheAction", "CacheDumpGraph"] + ) config.logger = GLOBAL_LOGGER config.output_stream = None return config @@ -203,8 +213,10 @@ def msg_to_json(msg: EventMsg) -> str: def msg_to_dict(msg: EventMsg) -> dict: msg_dict = dict() try: - msg_dict = msg.to_dict(casing=betterproto.Casing.SNAKE, include_default_values=True) # type: ignore - except AttributeError as exc: + msg_dict = MessageToDict( + msg, preserving_proto_field_name=True, including_default_value_fields=True # type: ignore + ) + except Exception as exc: event_type = type(msg).__name__ raise Exception(f"type {event_type} is not serializable. {str(exc)}") # We don't want an empty NodeInfo in output diff --git a/core/dbt/events/helpers.py b/core/dbt/events/helpers.py index 2570c8653c9..0bc351379af 100644 --- a/core/dbt/events/helpers.py +++ b/core/dbt/events/helpers.py @@ -1,6 +1,7 @@ import os from typing import List from dbt.constants import SECRET_ENV_PREFIX +from datetime import datetime def env_secrets() -> List[str]: @@ -8,9 +9,22 @@ def env_secrets() -> List[str]: def scrub_secrets(msg: str, secrets: List[str]) -> str: - scrubbed = msg + scrubbed = str(msg) for secret in secrets: scrubbed = scrubbed.replace(secret, "*****") return scrubbed + + +# This converts a datetime to a json format datetime string which +# is used in constructing protobuf message timestamps. +def datetime_to_json_string(dt: datetime) -> str: + return dt.strftime("%Y-%m-%dT%H:%M:%S.%fZ") + + +# preformatted time stamp +def get_json_string_utcnow() -> str: + ts = datetime.utcnow() + ts_rfc3339 = datetime_to_json_string(ts) + return ts_rfc3339 diff --git a/core/dbt/events/proto_types.py b/core/dbt/events/proto_types.py deleted file mode 100644 index a00ab8b9de2..00000000000 --- a/core/dbt/events/proto_types.py +++ /dev/null @@ -1,2964 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# sources: types.proto -# plugin: python-betterproto -from dataclasses import dataclass -from datetime import datetime -from typing import Dict, List - -import betterproto - - -@dataclass -class EventInfo(betterproto.Message): - """Common event info""" - - name: str = betterproto.string_field(1) - code: str = betterproto.string_field(2) - msg: str = betterproto.string_field(3) - level: str = betterproto.string_field(4) - invocation_id: str = betterproto.string_field(5) - pid: int = betterproto.int32_field(6) - thread: str = betterproto.string_field(7) - ts: datetime = betterproto.message_field(8) - extra: Dict[str, str] = betterproto.map_field( - 9, betterproto.TYPE_STRING, betterproto.TYPE_STRING - ) - category: str = betterproto.string_field(10) - - -@dataclass -class TimingInfoMsg(betterproto.Message): - """TimingInfo""" - - name: str = betterproto.string_field(1) - started_at: datetime = betterproto.message_field(2) - completed_at: datetime = betterproto.message_field(3) - - -@dataclass -class NodeInfo(betterproto.Message): - """NodeInfo""" - - node_path: str = betterproto.string_field(1) - node_name: str = betterproto.string_field(2) - unique_id: str = betterproto.string_field(3) - resource_type: str = betterproto.string_field(4) - materialized: str = betterproto.string_field(5) - node_status: str = betterproto.string_field(6) - node_started_at: str = betterproto.string_field(7) - node_finished_at: str = betterproto.string_field(8) - meta: Dict[str, str] = betterproto.map_field( - 9, betterproto.TYPE_STRING, betterproto.TYPE_STRING - ) - - -@dataclass -class RunResultMsg(betterproto.Message): - """RunResult""" - - status: str = betterproto.string_field(1) - message: str = betterproto.string_field(2) - timing_info: List["TimingInfoMsg"] = betterproto.message_field(3) - thread: str = betterproto.string_field(4) - execution_time: float = betterproto.float_field(5) - adapter_response: Dict[str, str] = betterproto.map_field( - 6, betterproto.TYPE_STRING, betterproto.TYPE_STRING - ) - num_failures: int = betterproto.int32_field(7) - - -@dataclass -class ReferenceKeyMsg(betterproto.Message): - """ReferenceKey""" - - database: str = betterproto.string_field(1) - schema: str = betterproto.string_field(2) - identifier: str = betterproto.string_field(3) - - -@dataclass -class ListOfStrings(betterproto.Message): - """ListOfStrings""" - - value: List[str] = betterproto.string_field(1) - - -@dataclass -class GenericMessage(betterproto.Message): - """GenericMessage, used for deserializing only""" - - info: "EventInfo" = betterproto.message_field(1) - - -@dataclass -class MainReportVersion(betterproto.Message): - """A001""" - - version: str = betterproto.string_field(1) - log_version: int = betterproto.int32_field(2) - - -@dataclass -class MainReportVersionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MainReportVersion" = betterproto.message_field(2) - - -@dataclass -class MainReportArgs(betterproto.Message): - """A002""" - - args: Dict[str, str] = betterproto.map_field( - 1, betterproto.TYPE_STRING, betterproto.TYPE_STRING - ) - - -@dataclass -class MainReportArgsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MainReportArgs" = betterproto.message_field(2) - - -@dataclass -class MainTrackingUserState(betterproto.Message): - """A003""" - - user_state: str = betterproto.string_field(1) - - -@dataclass -class MainTrackingUserStateMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MainTrackingUserState" = betterproto.message_field(2) - - -@dataclass -class MergedFromState(betterproto.Message): - """A004""" - - num_merged: int = betterproto.int32_field(1) - sample: List[str] = betterproto.string_field(2) - - -@dataclass -class MergedFromStateMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MergedFromState" = betterproto.message_field(2) - - -@dataclass -class MissingProfileTarget(betterproto.Message): - """A005""" - - profile_name: str = betterproto.string_field(1) - target_name: str = betterproto.string_field(2) - - -@dataclass -class MissingProfileTargetMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MissingProfileTarget" = betterproto.message_field(2) - - -@dataclass -class InvalidOptionYAML(betterproto.Message): - """A008""" - - option_name: str = betterproto.string_field(1) - - -@dataclass -class InvalidOptionYAMLMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InvalidOptionYAML" = betterproto.message_field(2) - - -@dataclass -class LogDbtProjectError(betterproto.Message): - """A009""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class LogDbtProjectErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogDbtProjectError" = betterproto.message_field(2) - - -@dataclass -class LogDbtProfileError(betterproto.Message): - """A011""" - - exc: str = betterproto.string_field(1) - profiles: List[str] = betterproto.string_field(2) - - -@dataclass -class LogDbtProfileErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogDbtProfileError" = betterproto.message_field(2) - - -@dataclass -class StarterProjectPath(betterproto.Message): - """A017""" - - dir: str = betterproto.string_field(1) - - -@dataclass -class StarterProjectPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "StarterProjectPath" = betterproto.message_field(2) - - -@dataclass -class ConfigFolderDirectory(betterproto.Message): - """A018""" - - dir: str = betterproto.string_field(1) - - -@dataclass -class ConfigFolderDirectoryMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConfigFolderDirectory" = betterproto.message_field(2) - - -@dataclass -class NoSampleProfileFound(betterproto.Message): - """A019""" - - adapter: str = betterproto.string_field(1) - - -@dataclass -class NoSampleProfileFoundMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NoSampleProfileFound" = betterproto.message_field(2) - - -@dataclass -class ProfileWrittenWithSample(betterproto.Message): - """A020""" - - name: str = betterproto.string_field(1) - path: str = betterproto.string_field(2) - - -@dataclass -class ProfileWrittenWithSampleMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ProfileWrittenWithSample" = betterproto.message_field(2) - - -@dataclass -class ProfileWrittenWithTargetTemplateYAML(betterproto.Message): - """A021""" - - name: str = betterproto.string_field(1) - path: str = betterproto.string_field(2) - - -@dataclass -class ProfileWrittenWithTargetTemplateYAMLMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ProfileWrittenWithTargetTemplateYAML" = betterproto.message_field(2) - - -@dataclass -class ProfileWrittenWithProjectTemplateYAML(betterproto.Message): - """A022""" - - name: str = betterproto.string_field(1) - path: str = betterproto.string_field(2) - - -@dataclass -class ProfileWrittenWithProjectTemplateYAMLMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ProfileWrittenWithProjectTemplateYAML" = betterproto.message_field(2) - - -@dataclass -class SettingUpProfile(betterproto.Message): - """A023""" - - pass - - -@dataclass -class SettingUpProfileMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SettingUpProfile" = betterproto.message_field(2) - - -@dataclass -class InvalidProfileTemplateYAML(betterproto.Message): - """A024""" - - pass - - -@dataclass -class InvalidProfileTemplateYAMLMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InvalidProfileTemplateYAML" = betterproto.message_field(2) - - -@dataclass -class ProjectNameAlreadyExists(betterproto.Message): - """A025""" - - name: str = betterproto.string_field(1) - - -@dataclass -class ProjectNameAlreadyExistsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ProjectNameAlreadyExists" = betterproto.message_field(2) - - -@dataclass -class ProjectCreated(betterproto.Message): - """A026""" - - project_name: str = betterproto.string_field(1) - docs_url: str = betterproto.string_field(2) - slack_url: str = betterproto.string_field(3) - - -@dataclass -class ProjectCreatedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ProjectCreated" = betterproto.message_field(2) - - -@dataclass -class PackageRedirectDeprecation(betterproto.Message): - """D001""" - - old_name: str = betterproto.string_field(1) - new_name: str = betterproto.string_field(2) - - -@dataclass -class PackageRedirectDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PackageRedirectDeprecation" = betterproto.message_field(2) - - -@dataclass -class PackageInstallPathDeprecation(betterproto.Message): - """D002""" - - pass - - -@dataclass -class PackageInstallPathDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PackageInstallPathDeprecation" = betterproto.message_field(2) - - -@dataclass -class ConfigSourcePathDeprecation(betterproto.Message): - """D003""" - - deprecated_path: str = betterproto.string_field(1) - exp_path: str = betterproto.string_field(2) - - -@dataclass -class ConfigSourcePathDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConfigSourcePathDeprecation" = betterproto.message_field(2) - - -@dataclass -class ConfigDataPathDeprecation(betterproto.Message): - """D004""" - - deprecated_path: str = betterproto.string_field(1) - exp_path: str = betterproto.string_field(2) - - -@dataclass -class ConfigDataPathDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConfigDataPathDeprecation" = betterproto.message_field(2) - - -@dataclass -class AdapterDeprecationWarning(betterproto.Message): - """D005""" - - old_name: str = betterproto.string_field(1) - new_name: str = betterproto.string_field(2) - - -@dataclass -class AdapterDeprecationWarningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AdapterDeprecationWarning" = betterproto.message_field(2) - - -@dataclass -class MetricAttributesRenamed(betterproto.Message): - """D006""" - - metric_name: str = betterproto.string_field(1) - - -@dataclass -class MetricAttributesRenamedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MetricAttributesRenamed" = betterproto.message_field(2) - - -@dataclass -class ExposureNameDeprecation(betterproto.Message): - """D007""" - - exposure: str = betterproto.string_field(1) - - -@dataclass -class ExposureNameDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ExposureNameDeprecation" = betterproto.message_field(2) - - -@dataclass -class InternalDeprecation(betterproto.Message): - """D008""" - - name: str = betterproto.string_field(1) - reason: str = betterproto.string_field(2) - suggested_action: str = betterproto.string_field(3) - version: str = betterproto.string_field(4) - - -@dataclass -class InternalDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InternalDeprecation" = betterproto.message_field(2) - - -@dataclass -class EnvironmentVariableRenamed(betterproto.Message): - """D009""" - - old_name: str = betterproto.string_field(1) - new_name: str = betterproto.string_field(2) - - -@dataclass -class EnvironmentVariableRenamedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "EnvironmentVariableRenamed" = betterproto.message_field(2) - - -@dataclass -class ConfigLogPathDeprecation(betterproto.Message): - """D010""" - - deprecated_path: str = betterproto.string_field(1) - - -@dataclass -class ConfigLogPathDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConfigLogPathDeprecation" = betterproto.message_field(2) - - -@dataclass -class ConfigTargetPathDeprecation(betterproto.Message): - """D011""" - - deprecated_path: str = betterproto.string_field(1) - - -@dataclass -class ConfigTargetPathDeprecationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConfigTargetPathDeprecation" = betterproto.message_field(2) - - -@dataclass -class AdapterEventDebug(betterproto.Message): - """E001""" - - node_info: "NodeInfo" = betterproto.message_field(1) - name: str = betterproto.string_field(2) - base_msg: str = betterproto.string_field(3) - args: List[str] = betterproto.string_field(4) - - -@dataclass -class AdapterEventDebugMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AdapterEventDebug" = betterproto.message_field(2) - - -@dataclass -class AdapterEventInfo(betterproto.Message): - """E002""" - - node_info: "NodeInfo" = betterproto.message_field(1) - name: str = betterproto.string_field(2) - base_msg: str = betterproto.string_field(3) - args: List[str] = betterproto.string_field(4) - - -@dataclass -class AdapterEventInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AdapterEventInfo" = betterproto.message_field(2) - - -@dataclass -class AdapterEventWarning(betterproto.Message): - """E003""" - - node_info: "NodeInfo" = betterproto.message_field(1) - name: str = betterproto.string_field(2) - base_msg: str = betterproto.string_field(3) - args: List[str] = betterproto.string_field(4) - - -@dataclass -class AdapterEventWarningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AdapterEventWarning" = betterproto.message_field(2) - - -@dataclass -class AdapterEventError(betterproto.Message): - """E004""" - - node_info: "NodeInfo" = betterproto.message_field(1) - name: str = betterproto.string_field(2) - base_msg: str = betterproto.string_field(3) - args: List[str] = betterproto.string_field(4) - exc_info: str = betterproto.string_field(5) - - -@dataclass -class AdapterEventErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AdapterEventError" = betterproto.message_field(2) - - -@dataclass -class NewConnection(betterproto.Message): - """E005""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_type: str = betterproto.string_field(2) - conn_name: str = betterproto.string_field(3) - - -@dataclass -class NewConnectionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NewConnection" = betterproto.message_field(2) - - -@dataclass -class ConnectionReused(betterproto.Message): - """E006""" - - conn_name: str = betterproto.string_field(1) - orig_conn_name: str = betterproto.string_field(2) - - -@dataclass -class ConnectionReusedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConnectionReused" = betterproto.message_field(2) - - -@dataclass -class ConnectionLeftOpenInCleanup(betterproto.Message): - """E007""" - - conn_name: str = betterproto.string_field(1) - - -@dataclass -class ConnectionLeftOpenInCleanupMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConnectionLeftOpen" = betterproto.message_field(2) - - -@dataclass -class ConnectionClosedInCleanup(betterproto.Message): - """E008""" - - conn_name: str = betterproto.string_field(1) - - -@dataclass -class ConnectionClosedInCleanupMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConnectionClosedInCleanup" = betterproto.message_field(2) - - -@dataclass -class RollbackFailed(betterproto.Message): - """E009""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_name: str = betterproto.string_field(2) - exc_info: str = betterproto.string_field(3) - - -@dataclass -class RollbackFailedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RollbackFailed" = betterproto.message_field(2) - - -@dataclass -class ConnectionClosed(betterproto.Message): - """E010""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_name: str = betterproto.string_field(2) - - -@dataclass -class ConnectionClosedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConnectionClosed" = betterproto.message_field(2) - - -@dataclass -class ConnectionLeftOpen(betterproto.Message): - """E011""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_name: str = betterproto.string_field(2) - - -@dataclass -class ConnectionLeftOpenMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConnectionLeftOpen" = betterproto.message_field(2) - - -@dataclass -class Rollback(betterproto.Message): - """E012""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_name: str = betterproto.string_field(2) - - -@dataclass -class RollbackMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "Rollback" = betterproto.message_field(2) - - -@dataclass -class CacheMiss(betterproto.Message): - """E013""" - - conn_name: str = betterproto.string_field(1) - database: str = betterproto.string_field(2) - schema: str = betterproto.string_field(3) - - -@dataclass -class CacheMissMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CacheMiss" = betterproto.message_field(2) - - -@dataclass -class ListRelations(betterproto.Message): - """E014""" - - database: str = betterproto.string_field(1) - schema: str = betterproto.string_field(2) - relations: List["ReferenceKeyMsg"] = betterproto.message_field(3) - - -@dataclass -class ListRelationsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ListRelations" = betterproto.message_field(2) - - -@dataclass -class ConnectionUsed(betterproto.Message): - """E015""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_type: str = betterproto.string_field(2) - conn_name: str = betterproto.string_field(3) - - -@dataclass -class ConnectionUsedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConnectionUsed" = betterproto.message_field(2) - - -@dataclass -class SQLQuery(betterproto.Message): - """E016""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_name: str = betterproto.string_field(2) - sql: str = betterproto.string_field(3) - - -@dataclass -class SQLQueryMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SQLQuery" = betterproto.message_field(2) - - -@dataclass -class SQLQueryStatus(betterproto.Message): - """E017""" - - node_info: "NodeInfo" = betterproto.message_field(1) - status: str = betterproto.string_field(2) - elapsed: float = betterproto.float_field(3) - - -@dataclass -class SQLQueryStatusMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SQLQueryStatus" = betterproto.message_field(2) - - -@dataclass -class SQLCommit(betterproto.Message): - """E018""" - - node_info: "NodeInfo" = betterproto.message_field(1) - conn_name: str = betterproto.string_field(2) - - -@dataclass -class SQLCommitMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SQLCommit" = betterproto.message_field(2) - - -@dataclass -class ColTypeChange(betterproto.Message): - """E019""" - - orig_type: str = betterproto.string_field(1) - new_type: str = betterproto.string_field(2) - table: "ReferenceKeyMsg" = betterproto.message_field(3) - - -@dataclass -class ColTypeChangeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ColTypeChange" = betterproto.message_field(2) - - -@dataclass -class SchemaCreation(betterproto.Message): - """E020""" - - relation: "ReferenceKeyMsg" = betterproto.message_field(1) - - -@dataclass -class SchemaCreationMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SchemaCreation" = betterproto.message_field(2) - - -@dataclass -class SchemaDrop(betterproto.Message): - """E021""" - - relation: "ReferenceKeyMsg" = betterproto.message_field(1) - - -@dataclass -class SchemaDropMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SchemaDrop" = betterproto.message_field(2) - - -@dataclass -class CacheAction(betterproto.Message): - """E022""" - - action: str = betterproto.string_field(1) - ref_key: "ReferenceKeyMsg" = betterproto.message_field(2) - ref_key_2: "ReferenceKeyMsg" = betterproto.message_field(3) - ref_key_3: "ReferenceKeyMsg" = betterproto.message_field(4) - ref_list: List["ReferenceKeyMsg"] = betterproto.message_field(5) - - -@dataclass -class CacheActionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CacheAction" = betterproto.message_field(2) - - -@dataclass -class CacheDumpGraph(betterproto.Message): - """E031""" - - dump: Dict[str, "ListOfStrings"] = betterproto.map_field( - 1, betterproto.TYPE_STRING, betterproto.TYPE_MESSAGE - ) - before_after: str = betterproto.string_field(2) - action: str = betterproto.string_field(3) - - -@dataclass -class CacheDumpGraphMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CacheDumpGraph" = betterproto.message_field(2) - - -@dataclass -class AdapterImportError(betterproto.Message): - """E035""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class AdapterImportErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AdapterImportError" = betterproto.message_field(2) - - -@dataclass -class PluginLoadError(betterproto.Message): - """E036""" - - exc_info: str = betterproto.string_field(1) - - -@dataclass -class PluginLoadErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PluginLoadError" = betterproto.message_field(2) - - -@dataclass -class NewConnectionOpening(betterproto.Message): - """E037""" - - node_info: "NodeInfo" = betterproto.message_field(1) - connection_state: str = betterproto.string_field(2) - - -@dataclass -class NewConnectionOpeningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NewConnectionOpening" = betterproto.message_field(2) - - -@dataclass -class CodeExecution(betterproto.Message): - """E038""" - - conn_name: str = betterproto.string_field(1) - code_content: str = betterproto.string_field(2) - - -@dataclass -class CodeExecutionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CodeExecution" = betterproto.message_field(2) - - -@dataclass -class CodeExecutionStatus(betterproto.Message): - """E039""" - - status: str = betterproto.string_field(1) - elapsed: float = betterproto.float_field(2) - - -@dataclass -class CodeExecutionStatusMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CodeExecutionStatus" = betterproto.message_field(2) - - -@dataclass -class CatalogGenerationError(betterproto.Message): - """E040""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class CatalogGenerationErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CatalogGenerationError" = betterproto.message_field(2) - - -@dataclass -class WriteCatalogFailure(betterproto.Message): - """E041""" - - num_exceptions: int = betterproto.int32_field(1) - - -@dataclass -class WriteCatalogFailureMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "WriteCatalogFailure" = betterproto.message_field(2) - - -@dataclass -class CatalogWritten(betterproto.Message): - """E042""" - - path: str = betterproto.string_field(1) - - -@dataclass -class CatalogWrittenMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CatalogWritten" = betterproto.message_field(2) - - -@dataclass -class CannotGenerateDocs(betterproto.Message): - """E043""" - - pass - - -@dataclass -class CannotGenerateDocsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CannotGenerateDocs" = betterproto.message_field(2) - - -@dataclass -class BuildingCatalog(betterproto.Message): - """E044""" - - pass - - -@dataclass -class BuildingCatalogMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "BuildingCatalog" = betterproto.message_field(2) - - -@dataclass -class DatabaseErrorRunningHook(betterproto.Message): - """E045""" - - hook_type: str = betterproto.string_field(1) - - -@dataclass -class DatabaseErrorRunningHookMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DatabaseErrorRunningHook" = betterproto.message_field(2) - - -@dataclass -class HooksRunning(betterproto.Message): - """E046""" - - num_hooks: int = betterproto.int32_field(1) - hook_type: str = betterproto.string_field(2) - - -@dataclass -class HooksRunningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "HooksRunning" = betterproto.message_field(2) - - -@dataclass -class FinishedRunningStats(betterproto.Message): - """E047""" - - stat_line: str = betterproto.string_field(1) - execution: str = betterproto.string_field(2) - execution_time: float = betterproto.float_field(3) - - -@dataclass -class FinishedRunningStatsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FinishedRunningStats" = betterproto.message_field(2) - - -@dataclass -class InputFileDiffError(betterproto.Message): - """I001""" - - category: str = betterproto.string_field(1) - file_id: str = betterproto.string_field(2) - - -@dataclass -class InputFileDiffErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InputFileDiffError" = betterproto.message_field(2) - - -@dataclass -class InvalidValueForField(betterproto.Message): - """I008""" - - field_name: str = betterproto.string_field(1) - field_value: str = betterproto.string_field(2) - - -@dataclass -class InvalidValueForFieldMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InvalidValueForField" = betterproto.message_field(2) - - -@dataclass -class ValidationWarning(betterproto.Message): - """I009""" - - resource_type: str = betterproto.string_field(1) - field_name: str = betterproto.string_field(2) - node_name: str = betterproto.string_field(3) - - -@dataclass -class ValidationWarningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ValidationWarning" = betterproto.message_field(2) - - -@dataclass -class ParsePerfInfoPath(betterproto.Message): - """I010""" - - path: str = betterproto.string_field(1) - - -@dataclass -class ParsePerfInfoPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ParsePerfInfoPath" = betterproto.message_field(2) - - -@dataclass -class GenericTestFileParse(betterproto.Message): - """I011""" - - path: str = betterproto.string_field(1) - - -@dataclass -class GenericTestFileParseMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GenericTestFileParse" = betterproto.message_field(2) - - -@dataclass -class MacroFileParse(betterproto.Message): - """I012""" - - path: str = betterproto.string_field(1) - - -@dataclass -class MacroFileParseMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MacroFileParse" = betterproto.message_field(2) - - -@dataclass -class PartialParsingErrorProcessingFile(betterproto.Message): - """I014""" - - file: str = betterproto.string_field(1) - - -@dataclass -class PartialParsingErrorProcessingFileMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PartialParsingErrorProcessingFile" = betterproto.message_field(2) - - -@dataclass -class PartialParsingError(betterproto.Message): - """I016""" - - exc_info: Dict[str, str] = betterproto.map_field( - 1, betterproto.TYPE_STRING, betterproto.TYPE_STRING - ) - - -@dataclass -class PartialParsingErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PartialParsingError" = betterproto.message_field(2) - - -@dataclass -class PartialParsingSkipParsing(betterproto.Message): - """I017""" - - pass - - -@dataclass -class PartialParsingSkipParsingMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PartialParsingSkipParsing" = betterproto.message_field(2) - - -@dataclass -class UnableToPartialParse(betterproto.Message): - """I024""" - - reason: str = betterproto.string_field(1) - - -@dataclass -class UnableToPartialParseMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "UnableToPartialParse" = betterproto.message_field(2) - - -@dataclass -class StateCheckVarsHash(betterproto.Message): - """I025""" - - checksum: str = betterproto.string_field(1) - vars: str = betterproto.string_field(2) - profile: str = betterproto.string_field(3) - target: str = betterproto.string_field(4) - version: str = betterproto.string_field(5) - - -@dataclass -class StateCheckVarsHashMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "StateCheckVarsHash" = betterproto.message_field(2) - - -@dataclass -class PartialParsingNotEnabled(betterproto.Message): - """I028""" - - pass - - -@dataclass -class PartialParsingNotEnabledMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PartialParsingNotEnabled" = betterproto.message_field(2) - - -@dataclass -class ParsedFileLoadFailed(betterproto.Message): - """I029""" - - path: str = betterproto.string_field(1) - exc: str = betterproto.string_field(2) - exc_info: str = betterproto.string_field(3) - - -@dataclass -class ParsedFileLoadFailedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ParsedFileLoadFailed" = betterproto.message_field(2) - - -@dataclass -class PartialParsingEnabled(betterproto.Message): - """I040""" - - deleted: int = betterproto.int32_field(1) - added: int = betterproto.int32_field(2) - changed: int = betterproto.int32_field(3) - - -@dataclass -class PartialParsingEnabledMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PartialParsingEnabled" = betterproto.message_field(2) - - -@dataclass -class PartialParsingFile(betterproto.Message): - """I041""" - - file_id: str = betterproto.string_field(1) - operation: str = betterproto.string_field(2) - - -@dataclass -class PartialParsingFileMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "PartialParsingFile" = betterproto.message_field(2) - - -@dataclass -class InvalidDisabledTargetInTestNode(betterproto.Message): - """I050""" - - resource_type_title: str = betterproto.string_field(1) - unique_id: str = betterproto.string_field(2) - original_file_path: str = betterproto.string_field(3) - target_kind: str = betterproto.string_field(4) - target_name: str = betterproto.string_field(5) - target_package: str = betterproto.string_field(6) - - -@dataclass -class InvalidDisabledTargetInTestNodeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InvalidDisabledTargetInTestNode" = betterproto.message_field(2) - - -@dataclass -class UnusedResourceConfigPath(betterproto.Message): - """I051""" - - unused_config_paths: List[str] = betterproto.string_field(1) - - -@dataclass -class UnusedResourceConfigPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "UnusedResourceConfigPath" = betterproto.message_field(2) - - -@dataclass -class SeedIncreased(betterproto.Message): - """I052""" - - package_name: str = betterproto.string_field(1) - name: str = betterproto.string_field(2) - - -@dataclass -class SeedIncreasedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SeedIncreased" = betterproto.message_field(2) - - -@dataclass -class SeedExceedsLimitSamePath(betterproto.Message): - """I053""" - - package_name: str = betterproto.string_field(1) - name: str = betterproto.string_field(2) - - -@dataclass -class SeedExceedsLimitSamePathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SeedExceedsLimitSamePath" = betterproto.message_field(2) - - -@dataclass -class SeedExceedsLimitAndPathChanged(betterproto.Message): - """I054""" - - package_name: str = betterproto.string_field(1) - name: str = betterproto.string_field(2) - - -@dataclass -class SeedExceedsLimitAndPathChangedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SeedExceedsLimitAndPathChanged" = betterproto.message_field(2) - - -@dataclass -class SeedExceedsLimitChecksumChanged(betterproto.Message): - """I055""" - - package_name: str = betterproto.string_field(1) - name: str = betterproto.string_field(2) - checksum_name: str = betterproto.string_field(3) - - -@dataclass -class SeedExceedsLimitChecksumChangedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SeedExceedsLimitChecksumChanged" = betterproto.message_field(2) - - -@dataclass -class UnusedTables(betterproto.Message): - """I056""" - - unused_tables: List[str] = betterproto.string_field(1) - - -@dataclass -class UnusedTablesMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "UnusedTables" = betterproto.message_field(2) - - -@dataclass -class WrongResourceSchemaFile(betterproto.Message): - """I057""" - - patch_name: str = betterproto.string_field(1) - resource_type: str = betterproto.string_field(2) - plural_resource_type: str = betterproto.string_field(3) - yaml_key: str = betterproto.string_field(4) - file_path: str = betterproto.string_field(5) - - -@dataclass -class WrongResourceSchemaFileMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "WrongResourceSchemaFile" = betterproto.message_field(2) - - -@dataclass -class NoNodeForYamlKey(betterproto.Message): - """I058""" - - patch_name: str = betterproto.string_field(1) - yaml_key: str = betterproto.string_field(2) - file_path: str = betterproto.string_field(3) - - -@dataclass -class NoNodeForYamlKeyMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NoNodeForYamlKey" = betterproto.message_field(2) - - -@dataclass -class MacroNotFoundForPatch(betterproto.Message): - """I059""" - - patch_name: str = betterproto.string_field(1) - - -@dataclass -class MacroNotFoundForPatchMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MacroNotFoundForPatch" = betterproto.message_field(2) - - -@dataclass -class NodeNotFoundOrDisabled(betterproto.Message): - """I060""" - - original_file_path: str = betterproto.string_field(1) - unique_id: str = betterproto.string_field(2) - resource_type_title: str = betterproto.string_field(3) - target_name: str = betterproto.string_field(4) - target_kind: str = betterproto.string_field(5) - target_package: str = betterproto.string_field(6) - disabled: str = betterproto.string_field(7) - - -@dataclass -class NodeNotFoundOrDisabledMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NodeNotFoundOrDisabled" = betterproto.message_field(2) - - -@dataclass -class JinjaLogWarning(betterproto.Message): - """I061""" - - node_info: "NodeInfo" = betterproto.message_field(1) - msg: str = betterproto.string_field(2) - - -@dataclass -class JinjaLogWarningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "JinjaLogWarning" = betterproto.message_field(2) - - -@dataclass -class JinjaLogInfo(betterproto.Message): - """I062""" - - node_info: "NodeInfo" = betterproto.message_field(1) - msg: str = betterproto.string_field(2) - - -@dataclass -class JinjaLogInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "JinjaLogInfo" = betterproto.message_field(2) - - -@dataclass -class JinjaLogDebug(betterproto.Message): - """I063""" - - node_info: "NodeInfo" = betterproto.message_field(1) - msg: str = betterproto.string_field(2) - - -@dataclass -class JinjaLogDebugMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "JinjaLogDebug" = betterproto.message_field(2) - - -@dataclass -class GitSparseCheckoutSubdirectory(betterproto.Message): - """M001""" - - subdir: str = betterproto.string_field(1) - - -@dataclass -class GitSparseCheckoutSubdirectoryMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitSparseCheckoutSubdirectory" = betterproto.message_field(2) - - -@dataclass -class GitProgressCheckoutRevision(betterproto.Message): - """M002""" - - revision: str = betterproto.string_field(1) - - -@dataclass -class GitProgressCheckoutRevisionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitProgressCheckoutRevision" = betterproto.message_field(2) - - -@dataclass -class GitProgressUpdatingExistingDependency(betterproto.Message): - """M003""" - - dir: str = betterproto.string_field(1) - - -@dataclass -class GitProgressUpdatingExistingDependencyMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitProgressUpdatingExistingDependency" = betterproto.message_field(2) - - -@dataclass -class GitProgressPullingNewDependency(betterproto.Message): - """M004""" - - dir: str = betterproto.string_field(1) - - -@dataclass -class GitProgressPullingNewDependencyMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitProgressPullingNewDependency" = betterproto.message_field(2) - - -@dataclass -class GitNothingToDo(betterproto.Message): - """M005""" - - sha: str = betterproto.string_field(1) - - -@dataclass -class GitNothingToDoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitNothingToDo" = betterproto.message_field(2) - - -@dataclass -class GitProgressUpdatedCheckoutRange(betterproto.Message): - """M006""" - - start_sha: str = betterproto.string_field(1) - end_sha: str = betterproto.string_field(2) - - -@dataclass -class GitProgressUpdatedCheckoutRangeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitProgressUpdatedCheckoutRange" = betterproto.message_field(2) - - -@dataclass -class GitProgressCheckedOutAt(betterproto.Message): - """M007""" - - end_sha: str = betterproto.string_field(1) - - -@dataclass -class GitProgressCheckedOutAtMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GitProgressCheckedOutAt" = betterproto.message_field(2) - - -@dataclass -class RegistryProgressGETRequest(betterproto.Message): - """M008""" - - url: str = betterproto.string_field(1) - - -@dataclass -class RegistryProgressGETRequestMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryProgressGETRequest" = betterproto.message_field(2) - - -@dataclass -class RegistryProgressGETResponse(betterproto.Message): - """M009""" - - url: str = betterproto.string_field(1) - resp_code: int = betterproto.int32_field(2) - - -@dataclass -class RegistryProgressGETResponseMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryProgressGETResponse" = betterproto.message_field(2) - - -@dataclass -class SelectorReportInvalidSelector(betterproto.Message): - """M010""" - - valid_selectors: str = betterproto.string_field(1) - spec_method: str = betterproto.string_field(2) - raw_spec: str = betterproto.string_field(3) - - -@dataclass -class SelectorReportInvalidSelectorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SelectorReportInvalidSelector" = betterproto.message_field(2) - - -@dataclass -class DepsNoPackagesFound(betterproto.Message): - """M013""" - - pass - - -@dataclass -class DepsNoPackagesFoundMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsNoPackagesFound" = betterproto.message_field(2) - - -@dataclass -class DepsStartPackageInstall(betterproto.Message): - """M014""" - - package_name: str = betterproto.string_field(1) - - -@dataclass -class DepsStartPackageInstallMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsStartPackageInstall" = betterproto.message_field(2) - - -@dataclass -class DepsInstallInfo(betterproto.Message): - """M015""" - - version_name: str = betterproto.string_field(1) - - -@dataclass -class DepsInstallInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsInstallInfo" = betterproto.message_field(2) - - -@dataclass -class DepsUpdateAvailable(betterproto.Message): - """M016""" - - version_latest: str = betterproto.string_field(1) - - -@dataclass -class DepsUpdateAvailableMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsUpdateAvailable" = betterproto.message_field(2) - - -@dataclass -class DepsUpToDate(betterproto.Message): - """M017""" - - pass - - -@dataclass -class DepsUpToDateMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsUpToDate" = betterproto.message_field(2) - - -@dataclass -class DepsListSubdirectory(betterproto.Message): - """M018""" - - subdirectory: str = betterproto.string_field(1) - - -@dataclass -class DepsListSubdirectoryMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsListSubdirectory" = betterproto.message_field(2) - - -@dataclass -class DepsNotifyUpdatesAvailable(betterproto.Message): - """M019""" - - packages: "ListOfStrings" = betterproto.message_field(1) - - -@dataclass -class DepsNotifyUpdatesAvailableMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsNotifyUpdatesAvailable" = betterproto.message_field(2) - - -@dataclass -class RetryExternalCall(betterproto.Message): - """M020""" - - attempt: int = betterproto.int32_field(1) - max: int = betterproto.int32_field(2) - - -@dataclass -class RetryExternalCallMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RetryExternalCall" = betterproto.message_field(2) - - -@dataclass -class RecordRetryException(betterproto.Message): - """M021""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class RecordRetryExceptionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RecordRetryException" = betterproto.message_field(2) - - -@dataclass -class RegistryIndexProgressGETRequest(betterproto.Message): - """M022""" - - url: str = betterproto.string_field(1) - - -@dataclass -class RegistryIndexProgressGETRequestMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryIndexProgressGETRequest" = betterproto.message_field(2) - - -@dataclass -class RegistryIndexProgressGETResponse(betterproto.Message): - """M023""" - - url: str = betterproto.string_field(1) - resp_code: int = betterproto.int32_field(2) - - -@dataclass -class RegistryIndexProgressGETResponseMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryIndexProgressGETResponse" = betterproto.message_field(2) - - -@dataclass -class RegistryResponseUnexpectedType(betterproto.Message): - """M024""" - - response: str = betterproto.string_field(1) - - -@dataclass -class RegistryResponseUnexpectedTypeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryResponseUnexpectedType" = betterproto.message_field(2) - - -@dataclass -class RegistryResponseMissingTopKeys(betterproto.Message): - """M025""" - - response: str = betterproto.string_field(1) - - -@dataclass -class RegistryResponseMissingTopKeysMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryResponseMissingTopKeys" = betterproto.message_field(2) - - -@dataclass -class RegistryResponseMissingNestedKeys(betterproto.Message): - """M026""" - - response: str = betterproto.string_field(1) - - -@dataclass -class RegistryResponseMissingNestedKeysMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryResponseMissingNestedKeys" = betterproto.message_field(2) - - -@dataclass -class RegistryResponseExtraNestedKeys(betterproto.Message): - """m027""" - - response: str = betterproto.string_field(1) - - -@dataclass -class RegistryResponseExtraNestedKeysMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RegistryResponseExtraNestedKeys" = betterproto.message_field(2) - - -@dataclass -class DepsSetDownloadDirectory(betterproto.Message): - """M028""" - - path: str = betterproto.string_field(1) - - -@dataclass -class DepsSetDownloadDirectoryMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsSetDownloadDirectory" = betterproto.message_field(2) - - -@dataclass -class DepsUnpinned(betterproto.Message): - """M029""" - - revision: str = betterproto.string_field(1) - git: str = betterproto.string_field(2) - - -@dataclass -class DepsUnpinnedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsUnpinned" = betterproto.message_field(2) - - -@dataclass -class NoNodesForSelectionCriteria(betterproto.Message): - """M030""" - - spec_raw: str = betterproto.string_field(1) - - -@dataclass -class NoNodesForSelectionCriteriaMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NoNodesForSelectionCriteria" = betterproto.message_field(2) - - -@dataclass -class RunningOperationCaughtError(betterproto.Message): - """Q001""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class RunningOperationCaughtErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunningOperationCaughtError" = betterproto.message_field(2) - - -@dataclass -class CompileComplete(betterproto.Message): - """Q002""" - - pass - - -@dataclass -class CompileCompleteMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CompileComplete" = betterproto.message_field(2) - - -@dataclass -class FreshnessCheckComplete(betterproto.Message): - """Q003""" - - pass - - -@dataclass -class FreshnessCheckCompleteMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FreshnessCheckComplete" = betterproto.message_field(2) - - -@dataclass -class SeedHeader(betterproto.Message): - """Q004""" - - header: str = betterproto.string_field(1) - - -@dataclass -class SeedHeaderMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SeedHeader" = betterproto.message_field(2) - - -@dataclass -class SQLRunnerException(betterproto.Message): - """Q006""" - - exc: str = betterproto.string_field(1) - exc_info: str = betterproto.string_field(2) - - -@dataclass -class SQLRunnerExceptionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SQLRunnerException" = betterproto.message_field(2) - - -@dataclass -class LogTestResult(betterproto.Message): - """Q007""" - - node_info: "NodeInfo" = betterproto.message_field(1) - name: str = betterproto.string_field(2) - status: str = betterproto.string_field(3) - index: int = betterproto.int32_field(4) - num_models: int = betterproto.int32_field(5) - execution_time: float = betterproto.float_field(6) - num_failures: int = betterproto.int32_field(7) - - -@dataclass -class LogTestResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogTestResult" = betterproto.message_field(2) - - -@dataclass -class LogStartLine(betterproto.Message): - """Q011""" - - node_info: "NodeInfo" = betterproto.message_field(1) - description: str = betterproto.string_field(2) - index: int = betterproto.int32_field(3) - total: int = betterproto.int32_field(4) - - -@dataclass -class LogStartLineMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogStartLine" = betterproto.message_field(2) - - -@dataclass -class LogModelResult(betterproto.Message): - """Q012""" - - node_info: "NodeInfo" = betterproto.message_field(1) - description: str = betterproto.string_field(2) - status: str = betterproto.string_field(3) - index: int = betterproto.int32_field(4) - total: int = betterproto.int32_field(5) - execution_time: float = betterproto.float_field(6) - - -@dataclass -class LogModelResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogModelResult" = betterproto.message_field(2) - - -@dataclass -class LogSnapshotResult(betterproto.Message): - """Q015""" - - node_info: "NodeInfo" = betterproto.message_field(1) - description: str = betterproto.string_field(2) - status: str = betterproto.string_field(3) - index: int = betterproto.int32_field(4) - total: int = betterproto.int32_field(5) - execution_time: float = betterproto.float_field(6) - cfg: Dict[str, str] = betterproto.map_field( - 7, betterproto.TYPE_STRING, betterproto.TYPE_STRING - ) - - -@dataclass -class LogSnapshotResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogSnapshotResult" = betterproto.message_field(2) - - -@dataclass -class LogSeedResult(betterproto.Message): - """Q016""" - - node_info: "NodeInfo" = betterproto.message_field(1) - status: str = betterproto.string_field(2) - result_message: str = betterproto.string_field(3) - index: int = betterproto.int32_field(4) - total: int = betterproto.int32_field(5) - execution_time: float = betterproto.float_field(6) - schema: str = betterproto.string_field(7) - relation: str = betterproto.string_field(8) - - -@dataclass -class LogSeedResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogSeedResult" = betterproto.message_field(2) - - -@dataclass -class LogFreshnessResult(betterproto.Message): - """Q018""" - - status: str = betterproto.string_field(1) - node_info: "NodeInfo" = betterproto.message_field(2) - index: int = betterproto.int32_field(3) - total: int = betterproto.int32_field(4) - execution_time: float = betterproto.float_field(5) - source_name: str = betterproto.string_field(6) - table_name: str = betterproto.string_field(7) - - -@dataclass -class LogFreshnessResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogFreshnessResult" = betterproto.message_field(2) - - -@dataclass -class LogCancelLine(betterproto.Message): - """Q022""" - - conn_name: str = betterproto.string_field(1) - - -@dataclass -class LogCancelLineMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogCancelLine" = betterproto.message_field(2) - - -@dataclass -class DefaultSelector(betterproto.Message): - """Q023""" - - name: str = betterproto.string_field(1) - - -@dataclass -class DefaultSelectorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DefaultSelector" = betterproto.message_field(2) - - -@dataclass -class NodeStart(betterproto.Message): - """Q024""" - - node_info: "NodeInfo" = betterproto.message_field(1) - - -@dataclass -class NodeStartMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NodeStart" = betterproto.message_field(2) - - -@dataclass -class NodeFinished(betterproto.Message): - """Q025""" - - node_info: "NodeInfo" = betterproto.message_field(1) - run_result: "RunResultMsg" = betterproto.message_field(2) - - -@dataclass -class NodeFinishedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NodeFinished" = betterproto.message_field(2) - - -@dataclass -class QueryCancelationUnsupported(betterproto.Message): - """Q026""" - - type: str = betterproto.string_field(1) - - -@dataclass -class QueryCancelationUnsupportedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "QueryCancelationUnsupported" = betterproto.message_field(2) - - -@dataclass -class ConcurrencyLine(betterproto.Message): - """Q027""" - - num_threads: int = betterproto.int32_field(1) - target_name: str = betterproto.string_field(2) - node_count: int = betterproto.int32_field(3) - - -@dataclass -class ConcurrencyLineMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConcurrencyLine" = betterproto.message_field(2) - - -@dataclass -class CompiledNode(betterproto.Message): - """Q028""" - - node_name: str = betterproto.string_field(1) - compiled: str = betterproto.string_field(2) - - -@dataclass -class CompiledNodeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CompiledNode" = betterproto.message_field(2) - - -@dataclass -class WritingInjectedSQLForNode(betterproto.Message): - """Q029""" - - node_info: "NodeInfo" = betterproto.message_field(1) - - -@dataclass -class WritingInjectedSQLForNodeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "WritingInjectedSQLForNode" = betterproto.message_field(2) - - -@dataclass -class NodeCompiling(betterproto.Message): - """Q030""" - - node_info: "NodeInfo" = betterproto.message_field(1) - - -@dataclass -class NodeCompilingMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NodeCompiling" = betterproto.message_field(2) - - -@dataclass -class NodeExecuting(betterproto.Message): - """Q031""" - - node_info: "NodeInfo" = betterproto.message_field(1) - - -@dataclass -class NodeExecutingMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NodeExecuting" = betterproto.message_field(2) - - -@dataclass -class LogHookStartLine(betterproto.Message): - """Q032""" - - node_info: "NodeInfo" = betterproto.message_field(1) - statement: str = betterproto.string_field(2) - index: int = betterproto.int32_field(3) - total: int = betterproto.int32_field(4) - - -@dataclass -class LogHookStartLineMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogHookStartLine" = betterproto.message_field(2) - - -@dataclass -class LogHookEndLine(betterproto.Message): - """Q033""" - - node_info: "NodeInfo" = betterproto.message_field(1) - statement: str = betterproto.string_field(2) - status: str = betterproto.string_field(3) - index: int = betterproto.int32_field(4) - total: int = betterproto.int32_field(5) - execution_time: float = betterproto.float_field(6) - - -@dataclass -class LogHookEndLineMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogHookEndLine" = betterproto.message_field(2) - - -@dataclass -class SkippingDetails(betterproto.Message): - """Q034""" - - node_info: "NodeInfo" = betterproto.message_field(1) - resource_type: str = betterproto.string_field(2) - schema: str = betterproto.string_field(3) - node_name: str = betterproto.string_field(4) - index: int = betterproto.int32_field(5) - total: int = betterproto.int32_field(6) - - -@dataclass -class SkippingDetailsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SkippingDetails" = betterproto.message_field(2) - - -@dataclass -class NothingToDo(betterproto.Message): - """Q035""" - - pass - - -@dataclass -class NothingToDoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NothingToDo" = betterproto.message_field(2) - - -@dataclass -class RunningOperationUncaughtError(betterproto.Message): - """Q036""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class RunningOperationUncaughtErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunningOperationUncaughtError" = betterproto.message_field(2) - - -@dataclass -class EndRunResult(betterproto.Message): - """Q037""" - - results: List["RunResultMsg"] = betterproto.message_field(1) - elapsed_time: float = betterproto.float_field(2) - generated_at: datetime = betterproto.message_field(3) - success: bool = betterproto.bool_field(4) - - -@dataclass -class EndRunResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "EndRunResult" = betterproto.message_field(2) - - -@dataclass -class NoNodesSelected(betterproto.Message): - """Q038""" - - pass - - -@dataclass -class NoNodesSelectedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NoNodesSelected" = betterproto.message_field(2) - - -@dataclass -class CommandCompleted(betterproto.Message): - """Q039""" - - command: str = betterproto.string_field(1) - success: bool = betterproto.bool_field(2) - completed_at: datetime = betterproto.message_field(3) - elapsed: float = betterproto.float_field(4) - - -@dataclass -class CommandCompletedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CommandCompleted" = betterproto.message_field(2) - - -@dataclass -class CatchableExceptionOnRun(betterproto.Message): - """W002""" - - node_info: "NodeInfo" = betterproto.message_field(1) - exc: str = betterproto.string_field(2) - exc_info: str = betterproto.string_field(3) - - -@dataclass -class CatchableExceptionOnRunMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CatchableExceptionOnRun" = betterproto.message_field(2) - - -@dataclass -class InternalErrorOnRun(betterproto.Message): - """W003""" - - build_path: str = betterproto.string_field(1) - exc: str = betterproto.string_field(2) - - -@dataclass -class InternalErrorOnRunMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "InternalErrorOnRun" = betterproto.message_field(2) - - -@dataclass -class GenericExceptionOnRun(betterproto.Message): - """W004""" - - build_path: str = betterproto.string_field(1) - unique_id: str = betterproto.string_field(2) - exc: str = betterproto.string_field(3) - - -@dataclass -class GenericExceptionOnRunMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "GenericExceptionOnRun" = betterproto.message_field(2) - - -@dataclass -class NodeConnectionReleaseError(betterproto.Message): - """W005""" - - node_name: str = betterproto.string_field(1) - exc: str = betterproto.string_field(2) - exc_info: str = betterproto.string_field(3) - - -@dataclass -class NodeConnectionReleaseErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "NodeConnectionReleaseError" = betterproto.message_field(2) - - -@dataclass -class FoundStats(betterproto.Message): - """W006""" - - stat_line: str = betterproto.string_field(1) - - -@dataclass -class FoundStatsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FoundStats" = betterproto.message_field(2) - - -@dataclass -class MainKeyboardInterrupt(betterproto.Message): - """Z001""" - - pass - - -@dataclass -class MainKeyboardInterruptMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MainKeyboardInterrupt" = betterproto.message_field(2) - - -@dataclass -class MainEncounteredError(betterproto.Message): - """Z002""" - - exc: str = betterproto.string_field(1) - - -@dataclass -class MainEncounteredErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MainEncounteredError" = betterproto.message_field(2) - - -@dataclass -class MainStackTrace(betterproto.Message): - """Z003""" - - stack_trace: str = betterproto.string_field(1) - - -@dataclass -class MainStackTraceMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "MainStackTrace" = betterproto.message_field(2) - - -@dataclass -class SystemCouldNotWrite(betterproto.Message): - """Z005""" - - path: str = betterproto.string_field(1) - reason: str = betterproto.string_field(2) - exc: str = betterproto.string_field(3) - - -@dataclass -class SystemCouldNotWriteMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SystemCouldNotWrite" = betterproto.message_field(2) - - -@dataclass -class SystemExecutingCmd(betterproto.Message): - """Z006""" - - cmd: List[str] = betterproto.string_field(1) - - -@dataclass -class SystemExecutingCmdMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SystemExecutingCmd" = betterproto.message_field(2) - - -@dataclass -class SystemStdOut(betterproto.Message): - """Z007""" - - bmsg: bytes = betterproto.bytes_field(1) - - -@dataclass -class SystemStdOutMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SystemStdOut" = betterproto.message_field(2) - - -@dataclass -class SystemStdErr(betterproto.Message): - """Z008""" - - bmsg: bytes = betterproto.bytes_field(1) - - -@dataclass -class SystemStdErrMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SystemStdErr" = betterproto.message_field(2) - - -@dataclass -class SystemReportReturnCode(betterproto.Message): - """Z009""" - - returncode: int = betterproto.int32_field(1) - - -@dataclass -class SystemReportReturnCodeMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SystemReportReturnCode" = betterproto.message_field(2) - - -@dataclass -class TimingInfoCollected(betterproto.Message): - """Z010""" - - node_info: "NodeInfo" = betterproto.message_field(1) - timing_info: "TimingInfoMsg" = betterproto.message_field(2) - - -@dataclass -class TimingInfoCollectedMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "TimingInfoCollected" = betterproto.message_field(2) - - -@dataclass -class LogDebugStackTrace(betterproto.Message): - """Z011""" - - exc_info: str = betterproto.string_field(1) - - -@dataclass -class LogDebugStackTraceMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogDebugStackTrace" = betterproto.message_field(2) - - -@dataclass -class CheckCleanPath(betterproto.Message): - """Z012""" - - path: str = betterproto.string_field(1) - - -@dataclass -class CheckCleanPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CheckCleanPath" = betterproto.message_field(2) - - -@dataclass -class ConfirmCleanPath(betterproto.Message): - """Z013""" - - path: str = betterproto.string_field(1) - - -@dataclass -class ConfirmCleanPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ConfirmCleanPath" = betterproto.message_field(2) - - -@dataclass -class ProtectedCleanPath(betterproto.Message): - """Z014""" - - path: str = betterproto.string_field(1) - - -@dataclass -class ProtectedCleanPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ProtectedCleanPath" = betterproto.message_field(2) - - -@dataclass -class FinishedCleanPaths(betterproto.Message): - """Z015""" - - pass - - -@dataclass -class FinishedCleanPathsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FinishedCleanPaths" = betterproto.message_field(2) - - -@dataclass -class OpenCommand(betterproto.Message): - """Z016""" - - open_cmd: str = betterproto.string_field(1) - profiles_dir: str = betterproto.string_field(2) - - -@dataclass -class OpenCommandMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "OpenCommand" = betterproto.message_field(2) - - -@dataclass -class Formatting(betterproto.Message): - """Z017""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class FormattingMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "Formatting" = betterproto.message_field(2) - - -@dataclass -class ServingDocsPort(betterproto.Message): - """Z018""" - - address: str = betterproto.string_field(1) - port: int = betterproto.int32_field(2) - - -@dataclass -class ServingDocsPortMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ServingDocsPort" = betterproto.message_field(2) - - -@dataclass -class ServingDocsAccessInfo(betterproto.Message): - """Z019""" - - port: str = betterproto.string_field(1) - - -@dataclass -class ServingDocsAccessInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ServingDocsAccessInfo" = betterproto.message_field(2) - - -@dataclass -class ServingDocsExitInfo(betterproto.Message): - """Z020""" - - pass - - -@dataclass -class ServingDocsExitInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ServingDocsExitInfo" = betterproto.message_field(2) - - -@dataclass -class RunResultWarning(betterproto.Message): - """Z021""" - - resource_type: str = betterproto.string_field(1) - node_name: str = betterproto.string_field(2) - path: str = betterproto.string_field(3) - - -@dataclass -class RunResultWarningMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunResultWarning" = betterproto.message_field(2) - - -@dataclass -class RunResultFailure(betterproto.Message): - """Z022""" - - resource_type: str = betterproto.string_field(1) - node_name: str = betterproto.string_field(2) - path: str = betterproto.string_field(3) - - -@dataclass -class RunResultFailureMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunResultFailure" = betterproto.message_field(2) - - -@dataclass -class StatsLine(betterproto.Message): - """Z023""" - - stats: Dict[str, int] = betterproto.map_field( - 1, betterproto.TYPE_STRING, betterproto.TYPE_INT32 - ) - - -@dataclass -class StatsLineMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "StatsLine" = betterproto.message_field(2) - - -@dataclass -class RunResultError(betterproto.Message): - """Z024""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class RunResultErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunResultError" = betterproto.message_field(2) - - -@dataclass -class RunResultErrorNoMessage(betterproto.Message): - """Z025""" - - status: str = betterproto.string_field(1) - - -@dataclass -class RunResultErrorNoMessageMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunResultErrorNoMessage" = betterproto.message_field(2) - - -@dataclass -class SQLCompiledPath(betterproto.Message): - """Z026""" - - path: str = betterproto.string_field(1) - - -@dataclass -class SQLCompiledPathMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SQLCompiledPath" = betterproto.message_field(2) - - -@dataclass -class CheckNodeTestFailure(betterproto.Message): - """Z027""" - - relation_name: str = betterproto.string_field(1) - - -@dataclass -class CheckNodeTestFailureMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "CheckNodeTestFailure" = betterproto.message_field(2) - - -@dataclass -class FirstRunResultError(betterproto.Message): - """Z028""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class FirstRunResultErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FirstRunResultError" = betterproto.message_field(2) - - -@dataclass -class AfterFirstRunResultError(betterproto.Message): - """Z029""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class AfterFirstRunResultErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "AfterFirstRunResultError" = betterproto.message_field(2) - - -@dataclass -class EndOfRunSummary(betterproto.Message): - """Z030""" - - num_errors: int = betterproto.int32_field(1) - num_warnings: int = betterproto.int32_field(2) - keyboard_interrupt: bool = betterproto.bool_field(3) - - -@dataclass -class EndOfRunSummaryMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "EndOfRunSummary" = betterproto.message_field(2) - - -@dataclass -class LogSkipBecauseError(betterproto.Message): - """Z034""" - - schema: str = betterproto.string_field(1) - relation: str = betterproto.string_field(2) - index: int = betterproto.int32_field(3) - total: int = betterproto.int32_field(4) - - -@dataclass -class LogSkipBecauseErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "LogSkipBecauseError" = betterproto.message_field(2) - - -@dataclass -class EnsureGitInstalled(betterproto.Message): - """Z036""" - - pass - - -@dataclass -class EnsureGitInstalledMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "EnsureGitInstalled" = betterproto.message_field(2) - - -@dataclass -class DepsCreatingLocalSymlink(betterproto.Message): - """Z037""" - - pass - - -@dataclass -class DepsCreatingLocalSymlinkMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsCreatingLocalSymlink" = betterproto.message_field(2) - - -@dataclass -class DepsSymlinkNotAvailable(betterproto.Message): - """Z038""" - - pass - - -@dataclass -class DepsSymlinkNotAvailableMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DepsSymlinkNotAvailable" = betterproto.message_field(2) - - -@dataclass -class DisableTracking(betterproto.Message): - """Z039""" - - pass - - -@dataclass -class DisableTrackingMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DisableTracking" = betterproto.message_field(2) - - -@dataclass -class SendingEvent(betterproto.Message): - """Z040""" - - kwargs: str = betterproto.string_field(1) - - -@dataclass -class SendingEventMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SendingEvent" = betterproto.message_field(2) - - -@dataclass -class SendEventFailure(betterproto.Message): - """Z041""" - - pass - - -@dataclass -class SendEventFailureMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "SendEventFailure" = betterproto.message_field(2) - - -@dataclass -class FlushEvents(betterproto.Message): - """Z042""" - - pass - - -@dataclass -class FlushEventsMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FlushEvents" = betterproto.message_field(2) - - -@dataclass -class FlushEventsFailure(betterproto.Message): - """Z043""" - - pass - - -@dataclass -class FlushEventsFailureMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "FlushEventsFailure" = betterproto.message_field(2) - - -@dataclass -class TrackingInitializeFailure(betterproto.Message): - """Z044""" - - exc_info: str = betterproto.string_field(1) - - -@dataclass -class TrackingInitializeFailureMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "TrackingInitializeFailure" = betterproto.message_field(2) - - -@dataclass -class RunResultWarningMessage(betterproto.Message): - """Z046""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class RunResultWarningMessageMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "RunResultWarningMessage" = betterproto.message_field(2) - - -@dataclass -class DebugCmdOut(betterproto.Message): - """Z047""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class DebugCmdOutMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DebugCmdOut" = betterproto.message_field(2) - - -@dataclass -class DebugCmdResult(betterproto.Message): - """Z048""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class DebugCmdResultMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "DebugCmdResult" = betterproto.message_field(2) - - -@dataclass -class ListCmdOut(betterproto.Message): - """Z049""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class ListCmdOutMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "ListCmdOut" = betterproto.message_field(2) - - -@dataclass -class Note(betterproto.Message): - """Z050""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class NoteMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "Note" = betterproto.message_field(2) - - -@dataclass -class IntegrationTestInfo(betterproto.Message): - """T001""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class IntegrationTestInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "IntegrationTestInfo" = betterproto.message_field(2) - - -@dataclass -class IntegrationTestDebug(betterproto.Message): - """T002""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class IntegrationTestDebugMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "IntegrationTestDebug" = betterproto.message_field(2) - - -@dataclass -class IntegrationTestWarn(betterproto.Message): - """T003""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class IntegrationTestWarnMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "IntegrationTestWarn" = betterproto.message_field(2) - - -@dataclass -class IntegrationTestError(betterproto.Message): - """T004""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class IntegrationTestErrorMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "IntegrationTestError" = betterproto.message_field(2) - - -@dataclass -class IntegrationTestException(betterproto.Message): - """T005""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class IntegrationTestExceptionMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "IntegrationTestException" = betterproto.message_field(2) - - -@dataclass -class UnitTestInfo(betterproto.Message): - """T006""" - - msg: str = betterproto.string_field(1) - - -@dataclass -class UnitTestInfoMsg(betterproto.Message): - info: "EventInfo" = betterproto.message_field(1) - data: "UnitTestInfo" = betterproto.message_field(2) diff --git a/core/dbt/events/test_types.py b/core/dbt/events/test_types.py deleted file mode 100644 index cf7307125ca..00000000000 --- a/core/dbt/events/test_types.py +++ /dev/null @@ -1,63 +0,0 @@ -from dataclasses import dataclass -from dbt.events.types import InfoLevel, DebugLevel, WarnLevel, ErrorLevel -from dbt.events.base_types import NoFile -from dbt.events import proto_types as pl -from dbt.events.proto_types import EventInfo # noqa - - -# Keeping log messages for testing separate since they are used for debugging. -# Reuse the existing messages when adding logs to tests. - - -@dataclass -class IntegrationTestInfo(InfoLevel, NoFile, pl.IntegrationTestInfo): - def code(self): - return "T001" - - def message(self) -> str: - return f"Integration Test: {self.msg}" - - -@dataclass -class IntegrationTestDebug(DebugLevel, NoFile, pl.IntegrationTestDebug): - def code(self): - return "T002" - - def message(self) -> str: - return f"Integration Test: {self.msg}" - - -@dataclass -class IntegrationTestWarn(WarnLevel, NoFile, pl.IntegrationTestWarn): - def code(self): - return "T003" - - def message(self) -> str: - return f"Integration Test: {self.msg}" - - -@dataclass -class IntegrationTestError(ErrorLevel, NoFile, pl.IntegrationTestError): - def code(self): - return "T004" - - def message(self) -> str: - return f"Integration Test: {self.msg}" - - -@dataclass -class IntegrationTestException(ErrorLevel, NoFile, pl.IntegrationTestException): - def code(self): - return "T005" - - def message(self) -> str: - return f"Integration Test: {self.msg}" - - -@dataclass -class UnitTestInfo(InfoLevel, NoFile, pl.UnitTestInfo): - def code(self): - return "T006" - - def message(self) -> str: - return f"Unit Test: {self.msg}" diff --git a/core/dbt/events/types.proto b/core/dbt/events/types.proto index 41dc8432af5..3586a4a7cee 100644 --- a/core/dbt/events/types.proto +++ b/core/dbt/events/types.proto @@ -3,6 +3,7 @@ syntax = "proto3"; package proto_types; import "google/protobuf/timestamp.proto"; +import "google/protobuf/struct.proto"; // Common event info message EventInfo { @@ -35,7 +36,7 @@ message NodeInfo { string node_status = 6; string node_started_at = 7; string node_finished_at = 8; - map meta = 9; + google.protobuf.Struct meta = 9; } // RunResult @@ -45,7 +46,7 @@ message RunResultMsg { repeated TimingInfoMsg timing_info = 3; string thread = 4; float execution_time = 5; - map adapter_response = 6; + google.protobuf.Struct adapter_response = 6; int32 num_failures = 7; } @@ -387,7 +388,7 @@ message AdapterEventDebug { NodeInfo node_info = 1; string name = 2; string base_msg = 3; - repeated string args = 4; + google.protobuf.ListValue args = 4; } message AdapterEventDebugMsg { @@ -400,7 +401,7 @@ message AdapterEventInfo { NodeInfo node_info = 1; string name = 2; string base_msg = 3; - repeated string args = 4; + google.protobuf.ListValue args = 4; } message AdapterEventInfoMsg { @@ -413,7 +414,7 @@ message AdapterEventWarning { NodeInfo node_info = 1; string name = 2; string base_msg = 3; - repeated string args = 4; + google.protobuf.ListValue args = 4; } message AdapterEventWarningMsg { @@ -426,7 +427,7 @@ message AdapterEventError { NodeInfo node_info = 1; string name = 2; string base_msg = 3; - repeated string args = 4; + google.protobuf.ListValue args = 4; string exc_info = 5; } @@ -465,7 +466,7 @@ message ConnectionLeftOpenInCleanup { message ConnectionLeftOpenInCleanupMsg { EventInfo info = 1; - ConnectionLeftOpen data = 2; + ConnectionLeftOpenInCleanup data = 2; } // E008 @@ -644,7 +645,7 @@ message CacheActionMsg { // E031 message CacheDumpGraph { - map dump = 1; + map dump = 1; string before_after = 2; string action = 3; } @@ -1898,7 +1899,7 @@ message SystemExecutingCmdMsg { // Z007 message SystemStdOut{ - bytes bmsg = 1; + string bmsg = 1; } message SystemStdOutMsg { @@ -1908,7 +1909,7 @@ message SystemStdOutMsg { // Z008 message SystemStdErr { - bytes bmsg = 1; + string bmsg = 1; } message SystemStdErrMsg { @@ -2292,65 +2293,3 @@ message NoteMsg { EventInfo info = 1; Note data = 2; } - -// T - Integration tests - -// T001 -message IntegrationTestInfo { - string msg = 1; -} - -message IntegrationTestInfoMsg { - EventInfo info = 1; - IntegrationTestInfo data = 2; -} - -// T002 -message IntegrationTestDebug { - string msg = 1; -} - -message IntegrationTestDebugMsg { - EventInfo info = 1; - IntegrationTestDebug data = 2; -} - -// T003 -message IntegrationTestWarn { - string msg = 1; -} - -message IntegrationTestWarnMsg { - EventInfo info = 1; - IntegrationTestWarn data = 2; -} - -// T004 -message IntegrationTestError { - string msg = 1; -} - -message IntegrationTestErrorMsg { - EventInfo info = 1; - IntegrationTestError data = 2; -} - -// T005 -message IntegrationTestException { - string msg = 1; -} - -message IntegrationTestExceptionMsg { - EventInfo info = 1; - IntegrationTestException data = 2; -} - -// T006 -message UnitTestInfo { - string msg = 1; -} - -message UnitTestInfoMsg { - EventInfo info = 1; - UnitTestInfo data = 2; -} diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index dd56136b8b4..992b0880dc2 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -1,25 +1,15 @@ -from dataclasses import dataclass from dbt.ui import line_wrap_message, warning_tag, red, green, yellow from dbt.constants import MAXIMUM_SEED_SIZE_NAME, PIN_PACKAGE_URL from dbt.events.base_types import ( DynamicLevel, - NoFile, DebugLevel, InfoLevel, WarnLevel, ErrorLevel, - Cache, - AdapterEventStringFunctor, - EventStringFunctor, EventLevel, ) from dbt.events.format import format_fancy_output_line, pluralize -# The generated classes quote the included message classes, requiring the following lines -from dbt.events.proto_types import EventInfo, RunResultMsg, ListOfStrings # noqa -from dbt.events.proto_types import NodeInfo, ReferenceKeyMsg, TimingInfoMsg # noqa -from dbt.events import proto_types as pt - from dbt.node_types import NodeType @@ -59,8 +49,7 @@ def format_adapter_message(name, base_msg, args) -> str: # ======================================================= -@dataclass -class MainReportVersion(InfoLevel, pt.MainReportVersion): # noqa +class MainReportVersion(InfoLevel): def code(self): return "A001" @@ -68,8 +57,7 @@ def message(self): return f"Running with dbt{self.version}" -@dataclass -class MainReportArgs(DebugLevel, pt.MainReportArgs): # noqa +class MainReportArgs(DebugLevel): def code(self): return "A002" @@ -77,8 +65,7 @@ def message(self): return f"running dbt with arguments {str(self.args)}" -@dataclass -class MainTrackingUserState(DebugLevel, pt.MainTrackingUserState): +class MainTrackingUserState(DebugLevel): def code(self): return "A003" @@ -86,8 +73,7 @@ def message(self): return f"Tracking: {self.user_state}" -@dataclass -class MergedFromState(DebugLevel, pt.MergedFromState): +class MergedFromState(DebugLevel): def code(self): return "A004" @@ -95,8 +81,7 @@ def message(self) -> str: return f"Merged {self.num_merged} items from state (sample: {self.sample})" -@dataclass -class MissingProfileTarget(InfoLevel, pt.MissingProfileTarget): +class MissingProfileTarget(InfoLevel): def code(self): return "A005" @@ -107,8 +92,7 @@ def message(self) -> str: # Skipped A006, A007 -@dataclass -class InvalidOptionYAML(ErrorLevel, pt.InvalidOptionYAML): +class InvalidOptionYAML(ErrorLevel): def code(self): return "A008" @@ -116,8 +100,7 @@ def message(self) -> str: return f"The YAML provided in the --{self.option_name} argument is not valid." -@dataclass -class LogDbtProjectError(ErrorLevel, pt.LogDbtProjectError): +class LogDbtProjectError(ErrorLevel): def code(self): return "A009" @@ -131,8 +114,7 @@ def message(self) -> str: # Skipped A010 -@dataclass -class LogDbtProfileError(ErrorLevel, pt.LogDbtProfileError): +class LogDbtProfileError(ErrorLevel): def code(self): return "A011" @@ -153,8 +135,7 @@ def message(self) -> str: return msg -@dataclass -class StarterProjectPath(DebugLevel, pt.StarterProjectPath): +class StarterProjectPath(DebugLevel): def code(self): return "A017" @@ -162,8 +143,7 @@ def message(self) -> str: return f"Starter project path: {self.dir}" -@dataclass -class ConfigFolderDirectory(InfoLevel, pt.ConfigFolderDirectory): +class ConfigFolderDirectory(InfoLevel): def code(self): return "A018" @@ -171,8 +151,7 @@ def message(self) -> str: return f"Creating dbt configuration folder at {self.dir}" -@dataclass -class NoSampleProfileFound(InfoLevel, pt.NoSampleProfileFound): +class NoSampleProfileFound(InfoLevel): def code(self): return "A019" @@ -180,8 +159,7 @@ def message(self) -> str: return f"No sample profile found for {self.adapter}." -@dataclass -class ProfileWrittenWithSample(InfoLevel, pt.ProfileWrittenWithSample): +class ProfileWrittenWithSample(InfoLevel): def code(self): return "A020" @@ -193,8 +171,7 @@ def message(self) -> str: ) -@dataclass -class ProfileWrittenWithTargetTemplateYAML(InfoLevel, pt.ProfileWrittenWithTargetTemplateYAML): +class ProfileWrittenWithTargetTemplateYAML(InfoLevel): def code(self): return "A021" @@ -206,8 +183,7 @@ def message(self) -> str: ) -@dataclass -class ProfileWrittenWithProjectTemplateYAML(InfoLevel, pt.ProfileWrittenWithProjectTemplateYAML): +class ProfileWrittenWithProjectTemplateYAML(InfoLevel): def code(self): return "A022" @@ -219,8 +195,7 @@ def message(self) -> str: ) -@dataclass -class SettingUpProfile(InfoLevel, pt.SettingUpProfile): +class SettingUpProfile(InfoLevel): def code(self): return "A023" @@ -228,8 +203,7 @@ def message(self) -> str: return "Setting up your profile." -@dataclass -class InvalidProfileTemplateYAML(InfoLevel, pt.InvalidProfileTemplateYAML): +class InvalidProfileTemplateYAML(InfoLevel): def code(self): return "A024" @@ -237,8 +211,7 @@ def message(self) -> str: return "Invalid profile_template.yml in project." -@dataclass -class ProjectNameAlreadyExists(InfoLevel, pt.ProjectNameAlreadyExists): +class ProjectNameAlreadyExists(InfoLevel): def code(self): return "A025" @@ -246,8 +219,7 @@ def message(self) -> str: return f"A project called {self.name} already exists here." -@dataclass -class ProjectCreated(InfoLevel, pt.ProjectCreated): +class ProjectCreated(InfoLevel): def code(self): return "A026" @@ -275,8 +247,7 @@ def message(self) -> str: # ======================================================= -@dataclass -class PackageRedirectDeprecation(WarnLevel, pt.PackageRedirectDeprecation): # noqa +class PackageRedirectDeprecation(WarnLevel): def code(self): return "D001" @@ -288,8 +259,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class PackageInstallPathDeprecation(WarnLevel, pt.PackageInstallPathDeprecation): # noqa +class PackageInstallPathDeprecation(WarnLevel): def code(self): return "D002" @@ -302,8 +272,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class ConfigSourcePathDeprecation(WarnLevel, pt.ConfigSourcePathDeprecation): # noqa +class ConfigSourcePathDeprecation(WarnLevel): def code(self): return "D003" @@ -315,8 +284,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class ConfigDataPathDeprecation(WarnLevel, pt.ConfigDataPathDeprecation): # noqa +class ConfigDataPathDeprecation(WarnLevel): def code(self): return "D004" @@ -328,8 +296,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class AdapterDeprecationWarning(WarnLevel, pt.AdapterDeprecationWarning): # noqa +class AdapterDeprecationWarning(WarnLevel): def code(self): return "D005" @@ -343,8 +310,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class MetricAttributesRenamed(WarnLevel, pt.MetricAttributesRenamed): # noqa +class MetricAttributesRenamed(WarnLevel): def code(self): return "D006" @@ -361,8 +327,7 @@ def message(self): return warning_tag(f"Deprecated functionality\n\n{description}") -@dataclass -class ExposureNameDeprecation(WarnLevel, pt.ExposureNameDeprecation): # noqa +class ExposureNameDeprecation(WarnLevel): def code(self): return "D007" @@ -377,8 +342,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class InternalDeprecation(WarnLevel, pt.InternalDeprecation): +class InternalDeprecation(WarnLevel): def code(self): return "D008" @@ -393,8 +357,7 @@ def message(self): return warning_tag(msg) -@dataclass -class EnvironmentVariableRenamed(WarnLevel, pt.EnvironmentVariableRenamed): # noqa +class EnvironmentVariableRenamed(WarnLevel): def code(self): return "D009" @@ -408,8 +371,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class ConfigLogPathDeprecation(WarnLevel, pt.ConfigSourcePathDeprecation): # noqa +class ConfigLogPathDeprecation(WarnLevel): def code(self): return "D010" @@ -426,8 +388,7 @@ def message(self): return line_wrap_message(warning_tag(f"Deprecated functionality\n\n{description}")) -@dataclass -class ConfigTargetPathDeprecation(WarnLevel, pt.ConfigSourcePathDeprecation): # noqa +class ConfigTargetPathDeprecation(WarnLevel): def code(self): return "D011" @@ -449,8 +410,7 @@ def message(self): # ======================================================= -@dataclass -class AdapterEventDebug(DebugLevel, AdapterEventStringFunctor, pt.AdapterEventDebug): # noqa +class AdapterEventDebug(DebugLevel): def code(self): return "E001" @@ -458,8 +418,7 @@ def message(self): return format_adapter_message(self.name, self.base_msg, self.args) -@dataclass -class AdapterEventInfo(InfoLevel, AdapterEventStringFunctor, pt.AdapterEventInfo): # noqa +class AdapterEventInfo(InfoLevel): def code(self): return "E002" @@ -467,8 +426,7 @@ def message(self): return format_adapter_message(self.name, self.base_msg, self.args) -@dataclass -class AdapterEventWarning(WarnLevel, AdapterEventStringFunctor, pt.AdapterEventWarning): # noqa +class AdapterEventWarning(WarnLevel): def code(self): return "E003" @@ -476,8 +434,7 @@ def message(self): return format_adapter_message(self.name, self.base_msg, self.args) -@dataclass -class AdapterEventError(ErrorLevel, AdapterEventStringFunctor, pt.AdapterEventError): # noqa +class AdapterEventError(ErrorLevel): def code(self): return "E004" @@ -485,8 +442,7 @@ def message(self): return format_adapter_message(self.name, self.base_msg, self.args) -@dataclass -class NewConnection(DebugLevel, pt.NewConnection): +class NewConnection(DebugLevel): def code(self): return "E005" @@ -494,8 +450,7 @@ def message(self) -> str: return f"Acquiring new {self.conn_type} connection '{self.conn_name}'" -@dataclass -class ConnectionReused(DebugLevel, pt.ConnectionReused): +class ConnectionReused(DebugLevel): def code(self): return "E006" @@ -503,8 +458,7 @@ def message(self) -> str: return f"Re-using an available connection from the pool (formerly {self.orig_conn_name}, now {self.conn_name})" -@dataclass -class ConnectionLeftOpenInCleanup(DebugLevel, pt.ConnectionLeftOpenInCleanup): +class ConnectionLeftOpenInCleanup(DebugLevel): def code(self): return "E007" @@ -512,8 +466,7 @@ def message(self) -> str: return f"Connection '{self.conn_name}' was left open." -@dataclass -class ConnectionClosedInCleanup(DebugLevel, pt.ConnectionClosedInCleanup): +class ConnectionClosedInCleanup(DebugLevel): def code(self): return "E008" @@ -521,8 +474,7 @@ def message(self) -> str: return f"Connection '{self.conn_name}' was properly closed." -@dataclass -class RollbackFailed(DebugLevel, pt.RollbackFailed): # noqa +class RollbackFailed(DebugLevel): def code(self): return "E009" @@ -530,9 +482,7 @@ def message(self) -> str: return f"Failed to rollback '{self.conn_name}'" -# TODO: can we combine this with ConnectionClosed? -@dataclass -class ConnectionClosed(DebugLevel, pt.ConnectionClosed): +class ConnectionClosed(DebugLevel): def code(self): return "E010" @@ -540,9 +490,7 @@ def message(self) -> str: return f"On {self.conn_name}: Close" -# TODO: can we combine this with ConnectionLeftOpen? -@dataclass -class ConnectionLeftOpen(DebugLevel, pt.ConnectionLeftOpen): +class ConnectionLeftOpen(DebugLevel): def code(self): return "E011" @@ -550,8 +498,7 @@ def message(self) -> str: return f"On {self.conn_name}: No close available on handle" -@dataclass -class Rollback(DebugLevel, pt.Rollback): +class Rollback(DebugLevel): def code(self): return "E012" @@ -559,8 +506,7 @@ def message(self) -> str: return f"On {self.conn_name}: ROLLBACK" -@dataclass -class CacheMiss(DebugLevel, pt.CacheMiss): +class CacheMiss(DebugLevel): def code(self): return "E013" @@ -571,8 +517,7 @@ def message(self) -> str: ) -@dataclass -class ListRelations(DebugLevel, pt.ListRelations): +class ListRelations(DebugLevel): def code(self): return "E014" @@ -580,8 +525,7 @@ def message(self) -> str: return f"with database={self.database}, schema={self.schema}, relations={self.relations}" -@dataclass -class ConnectionUsed(DebugLevel, pt.ConnectionUsed): +class ConnectionUsed(DebugLevel): def code(self): return "E015" @@ -589,8 +533,7 @@ def message(self) -> str: return f'Using {self.conn_type} connection "{self.conn_name}"' -@dataclass -class SQLQuery(DebugLevel, pt.SQLQuery): +class SQLQuery(DebugLevel): def code(self): return "E016" @@ -598,8 +541,7 @@ def message(self) -> str: return f"On {self.conn_name}: {self.sql}" -@dataclass -class SQLQueryStatus(DebugLevel, pt.SQLQueryStatus): +class SQLQueryStatus(DebugLevel): def code(self): return "E017" @@ -607,8 +549,7 @@ def message(self) -> str: return f"SQL status: {self.status} in {self.elapsed} seconds" -@dataclass -class SQLCommit(DebugLevel, pt.SQLCommit): +class SQLCommit(DebugLevel): def code(self): return "E018" @@ -616,8 +557,7 @@ def message(self) -> str: return f"On {self.conn_name}: COMMIT" -@dataclass -class ColTypeChange(DebugLevel, pt.ColTypeChange): +class ColTypeChange(DebugLevel): def code(self): return "E019" @@ -625,8 +565,7 @@ def message(self) -> str: return f"Changing col type from {self.orig_type} to {self.new_type} in table {self.table}" -@dataclass -class SchemaCreation(DebugLevel, pt.SchemaCreation): +class SchemaCreation(DebugLevel): def code(self): return "E020" @@ -634,8 +573,7 @@ def message(self) -> str: return f'Creating schema "{self.relation}"' -@dataclass -class SchemaDrop(DebugLevel, pt.SchemaDrop): +class SchemaDrop(DebugLevel): def code(self): return "E021" @@ -643,58 +581,64 @@ def message(self) -> str: return f'Dropping schema "{self.relation}".' -@dataclass -class CacheAction(DebugLevel, Cache, pt.CacheAction): +class CacheAction(DebugLevel): def code(self): return "E022" + def format_ref_key(self, ref_key): + return f"(database={ref_key.database}, schema={ref_key.schema}, identifier={ref_key.identifier})" + def message(self): + ref_key = self.format_ref_key(self.ref_key) + ref_key_2 = self.format_ref_key(self.ref_key_2) + ref_key_3 = self.format_ref_key(self.ref_key_3) + ref_list = [] + for rfk in self.ref_list: + ref_list.append(self.format_ref_key(rfk)) if self.action == "add_link": - return f"adding link, {self.ref_key} references {self.ref_key_2}" + return f"adding link, {ref_key} references {ref_key_2}" elif self.action == "add_relation": - return f"adding relation: {str(self.ref_key)}" + return f"adding relation: {ref_key}" elif self.action == "drop_missing_relation": - return f"dropped a nonexistent relationship: {str(self.ref_key)}" + return f"dropped a nonexistent relationship: {ref_key}" elif self.action == "drop_cascade": - return f"drop {self.ref_key} is cascading to {self.ref_list}" + return f"drop {ref_key} is cascading to {ref_list}" elif self.action == "drop_relation": - return f"Dropping relation: {self.ref_key}" + return f"Dropping relation: {ref_key}" elif self.action == "update_reference": return ( - f"updated reference from {self.ref_key} -> {self.ref_key_3} to " - f"{self.ref_key_2} -> {self.ref_key_3}" + f"updated reference from {ref_key} -> {ref_key_3} to " + f"{ref_key_2} -> {ref_key_3}" ) elif self.action == "temporary_relation": - return f"old key {self.ref_key} not found in self.relations, assuming temporary" + return f"old key {ref_key} not found in self.relations, assuming temporary" elif self.action == "rename_relation": - return f"Renaming relation {self.ref_key} to {self.ref_key_2}" + return f"Renaming relation {ref_key} to {ref_key_2}" elif self.action == "uncached_relation": return ( - f"{self.ref_key_2} references {str(self.ref_key)} " + f"{ref_key_2} references {ref_key} " f"but {self.ref_key.database}.{self.ref_key.schema}" "is not in the cache, skipping assumed external relation" ) else: - return f"{self.ref_key}" + return ref_key # Skipping E023, E024, E025, E026, E027, E028, E029, E030 -@dataclass -class CacheDumpGraph(DebugLevel, Cache, pt.CacheDumpGraph): +class CacheDumpGraph(DebugLevel): def code(self): return "E031" def message(self) -> str: - return f"{self.before_after} {self.action} : {self.dump}" + return f"dump {self.before_after} {self.action} : {self.dump}" # Skipping E032, E033, E034 -@dataclass -class AdapterImportError(InfoLevel, pt.AdapterImportError): +class AdapterImportError(InfoLevel): def code(self): return "E035" @@ -702,8 +646,7 @@ def message(self) -> str: return f"Error importing adapter: {self.exc}" -@dataclass -class PluginLoadError(DebugLevel, pt.PluginLoadError): # noqa +class PluginLoadError(DebugLevel): def code(self): return "E036" @@ -711,8 +654,7 @@ def message(self): return f"{self.exc_info}" -@dataclass -class NewConnectionOpening(DebugLevel, pt.NewConnectionOpening): +class NewConnectionOpening(DebugLevel): def code(self): return "E037" @@ -720,8 +662,7 @@ def message(self) -> str: return f"Opening a new connection, currently in state {self.connection_state}" -@dataclass -class CodeExecution(DebugLevel, pt.CodeExecution): +class CodeExecution(DebugLevel): def code(self): return "E038" @@ -729,8 +670,7 @@ def message(self) -> str: return f"On {self.conn_name}: {self.code_content}" -@dataclass -class CodeExecutionStatus(DebugLevel, pt.CodeExecutionStatus): +class CodeExecutionStatus(DebugLevel): def code(self): return "E039" @@ -738,8 +678,7 @@ def message(self) -> str: return f"Execution status: {self.status} in {self.elapsed} seconds" -@dataclass -class CatalogGenerationError(WarnLevel, pt.CatalogGenerationError): +class CatalogGenerationError(WarnLevel): def code(self): return "E040" @@ -747,8 +686,7 @@ def message(self) -> str: return f"Encountered an error while generating catalog: {self.exc}" -@dataclass -class WriteCatalogFailure(ErrorLevel, pt.WriteCatalogFailure): +class WriteCatalogFailure(ErrorLevel): def code(self): return "E041" @@ -759,8 +697,7 @@ def message(self) -> str: ) -@dataclass -class CatalogWritten(InfoLevel, pt.CatalogWritten): +class CatalogWritten(InfoLevel): def code(self): return "E042" @@ -768,8 +705,7 @@ def message(self) -> str: return f"Catalog written to {self.path}" -@dataclass -class CannotGenerateDocs(InfoLevel, pt.CannotGenerateDocs): +class CannotGenerateDocs(InfoLevel): def code(self): return "E043" @@ -777,8 +713,7 @@ def message(self) -> str: return "compile failed, cannot generate docs" -@dataclass -class BuildingCatalog(InfoLevel, pt.BuildingCatalog): +class BuildingCatalog(InfoLevel): def code(self): return "E044" @@ -786,8 +721,7 @@ def message(self) -> str: return "Building catalog" -@dataclass -class DatabaseErrorRunningHook(InfoLevel, pt.DatabaseErrorRunningHook): +class DatabaseErrorRunningHook(InfoLevel): def code(self): return "E045" @@ -795,8 +729,7 @@ def message(self) -> str: return f"Database error while running {self.hook_type}" -@dataclass -class HooksRunning(InfoLevel, pt.HooksRunning): +class HooksRunning(InfoLevel): def code(self): return "E046" @@ -805,8 +738,7 @@ def message(self) -> str: return f"Running {self.num_hooks} {self.hook_type} {plural}" -@dataclass -class FinishedRunningStats(InfoLevel, pt.FinishedRunningStats): +class FinishedRunningStats(InfoLevel): def code(self): return "E047" @@ -819,8 +751,7 @@ def message(self) -> str: # ======================================================= -@dataclass -class InputFileDiffError(DebugLevel, pt.InputFileDiffError): +class InputFileDiffError(DebugLevel): def code(self): return "I001" @@ -831,8 +762,7 @@ def message(self) -> str: # Skipping I002, I003, I004, I005, I006, I007 -@dataclass -class InvalidValueForField(WarnLevel, pt.InvalidValueForField): +class InvalidValueForField(WarnLevel): def code(self): return "I008" @@ -840,8 +770,7 @@ def message(self) -> str: return f"Invalid value ({self.field_value}) for field {self.field_name}" -@dataclass -class ValidationWarning(WarnLevel, pt.ValidationWarning): +class ValidationWarning(WarnLevel): def code(self): return "I009" @@ -849,8 +778,7 @@ def message(self) -> str: return f"Field {self.field_name} is not valid for {self.resource_type} ({self.node_name})" -@dataclass -class ParsePerfInfoPath(InfoLevel, pt.ParsePerfInfoPath): +class ParsePerfInfoPath(InfoLevel): def code(self): return "I010" @@ -858,8 +786,7 @@ def message(self) -> str: return f"Performance info: {self.path}" -@dataclass -class GenericTestFileParse(DebugLevel, pt.GenericTestFileParse): +class GenericTestFileParse(DebugLevel): def code(self): return "I011" @@ -867,8 +794,7 @@ def message(self) -> str: return f"Parsing {self.path}" -@dataclass -class MacroFileParse(DebugLevel, pt.MacroFileParse): +class MacroFileParse(DebugLevel): def code(self): return "I012" @@ -879,8 +805,7 @@ def message(self) -> str: # Skipping I013 -@dataclass -class PartialParsingErrorProcessingFile(DebugLevel, pt.PartialParsingErrorProcessingFile): +class PartialParsingErrorProcessingFile(DebugLevel): def code(self): return "I014" @@ -891,8 +816,7 @@ def message(self) -> str: # Skipped I015 -@dataclass -class PartialParsingError(DebugLevel, pt.PartialParsingError): +class PartialParsingError(DebugLevel): def code(self): return "I016" @@ -900,8 +824,7 @@ def message(self) -> str: return f"PP exception info: {self.exc_info}" -@dataclass -class PartialParsingSkipParsing(DebugLevel, pt.PartialParsingSkipParsing): +class PartialParsingSkipParsing(DebugLevel): def code(self): return "I017" @@ -912,8 +835,7 @@ def message(self) -> str: # Skipped I018, I019, I020, I021, I022, I023 -@dataclass -class UnableToPartialParse(InfoLevel, pt.UnableToPartialParse): +class UnableToPartialParse(InfoLevel): def code(self): return "I024" @@ -921,8 +843,7 @@ def message(self) -> str: return f"Unable to do partial parsing because {self.reason}" -@dataclass -class StateCheckVarsHash(DebugLevel, pt.StateCheckVarsHash): +class StateCheckVarsHash(DebugLevel): def code(self): return "I025" @@ -933,8 +854,7 @@ def message(self) -> str: # Skipped I025, I026, I026, I027 -@dataclass -class PartialParsingNotEnabled(DebugLevel, pt.PartialParsingNotEnabled): +class PartialParsingNotEnabled(DebugLevel): def code(self): return "I028" @@ -942,8 +862,7 @@ def message(self) -> str: return "Partial parsing not enabled" -@dataclass -class ParsedFileLoadFailed(DebugLevel, pt.ParsedFileLoadFailed): # noqa +class ParsedFileLoadFailed(DebugLevel): def code(self): return "I029" @@ -954,8 +873,7 @@ def message(self) -> str: # Skipped I030-I039 -@dataclass -class PartialParsingEnabled(DebugLevel, pt.PartialParsingEnabled): +class PartialParsingEnabled(DebugLevel): def code(self): return "I040" @@ -968,8 +886,7 @@ def message(self) -> str: ) -@dataclass -class PartialParsingFile(DebugLevel, pt.PartialParsingFile): +class PartialParsingFile(DebugLevel): def code(self): return "I041" @@ -980,8 +897,7 @@ def message(self) -> str: # Skipped I042, I043, I044, I045, I046, I047, I048, I049 -@dataclass -class InvalidDisabledTargetInTestNode(DebugLevel, pt.InvalidDisabledTargetInTestNode): +class InvalidDisabledTargetInTestNode(DebugLevel): def code(self): return "I050" @@ -1000,8 +916,7 @@ def message(self) -> str: return warning_tag(msg) -@dataclass -class UnusedResourceConfigPath(WarnLevel, pt.UnusedResourceConfigPath): +class UnusedResourceConfigPath(WarnLevel): def code(self): return "I051" @@ -1015,8 +930,7 @@ def message(self) -> str: return warning_tag(msg) -@dataclass -class SeedIncreased(WarnLevel, pt.SeedIncreased): +class SeedIncreased(WarnLevel): def code(self): return "I052" @@ -1029,8 +943,7 @@ def message(self) -> str: return msg -@dataclass -class SeedExceedsLimitSamePath(WarnLevel, pt.SeedExceedsLimitSamePath): +class SeedExceedsLimitSamePath(WarnLevel): def code(self): return "I053" @@ -1043,8 +956,7 @@ def message(self) -> str: return msg -@dataclass -class SeedExceedsLimitAndPathChanged(WarnLevel, pt.SeedExceedsLimitAndPathChanged): +class SeedExceedsLimitAndPathChanged(WarnLevel): def code(self): return "I054" @@ -1057,8 +969,7 @@ def message(self) -> str: return msg -@dataclass -class SeedExceedsLimitChecksumChanged(WarnLevel, pt.SeedExceedsLimitChecksumChanged): +class SeedExceedsLimitChecksumChanged(WarnLevel): def code(self): return "I055" @@ -1071,8 +982,7 @@ def message(self) -> str: return msg -@dataclass -class UnusedTables(WarnLevel, pt.UnusedTables): +class UnusedTables(WarnLevel): def code(self): return "I056" @@ -1085,8 +995,7 @@ def message(self) -> str: return warning_tag("\n".join(msg)) -@dataclass -class WrongResourceSchemaFile(WarnLevel, pt.WrongResourceSchemaFile): +class WrongResourceSchemaFile(WarnLevel): def code(self): return "I057" @@ -1103,8 +1012,7 @@ def message(self) -> str: return warning_tag(msg) -@dataclass -class NoNodeForYamlKey(WarnLevel, pt.NoNodeForYamlKey): +class NoNodeForYamlKey(WarnLevel): def code(self): return "I058" @@ -1117,8 +1025,7 @@ def message(self) -> str: return warning_tag(msg) -@dataclass -class MacroNotFoundForPatch(WarnLevel, pt.MacroNotFoundForPatch): +class MacroNotFoundForPatch(WarnLevel): def code(self): return "I059" @@ -1127,8 +1034,7 @@ def message(self) -> str: return warning_tag(msg) -@dataclass -class NodeNotFoundOrDisabled(WarnLevel, pt.NodeNotFoundOrDisabled): +class NodeNotFoundOrDisabled(WarnLevel): def code(self): return "I060" @@ -1157,8 +1063,7 @@ def message(self) -> str: return warning_tag(msg) -@dataclass -class JinjaLogWarning(WarnLevel, pt.JinjaLogWarning): +class JinjaLogWarning(WarnLevel): def code(self): return "I061" @@ -1166,8 +1071,7 @@ def message(self) -> str: return self.msg -@dataclass -class JinjaLogInfo(InfoLevel, EventStringFunctor, pt.JinjaLogInfo): +class JinjaLogInfo(InfoLevel): def code(self): return "I062" @@ -1176,8 +1080,7 @@ def message(self) -> str: return self.msg -@dataclass -class JinjaLogDebug(DebugLevel, EventStringFunctor, pt.JinjaLogDebug): +class JinjaLogDebug(DebugLevel): def code(self): return "I063" @@ -1191,8 +1094,7 @@ def message(self) -> str: # ======================================================= -@dataclass -class GitSparseCheckoutSubdirectory(DebugLevel, pt.GitSparseCheckoutSubdirectory): +class GitSparseCheckoutSubdirectory(DebugLevel): def code(self): return "M001" @@ -1200,8 +1102,7 @@ def message(self) -> str: return f"Subdirectory specified: {self.subdir}, using sparse checkout." -@dataclass -class GitProgressCheckoutRevision(DebugLevel, pt.GitProgressCheckoutRevision): +class GitProgressCheckoutRevision(DebugLevel): def code(self): return "M002" @@ -1209,8 +1110,7 @@ def message(self) -> str: return f"Checking out revision {self.revision}." -@dataclass -class GitProgressUpdatingExistingDependency(DebugLevel, pt.GitProgressUpdatingExistingDependency): +class GitProgressUpdatingExistingDependency(DebugLevel): def code(self): return "M003" @@ -1218,8 +1118,7 @@ def message(self) -> str: return f"Updating existing dependency {self.dir}." -@dataclass -class GitProgressPullingNewDependency(DebugLevel, pt.GitProgressPullingNewDependency): +class GitProgressPullingNewDependency(DebugLevel): def code(self): return "M004" @@ -1227,8 +1126,7 @@ def message(self) -> str: return f"Pulling new dependency {self.dir}." -@dataclass -class GitNothingToDo(DebugLevel, pt.GitNothingToDo): +class GitNothingToDo(DebugLevel): def code(self): return "M005" @@ -1236,8 +1134,7 @@ def message(self) -> str: return f"Already at {self.sha}, nothing to do." -@dataclass -class GitProgressUpdatedCheckoutRange(DebugLevel, pt.GitProgressUpdatedCheckoutRange): +class GitProgressUpdatedCheckoutRange(DebugLevel): def code(self): return "M006" @@ -1245,8 +1142,7 @@ def message(self) -> str: return f"Updated checkout from {self.start_sha} to {self.end_sha}." -@dataclass -class GitProgressCheckedOutAt(DebugLevel, pt.GitProgressCheckedOutAt): +class GitProgressCheckedOutAt(DebugLevel): def code(self): return "M007" @@ -1254,8 +1150,7 @@ def message(self) -> str: return f"Checked out at {self.end_sha}." -@dataclass -class RegistryProgressGETRequest(DebugLevel, pt.RegistryProgressGETRequest): +class RegistryProgressGETRequest(DebugLevel): def code(self): return "M008" @@ -1263,8 +1158,7 @@ def message(self) -> str: return f"Making package registry request: GET {self.url}" -@dataclass -class RegistryProgressGETResponse(DebugLevel, pt.RegistryProgressGETResponse): +class RegistryProgressGETResponse(DebugLevel): def code(self): return "M009" @@ -1272,8 +1166,7 @@ def message(self) -> str: return f"Response from registry: GET {self.url} {self.resp_code}" -@dataclass -class SelectorReportInvalidSelector(InfoLevel, pt.SelectorReportInvalidSelector): +class SelectorReportInvalidSelector(InfoLevel): def code(self): return "M010" @@ -1284,8 +1177,7 @@ def message(self) -> str: ) -@dataclass -class DepsNoPackagesFound(InfoLevel, pt.DepsNoPackagesFound): +class DepsNoPackagesFound(InfoLevel): def code(self): return "M013" @@ -1293,8 +1185,7 @@ def message(self) -> str: return "Warning: No packages were found in packages.yml" -@dataclass -class DepsStartPackageInstall(InfoLevel, pt.DepsStartPackageInstall): +class DepsStartPackageInstall(InfoLevel): def code(self): return "M014" @@ -1302,8 +1193,7 @@ def message(self) -> str: return f"Installing {self.package_name}" -@dataclass -class DepsInstallInfo(InfoLevel, pt.DepsInstallInfo): +class DepsInstallInfo(InfoLevel): def code(self): return "M015" @@ -1311,8 +1201,7 @@ def message(self) -> str: return f"Installed from {self.version_name}" -@dataclass -class DepsUpdateAvailable(InfoLevel, pt.DepsUpdateAvailable): +class DepsUpdateAvailable(InfoLevel): def code(self): return "M016" @@ -1320,8 +1209,7 @@ def message(self) -> str: return f"Updated version available: {self.version_latest}" -@dataclass -class DepsUpToDate(InfoLevel, pt.DepsUpToDate): +class DepsUpToDate(InfoLevel): def code(self): return "M017" @@ -1329,8 +1217,7 @@ def message(self) -> str: return "Up to date!" -@dataclass -class DepsListSubdirectory(InfoLevel, pt.DepsListSubdirectory): +class DepsListSubdirectory(InfoLevel): def code(self): return "M018" @@ -1338,8 +1225,7 @@ def message(self) -> str: return f"and subdirectory {self.subdirectory}" -@dataclass -class DepsNotifyUpdatesAvailable(InfoLevel, pt.DepsNotifyUpdatesAvailable): +class DepsNotifyUpdatesAvailable(InfoLevel): def code(self): return "M019" @@ -1348,8 +1234,7 @@ def message(self) -> str: \nUpdate your versions in packages.yml, then run dbt deps" -@dataclass -class RetryExternalCall(DebugLevel, pt.RetryExternalCall): +class RetryExternalCall(DebugLevel): def code(self): return "M020" @@ -1357,8 +1242,7 @@ def message(self) -> str: return f"Retrying external call. Attempt: {self.attempt} Max attempts: {self.max}" -@dataclass -class RecordRetryException(DebugLevel, pt.RecordRetryException): +class RecordRetryException(DebugLevel): def code(self): return "M021" @@ -1366,8 +1250,7 @@ def message(self) -> str: return f"External call exception: {self.exc}" -@dataclass -class RegistryIndexProgressGETRequest(DebugLevel, pt.RegistryIndexProgressGETRequest): +class RegistryIndexProgressGETRequest(DebugLevel): def code(self): return "M022" @@ -1375,8 +1258,7 @@ def message(self) -> str: return f"Making package index registry request: GET {self.url}" -@dataclass -class RegistryIndexProgressGETResponse(DebugLevel, pt.RegistryIndexProgressGETResponse): +class RegistryIndexProgressGETResponse(DebugLevel): def code(self): return "M023" @@ -1384,8 +1266,7 @@ def message(self) -> str: return f"Response from registry index: GET {self.url} {self.resp_code}" -@dataclass -class RegistryResponseUnexpectedType(DebugLevel, pt.RegistryResponseUnexpectedType): +class RegistryResponseUnexpectedType(DebugLevel): def code(self): return "M024" @@ -1393,8 +1274,7 @@ def message(self) -> str: return f"Response was None: {self.response}" -@dataclass -class RegistryResponseMissingTopKeys(DebugLevel, pt.RegistryResponseMissingTopKeys): +class RegistryResponseMissingTopKeys(DebugLevel): def code(self): return "M025" @@ -1403,8 +1283,7 @@ def message(self) -> str: return f"Response missing top level keys: {self.response}" -@dataclass -class RegistryResponseMissingNestedKeys(DebugLevel, pt.RegistryResponseMissingNestedKeys): +class RegistryResponseMissingNestedKeys(DebugLevel): def code(self): return "M026" @@ -1413,8 +1292,7 @@ def message(self) -> str: return f"Response missing nested keys: {self.response}" -@dataclass -class RegistryResponseExtraNestedKeys(DebugLevel, pt.RegistryResponseExtraNestedKeys): +class RegistryResponseExtraNestedKeys(DebugLevel): def code(self): return "M027" @@ -1423,8 +1301,7 @@ def message(self) -> str: return f"Response contained inconsistent keys: {self.response}" -@dataclass -class DepsSetDownloadDirectory(DebugLevel, pt.DepsSetDownloadDirectory): +class DepsSetDownloadDirectory(DebugLevel): def code(self): return "M028" @@ -1432,8 +1309,7 @@ def message(self) -> str: return f"Set downloads directory='{self.path}'" -@dataclass -class DepsUnpinned(WarnLevel, pt.DepsUnpinned): +class DepsUnpinned(WarnLevel): def code(self): return "M029" @@ -1452,8 +1328,7 @@ def message(self) -> str: return yellow(f"WARNING: {msg}") -@dataclass -class NoNodesForSelectionCriteria(WarnLevel, pt.NoNodesForSelectionCriteria): +class NoNodesForSelectionCriteria(WarnLevel): def code(self): return "M030" @@ -1466,8 +1341,7 @@ def message(self) -> str: # ======================================================= -@dataclass -class RunningOperationCaughtError(ErrorLevel, pt.RunningOperationCaughtError): +class RunningOperationCaughtError(ErrorLevel): def code(self): return "Q001" @@ -1475,8 +1349,7 @@ def message(self) -> str: return f"Encountered an error while running operation: {self.exc}" -@dataclass -class CompileComplete(InfoLevel, pt.CompileComplete): +class CompileComplete(InfoLevel): def code(self): return "Q002" @@ -1484,8 +1357,7 @@ def message(self) -> str: return "Done." -@dataclass -class FreshnessCheckComplete(InfoLevel, pt.FreshnessCheckComplete): +class FreshnessCheckComplete(InfoLevel): def code(self): return "Q003" @@ -1493,8 +1365,7 @@ def message(self) -> str: return "Done." -@dataclass -class SeedHeader(InfoLevel, pt.SeedHeader): +class SeedHeader(InfoLevel): def code(self): return "Q004" @@ -1502,8 +1373,7 @@ def message(self) -> str: return self.header -@dataclass -class SQLRunnerException(DebugLevel, pt.SQLRunnerException): # noqa +class SQLRunnerException(DebugLevel): def code(self): return "Q006" @@ -1511,8 +1381,7 @@ def message(self) -> str: return f"Got an exception: {self.exc}" -@dataclass -class LogTestResult(DynamicLevel, pt.LogTestResult): +class LogTestResult(DynamicLevel): def code(self): return "Q007" @@ -1557,8 +1426,7 @@ def status_to_level(cls, status): # Skipped Q008, Q009, Q010 -@dataclass -class LogStartLine(InfoLevel, pt.LogStartLine): # noqa +class LogStartLine(InfoLevel): def code(self): return "Q011" @@ -1567,8 +1435,7 @@ def message(self) -> str: return format_fancy_output_line(msg=msg, status="RUN", index=self.index, total=self.total) -@dataclass -class LogModelResult(DynamicLevel, pt.LogModelResult): +class LogModelResult(DynamicLevel): def code(self): return "Q012" @@ -1593,8 +1460,7 @@ def message(self) -> str: # Skipped Q013, Q014 -@dataclass -class LogSnapshotResult(DynamicLevel, pt.LogSnapshotResult): +class LogSnapshotResult(DynamicLevel): def code(self): return "Q015" @@ -1616,8 +1482,7 @@ def message(self) -> str: ) -@dataclass -class LogSeedResult(DynamicLevel, pt.LogSeedResult): +class LogSeedResult(DynamicLevel): def code(self): return "Q016" @@ -1641,8 +1506,7 @@ def message(self) -> str: # Skipped Q017 -@dataclass -class LogFreshnessResult(DynamicLevel, pt.LogFreshnessResult): +class LogFreshnessResult(DynamicLevel): def code(self): return "Q018" @@ -1687,8 +1551,7 @@ def status_to_level(cls, status): # Skipped Q019, Q020, Q021 -@dataclass -class LogCancelLine(ErrorLevel, pt.LogCancelLine): +class LogCancelLine(ErrorLevel): def code(self): return "Q022" @@ -1697,8 +1560,7 @@ def message(self) -> str: return format_fancy_output_line(msg=msg, status=red("CANCEL"), index=None, total=None) -@dataclass -class DefaultSelector(InfoLevel, pt.DefaultSelector): +class DefaultSelector(InfoLevel): def code(self): return "Q023" @@ -1706,8 +1568,7 @@ def message(self) -> str: return f"Using default selector {self.name}" -@dataclass -class NodeStart(DebugLevel, pt.NodeStart): +class NodeStart(DebugLevel): def code(self): return "Q024" @@ -1715,8 +1576,7 @@ def message(self) -> str: return f"Began running node {self.node_info.unique_id}" -@dataclass -class NodeFinished(DebugLevel, pt.NodeFinished): +class NodeFinished(DebugLevel): def code(self): return "Q025" @@ -1724,8 +1584,7 @@ def message(self) -> str: return f"Finished running node {self.node_info.unique_id}" -@dataclass -class QueryCancelationUnsupported(InfoLevel, pt.QueryCancelationUnsupported): +class QueryCancelationUnsupported(InfoLevel): def code(self): return "Q026" @@ -1738,8 +1597,7 @@ def message(self) -> str: return yellow(msg) -@dataclass -class ConcurrencyLine(InfoLevel, pt.ConcurrencyLine): # noqa +class ConcurrencyLine(InfoLevel): def code(self): return "Q027" @@ -1747,8 +1605,7 @@ def message(self) -> str: return f"Concurrency: {self.num_threads} threads (target='{self.target_name}')" -@dataclass -class CompiledNode(InfoLevel, pt.CompiledNode): +class CompiledNode(InfoLevel): def code(self): return "Q028" @@ -1756,8 +1613,7 @@ def message(self) -> str: return f"Compiled node '{self.node_name}' is:\n{self.compiled}" -@dataclass -class WritingInjectedSQLForNode(DebugLevel, pt.WritingInjectedSQLForNode): +class WritingInjectedSQLForNode(DebugLevel): def code(self): return "Q029" @@ -1765,8 +1621,7 @@ def message(self) -> str: return f'Writing injected SQL for node "{self.node_info.unique_id}"' -@dataclass -class NodeCompiling(DebugLevel, pt.NodeCompiling): +class NodeCompiling(DebugLevel): def code(self): return "Q030" @@ -1774,8 +1629,7 @@ def message(self) -> str: return f"Began compiling node {self.node_info.unique_id}" -@dataclass -class NodeExecuting(DebugLevel, pt.NodeExecuting): +class NodeExecuting(DebugLevel): def code(self): return "Q031" @@ -1783,8 +1637,7 @@ def message(self) -> str: return f"Began executing node {self.node_info.unique_id}" -@dataclass -class LogHookStartLine(InfoLevel, pt.LogHookStartLine): # noqa +class LogHookStartLine(InfoLevel): def code(self): return "Q032" @@ -1795,8 +1648,7 @@ def message(self) -> str: ) -@dataclass -class LogHookEndLine(InfoLevel, pt.LogHookEndLine): # noqa +class LogHookEndLine(InfoLevel): def code(self): return "Q033" @@ -1812,8 +1664,7 @@ def message(self) -> str: ) -@dataclass -class SkippingDetails(InfoLevel, pt.SkippingDetails): +class SkippingDetails(InfoLevel): def code(self): return "Q034" @@ -1827,8 +1678,7 @@ def message(self) -> str: ) -@dataclass -class NothingToDo(WarnLevel, pt.NothingToDo): +class NothingToDo(WarnLevel): def code(self): return "Q035" @@ -1836,8 +1686,7 @@ def message(self) -> str: return "Nothing to do. Try checking your model configs and model specification args" -@dataclass -class RunningOperationUncaughtError(ErrorLevel, pt.RunningOperationUncaughtError): +class RunningOperationUncaughtError(ErrorLevel): def code(self): return "Q036" @@ -1845,8 +1694,7 @@ def message(self) -> str: return f"Encountered an error while running operation: {self.exc}" -@dataclass -class EndRunResult(DebugLevel, pt.EndRunResult): +class EndRunResult(DebugLevel): def code(self): return "Q037" @@ -1854,8 +1702,7 @@ def message(self) -> str: return "Command end result" -@dataclass -class NoNodesSelected(WarnLevel, pt.NoNodesSelected): +class NoNodesSelected(WarnLevel): def code(self): return "Q038" @@ -1863,8 +1710,7 @@ def message(self) -> str: return "No nodes selected!" -@dataclass -class CommandCompleted(DebugLevel, pt.CommandCompleted): +class CommandCompleted(DebugLevel): def code(self): return "Q039" @@ -1880,8 +1726,7 @@ def message(self) -> str: # Skipped W001 -@dataclass -class CatchableExceptionOnRun(DebugLevel, pt.CatchableExceptionOnRun): # noqa +class CatchableExceptionOnRun(DebugLevel): def code(self): return "W002" @@ -1889,8 +1734,7 @@ def message(self) -> str: return str(self.exc) -@dataclass -class InternalErrorOnRun(DebugLevel, pt.InternalErrorOnRun): +class InternalErrorOnRun(DebugLevel): def code(self): return "W003" @@ -1904,8 +1748,7 @@ def message(self) -> str: return f"{red(prefix)}\n" f"{str(self.exc).strip()}\n\n" f"{internal_error_string}" -@dataclass -class GenericExceptionOnRun(ErrorLevel, pt.GenericExceptionOnRun): +class GenericExceptionOnRun(ErrorLevel): def code(self): return "W004" @@ -1917,8 +1760,7 @@ def message(self) -> str: return f"{red(prefix)}\n{str(self.exc).strip()}" -@dataclass -class NodeConnectionReleaseError(DebugLevel, pt.NodeConnectionReleaseError): # noqa +class NodeConnectionReleaseError(DebugLevel): def code(self): return "W005" @@ -1926,8 +1768,7 @@ def message(self) -> str: return f"Error releasing connection for node {self.node_name}: {str(self.exc)}" -@dataclass -class FoundStats(InfoLevel, pt.FoundStats): +class FoundStats(InfoLevel): def code(self): return "W006" @@ -1940,8 +1781,7 @@ def message(self) -> str: # ======================================================= -@dataclass -class MainKeyboardInterrupt(InfoLevel, pt.MainKeyboardInterrupt): +class MainKeyboardInterrupt(InfoLevel): def code(self): return "Z001" @@ -1949,8 +1789,7 @@ def message(self) -> str: return "ctrl-c" -@dataclass -class MainEncounteredError(ErrorLevel, pt.MainEncounteredError): # noqa +class MainEncounteredError(ErrorLevel): def code(self): return "Z002" @@ -1958,8 +1797,7 @@ def message(self) -> str: return f"Encountered an error:\n{self.exc}" -@dataclass -class MainStackTrace(ErrorLevel, pt.MainStackTrace): +class MainStackTrace(ErrorLevel): def code(self): return "Z003" @@ -1970,8 +1808,7 @@ def message(self) -> str: # Skipped Z004 -@dataclass -class SystemCouldNotWrite(DebugLevel, pt.SystemCouldNotWrite): +class SystemCouldNotWrite(DebugLevel): def code(self): return "Z005" @@ -1982,8 +1819,7 @@ def message(self) -> str: ) -@dataclass -class SystemExecutingCmd(DebugLevel, pt.SystemExecutingCmd): +class SystemExecutingCmd(DebugLevel): def code(self): return "Z006" @@ -1991,8 +1827,7 @@ def message(self) -> str: return f'Executing "{" ".join(self.cmd)}"' -@dataclass -class SystemStdOut(DebugLevel, pt.SystemStdOut): +class SystemStdOut(DebugLevel): def code(self): return "Z007" @@ -2000,8 +1835,7 @@ def message(self) -> str: return f'STDOUT: "{str(self.bmsg)}"' -@dataclass -class SystemStdErr(DebugLevel, pt.SystemStdErr): +class SystemStdErr(DebugLevel): def code(self): return "Z008" @@ -2009,8 +1843,7 @@ def message(self) -> str: return f'STDERR: "{str(self.bmsg)}"' -@dataclass -class SystemReportReturnCode(DebugLevel, pt.SystemReportReturnCode): +class SystemReportReturnCode(DebugLevel): def code(self): return "Z009" @@ -2018,8 +1851,7 @@ def message(self) -> str: return f"command return code={self.returncode}" -@dataclass -class TimingInfoCollected(DebugLevel, pt.TimingInfoCollected): +class TimingInfoCollected(DebugLevel): def code(self): return "Z010" @@ -2029,8 +1861,9 @@ def message(self) -> str: # This prints the stack trace at the debug level while allowing just the nice exception message # at the error level - or whatever other level chosen. Used in multiple places. -@dataclass -class LogDebugStackTrace(DebugLevel, pt.LogDebugStackTrace): # noqa + + +class LogDebugStackTrace(DebugLevel): def code(self): return "Z011" @@ -2040,8 +1873,9 @@ def message(self) -> str: # We don't write "clean" events to the log, because the clean command # may have removed the log directory. -@dataclass -class CheckCleanPath(InfoLevel, NoFile, pt.CheckCleanPath): + + +class CheckCleanPath(InfoLevel): def code(self): return "Z012" @@ -2049,8 +1883,7 @@ def message(self) -> str: return f"Checking {self.path}/*" -@dataclass -class ConfirmCleanPath(InfoLevel, NoFile, pt.ConfirmCleanPath): +class ConfirmCleanPath(InfoLevel): def code(self): return "Z013" @@ -2058,8 +1891,7 @@ def message(self) -> str: return f"Cleaned {self.path}/*" -@dataclass -class ProtectedCleanPath(InfoLevel, NoFile, pt.ProtectedCleanPath): +class ProtectedCleanPath(InfoLevel): def code(self): return "Z014" @@ -2067,8 +1899,7 @@ def message(self) -> str: return f"ERROR: not cleaning {self.path}/* because it is protected" -@dataclass -class FinishedCleanPaths(InfoLevel, NoFile, pt.FinishedCleanPaths): +class FinishedCleanPaths(InfoLevel): def code(self): return "Z015" @@ -2076,8 +1907,7 @@ def message(self) -> str: return "Finished cleaning all paths." -@dataclass -class OpenCommand(InfoLevel, pt.OpenCommand): +class OpenCommand(InfoLevel): def code(self): return "Z016" @@ -2094,8 +1924,9 @@ def message(self) -> str: # the tension between these two goals by allowing empty lines, heading separators, and other # formatting to be written to the console, while they can be ignored for other purposes. For # general information that isn't simple formatting, the Note event should be used instead. -@dataclass -class Formatting(InfoLevel, pt.Formatting): + + +class Formatting(InfoLevel): def code(self): return "Z017" @@ -2103,8 +1934,7 @@ def message(self) -> str: return self.msg -@dataclass -class RunResultWarning(WarnLevel, pt.RunResultWarning): +class RunResultWarning(WarnLevel): def code(self): return "Z021" @@ -2113,8 +1943,7 @@ def message(self) -> str: return yellow(f"{info} in {self.resource_type} {self.node_name} ({self.path})") -@dataclass -class RunResultFailure(ErrorLevel, pt.RunResultFailure): +class RunResultFailure(ErrorLevel): def code(self): return "Z022" @@ -2123,8 +1952,7 @@ def message(self) -> str: return red(f"{info} in {self.resource_type} {self.node_name} ({self.path})") -@dataclass -class StatsLine(InfoLevel, pt.StatsLine): +class StatsLine(InfoLevel): def code(self): return "Z023" @@ -2133,8 +1961,7 @@ def message(self) -> str: return stats_line.format(**self.stats) -@dataclass -class RunResultError(ErrorLevel, EventStringFunctor, pt.RunResultError): +class RunResultError(ErrorLevel): def code(self): return "Z024" @@ -2143,8 +1970,7 @@ def message(self) -> str: return f" {self.msg}" -@dataclass -class RunResultErrorNoMessage(ErrorLevel, pt.RunResultErrorNoMessage): +class RunResultErrorNoMessage(ErrorLevel): def code(self): return "Z025" @@ -2152,8 +1978,7 @@ def message(self) -> str: return f" Status: {self.status}" -@dataclass -class SQLCompiledPath(InfoLevel, pt.SQLCompiledPath): +class SQLCompiledPath(InfoLevel): def code(self): return "Z026" @@ -2161,8 +1986,7 @@ def message(self) -> str: return f" compiled Code at {self.path}" -@dataclass -class CheckNodeTestFailure(InfoLevel, pt.CheckNodeTestFailure): +class CheckNodeTestFailure(InfoLevel): def code(self): return "Z027" @@ -2175,8 +1999,9 @@ def message(self) -> str: # FirstRunResultError and AfterFirstRunResultError are just splitting the message from the result # object into multiple log lines # TODO: is this reallly needed? See printer.py -@dataclass -class FirstRunResultError(ErrorLevel, EventStringFunctor, pt.FirstRunResultError): + + +class FirstRunResultError(ErrorLevel): def code(self): return "Z028" @@ -2184,8 +2009,7 @@ def message(self) -> str: return yellow(self.msg) -@dataclass -class AfterFirstRunResultError(ErrorLevel, EventStringFunctor, pt.AfterFirstRunResultError): +class AfterFirstRunResultError(ErrorLevel): def code(self): return "Z029" @@ -2193,8 +2017,7 @@ def message(self) -> str: return self.msg -@dataclass -class EndOfRunSummary(InfoLevel, pt.EndOfRunSummary): +class EndOfRunSummary(InfoLevel): def code(self): return "Z030" @@ -2202,7 +2025,7 @@ def message(self) -> str: error_plural = pluralize(self.num_errors, "error") warn_plural = pluralize(self.num_warnings, "warning") if self.keyboard_interrupt: - message = yellow("Exited because of keyboard interrupt.") + message = yellow("Exited because of keyboard interrupt") elif self.num_errors > 0: message = red(f"Completed with {error_plural} and {warn_plural}:") elif self.num_warnings > 0: @@ -2215,8 +2038,7 @@ def message(self) -> str: # Skipped Z031, Z032, Z033 -@dataclass -class LogSkipBecauseError(ErrorLevel, pt.LogSkipBecauseError): +class LogSkipBecauseError(ErrorLevel): def code(self): return "Z034" @@ -2230,8 +2052,7 @@ def message(self) -> str: # Skipped Z035 -@dataclass -class EnsureGitInstalled(ErrorLevel, pt.EnsureGitInstalled): +class EnsureGitInstalled(ErrorLevel): def code(self): return "Z036" @@ -2243,8 +2064,7 @@ def message(self) -> str: ) -@dataclass -class DepsCreatingLocalSymlink(DebugLevel, pt.DepsCreatingLocalSymlink): +class DepsCreatingLocalSymlink(DebugLevel): def code(self): return "Z037" @@ -2252,8 +2072,7 @@ def message(self) -> str: return "Creating symlink to local dependency." -@dataclass -class DepsSymlinkNotAvailable(DebugLevel, pt.DepsSymlinkNotAvailable): +class DepsSymlinkNotAvailable(DebugLevel): def code(self): return "Z038" @@ -2261,8 +2080,7 @@ def message(self) -> str: return "Symlinks are not available on this OS, copying dependency." -@dataclass -class DisableTracking(DebugLevel, pt.DisableTracking): +class DisableTracking(DebugLevel): def code(self): return "Z039" @@ -2274,8 +2092,7 @@ def message(self) -> str: ) -@dataclass -class SendingEvent(DebugLevel, pt.SendingEvent): +class SendingEvent(DebugLevel): def code(self): return "Z040" @@ -2283,8 +2100,7 @@ def message(self) -> str: return f"Sending event: {self.kwargs}" -@dataclass -class SendEventFailure(DebugLevel, pt.SendEventFailure): +class SendEventFailure(DebugLevel): def code(self): return "Z041" @@ -2292,8 +2108,7 @@ def message(self) -> str: return "An error was encountered while trying to send an event" -@dataclass -class FlushEvents(DebugLevel, pt.FlushEvents): +class FlushEvents(DebugLevel): def code(self): return "Z042" @@ -2301,8 +2116,7 @@ def message(self) -> str: return "Flushing usage events" -@dataclass -class FlushEventsFailure(DebugLevel, pt.FlushEventsFailure): +class FlushEventsFailure(DebugLevel): def code(self): return "Z043" @@ -2310,8 +2124,7 @@ def message(self) -> str: return "An error was encountered while trying to flush usage events" -@dataclass -class TrackingInitializeFailure(DebugLevel, pt.TrackingInitializeFailure): # noqa +class TrackingInitializeFailure(DebugLevel): def code(self): return "Z044" @@ -2320,8 +2133,9 @@ def message(self) -> str: # this is the message from the result object -@dataclass -class RunResultWarningMessage(WarnLevel, EventStringFunctor, pt.RunResultWarningMessage): + + +class RunResultWarningMessage(WarnLevel): def code(self): return "Z046" @@ -2330,8 +2144,7 @@ def message(self) -> str: return self.msg -@dataclass -class DebugCmdOut(InfoLevel, pt.DebugCmdOut): +class DebugCmdOut(InfoLevel): def code(self): return "Z047" @@ -2339,8 +2152,7 @@ def message(self) -> str: return self.msg -@dataclass -class DebugCmdResult(InfoLevel, pt.DebugCmdResult): +class DebugCmdResult(InfoLevel): def code(self): return "Z048" @@ -2348,8 +2160,7 @@ def message(self) -> str: return self.msg -@dataclass -class ListCmdOut(InfoLevel, pt.ListCmdOut): +class ListCmdOut(InfoLevel): def code(self): return "Z049" @@ -2359,8 +2170,9 @@ def message(self) -> str: # The Note event provides a way to log messages which aren't likely to be useful as more structured events. # For console formatting text like empty lines and separator bars, use the Formatting event instead. -@dataclass -class Note(InfoLevel, pt.Note): + + +class Note(InfoLevel): def code(self): return "Z050" diff --git a/core/dbt/events/types_pb2.py b/core/dbt/events/types_pb2.py new file mode 100644 index 00000000000..dafdc9b4baa --- /dev/null +++ b/core/dbt/events/types_pb2.py @@ -0,0 +1,863 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: types.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +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\"\xdf\x01\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\"\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\"\x1e\n\rListOfStrings\x12\r\n\x05value\x18\x01 \x03(\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\"\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\"!\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\"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\"$\n\x14GenericTestFileParse\x12\x0c\n\x04path\x18\x01 \x01(\t\"p\n\x17GenericTestFileParseMsg\x12$\n\x04info\x18\x01 \x01(\x0b\x32\x16.proto_types.EventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.GenericTestFileParse\"\x1e\n\x0eMacroFileParse\x12\x0c\n\x04path\x18\x01 \x01(\t\"d\n\x11MacroFileParseMsg\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.MacroFileParse\"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\"/\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\"J\n\x1a\x44\x65psNotifyUpdatesAvailable\x12,\n\x08packages\x18\x01 \x01(\x0b\x32\x1a.proto_types.ListOfStrings\"|\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\"3\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \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\"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\"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') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'types_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + _EVENTINFO_EXTRAENTRY._options = None + _EVENTINFO_EXTRAENTRY._serialized_options = b'8\001' + _MAINREPORTARGS_ARGSENTRY._options = None + _MAINREPORTARGS_ARGSENTRY._serialized_options = b'8\001' + _CACHEDUMPGRAPH_DUMPENTRY._options = None + _CACHEDUMPGRAPH_DUMPENTRY._serialized_options = b'8\001' + _PARTIALPARSINGERROR_EXCINFOENTRY._options = None + _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_options = b'8\001' + _LOGSNAPSHOTRESULT_CFGENTRY._options = None + _LOGSNAPSHOTRESULT_CFGENTRY._serialized_options = b'8\001' + _STATSLINE_STATSENTRY._options = None + _STATSLINE_STATSENTRY._serialized_options = b'8\001' + _EVENTINFO._serialized_start=92 + _EVENTINFO._serialized_end=365 + _EVENTINFO_EXTRAENTRY._serialized_start=321 + _EVENTINFO_EXTRAENTRY._serialized_end=365 + _TIMINGINFOMSG._serialized_start=367 + _TIMINGINFOMSG._serialized_end=494 + _NODEINFO._serialized_start=497 + _NODEINFO._serialized_end=720 + _RUNRESULTMSG._serialized_start=723 + _RUNRESULTMSG._serialized_end=932 + _REFERENCEKEYMSG._serialized_start=934 + _REFERENCEKEYMSG._serialized_end=1005 + _LISTOFSTRINGS._serialized_start=1007 + _LISTOFSTRINGS._serialized_end=1037 + _GENERICMESSAGE._serialized_start=1039 + _GENERICMESSAGE._serialized_end=1093 + _MAINREPORTVERSION._serialized_start=1095 + _MAINREPORTVERSION._serialized_end=1152 + _MAINREPORTVERSIONMSG._serialized_start=1154 + _MAINREPORTVERSIONMSG._serialized_end=1260 + _MAINREPORTARGS._serialized_start=1262 + _MAINREPORTARGS._serialized_end=1376 + _MAINREPORTARGS_ARGSENTRY._serialized_start=1333 + _MAINREPORTARGS_ARGSENTRY._serialized_end=1376 + _MAINREPORTARGSMSG._serialized_start=1378 + _MAINREPORTARGSMSG._serialized_end=1478 + _MAINTRACKINGUSERSTATE._serialized_start=1480 + _MAINTRACKINGUSERSTATE._serialized_end=1523 + _MAINTRACKINGUSERSTATEMSG._serialized_start=1525 + _MAINTRACKINGUSERSTATEMSG._serialized_end=1639 + _MERGEDFROMSTATE._serialized_start=1641 + _MERGEDFROMSTATE._serialized_end=1694 + _MERGEDFROMSTATEMSG._serialized_start=1696 + _MERGEDFROMSTATEMSG._serialized_end=1798 + _MISSINGPROFILETARGET._serialized_start=1800 + _MISSINGPROFILETARGET._serialized_end=1865 + _MISSINGPROFILETARGETMSG._serialized_start=1867 + _MISSINGPROFILETARGETMSG._serialized_end=1979 + _INVALIDOPTIONYAML._serialized_start=1981 + _INVALIDOPTIONYAML._serialized_end=2021 + _INVALIDOPTIONYAMLMSG._serialized_start=2023 + _INVALIDOPTIONYAMLMSG._serialized_end=2129 + _LOGDBTPROJECTERROR._serialized_start=2131 + _LOGDBTPROJECTERROR._serialized_end=2164 + _LOGDBTPROJECTERRORMSG._serialized_start=2166 + _LOGDBTPROJECTERRORMSG._serialized_end=2274 + _LOGDBTPROFILEERROR._serialized_start=2276 + _LOGDBTPROFILEERROR._serialized_end=2327 + _LOGDBTPROFILEERRORMSG._serialized_start=2329 + _LOGDBTPROFILEERRORMSG._serialized_end=2437 + _STARTERPROJECTPATH._serialized_start=2439 + _STARTERPROJECTPATH._serialized_end=2472 + _STARTERPROJECTPATHMSG._serialized_start=2474 + _STARTERPROJECTPATHMSG._serialized_end=2582 + _CONFIGFOLDERDIRECTORY._serialized_start=2584 + _CONFIGFOLDERDIRECTORY._serialized_end=2620 + _CONFIGFOLDERDIRECTORYMSG._serialized_start=2622 + _CONFIGFOLDERDIRECTORYMSG._serialized_end=2736 + _NOSAMPLEPROFILEFOUND._serialized_start=2738 + _NOSAMPLEPROFILEFOUND._serialized_end=2777 + _NOSAMPLEPROFILEFOUNDMSG._serialized_start=2779 + _NOSAMPLEPROFILEFOUNDMSG._serialized_end=2891 + _PROFILEWRITTENWITHSAMPLE._serialized_start=2893 + _PROFILEWRITTENWITHSAMPLE._serialized_end=2947 + _PROFILEWRITTENWITHSAMPLEMSG._serialized_start=2949 + _PROFILEWRITTENWITHSAMPLEMSG._serialized_end=3069 + _PROFILEWRITTENWITHTARGETTEMPLATEYAML._serialized_start=3071 + _PROFILEWRITTENWITHTARGETTEMPLATEYAML._serialized_end=3137 + _PROFILEWRITTENWITHTARGETTEMPLATEYAMLMSG._serialized_start=3140 + _PROFILEWRITTENWITHTARGETTEMPLATEYAMLMSG._serialized_end=3284 + _PROFILEWRITTENWITHPROJECTTEMPLATEYAML._serialized_start=3286 + _PROFILEWRITTENWITHPROJECTTEMPLATEYAML._serialized_end=3353 + _PROFILEWRITTENWITHPROJECTTEMPLATEYAMLMSG._serialized_start=3356 + _PROFILEWRITTENWITHPROJECTTEMPLATEYAMLMSG._serialized_end=3502 + _SETTINGUPPROFILE._serialized_start=3504 + _SETTINGUPPROFILE._serialized_end=3522 + _SETTINGUPPROFILEMSG._serialized_start=3524 + _SETTINGUPPROFILEMSG._serialized_end=3628 + _INVALIDPROFILETEMPLATEYAML._serialized_start=3630 + _INVALIDPROFILETEMPLATEYAML._serialized_end=3658 + _INVALIDPROFILETEMPLATEYAMLMSG._serialized_start=3660 + _INVALIDPROFILETEMPLATEYAMLMSG._serialized_end=3784 + _PROJECTNAMEALREADYEXISTS._serialized_start=3786 + _PROJECTNAMEALREADYEXISTS._serialized_end=3826 + _PROJECTNAMEALREADYEXISTSMSG._serialized_start=3828 + _PROJECTNAMEALREADYEXISTSMSG._serialized_end=3948 + _PROJECTCREATED._serialized_start=3950 + _PROJECTCREATED._serialized_end=4025 + _PROJECTCREATEDMSG._serialized_start=4027 + _PROJECTCREATEDMSG._serialized_end=4127 + _PACKAGEREDIRECTDEPRECATION._serialized_start=4129 + _PACKAGEREDIRECTDEPRECATION._serialized_end=4193 + _PACKAGEREDIRECTDEPRECATIONMSG._serialized_start=4195 + _PACKAGEREDIRECTDEPRECATIONMSG._serialized_end=4319 + _PACKAGEINSTALLPATHDEPRECATION._serialized_start=4321 + _PACKAGEINSTALLPATHDEPRECATION._serialized_end=4352 + _PACKAGEINSTALLPATHDEPRECATIONMSG._serialized_start=4355 + _PACKAGEINSTALLPATHDEPRECATIONMSG._serialized_end=4485 + _CONFIGSOURCEPATHDEPRECATION._serialized_start=4487 + _CONFIGSOURCEPATHDEPRECATION._serialized_end=4559 + _CONFIGSOURCEPATHDEPRECATIONMSG._serialized_start=4561 + _CONFIGSOURCEPATHDEPRECATIONMSG._serialized_end=4687 + _CONFIGDATAPATHDEPRECATION._serialized_start=4689 + _CONFIGDATAPATHDEPRECATION._serialized_end=4759 + _CONFIGDATAPATHDEPRECATIONMSG._serialized_start=4761 + _CONFIGDATAPATHDEPRECATIONMSG._serialized_end=4883 + _ADAPTERDEPRECATIONWARNING._serialized_start=4885 + _ADAPTERDEPRECATIONWARNING._serialized_end=4948 + _ADAPTERDEPRECATIONWARNINGMSG._serialized_start=4950 + _ADAPTERDEPRECATIONWARNINGMSG._serialized_end=5072 + _METRICATTRIBUTESRENAMED._serialized_start=5074 + _METRICATTRIBUTESRENAMED._serialized_end=5120 + _METRICATTRIBUTESRENAMEDMSG._serialized_start=5122 + _METRICATTRIBUTESRENAMEDMSG._serialized_end=5240 + _EXPOSURENAMEDEPRECATION._serialized_start=5242 + _EXPOSURENAMEDEPRECATION._serialized_end=5285 + _EXPOSURENAMEDEPRECATIONMSG._serialized_start=5287 + _EXPOSURENAMEDEPRECATIONMSG._serialized_end=5405 + _INTERNALDEPRECATION._serialized_start=5407 + _INTERNALDEPRECATION._serialized_end=5501 + _INTERNALDEPRECATIONMSG._serialized_start=5503 + _INTERNALDEPRECATIONMSG._serialized_end=5613 + _ENVIRONMENTVARIABLERENAMED._serialized_start=5615 + _ENVIRONMENTVARIABLERENAMED._serialized_end=5679 + _ENVIRONMENTVARIABLERENAMEDMSG._serialized_start=5681 + _ENVIRONMENTVARIABLERENAMEDMSG._serialized_end=5805 + _CONFIGLOGPATHDEPRECATION._serialized_start=5807 + _CONFIGLOGPATHDEPRECATION._serialized_end=5858 + _CONFIGLOGPATHDEPRECATIONMSG._serialized_start=5860 + _CONFIGLOGPATHDEPRECATIONMSG._serialized_end=5980 + _CONFIGTARGETPATHDEPRECATION._serialized_start=5982 + _CONFIGTARGETPATHDEPRECATION._serialized_end=6036 + _CONFIGTARGETPATHDEPRECATIONMSG._serialized_start=6038 + _CONFIGTARGETPATHDEPRECATIONMSG._serialized_end=6164 + _ADAPTEREVENTDEBUG._serialized_start=6167 + _ADAPTEREVENTDEBUG._serialized_end=6302 + _ADAPTEREVENTDEBUGMSG._serialized_start=6304 + _ADAPTEREVENTDEBUGMSG._serialized_end=6410 + _ADAPTEREVENTINFO._serialized_start=6413 + _ADAPTEREVENTINFO._serialized_end=6547 + _ADAPTEREVENTINFOMSG._serialized_start=6549 + _ADAPTEREVENTINFOMSG._serialized_end=6653 + _ADAPTEREVENTWARNING._serialized_start=6656 + _ADAPTEREVENTWARNING._serialized_end=6793 + _ADAPTEREVENTWARNINGMSG._serialized_start=6795 + _ADAPTEREVENTWARNINGMSG._serialized_end=6905 + _ADAPTEREVENTERROR._serialized_start=6908 + _ADAPTEREVENTERROR._serialized_end=7061 + _ADAPTEREVENTERRORMSG._serialized_start=7063 + _ADAPTEREVENTERRORMSG._serialized_end=7169 + _NEWCONNECTION._serialized_start=7171 + _NEWCONNECTION._serialized_end=7266 + _NEWCONNECTIONMSG._serialized_start=7268 + _NEWCONNECTIONMSG._serialized_end=7366 + _CONNECTIONREUSED._serialized_start=7368 + _CONNECTIONREUSED._serialized_end=7429 + _CONNECTIONREUSEDMSG._serialized_start=7431 + _CONNECTIONREUSEDMSG._serialized_end=7535 + _CONNECTIONLEFTOPENINCLEANUP._serialized_start=7537 + _CONNECTIONLEFTOPENINCLEANUP._serialized_end=7585 + _CONNECTIONLEFTOPENINCLEANUPMSG._serialized_start=7587 + _CONNECTIONLEFTOPENINCLEANUPMSG._serialized_end=7713 + _CONNECTIONCLOSEDINCLEANUP._serialized_start=7715 + _CONNECTIONCLOSEDINCLEANUP._serialized_end=7761 + _CONNECTIONCLOSEDINCLEANUPMSG._serialized_start=7763 + _CONNECTIONCLOSEDINCLEANUPMSG._serialized_end=7885 + _ROLLBACKFAILED._serialized_start=7887 + _ROLLBACKFAILED._serialized_end=7982 + _ROLLBACKFAILEDMSG._serialized_start=7984 + _ROLLBACKFAILEDMSG._serialized_end=8084 + _CONNECTIONCLOSED._serialized_start=8086 + _CONNECTIONCLOSED._serialized_end=8165 + _CONNECTIONCLOSEDMSG._serialized_start=8167 + _CONNECTIONCLOSEDMSG._serialized_end=8271 + _CONNECTIONLEFTOPEN._serialized_start=8273 + _CONNECTIONLEFTOPEN._serialized_end=8354 + _CONNECTIONLEFTOPENMSG._serialized_start=8356 + _CONNECTIONLEFTOPENMSG._serialized_end=8464 + _ROLLBACK._serialized_start=8466 + _ROLLBACK._serialized_end=8537 + _ROLLBACKMSG._serialized_start=8539 + _ROLLBACKMSG._serialized_end=8627 + _CACHEMISS._serialized_start=8629 + _CACHEMISS._serialized_end=8693 + _CACHEMISSMSG._serialized_start=8695 + _CACHEMISSMSG._serialized_end=8785 + _LISTRELATIONS._serialized_start=8787 + _LISTRELATIONS._serialized_end=8885 + _LISTRELATIONSMSG._serialized_start=8887 + _LISTRELATIONSMSG._serialized_end=8985 + _CONNECTIONUSED._serialized_start=8987 + _CONNECTIONUSED._serialized_end=9083 + _CONNECTIONUSEDMSG._serialized_start=9085 + _CONNECTIONUSEDMSG._serialized_end=9185 + _SQLQUERY._serialized_start=9187 + _SQLQUERY._serialized_end=9271 + _SQLQUERYMSG._serialized_start=9273 + _SQLQUERYMSG._serialized_end=9361 + _SQLQUERYSTATUS._serialized_start=9363 + _SQLQUERYSTATUS._serialized_end=9454 + _SQLQUERYSTATUSMSG._serialized_start=9456 + _SQLQUERYSTATUSMSG._serialized_end=9556 + _SQLCOMMIT._serialized_start=9558 + _SQLCOMMIT._serialized_end=9630 + _SQLCOMMITMSG._serialized_start=9632 + _SQLCOMMITMSG._serialized_end=9722 + _COLTYPECHANGE._serialized_start=9724 + _COLTYPECHANGE._serialized_end=9821 + _COLTYPECHANGEMSG._serialized_start=9823 + _COLTYPECHANGEMSG._serialized_end=9921 + _SCHEMACREATION._serialized_start=9923 + _SCHEMACREATION._serialized_end=9987 + _SCHEMACREATIONMSG._serialized_start=9989 + _SCHEMACREATIONMSG._serialized_end=10089 + _SCHEMADROP._serialized_start=10091 + _SCHEMADROP._serialized_end=10151 + _SCHEMADROPMSG._serialized_start=10153 + _SCHEMADROPMSG._serialized_end=10245 + _CACHEACTION._serialized_start=10248 + _CACHEACTION._serialized_end=10470 + _CACHEACTIONMSG._serialized_start=10472 + _CACHEACTIONMSG._serialized_end=10566 + _CACHEDUMPGRAPH._serialized_start=10569 + _CACHEDUMPGRAPH._serialized_end=10721 + _CACHEDUMPGRAPH_DUMPENTRY._serialized_start=10678 + _CACHEDUMPGRAPH_DUMPENTRY._serialized_end=10721 + _CACHEDUMPGRAPHMSG._serialized_start=10723 + _CACHEDUMPGRAPHMSG._serialized_end=10823 + _ADAPTERIMPORTERROR._serialized_start=10825 + _ADAPTERIMPORTERROR._serialized_end=10858 + _ADAPTERIMPORTERRORMSG._serialized_start=10860 + _ADAPTERIMPORTERRORMSG._serialized_end=10968 + _PLUGINLOADERROR._serialized_start=10970 + _PLUGINLOADERROR._serialized_end=11005 + _PLUGINLOADERRORMSG._serialized_start=11007 + _PLUGINLOADERRORMSG._serialized_end=11109 + _NEWCONNECTIONOPENING._serialized_start=11111 + _NEWCONNECTIONOPENING._serialized_end=11201 + _NEWCONNECTIONOPENINGMSG._serialized_start=11203 + _NEWCONNECTIONOPENINGMSG._serialized_end=11315 + _CODEEXECUTION._serialized_start=11317 + _CODEEXECUTION._serialized_end=11373 + _CODEEXECUTIONMSG._serialized_start=11375 + _CODEEXECUTIONMSG._serialized_end=11473 + _CODEEXECUTIONSTATUS._serialized_start=11475 + _CODEEXECUTIONSTATUS._serialized_end=11529 + _CODEEXECUTIONSTATUSMSG._serialized_start=11531 + _CODEEXECUTIONSTATUSMSG._serialized_end=11641 + _CATALOGGENERATIONERROR._serialized_start=11643 + _CATALOGGENERATIONERROR._serialized_end=11680 + _CATALOGGENERATIONERRORMSG._serialized_start=11682 + _CATALOGGENERATIONERRORMSG._serialized_end=11798 + _WRITECATALOGFAILURE._serialized_start=11800 + _WRITECATALOGFAILURE._serialized_end=11845 + _WRITECATALOGFAILUREMSG._serialized_start=11847 + _WRITECATALOGFAILUREMSG._serialized_end=11957 + _CATALOGWRITTEN._serialized_start=11959 + _CATALOGWRITTEN._serialized_end=11989 + _CATALOGWRITTENMSG._serialized_start=11991 + _CATALOGWRITTENMSG._serialized_end=12091 + _CANNOTGENERATEDOCS._serialized_start=12093 + _CANNOTGENERATEDOCS._serialized_end=12113 + _CANNOTGENERATEDOCSMSG._serialized_start=12115 + _CANNOTGENERATEDOCSMSG._serialized_end=12223 + _BUILDINGCATALOG._serialized_start=12225 + _BUILDINGCATALOG._serialized_end=12242 + _BUILDINGCATALOGMSG._serialized_start=12244 + _BUILDINGCATALOGMSG._serialized_end=12346 + _DATABASEERRORRUNNINGHOOK._serialized_start=12348 + _DATABASEERRORRUNNINGHOOK._serialized_end=12393 + _DATABASEERRORRUNNINGHOOKMSG._serialized_start=12395 + _DATABASEERRORRUNNINGHOOKMSG._serialized_end=12515 + _HOOKSRUNNING._serialized_start=12517 + _HOOKSRUNNING._serialized_end=12569 + _HOOKSRUNNINGMSG._serialized_start=12571 + _HOOKSRUNNINGMSG._serialized_end=12667 + _FINISHEDRUNNINGSTATS._serialized_start=12669 + _FINISHEDRUNNINGSTATS._serialized_end=12753 + _FINISHEDRUNNINGSTATSMSG._serialized_start=12755 + _FINISHEDRUNNINGSTATSMSG._serialized_end=12867 + _INPUTFILEDIFFERROR._serialized_start=12869 + _INPUTFILEDIFFERROR._serialized_end=12924 + _INPUTFILEDIFFERRORMSG._serialized_start=12926 + _INPUTFILEDIFFERRORMSG._serialized_end=13034 + _INVALIDVALUEFORFIELD._serialized_start=13036 + _INVALIDVALUEFORFIELD._serialized_end=13099 + _INVALIDVALUEFORFIELDMSG._serialized_start=13101 + _INVALIDVALUEFORFIELDMSG._serialized_end=13213 + _VALIDATIONWARNING._serialized_start=13215 + _VALIDATIONWARNING._serialized_end=13296 + _VALIDATIONWARNINGMSG._serialized_start=13298 + _VALIDATIONWARNINGMSG._serialized_end=13404 + _PARSEPERFINFOPATH._serialized_start=13406 + _PARSEPERFINFOPATH._serialized_end=13439 + _PARSEPERFINFOPATHMSG._serialized_start=13441 + _PARSEPERFINFOPATHMSG._serialized_end=13547 + _GENERICTESTFILEPARSE._serialized_start=13549 + _GENERICTESTFILEPARSE._serialized_end=13585 + _GENERICTESTFILEPARSEMSG._serialized_start=13587 + _GENERICTESTFILEPARSEMSG._serialized_end=13699 + _MACROFILEPARSE._serialized_start=13701 + _MACROFILEPARSE._serialized_end=13731 + _MACROFILEPARSEMSG._serialized_start=13733 + _MACROFILEPARSEMSG._serialized_end=13833 + _PARTIALPARSINGERRORPROCESSINGFILE._serialized_start=13835 + _PARTIALPARSINGERRORPROCESSINGFILE._serialized_end=13884 + _PARTIALPARSINGERRORPROCESSINGFILEMSG._serialized_start=13887 + _PARTIALPARSINGERRORPROCESSINGFILEMSG._serialized_end=14025 + _PARTIALPARSINGERROR._serialized_start=14028 + _PARTIALPARSINGERROR._serialized_end=14162 + _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_start=14116 + _PARTIALPARSINGERROR_EXCINFOENTRY._serialized_end=14162 + _PARTIALPARSINGERRORMSG._serialized_start=14164 + _PARTIALPARSINGERRORMSG._serialized_end=14274 + _PARTIALPARSINGSKIPPARSING._serialized_start=14276 + _PARTIALPARSINGSKIPPARSING._serialized_end=14303 + _PARTIALPARSINGSKIPPARSINGMSG._serialized_start=14305 + _PARTIALPARSINGSKIPPARSINGMSG._serialized_end=14427 + _UNABLETOPARTIALPARSE._serialized_start=14429 + _UNABLETOPARTIALPARSE._serialized_end=14467 + _UNABLETOPARTIALPARSEMSG._serialized_start=14469 + _UNABLETOPARTIALPARSEMSG._serialized_end=14581 + _STATECHECKVARSHASH._serialized_start=14583 + _STATECHECKVARSHASH._serialized_end=14685 + _STATECHECKVARSHASHMSG._serialized_start=14687 + _STATECHECKVARSHASHMSG._serialized_end=14795 + _PARTIALPARSINGNOTENABLED._serialized_start=14797 + _PARTIALPARSINGNOTENABLED._serialized_end=14823 + _PARTIALPARSINGNOTENABLEDMSG._serialized_start=14825 + _PARTIALPARSINGNOTENABLEDMSG._serialized_end=14945 + _PARSEDFILELOADFAILED._serialized_start=14947 + _PARSEDFILELOADFAILED._serialized_end=15014 + _PARSEDFILELOADFAILEDMSG._serialized_start=15016 + _PARSEDFILELOADFAILEDMSG._serialized_end=15128 + _PARTIALPARSINGENABLED._serialized_start=15130 + _PARTIALPARSINGENABLED._serialized_end=15202 + _PARTIALPARSINGENABLEDMSG._serialized_start=15204 + _PARTIALPARSINGENABLEDMSG._serialized_end=15318 + _PARTIALPARSINGFILE._serialized_start=15320 + _PARTIALPARSINGFILE._serialized_end=15376 + _PARTIALPARSINGFILEMSG._serialized_start=15378 + _PARTIALPARSINGFILEMSG._serialized_end=15486 + _INVALIDDISABLEDTARGETINTESTNODE._serialized_start=15489 + _INVALIDDISABLEDTARGETINTESTNODE._serialized_end=15664 + _INVALIDDISABLEDTARGETINTESTNODEMSG._serialized_start=15667 + _INVALIDDISABLEDTARGETINTESTNODEMSG._serialized_end=15801 + _UNUSEDRESOURCECONFIGPATH._serialized_start=15803 + _UNUSEDRESOURCECONFIGPATH._serialized_end=15858 + _UNUSEDRESOURCECONFIGPATHMSG._serialized_start=15860 + _UNUSEDRESOURCECONFIGPATHMSG._serialized_end=15980 + _SEEDINCREASED._serialized_start=15982 + _SEEDINCREASED._serialized_end=16033 + _SEEDINCREASEDMSG._serialized_start=16035 + _SEEDINCREASEDMSG._serialized_end=16133 + _SEEDEXCEEDSLIMITSAMEPATH._serialized_start=16135 + _SEEDEXCEEDSLIMITSAMEPATH._serialized_end=16197 + _SEEDEXCEEDSLIMITSAMEPATHMSG._serialized_start=16199 + _SEEDEXCEEDSLIMITSAMEPATHMSG._serialized_end=16319 + _SEEDEXCEEDSLIMITANDPATHCHANGED._serialized_start=16321 + _SEEDEXCEEDSLIMITANDPATHCHANGED._serialized_end=16389 + _SEEDEXCEEDSLIMITANDPATHCHANGEDMSG._serialized_start=16392 + _SEEDEXCEEDSLIMITANDPATHCHANGEDMSG._serialized_end=16524 + _SEEDEXCEEDSLIMITCHECKSUMCHANGED._serialized_start=16526 + _SEEDEXCEEDSLIMITCHECKSUMCHANGED._serialized_end=16618 + _SEEDEXCEEDSLIMITCHECKSUMCHANGEDMSG._serialized_start=16621 + _SEEDEXCEEDSLIMITCHECKSUMCHANGEDMSG._serialized_end=16755 + _UNUSEDTABLES._serialized_start=16757 + _UNUSEDTABLES._serialized_end=16794 + _UNUSEDTABLESMSG._serialized_start=16796 + _UNUSEDTABLESMSG._serialized_end=16892 + _WRONGRESOURCESCHEMAFILE._serialized_start=16895 + _WRONGRESOURCESCHEMAFILE._serialized_end=17030 + _WRONGRESOURCESCHEMAFILEMSG._serialized_start=17032 + _WRONGRESOURCESCHEMAFILEMSG._serialized_end=17150 + _NONODEFORYAMLKEY._serialized_start=17152 + _NONODEFORYAMLKEY._serialized_end=17227 + _NONODEFORYAMLKEYMSG._serialized_start=17229 + _NONODEFORYAMLKEYMSG._serialized_end=17333 + _MACRONOTFOUNDFORPATCH._serialized_start=17335 + _MACRONOTFOUNDFORPATCH._serialized_end=17378 + _MACRONOTFOUNDFORPATCHMSG._serialized_start=17380 + _MACRONOTFOUNDFORPATCHMSG._serialized_end=17494 + _NODENOTFOUNDORDISABLED._serialized_start=17497 + _NODENOTFOUNDORDISABLED._serialized_end=17681 + _NODENOTFOUNDORDISABLEDMSG._serialized_start=17683 + _NODENOTFOUNDORDISABLEDMSG._serialized_end=17799 + _JINJALOGWARNING._serialized_start=17801 + _JINJALOGWARNING._serialized_end=17873 + _JINJALOGWARNINGMSG._serialized_start=17875 + _JINJALOGWARNINGMSG._serialized_end=17977 + _JINJALOGINFO._serialized_start=17979 + _JINJALOGINFO._serialized_end=18048 + _JINJALOGINFOMSG._serialized_start=18050 + _JINJALOGINFOMSG._serialized_end=18146 + _JINJALOGDEBUG._serialized_start=18148 + _JINJALOGDEBUG._serialized_end=18218 + _JINJALOGDEBUGMSG._serialized_start=18220 + _JINJALOGDEBUGMSG._serialized_end=18318 + _GITSPARSECHECKOUTSUBDIRECTORY._serialized_start=18320 + _GITSPARSECHECKOUTSUBDIRECTORY._serialized_end=18367 + _GITSPARSECHECKOUTSUBDIRECTORYMSG._serialized_start=18370 + _GITSPARSECHECKOUTSUBDIRECTORYMSG._serialized_end=18500 + _GITPROGRESSCHECKOUTREVISION._serialized_start=18502 + _GITPROGRESSCHECKOUTREVISION._serialized_end=18549 + _GITPROGRESSCHECKOUTREVISIONMSG._serialized_start=18551 + _GITPROGRESSCHECKOUTREVISIONMSG._serialized_end=18677 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCY._serialized_start=18679 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCY._serialized_end=18731 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCYMSG._serialized_start=18734 + _GITPROGRESSUPDATINGEXISTINGDEPENDENCYMSG._serialized_end=18880 + _GITPROGRESSPULLINGNEWDEPENDENCY._serialized_start=18882 + _GITPROGRESSPULLINGNEWDEPENDENCY._serialized_end=18928 + _GITPROGRESSPULLINGNEWDEPENDENCYMSG._serialized_start=18931 + _GITPROGRESSPULLINGNEWDEPENDENCYMSG._serialized_end=19065 + _GITNOTHINGTODO._serialized_start=19067 + _GITNOTHINGTODO._serialized_end=19096 + _GITNOTHINGTODOMSG._serialized_start=19098 + _GITNOTHINGTODOMSG._serialized_end=19198 + _GITPROGRESSUPDATEDCHECKOUTRANGE._serialized_start=19200 + _GITPROGRESSUPDATEDCHECKOUTRANGE._serialized_end=19269 + _GITPROGRESSUPDATEDCHECKOUTRANGEMSG._serialized_start=19272 + _GITPROGRESSUPDATEDCHECKOUTRANGEMSG._serialized_end=19406 + _GITPROGRESSCHECKEDOUTAT._serialized_start=19408 + _GITPROGRESSCHECKEDOUTAT._serialized_end=19450 + _GITPROGRESSCHECKEDOUTATMSG._serialized_start=19452 + _GITPROGRESSCHECKEDOUTATMSG._serialized_end=19570 + _REGISTRYPROGRESSGETREQUEST._serialized_start=19572 + _REGISTRYPROGRESSGETREQUEST._serialized_end=19613 + _REGISTRYPROGRESSGETREQUESTMSG._serialized_start=19615 + _REGISTRYPROGRESSGETREQUESTMSG._serialized_end=19739 + _REGISTRYPROGRESSGETRESPONSE._serialized_start=19741 + _REGISTRYPROGRESSGETRESPONSE._serialized_end=19802 + _REGISTRYPROGRESSGETRESPONSEMSG._serialized_start=19804 + _REGISTRYPROGRESSGETRESPONSEMSG._serialized_end=19930 + _SELECTORREPORTINVALIDSELECTOR._serialized_start=19932 + _SELECTORREPORTINVALIDSELECTOR._serialized_end=20027 + _SELECTORREPORTINVALIDSELECTORMSG._serialized_start=20030 + _SELECTORREPORTINVALIDSELECTORMSG._serialized_end=20160 + _DEPSNOPACKAGESFOUND._serialized_start=20162 + _DEPSNOPACKAGESFOUND._serialized_end=20183 + _DEPSNOPACKAGESFOUNDMSG._serialized_start=20185 + _DEPSNOPACKAGESFOUNDMSG._serialized_end=20295 + _DEPSSTARTPACKAGEINSTALL._serialized_start=20297 + _DEPSSTARTPACKAGEINSTALL._serialized_end=20344 + _DEPSSTARTPACKAGEINSTALLMSG._serialized_start=20346 + _DEPSSTARTPACKAGEINSTALLMSG._serialized_end=20464 + _DEPSINSTALLINFO._serialized_start=20466 + _DEPSINSTALLINFO._serialized_end=20505 + _DEPSINSTALLINFOMSG._serialized_start=20507 + _DEPSINSTALLINFOMSG._serialized_end=20609 + _DEPSUPDATEAVAILABLE._serialized_start=20611 + _DEPSUPDATEAVAILABLE._serialized_end=20656 + _DEPSUPDATEAVAILABLEMSG._serialized_start=20658 + _DEPSUPDATEAVAILABLEMSG._serialized_end=20768 + _DEPSUPTODATE._serialized_start=20770 + _DEPSUPTODATE._serialized_end=20784 + _DEPSUPTODATEMSG._serialized_start=20786 + _DEPSUPTODATEMSG._serialized_end=20882 + _DEPSLISTSUBDIRECTORY._serialized_start=20884 + _DEPSLISTSUBDIRECTORY._serialized_end=20928 + _DEPSLISTSUBDIRECTORYMSG._serialized_start=20930 + _DEPSLISTSUBDIRECTORYMSG._serialized_end=21042 + _DEPSNOTIFYUPDATESAVAILABLE._serialized_start=21044 + _DEPSNOTIFYUPDATESAVAILABLE._serialized_end=21118 + _DEPSNOTIFYUPDATESAVAILABLEMSG._serialized_start=21120 + _DEPSNOTIFYUPDATESAVAILABLEMSG._serialized_end=21244 + _RETRYEXTERNALCALL._serialized_start=21246 + _RETRYEXTERNALCALL._serialized_end=21295 + _RETRYEXTERNALCALLMSG._serialized_start=21297 + _RETRYEXTERNALCALLMSG._serialized_end=21403 + _RECORDRETRYEXCEPTION._serialized_start=21405 + _RECORDRETRYEXCEPTION._serialized_end=21440 + _RECORDRETRYEXCEPTIONMSG._serialized_start=21442 + _RECORDRETRYEXCEPTIONMSG._serialized_end=21554 + _REGISTRYINDEXPROGRESSGETREQUEST._serialized_start=21556 + _REGISTRYINDEXPROGRESSGETREQUEST._serialized_end=21602 + _REGISTRYINDEXPROGRESSGETREQUESTMSG._serialized_start=21605 + _REGISTRYINDEXPROGRESSGETREQUESTMSG._serialized_end=21739 + _REGISTRYINDEXPROGRESSGETRESPONSE._serialized_start=21741 + _REGISTRYINDEXPROGRESSGETRESPONSE._serialized_end=21807 + _REGISTRYINDEXPROGRESSGETRESPONSEMSG._serialized_start=21810 + _REGISTRYINDEXPROGRESSGETRESPONSEMSG._serialized_end=21946 + _REGISTRYRESPONSEUNEXPECTEDTYPE._serialized_start=21948 + _REGISTRYRESPONSEUNEXPECTEDTYPE._serialized_end=21998 + _REGISTRYRESPONSEUNEXPECTEDTYPEMSG._serialized_start=22001 + _REGISTRYRESPONSEUNEXPECTEDTYPEMSG._serialized_end=22133 + _REGISTRYRESPONSEMISSINGTOPKEYS._serialized_start=22135 + _REGISTRYRESPONSEMISSINGTOPKEYS._serialized_end=22185 + _REGISTRYRESPONSEMISSINGTOPKEYSMSG._serialized_start=22188 + _REGISTRYRESPONSEMISSINGTOPKEYSMSG._serialized_end=22320 + _REGISTRYRESPONSEMISSINGNESTEDKEYS._serialized_start=22322 + _REGISTRYRESPONSEMISSINGNESTEDKEYS._serialized_end=22375 + _REGISTRYRESPONSEMISSINGNESTEDKEYSMSG._serialized_start=22378 + _REGISTRYRESPONSEMISSINGNESTEDKEYSMSG._serialized_end=22516 + _REGISTRYRESPONSEEXTRANESTEDKEYS._serialized_start=22518 + _REGISTRYRESPONSEEXTRANESTEDKEYS._serialized_end=22569 + _REGISTRYRESPONSEEXTRANESTEDKEYSMSG._serialized_start=22572 + _REGISTRYRESPONSEEXTRANESTEDKEYSMSG._serialized_end=22706 + _DEPSSETDOWNLOADDIRECTORY._serialized_start=22708 + _DEPSSETDOWNLOADDIRECTORY._serialized_end=22748 + _DEPSSETDOWNLOADDIRECTORYMSG._serialized_start=22750 + _DEPSSETDOWNLOADDIRECTORYMSG._serialized_end=22870 + _DEPSUNPINNED._serialized_start=22872 + _DEPSUNPINNED._serialized_end=22917 + _DEPSUNPINNEDMSG._serialized_start=22919 + _DEPSUNPINNEDMSG._serialized_end=23015 + _NONODESFORSELECTIONCRITERIA._serialized_start=23017 + _NONODESFORSELECTIONCRITERIA._serialized_end=23064 + _NONODESFORSELECTIONCRITERIAMSG._serialized_start=23066 + _NONODESFORSELECTIONCRITERIAMSG._serialized_end=23192 + _RUNNINGOPERATIONCAUGHTERROR._serialized_start=23194 + _RUNNINGOPERATIONCAUGHTERROR._serialized_end=23236 + _RUNNINGOPERATIONCAUGHTERRORMSG._serialized_start=23238 + _RUNNINGOPERATIONCAUGHTERRORMSG._serialized_end=23364 + _COMPILECOMPLETE._serialized_start=23366 + _COMPILECOMPLETE._serialized_end=23383 + _COMPILECOMPLETEMSG._serialized_start=23385 + _COMPILECOMPLETEMSG._serialized_end=23487 + _FRESHNESSCHECKCOMPLETE._serialized_start=23489 + _FRESHNESSCHECKCOMPLETE._serialized_end=23513 + _FRESHNESSCHECKCOMPLETEMSG._serialized_start=23515 + _FRESHNESSCHECKCOMPLETEMSG._serialized_end=23631 + _SEEDHEADER._serialized_start=23633 + _SEEDHEADER._serialized_end=23661 + _SEEDHEADERMSG._serialized_start=23663 + _SEEDHEADERMSG._serialized_end=23755 + _SQLRUNNEREXCEPTION._serialized_start=23757 + _SQLRUNNEREXCEPTION._serialized_end=23808 + _SQLRUNNEREXCEPTIONMSG._serialized_start=23810 + _SQLRUNNEREXCEPTIONMSG._serialized_end=23918 + _LOGTESTRESULT._serialized_start=23921 + _LOGTESTRESULT._serialized_end=24089 + _LOGTESTRESULTMSG._serialized_start=24091 + _LOGTESTRESULTMSG._serialized_end=24189 + _LOGSTARTLINE._serialized_start=24191 + _LOGSTARTLINE._serialized_end=24298 + _LOGSTARTLINEMSG._serialized_start=24300 + _LOGSTARTLINEMSG._serialized_end=24396 + _LOGMODELRESULT._serialized_start=24399 + _LOGMODELRESULT._serialized_end=24548 + _LOGMODELRESULTMSG._serialized_start=24550 + _LOGMODELRESULTMSG._serialized_end=24650 + _LOGSNAPSHOTRESULT._serialized_start=24653 + _LOGSNAPSHOTRESULT._serialized_end=24903 + _LOGSNAPSHOTRESULT_CFGENTRY._serialized_start=24861 + _LOGSNAPSHOTRESULT_CFGENTRY._serialized_end=24903 + _LOGSNAPSHOTRESULTMSG._serialized_start=24905 + _LOGSNAPSHOTRESULTMSG._serialized_end=25011 + _LOGSEEDRESULT._serialized_start=25014 + _LOGSEEDRESULT._serialized_end=25199 + _LOGSEEDRESULTMSG._serialized_start=25201 + _LOGSEEDRESULTMSG._serialized_end=25299 + _LOGFRESHNESSRESULT._serialized_start=25302 + _LOGFRESHNESSRESULT._serialized_end=25475 + _LOGFRESHNESSRESULTMSG._serialized_start=25477 + _LOGFRESHNESSRESULTMSG._serialized_end=25585 + _LOGCANCELLINE._serialized_start=25587 + _LOGCANCELLINE._serialized_end=25621 + _LOGCANCELLINEMSG._serialized_start=25623 + _LOGCANCELLINEMSG._serialized_end=25721 + _DEFAULTSELECTOR._serialized_start=25723 + _DEFAULTSELECTOR._serialized_end=25754 + _DEFAULTSELECTORMSG._serialized_start=25756 + _DEFAULTSELECTORMSG._serialized_end=25858 + _NODESTART._serialized_start=25860 + _NODESTART._serialized_end=25913 + _NODESTARTMSG._serialized_start=25915 + _NODESTARTMSG._serialized_end=26005 + _NODEFINISHED._serialized_start=26007 + _NODEFINISHED._serialized_end=26110 + _NODEFINISHEDMSG._serialized_start=26112 + _NODEFINISHEDMSG._serialized_end=26208 + _QUERYCANCELATIONUNSUPPORTED._serialized_start=26210 + _QUERYCANCELATIONUNSUPPORTED._serialized_end=26253 + _QUERYCANCELATIONUNSUPPORTEDMSG._serialized_start=26255 + _QUERYCANCELATIONUNSUPPORTEDMSG._serialized_end=26381 + _CONCURRENCYLINE._serialized_start=26383 + _CONCURRENCYLINE._serialized_end=26462 + _CONCURRENCYLINEMSG._serialized_start=26464 + _CONCURRENCYLINEMSG._serialized_end=26566 + _COMPILEDNODE._serialized_start=26568 + _COMPILEDNODE._serialized_end=26619 + _COMPILEDNODEMSG._serialized_start=26621 + _COMPILEDNODEMSG._serialized_end=26717 + _WRITINGINJECTEDSQLFORNODE._serialized_start=26719 + _WRITINGINJECTEDSQLFORNODE._serialized_end=26788 + _WRITINGINJECTEDSQLFORNODEMSG._serialized_start=26790 + _WRITINGINJECTEDSQLFORNODEMSG._serialized_end=26912 + _NODECOMPILING._serialized_start=26914 + _NODECOMPILING._serialized_end=26971 + _NODECOMPILINGMSG._serialized_start=26973 + _NODECOMPILINGMSG._serialized_end=27071 + _NODEEXECUTING._serialized_start=27073 + _NODEEXECUTING._serialized_end=27130 + _NODEEXECUTINGMSG._serialized_start=27132 + _NODEEXECUTINGMSG._serialized_end=27230 + _LOGHOOKSTARTLINE._serialized_start=27232 + _LOGHOOKSTARTLINE._serialized_end=27341 + _LOGHOOKSTARTLINEMSG._serialized_start=27343 + _LOGHOOKSTARTLINEMSG._serialized_end=27447 + _LOGHOOKENDLINE._serialized_start=27450 + _LOGHOOKENDLINE._serialized_end=27597 + _LOGHOOKENDLINEMSG._serialized_start=27599 + _LOGHOOKENDLINEMSG._serialized_end=27699 + _SKIPPINGDETAILS._serialized_start=27702 + _SKIPPINGDETAILS._serialized_end=27849 + _SKIPPINGDETAILSMSG._serialized_start=27851 + _SKIPPINGDETAILSMSG._serialized_end=27953 + _NOTHINGTODO._serialized_start=27955 + _NOTHINGTODO._serialized_end=27968 + _NOTHINGTODOMSG._serialized_start=27970 + _NOTHINGTODOMSG._serialized_end=28064 + _RUNNINGOPERATIONUNCAUGHTERROR._serialized_start=28066 + _RUNNINGOPERATIONUNCAUGHTERROR._serialized_end=28110 + _RUNNINGOPERATIONUNCAUGHTERRORMSG._serialized_start=28113 + _RUNNINGOPERATIONUNCAUGHTERRORMSG._serialized_end=28243 + _ENDRUNRESULT._serialized_start=28246 + _ENDRUNRESULT._serialized_end=28393 + _ENDRUNRESULTMSG._serialized_start=28395 + _ENDRUNRESULTMSG._serialized_end=28491 + _NONODESSELECTED._serialized_start=28493 + _NONODESSELECTED._serialized_end=28510 + _NONODESSELECTEDMSG._serialized_start=28512 + _NONODESSELECTEDMSG._serialized_end=28614 + _COMMANDCOMPLETED._serialized_start=28616 + _COMMANDCOMPLETED._serialized_end=28735 + _COMMANDCOMPLETEDMSG._serialized_start=28737 + _COMMANDCOMPLETEDMSG._serialized_end=28841 + _CATCHABLEEXCEPTIONONRUN._serialized_start=28843 + _CATCHABLEEXCEPTIONONRUN._serialized_end=28941 + _CATCHABLEEXCEPTIONONRUNMSG._serialized_start=28943 + _CATCHABLEEXCEPTIONONRUNMSG._serialized_end=29061 + _INTERNALERRORONRUN._serialized_start=29063 + _INTERNALERRORONRUN._serialized_end=29116 + _INTERNALERRORONRUNMSG._serialized_start=29118 + _INTERNALERRORONRUNMSG._serialized_end=29226 + _GENERICEXCEPTIONONRUN._serialized_start=29228 + _GENERICEXCEPTIONONRUN._serialized_end=29303 + _GENERICEXCEPTIONONRUNMSG._serialized_start=29305 + _GENERICEXCEPTIONONRUNMSG._serialized_end=29419 + _NODECONNECTIONRELEASEERROR._serialized_start=29421 + _NODECONNECTIONRELEASEERROR._serialized_end=29499 + _NODECONNECTIONRELEASEERRORMSG._serialized_start=29501 + _NODECONNECTIONRELEASEERRORMSG._serialized_end=29625 + _FOUNDSTATS._serialized_start=29627 + _FOUNDSTATS._serialized_end=29658 + _FOUNDSTATSMSG._serialized_start=29660 + _FOUNDSTATSMSG._serialized_end=29752 + _MAINKEYBOARDINTERRUPT._serialized_start=29754 + _MAINKEYBOARDINTERRUPT._serialized_end=29777 + _MAINKEYBOARDINTERRUPTMSG._serialized_start=29779 + _MAINKEYBOARDINTERRUPTMSG._serialized_end=29893 + _MAINENCOUNTEREDERROR._serialized_start=29895 + _MAINENCOUNTEREDERROR._serialized_end=29930 + _MAINENCOUNTEREDERRORMSG._serialized_start=29932 + _MAINENCOUNTEREDERRORMSG._serialized_end=30044 + _MAINSTACKTRACE._serialized_start=30046 + _MAINSTACKTRACE._serialized_end=30083 + _MAINSTACKTRACEMSG._serialized_start=30085 + _MAINSTACKTRACEMSG._serialized_end=30185 + _SYSTEMCOULDNOTWRITE._serialized_start=30187 + _SYSTEMCOULDNOTWRITE._serialized_end=30251 + _SYSTEMCOULDNOTWRITEMSG._serialized_start=30253 + _SYSTEMCOULDNOTWRITEMSG._serialized_end=30363 + _SYSTEMEXECUTINGCMD._serialized_start=30365 + _SYSTEMEXECUTINGCMD._serialized_end=30398 + _SYSTEMEXECUTINGCMDMSG._serialized_start=30400 + _SYSTEMEXECUTINGCMDMSG._serialized_end=30508 + _SYSTEMSTDOUT._serialized_start=30510 + _SYSTEMSTDOUT._serialized_end=30538 + _SYSTEMSTDOUTMSG._serialized_start=30540 + _SYSTEMSTDOUTMSG._serialized_end=30636 + _SYSTEMSTDERR._serialized_start=30638 + _SYSTEMSTDERR._serialized_end=30666 + _SYSTEMSTDERRMSG._serialized_start=30668 + _SYSTEMSTDERRMSG._serialized_end=30764 + _SYSTEMREPORTRETURNCODE._serialized_start=30766 + _SYSTEMREPORTRETURNCODE._serialized_end=30810 + _SYSTEMREPORTRETURNCODEMSG._serialized_start=30812 + _SYSTEMREPORTRETURNCODEMSG._serialized_end=30928 + _TIMINGINFOCOLLECTED._serialized_start=30930 + _TIMINGINFOCOLLECTED._serialized_end=31042 + _TIMINGINFOCOLLECTEDMSG._serialized_start=31044 + _TIMINGINFOCOLLECTEDMSG._serialized_end=31154 + _LOGDEBUGSTACKTRACE._serialized_start=31156 + _LOGDEBUGSTACKTRACE._serialized_end=31194 + _LOGDEBUGSTACKTRACEMSG._serialized_start=31196 + _LOGDEBUGSTACKTRACEMSG._serialized_end=31304 + _CHECKCLEANPATH._serialized_start=31306 + _CHECKCLEANPATH._serialized_end=31336 + _CHECKCLEANPATHMSG._serialized_start=31338 + _CHECKCLEANPATHMSG._serialized_end=31438 + _CONFIRMCLEANPATH._serialized_start=31440 + _CONFIRMCLEANPATH._serialized_end=31472 + _CONFIRMCLEANPATHMSG._serialized_start=31474 + _CONFIRMCLEANPATHMSG._serialized_end=31578 + _PROTECTEDCLEANPATH._serialized_start=31580 + _PROTECTEDCLEANPATH._serialized_end=31614 + _PROTECTEDCLEANPATHMSG._serialized_start=31616 + _PROTECTEDCLEANPATHMSG._serialized_end=31724 + _FINISHEDCLEANPATHS._serialized_start=31726 + _FINISHEDCLEANPATHS._serialized_end=31746 + _FINISHEDCLEANPATHSMSG._serialized_start=31748 + _FINISHEDCLEANPATHSMSG._serialized_end=31856 + _OPENCOMMAND._serialized_start=31858 + _OPENCOMMAND._serialized_end=31911 + _OPENCOMMANDMSG._serialized_start=31913 + _OPENCOMMANDMSG._serialized_end=32007 + _FORMATTING._serialized_start=32009 + _FORMATTING._serialized_end=32034 + _FORMATTINGMSG._serialized_start=32036 + _FORMATTINGMSG._serialized_end=32128 + _SERVINGDOCSPORT._serialized_start=32130 + _SERVINGDOCSPORT._serialized_end=32178 + _SERVINGDOCSPORTMSG._serialized_start=32180 + _SERVINGDOCSPORTMSG._serialized_end=32282 + _SERVINGDOCSACCESSINFO._serialized_start=32284 + _SERVINGDOCSACCESSINFO._serialized_end=32321 + _SERVINGDOCSACCESSINFOMSG._serialized_start=32323 + _SERVINGDOCSACCESSINFOMSG._serialized_end=32437 + _SERVINGDOCSEXITINFO._serialized_start=32439 + _SERVINGDOCSEXITINFO._serialized_end=32460 + _SERVINGDOCSEXITINFOMSG._serialized_start=32462 + _SERVINGDOCSEXITINFOMSG._serialized_end=32572 + _RUNRESULTWARNING._serialized_start=32574 + _RUNRESULTWARNING._serialized_end=32648 + _RUNRESULTWARNINGMSG._serialized_start=32650 + _RUNRESULTWARNINGMSG._serialized_end=32754 + _RUNRESULTFAILURE._serialized_start=32756 + _RUNRESULTFAILURE._serialized_end=32830 + _RUNRESULTFAILUREMSG._serialized_start=32832 + _RUNRESULTFAILUREMSG._serialized_end=32936 + _STATSLINE._serialized_start=32938 + _STATSLINE._serialized_end=33045 + _STATSLINE_STATSENTRY._serialized_start=33001 + _STATSLINE_STATSENTRY._serialized_end=33045 + _STATSLINEMSG._serialized_start=33047 + _STATSLINEMSG._serialized_end=33137 + _RUNRESULTERROR._serialized_start=33139 + _RUNRESULTERROR._serialized_end=33168 + _RUNRESULTERRORMSG._serialized_start=33170 + _RUNRESULTERRORMSG._serialized_end=33270 + _RUNRESULTERRORNOMESSAGE._serialized_start=33272 + _RUNRESULTERRORNOMESSAGE._serialized_end=33313 + _RUNRESULTERRORNOMESSAGEMSG._serialized_start=33315 + _RUNRESULTERRORNOMESSAGEMSG._serialized_end=33433 + _SQLCOMPILEDPATH._serialized_start=33435 + _SQLCOMPILEDPATH._serialized_end=33466 + _SQLCOMPILEDPATHMSG._serialized_start=33468 + _SQLCOMPILEDPATHMSG._serialized_end=33570 + _CHECKNODETESTFAILURE._serialized_start=33572 + _CHECKNODETESTFAILURE._serialized_end=33617 + _CHECKNODETESTFAILUREMSG._serialized_start=33619 + _CHECKNODETESTFAILUREMSG._serialized_end=33731 + _FIRSTRUNRESULTERROR._serialized_start=33733 + _FIRSTRUNRESULTERROR._serialized_end=33767 + _FIRSTRUNRESULTERRORMSG._serialized_start=33769 + _FIRSTRUNRESULTERRORMSG._serialized_end=33879 + _AFTERFIRSTRUNRESULTERROR._serialized_start=33881 + _AFTERFIRSTRUNRESULTERROR._serialized_end=33920 + _AFTERFIRSTRUNRESULTERRORMSG._serialized_start=33922 + _AFTERFIRSTRUNRESULTERRORMSG._serialized_end=34042 + _ENDOFRUNSUMMARY._serialized_start=34044 + _ENDOFRUNSUMMARY._serialized_end=34131 + _ENDOFRUNSUMMARYMSG._serialized_start=34133 + _ENDOFRUNSUMMARYMSG._serialized_end=34235 + _LOGSKIPBECAUSEERROR._serialized_start=34237 + _LOGSKIPBECAUSEERROR._serialized_end=34322 + _LOGSKIPBECAUSEERRORMSG._serialized_start=34324 + _LOGSKIPBECAUSEERRORMSG._serialized_end=34434 + _ENSUREGITINSTALLED._serialized_start=34436 + _ENSUREGITINSTALLED._serialized_end=34456 + _ENSUREGITINSTALLEDMSG._serialized_start=34458 + _ENSUREGITINSTALLEDMSG._serialized_end=34566 + _DEPSCREATINGLOCALSYMLINK._serialized_start=34568 + _DEPSCREATINGLOCALSYMLINK._serialized_end=34594 + _DEPSCREATINGLOCALSYMLINKMSG._serialized_start=34596 + _DEPSCREATINGLOCALSYMLINKMSG._serialized_end=34716 + _DEPSSYMLINKNOTAVAILABLE._serialized_start=34718 + _DEPSSYMLINKNOTAVAILABLE._serialized_end=34743 + _DEPSSYMLINKNOTAVAILABLEMSG._serialized_start=34745 + _DEPSSYMLINKNOTAVAILABLEMSG._serialized_end=34863 + _DISABLETRACKING._serialized_start=34865 + _DISABLETRACKING._serialized_end=34882 + _DISABLETRACKINGMSG._serialized_start=34884 + _DISABLETRACKINGMSG._serialized_end=34986 + _SENDINGEVENT._serialized_start=34988 + _SENDINGEVENT._serialized_end=35018 + _SENDINGEVENTMSG._serialized_start=35020 + _SENDINGEVENTMSG._serialized_end=35116 + _SENDEVENTFAILURE._serialized_start=35118 + _SENDEVENTFAILURE._serialized_end=35136 + _SENDEVENTFAILUREMSG._serialized_start=35138 + _SENDEVENTFAILUREMSG._serialized_end=35242 + _FLUSHEVENTS._serialized_start=35244 + _FLUSHEVENTS._serialized_end=35257 + _FLUSHEVENTSMSG._serialized_start=35259 + _FLUSHEVENTSMSG._serialized_end=35353 + _FLUSHEVENTSFAILURE._serialized_start=35355 + _FLUSHEVENTSFAILURE._serialized_end=35375 + _FLUSHEVENTSFAILUREMSG._serialized_start=35377 + _FLUSHEVENTSFAILUREMSG._serialized_end=35485 + _TRACKINGINITIALIZEFAILURE._serialized_start=35487 + _TRACKINGINITIALIZEFAILURE._serialized_end=35532 + _TRACKINGINITIALIZEFAILUREMSG._serialized_start=35534 + _TRACKINGINITIALIZEFAILUREMSG._serialized_end=35656 + _RUNRESULTWARNINGMESSAGE._serialized_start=35658 + _RUNRESULTWARNINGMESSAGE._serialized_end=35696 + _RUNRESULTWARNINGMESSAGEMSG._serialized_start=35698 + _RUNRESULTWARNINGMESSAGEMSG._serialized_end=35816 + _DEBUGCMDOUT._serialized_start=35818 + _DEBUGCMDOUT._serialized_end=35844 + _DEBUGCMDOUTMSG._serialized_start=35846 + _DEBUGCMDOUTMSG._serialized_end=35940 + _DEBUGCMDRESULT._serialized_start=35942 + _DEBUGCMDRESULT._serialized_end=35971 + _DEBUGCMDRESULTMSG._serialized_start=35973 + _DEBUGCMDRESULTMSG._serialized_end=36073 + _LISTCMDOUT._serialized_start=36075 + _LISTCMDOUT._serialized_end=36100 + _LISTCMDOUTMSG._serialized_start=36102 + _LISTCMDOUTMSG._serialized_end=36194 + _NOTE._serialized_start=36196 + _NOTE._serialized_end=36215 + _NOTEMSG._serialized_start=36217 + _NOTEMSG._serialized_end=36297 +# @@protoc_insertion_point(module_scope) diff --git a/core/dbt/parser/models.py b/core/dbt/parser/models.py index c18c4a6a80c..ed65268fc76 100644 --- a/core/dbt/parser/models.py +++ b/core/dbt/parser/models.py @@ -247,7 +247,9 @@ def render_update(self, node: ModelNode, config: ContextConfig) -> None: # jinja rendering super().render_update(node, config) fire_event( - Note(f"1605: jinja rendering because of STATIC_PARSER flag. file: {node.path}"), + Note( + msg=f"1605: jinja rendering because of STATIC_PARSER flag. file: {node.path}" + ), EventLevel.DEBUG, ) return @@ -284,7 +286,7 @@ def render_update(self, node: ModelNode, config: ContextConfig) -> None: # sample the experimental parser only during a normal run if exp_sample and not flags.USE_EXPERIMENTAL_PARSER: fire_event( - Note(f"1610: conducting experimental parser sample on {node.path}"), + Note(msg=f"1610: conducting experimental parser sample on {node.path}"), EventLevel.DEBUG, ) experimental_sample = self.run_experimental_parser(node) @@ -317,7 +319,7 @@ def render_update(self, node: ModelNode, config: ContextConfig) -> None: # it 40% of the time. So I've opted to keep all the rng code colocated above. if stable_sample and not flags.USE_EXPERIMENTAL_PARSER: fire_event( - Note(f"1611: conducting full jinja rendering sample on {node.path}"), + Note(msg=f"1611: conducting full jinja rendering sample on {node.path}"), EventLevel.DEBUG, ) # if this will _never_ mutate anything `self` we could avoid these deep copies, @@ -355,7 +357,8 @@ def render_update(self, node: ModelNode, config: ContextConfig) -> None: # jinja rendering super().render_update(node, config) fire_event( - Note(f"1602: parser fallback to jinja rendering on {node.path}"), EventLevel.DEBUG + Note(msg=f"1602: parser fallback to jinja rendering on {node.path}"), + EventLevel.DEBUG, ) # if sampling, add the correct messages for tracking @@ -394,7 +397,7 @@ def run_static_parser(self, node: ModelNode) -> Optional[Union[str, Dict[str, Li # test/integration/072_experimental_parser_tests/test_all_experimental_parser.py fire_event( Note( - f"1601: detected macro override of ref/source/config in the scope of {node.path}" + msg=f"1601: detected macro override of ref/source/config in the scope of {node.path}" ), EventLevel.DEBUG, ) @@ -404,14 +407,14 @@ def run_static_parser(self, node: ModelNode) -> Optional[Union[str, Dict[str, Li try: statically_parsed = py_extract_from_source(node.raw_code) fire_event( - Note(f"1699: static parser successfully parsed {node.path}"), EventLevel.DEBUG + Note(msg=f"1699: static parser successfully parsed {node.path}"), EventLevel.DEBUG ) return _shift_sources(statically_parsed) # if we want information on what features are barring the static # parser from reading model files, this is where we would add that # since that information is stored in the `ExtractionError`. except ExtractionError: - fire_event(Note(f"1603: static parser failed on {node.path}"), EventLevel.DEBUG) + fire_event(Note(msg=f"1603: static parser failed on {node.path}"), EventLevel.DEBUG) return "cannot_parse" def run_experimental_parser( @@ -424,7 +427,7 @@ def run_experimental_parser( # test/integration/072_experimental_parser_tests/test_all_experimental_parser.py fire_event( Note( - f"1601: detected macro override of ref/source/config in the scope of {node.path}" + msg=f"1601: detected macro override of ref/source/config in the scope of {node.path}" ), EventLevel.DEBUG, ) @@ -437,7 +440,7 @@ def run_experimental_parser( # experimental call when we add additional features. experimentally_parsed = py_extract_from_source(node.raw_code) fire_event( - Note(f"1698: experimental parser successfully parsed {node.path}"), + Note(msg=f"1698: experimental parser successfully parsed {node.path}"), EventLevel.DEBUG, ) return _shift_sources(experimentally_parsed) @@ -445,7 +448,9 @@ def run_experimental_parser( # parser from reading model files, this is where we would add that # since that information is stored in the `ExtractionError`. except ExtractionError: - fire_event(Note(f"1604: experimental parser failed on {node.path}"), EventLevel.DEBUG) + fire_event( + Note(msg=f"1604: experimental parser failed on {node.path}"), EventLevel.DEBUG + ) return "cannot_parse" # checks for banned macros diff --git a/core/dbt/task/deps.py b/core/dbt/task/deps.py index 6db6ed20333..3f194db01d6 100644 --- a/core/dbt/task/deps.py +++ b/core/dbt/task/deps.py @@ -9,7 +9,6 @@ from dbt.deps.resolver import resolve_packages from dbt.deps.registry import RegistryPinnedPackage -from dbt.events.proto_types import ListOfStrings from dbt.events.functions import fire_event from dbt.events.types import ( DepsNoPackagesFound, @@ -90,4 +89,4 @@ def run(self) -> None: ) if packages_to_upgrade: fire_event(Formatting("")) - fire_event(DepsNotifyUpdatesAvailable(packages=ListOfStrings(packages_to_upgrade))) + fire_event(DepsNotifyUpdatesAvailable(packages=packages_to_upgrade)) diff --git a/core/dbt/task/runnable.py b/core/dbt/task/runnable.py index 20012cef1e1..c4bd99e9960 100644 --- a/core/dbt/task/runnable.py +++ b/core/dbt/task/runnable.py @@ -198,7 +198,7 @@ def call_runner(self, runner): fire_event( NodeFinished( node_info=runner.node.node_info, - run_result=result.to_msg(), + run_result=result.to_msg_dict(), ) ) # `_event_status` dict is only used for logging. Make sure @@ -439,11 +439,11 @@ def run(self): # We have other result types here too, including FreshnessResult if isinstance(result, RunExecutionResult): - result_msgs = [result.to_msg() for result in result.results] + result_msgs = [result.to_msg_dict() for result in result.results] fire_event( EndRunResult( results=result_msgs, - generated_at=result.generated_at, + generated_at=result.generated_at.strftime("%Y-%m-%dT%H:%M:%SZ"), elapsed_time=result.elapsed_time, success=GraphRunnableTask.interpret_results(result.results), ) diff --git a/core/dbt/tests/util.py b/core/dbt/tests/util.py index d97816ac14c..fd94b1c832a 100644 --- a/core/dbt/tests/util.py +++ b/core/dbt/tests/util.py @@ -18,7 +18,8 @@ stop_capture_stdout_logs, reset_metadata_vars, ) -from dbt.events.test_types import IntegrationTestDebug +from dbt.events.base_types import EventLevel +from dbt.events.types import Note # ============================================================================= @@ -275,7 +276,7 @@ def run_sql_with_adapter(adapter, sql, fetch=None): sql = sql.format(**kwargs) msg = f'test connection "__test" executing: {sql}' - fire_event(IntegrationTestDebug(msg=msg)) + fire_event(Note(msg=msg), level=EventLevel.DEBUG) with get_connection(adapter) as conn: return adapter.run_sql_for_tests(sql, fetch, conn) diff --git a/core/setup.py b/core/setup.py index f7295869938..9fe0368477f 100644 --- a/core/setup.py +++ b/core/setup.py @@ -48,7 +48,6 @@ install_requires=[ "Jinja2==3.1.2", "agate>=1.6,<1.7.1", - "betterproto==1.2.5", "click>=7.0,<9", "colorama>=0.3.9,<0.4.7", "hologram>=0.0.14,<=0.0.15", @@ -64,6 +63,7 @@ "typing-extensions>=3.7.4", "werkzeug>=1,<3", "pathspec>=0.9,<0.12", + "protobuf>=3.18.3", "pytz>=2015.7", # the following are all to match snowflake-connector-python "requests<3.0.0", diff --git a/dev-requirements.txt b/dev-requirements.txt index 98546de0b06..fb9212d5750 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,4 +1,3 @@ -betterproto[compiler]==1.2.5 black==22.12.0 bumpversion docutils diff --git a/docs/arch/adr-005-betterproto.md b/docs/arch/adr-005-betterproto.md index e530e80c565..fba78e655cb 100644 --- a/docs/arch/adr-005-betterproto.md +++ b/docs/arch/adr-005-betterproto.md @@ -3,7 +3,7 @@ ## Context We are providing proto definitions for our structured logging messages, and as part of that we need to also have Python classes for use in our Python codebase -### Options +### Options, August 30, 2022 #### Google protobuf package @@ -11,7 +11,7 @@ You can use the google protobuf package to generate Python "classes", using the * It's not readable. There are no identifiable classes in the output. * A "class" is generated using a metaclass when it is used. -* There are lots of warnings about not subclassing the generated "classes". +* You can't subclass the generated classes, which don't act much like Python objects * Since you can't put defaults or methods of any kind in these classes, and you can't subclass them, they aren't very usable in Python. * Generated classes are not easily importable * Serialization is via external utilities. @@ -28,8 +28,26 @@ You can use the google protobuf package to generate Python "classes", using the * Additional benefits listed: [betterproto](https://github.com/danielgtaylor/python-betterproto) +## Revisited, March 21, 2023 -## Status -Implementing +We are switching away from using betterproto because of the following reasons: +* betterproto only suppports Optional fields in a beta release +* betterproto has had only beta releases for a few years +* betterproto doesn't support Struct, which we really need +* betterproto started changing our message names to be more "pythonic" -# Consequences +Steps taken to mitigate the drawbacks of Google protobuf from above: +* We are using a wrapping class around the logging events to enable a constructor that looks more like a Python constructor, as long as only keyword arguments are used. +* The generated file is skipped in the pre-commit config +* We can live with the awkward interfaces. It's just code. + +Advantages of Google protobuf: +* Message can be constructed from a dictionary of all message values. With betterproto you had to pre-construct nested message objects, which kind of forced you to sprinkle generated message objects through the codebase. +* The Struct support works really well +* Type errors are caught much earlier and more consistently. Betterproto would accept fields of the wrong types, which was sometimes caught on serialization to a dictionary, and sometimes not until serialized to a binary string. Sometimes not at all. + +Disadvantages of Google protobuf: +* You can't just set nested message objects, you have to use CopyFrom. Just code, again. +* If you try to stringify parts of the message (like in the constructed event message) it outputs in a bizarre "user friendly" format. Really bad for Struct, in particular. +* Python messages aren't really Python. You can't expect them to *act* like normal Python objects. So they are best kept isolated to the logging code only. +* As part of the not-really-Python, you can't use added classes to act like flags (Cache, NoFile, etc), since you can only use the bare generated message to construct other messages. diff --git a/test/unit/test_cache.py b/test/unit/test_cache.py index f6f981e7144..3cc167fc783 100644 --- a/test/unit/test_cache.py +++ b/test/unit/test_cache.py @@ -6,6 +6,10 @@ import random import time +from dbt.flags import set_from_args +from argparse import Namespace + +set_from_args(Namespace(WARN_ERROR=False), None) def make_relation(database, schema, identifier): diff --git a/test/unit/test_context.py b/test/unit/test_context.py index f39aa843119..1c02a650b9a 100644 --- a/test/unit/test_context.py +++ b/test/unit/test_context.py @@ -27,6 +27,10 @@ clear_plugin, ) from .mock_adapter import adapter_factory +from dbt.flags import set_from_args +from argparse import Namespace + +set_from_args(Namespace(WARN_ERROR=False), None) class TestVar(unittest.TestCase): @@ -149,23 +153,6 @@ def test_unwrapped_method(self): self.assertEqual(self.wrapper.quote("test_value"), '"test_value"') self.responder.quote.assert_called_once_with("test_value") - def test_wrapped_method(self): - rel = mock.MagicMock() - rel.matches.return_value = True - self.responder.list_relations_without_caching.return_value = [rel] - - found = self.wrapper.get_relation("database", "schema", "identifier") - - self.assertEqual(found, rel) - - self.responder.list_relations_without_caching.assert_called_once_with(mock.ANY) - # extract the argument - assert len(self.responder.list_relations_without_caching.mock_calls) == 1 - assert len(self.responder.list_relations_without_caching.call_args[0]) == 1 - arg = self.responder.list_relations_without_caching.call_args[0][0] - assert arg.database == "database" - assert arg.schema == "schema" - def assert_has_keys(required_keys: Set[str], maybe_keys: Set[str], ctx: Dict[str, Any]): keys = set(ctx) diff --git a/tests/functional/compile/test_compile.py b/tests/functional/compile/test_compile.py index a52e2aea626..5947d57a079 100644 --- a/tests/functional/compile/test_compile.py +++ b/tests/functional/compile/test_compile.py @@ -40,7 +40,7 @@ def test_default(self, project): assert any("_test_compile as schema" in line for line in get_lines("second_model")) def test_no_introspect(self, project): - with pytest.raises(DbtRuntimeError, match="connection never acquired for thread"): + with pytest.raises(DbtRuntimeError): run_dbt(["compile", "--no-introspect"]) diff --git a/tests/functional/logging/test_logging.py b/tests/functional/logging/test_logging.py index fc63e5da5dc..5cd6d1133d5 100644 --- a/tests/functional/logging/test_logging.py +++ b/tests/functional/logging/test_logging.py @@ -2,6 +2,8 @@ from dbt.tests.util import run_dbt, get_manifest, read_file import json import os +from dbt.events.functions import fire_event +from dbt.events.types import InvalidOptionYAML my_model_sql = """ @@ -64,3 +66,39 @@ def test_basic(project, logs_dir): for data in connection_reused_data: assert "conn_name" in data and data["conn_name"] assert "orig_conn_name" in data and data["orig_conn_name"] + + +def test_invalid_event_value(project, logs_dir): + results = run_dbt(["--log-format=json", "run"]) + assert len(results) == 1 + with pytest.raises(Exception): + # This should raise because positional arguments are provided to the event + fire_event(InvalidOptionYAML("testing")) + + # Provide invalid type to "option_name" + fire_event(InvalidOptionYAML(option_name=1)) + + log_file = read_file(logs_dir, "dbt.log") + invalid_kwarg_event = None + invalid_kwarg_note = None + for log_line in log_file.split("\n"): + # skip empty lines + if len(log_line) == 0: + continue + # The adapter logging also shows up, so skip non-json lines + if "[debug]" in log_line: + continue + log_dct = json.loads(log_line) + if log_dct["info"]["name"] == "InvalidOptionYAML": + invalid_kwarg_event = log_dct + if log_dct["info"]["name"] == "Note": + invalid_kwarg_note = log_dct + assert invalid_kwarg_event + assert ( + invalid_kwarg_event["info"]["msg"] == "The YAML provided in the -- argument is not valid." + ) + assert invalid_kwarg_note + assert ( + invalid_kwarg_note["info"]["msg"] + == "[InvalidOptionYAML]: Unable to parse dict {'option_name': 1}" + ) diff --git a/tests/functional/logging/test_meta_logging.py b/tests/functional/logging/test_meta_logging.py index 189562bba49..aa262730077 100644 --- a/tests/functional/logging/test_meta_logging.py +++ b/tests/functional/logging/test_meta_logging.py @@ -39,6 +39,6 @@ def test_meta(project, logs_dir): if node_path == "model1.sql": assert node_info["meta"] == {} elif node_path == "model2.sql": - assert node_info["meta"] == {"owners": "['team1', 'team2']"} + assert node_info["meta"] == {"owners": ["team1", "team2"]} elif node_path == "model3.sql": - assert node_info["meta"] == {"key": "1"} + assert node_info["meta"] == {"key": 1} diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index 1d70ebed81d..b025073f3de 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -3,7 +3,7 @@ from datetime import datetime from dbt.contracts.results import TimingInfo -from dbt.events import AdapterLogger, test_types, types +from dbt.events import AdapterLogger, types from dbt.events.base_types import ( BaseEvent, DebugLevel, @@ -18,6 +18,8 @@ from dbt.flags import set_from_args from argparse import Namespace +set_from_args(Namespace(WARN_ERROR=False), None) + # takes in a class and finds any subclasses for it def get_all_subclasses(cls): @@ -48,14 +50,14 @@ def test_formatting(self): logger.debug("hello {}", "world") # enters lower in the call stack to test that it formats correctly - event = types.AdapterEventDebug(name="dbt_tests", base_msg="hello {}", args=("world",)) + event = types.AdapterEventDebug(name="dbt_tests", base_msg="hello {}", args=["world"]) assert "hello world" in event.message() # tests that it doesn't throw - logger.debug("1 2 {}", 3) + logger.debug("1 2 {}", "3") # enters lower in the call stack to test that it formats correctly - event = types.AdapterEventDebug(name="dbt_tests", base_msg="1 2 {}", args=(3,)) + event = types.AdapterEventDebug(name="dbt_tests", base_msg="1 2 {}", args=[3]) assert "1 2 3" in event.message() # tests that it doesn't throw @@ -64,13 +66,13 @@ def test_formatting(self): # enters lower in the call stack to test that it formats correctly # in this case it's that we didn't attempt to replace anything since there # were no args passed after the initial message - event = types.AdapterEventDebug(name="dbt_tests", base_msg="boop{x}boop", args=()) + event = types.AdapterEventDebug(name="dbt_tests", base_msg="boop{x}boop", args=[]) assert "boop{x}boop" in event.message() # ensure AdapterLogger and subclasses makes all base_msg members # of type string; when someone writes logger.debug(a) where a is # any non-string object - event = types.AdapterEventDebug(name="dbt_tests", base_msg=[1, 2, 3], args=(3,)) + event = types.AdapterEventDebug(name="dbt_tests", base_msg=[1, 2, 3], args=[3]) assert isinstance(event.base_msg, str) event = types.JinjaLogDebug(msg=[1, 2, 3]) @@ -152,14 +154,14 @@ def test_event_codes(self): types.ColTypeChange( orig_type="", new_type="", - table=types.ReferenceKeyMsg(database="", schema="", identifier=""), + table={"database": "", "schema": "", "identifier": ""}, ), - types.SchemaCreation(relation=types.ReferenceKeyMsg(database="", schema="", identifier="")), - types.SchemaDrop(relation=types.ReferenceKeyMsg(database="", schema="", identifier="")), + types.SchemaCreation(relation={"database": "", "schema": "", "identifier": ""}), + types.SchemaDrop(relation={"database": "", "schema": "", "identifier": ""}), types.CacheAction( action="adding_relation", - ref_key=types.ReferenceKeyMsg(database="", schema="", identifier=""), - ref_key_2=types.ReferenceKeyMsg(database="", schema="", identifier=""), + ref_key={"database": "", "schema": "", "identifier": ""}, + ref_key_2={"database": "", "schema": "", "identifier": ""}, ), types.CacheDumpGraph(before_after="before", action="rename", dump=dict()), types.AdapterImportError(exc=""), @@ -240,7 +242,7 @@ def test_event_codes(self): types.DepsUpdateAvailable(version_latest=""), types.DepsUpToDate(), types.DepsListSubdirectory(subdirectory=""), - types.DepsNotifyUpdatesAvailable(packages=types.ListOfStrings()), + types.DepsNotifyUpdatesAvailable(packages=[]), types.RetryExternalCall(attempt=0, max=0), types.RecordRetryException(exc=""), types.RegistryIndexProgressGETRequest(url=""), @@ -263,7 +265,7 @@ def test_event_codes(self): execution_time=0, num_failures=0, ), - types.LogStartLine(description="", index=0, total=0, node_info=types.NodeInfo()), + types.LogStartLine(description="", index=0, total=0), types.LogModelResult( description="", status="", @@ -296,14 +298,14 @@ def test_event_codes(self): ), types.LogCancelLine(conn_name=""), types.DefaultSelector(name=""), - types.NodeStart(node_info=types.NodeInfo()), - types.NodeFinished(node_info=types.NodeInfo()), + types.NodeStart(), + types.NodeFinished(), types.QueryCancelationUnsupported(type=""), types.ConcurrencyLine(num_threads=0, target_name=""), types.CompiledNode(node_name="", compiled=""), - types.WritingInjectedSQLForNode(node_info=types.NodeInfo()), - types.NodeCompiling(node_info=types.NodeInfo()), - types.NodeExecuting(node_info=types.NodeInfo()), + types.WritingInjectedSQLForNode(), + types.NodeCompiling(), + types.NodeExecuting(), types.LogHookStartLine( statement="", index=0, @@ -342,8 +344,8 @@ def test_event_codes(self): types.MainStackTrace(stack_trace=""), types.SystemCouldNotWrite(path="", reason="", exc=""), types.SystemExecutingCmd(cmd=[""]), - types.SystemStdOut(bmsg=b""), - types.SystemStdErr(bmsg=b""), + types.SystemStdOut(bmsg=str(b"")), + types.SystemStdErr(bmsg=str(b"")), types.SystemReportReturnCode(returncode=0), types.TimingInfoCollected(), types.LogDebugStackTrace(), @@ -378,13 +380,6 @@ def test_event_codes(self): types.DebugCmdResult(), types.ListCmdOut(), types.Note(msg="This is a note."), - # T - tests ====================== - test_types.IntegrationTestInfo(), - test_types.IntegrationTestDebug(), - test_types.IntegrationTestWarn(), - test_types.IntegrationTestError(), - test_types.IntegrationTestException(), - test_types.UnitTestInfo(), ] @@ -394,7 +389,6 @@ class TestEventJSONSerialization: # event types that take `Any` are not possible to test in this way since some will serialize # just fine and others won't. def test_all_serializable(self): - set_from_args(Namespace(WARN_ERROR=False), None) all_non_abstract_events = set( get_all_subclasses(BaseEvent), ) @@ -427,7 +421,7 @@ def test_all_serializable(self): raise Exception(f"{event} is not serializable to json. Originating exception: {e}") # Serialize to binary try: - bytes(msg) + msg.SerializeToString() except Exception as e: raise Exception( f"{event} is not serializable to binary protobuf. Originating exception: {e}" diff --git a/tests/unit/test_proto_events.py b/tests/unit/test_proto_events.py index 2b03cac453a..1d91126a847 100644 --- a/tests/unit/test_proto_events.py +++ b/tests/unit/test_proto_events.py @@ -7,10 +7,15 @@ LogStartLine, LogTestResult, ) -from dbt.events.functions import msg_to_dict, LOG_VERSION, reset_metadata_vars -from dbt.events import proto_types as pt +from dbt.events.functions import msg_to_dict, msg_to_json, LOG_VERSION, reset_metadata_vars +from dbt.events import types_pb2 from dbt.events.base_types import msg_from_base_event, EventLevel from dbt.version import installed +from google.protobuf.json_format import MessageToDict +from dbt.flags import set_from_args +from argparse import Namespace + +set_from_args(Namespace(WARN_ERROR=False), None) info_keys = { @@ -33,8 +38,8 @@ def test_events(): event = MainReportVersion(version=str(installed), log_version=LOG_VERSION) msg = msg_from_base_event(event) msg_dict = msg_to_dict(msg) - msg_json = msg.to_json() - serialized = bytes(msg) + msg_json = msg_to_json(msg) + serialized = msg.SerializeToString() assert "Running with dbt=" in str(serialized) assert set(msg_dict.keys()) == {"info", "data"} assert set(msg_dict["data"].keys()) == {"version", "log_version"} @@ -43,11 +48,13 @@ def test_events(): assert msg.info.code == "A001" # Extract EventInfo from serialized message - generic_event = pt.GenericMessage().parse(serialized) - assert generic_event.info.code == "A001" + generic_msg = types_pb2.GenericMessage() + generic_msg.ParseFromString(serialized) + assert generic_msg.info.code == "A001" # get the message class for the real message from the generic message - message_class = getattr(pt, f"{generic_event.info.name}Msg") - new_msg = message_class().parse(serialized) + message_class = getattr(types_pb2, f"{generic_msg.info.name}Msg") + new_msg = message_class() + new_msg.ParseFromString(serialized) assert new_msg.info.code == msg.info.code assert new_msg.data.version == msg.data.version @@ -55,7 +62,7 @@ def test_events(): event = MainReportArgs(args={"one": "1", "two": "2"}) msg = msg_from_base_event(event) msg_dict = msg_to_dict(msg) - msg_json = msg.to_json() + msg_json = msg_to_json(msg) assert set(msg_dict.keys()) == {"info", "data"} assert set(msg_dict["data"].keys()) == {"args"} @@ -68,7 +75,7 @@ def test_exception_events(): event = RollbackFailed(conn_name="test", exc_info="something failed") msg = msg_from_base_event(event) msg_dict = msg_to_dict(msg) - msg_json = msg.to_json() + msg_json = msg_to_json(msg) assert set(msg_dict.keys()) == {"info", "data"} assert set(msg_dict["data"].keys()) == {"conn_name", "exc_info"} assert set(msg_dict["info"].keys()) == info_keys @@ -78,7 +85,7 @@ def test_exception_events(): event = PluginLoadError(exc_info="something failed") msg = msg_from_base_event(event) msg_dict = msg_to_dict(msg) - msg_json = msg.to_json() + msg_json = msg_to_json(msg) assert set(msg_dict["data"].keys()) == {"exc_info"} assert set(msg_dict["info"].keys()) == info_keys assert msg_json @@ -89,7 +96,7 @@ def test_exception_events(): event = MainEncounteredError(exc="Rollback failed") msg = msg_from_base_event(event) msg_dict = msg_to_dict(msg) - msg_json = msg.to_json() + msg_json = msg_to_json(msg) assert set(msg_dict["data"].keys()) == {"exc"} assert set(msg_dict["info"].keys()) == info_keys @@ -99,11 +106,10 @@ def test_exception_events(): def test_node_info_events(): meta_dict = { - "string-key1": ["value1", 2], - "string-key2": {"nested-dict-key": "value2"}, - 1: "value-from-non-string-key", - "string-key3": 1, - "string-key4": ["string1", 1, "string2", 2], + "key1": ["value1", 2], + "key2": {"nested-dict-key": "value2"}, + "key3": 1, + "key4": ["string1", 1, "string2", 2], } node_info = { "node_path": "some_path", @@ -120,11 +126,11 @@ def test_node_info_events(): description="some description", index=123, total=111, - node_info=pt.NodeInfo(**node_info), + node_info=node_info, ) assert event assert event.node_info.node_path == "some_path" - assert event.node_info.meta == meta_dict + assert event.to_dict()["node_info"]["meta"] == meta_dict def test_extra_dict_on_event(monkeypatch): @@ -137,16 +143,20 @@ def test_extra_dict_on_event(monkeypatch): msg = msg_from_base_event(event) msg_dict = msg_to_dict(msg) assert set(msg_dict["info"].keys()) == info_keys - assert msg.info.extra == {"env_key": "env_value"} - serialized = bytes(msg) + extra_dict = {"env_key": "env_value"} + assert msg.info.extra == extra_dict + serialized = msg.SerializeToString() # Extract EventInfo from serialized message - generic_event = pt.GenericMessage().parse(serialized) - assert generic_event.info.code == "A001" + generic_msg = types_pb2.GenericMessage() + generic_msg.ParseFromString(serialized) + assert generic_msg.info.code == "A001" # get the message class for the real message from the generic message - message_class = getattr(pt, f"{generic_event.info.name}Msg") - new_msg = message_class().parse(serialized) - assert new_msg.info.extra == msg.info.extra + message_class = getattr(types_pb2, f"{generic_msg.info.name}Msg") + new_msg = message_class() + new_msg.ParseFromString(serialized) + new_msg_dict = MessageToDict(new_msg) + assert new_msg_dict["info"]["extra"] == msg.info.extra # clean up reset_metadata_vars()