diff --git a/.changes/unreleased/Dependencies-20241112-163815.yaml b/.changes/unreleased/Dependencies-20241112-163815.yaml new file mode 100644 index 00000000000..e89502bee78 --- /dev/null +++ b/.changes/unreleased/Dependencies-20241112-163815.yaml @@ -0,0 +1,6 @@ +kind: Dependencies +body: Upgrading dbt-semantic-interfaces to 0.8.3 for custom grain support in offset windows +time: 2024-11-12T16:38:15.351519-05:00 +custom: + Author: WilliamDee + Issue: None diff --git a/.changes/unreleased/Features-20241121-125630.yaml b/.changes/unreleased/Features-20241121-125630.yaml new file mode 100644 index 00000000000..befd9fac790 --- /dev/null +++ b/.changes/unreleased/Features-20241121-125630.yaml @@ -0,0 +1,6 @@ +kind: Features +body: Add `batch` context object to model jinja context +time: 2024-11-21T12:56:30.715473-06:00 +custom: + Author: QMalcolm + Issue: "11025" diff --git a/.changes/unreleased/Features-20241206-195308.yaml b/.changes/unreleased/Features-20241206-195308.yaml new file mode 100644 index 00000000000..08d17b71daa --- /dev/null +++ b/.changes/unreleased/Features-20241206-195308.yaml @@ -0,0 +1,7 @@ +kind: Features +body: Ensure pre/post hooks only run on first/last batch respectively for microbatch + model batches +time: 2024-12-06T19:53:08.928793-06:00 +custom: + Author: MichelleArk QMalcolm + Issue: 11094 11104 diff --git a/.changes/unreleased/Fixes-20240822-122132.yaml b/.changes/unreleased/Fixes-20240822-122132.yaml new file mode 100644 index 00000000000..d169520ea99 --- /dev/null +++ b/.changes/unreleased/Fixes-20240822-122132.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: dbt retry does not respect --threads +time: 2024-08-22T12:21:32.358066+05:30 +custom: + Author: donjin-master + Issue: "10584" diff --git a/.changes/unreleased/Fixes-20241128-162936.yaml b/.changes/unreleased/Fixes-20241128-162936.yaml new file mode 100644 index 00000000000..a439875c223 --- /dev/null +++ b/.changes/unreleased/Fixes-20241128-162936.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Access DBUG flag more consistently with the rest of the codebase in ManifestLoader +time: 2024-11-28T16:29:36.236729+01:00 +custom: + Author: Threynaud + Issue: "11068" diff --git a/.changes/unreleased/Fixes-20241204-100429.yaml b/.changes/unreleased/Fixes-20241204-100429.yaml new file mode 100644 index 00000000000..378444e769d --- /dev/null +++ b/.changes/unreleased/Fixes-20241204-100429.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Improve the performance characteristics of add_test_edges() +time: 2024-12-04T10:04:29.096231-05:00 +custom: + Author: peterallenwebb + Issue: "10950" diff --git a/.changes/unreleased/Fixes-20241205-145307.yaml b/.changes/unreleased/Fixes-20241205-145307.yaml new file mode 100644 index 00000000000..d9d33b3cdf5 --- /dev/null +++ b/.changes/unreleased/Fixes-20241205-145307.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Implement partial parsing for singular data test configs in yaml files +time: 2024-12-05T14:53:07.295536-05:00 +custom: + Author: gshank + Issue: "10801" diff --git a/.changes/unreleased/Fixes-20241209-113806.yaml b/.changes/unreleased/Fixes-20241209-113806.yaml new file mode 100644 index 00000000000..37a40ebb5e8 --- /dev/null +++ b/.changes/unreleased/Fixes-20241209-113806.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Fix debug log messages for microbatch batch execution information +time: 2024-12-09T11:38:06.972743-06:00 +custom: + Author: MichelleArk QMalcolm + Issue: "11111" diff --git a/.changes/unreleased/Fixes-20241209-133317.yaml b/.changes/unreleased/Fixes-20241209-133317.yaml new file mode 100644 index 00000000000..4cac533662b --- /dev/null +++ b/.changes/unreleased/Fixes-20241209-133317.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Fix running of extra "last" batch when there is only one batch +time: 2024-12-09T13:33:17.253326-06:00 +custom: + Author: QMalcolm + Issue: "11112" diff --git a/.changes/unreleased/Fixes-20241209-150711.yaml b/.changes/unreleased/Fixes-20241209-150711.yaml new file mode 100644 index 00000000000..a9522145abe --- /dev/null +++ b/.changes/unreleased/Fixes-20241209-150711.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Fix interpretation of `PartialSuccess` to result in non-zero exit code +time: 2024-12-09T15:07:11.391313-06:00 +custom: + Author: QMalcolm + Issue: "11114" diff --git a/.changes/unreleased/Under the Hood-20241205-143144.yaml b/.changes/unreleased/Under the Hood-20241205-143144.yaml new file mode 100644 index 00000000000..10aa90a2b2a --- /dev/null +++ b/.changes/unreleased/Under the Hood-20241205-143144.yaml @@ -0,0 +1,7 @@ +kind: Under the Hood +body: Improve selection peformance by optimizing the select_children() and select_parents() + functions. +time: 2024-12-05T14:31:44.584216-05:00 +custom: + Author: peterallenwebb + Issue: "11099" diff --git a/core/dbt/artifacts/resources/v1/metric.py b/core/dbt/artifacts/resources/v1/metric.py index 0c6da764220..a025d39ae33 100644 --- a/core/dbt/artifacts/resources/v1/metric.py +++ b/core/dbt/artifacts/resources/v1/metric.py @@ -46,7 +46,15 @@ def post_aggregation_measure_reference(self) -> MeasureReference: @dataclass class MetricTimeWindow(dbtClassMixin): count: int - granularity: TimeGranularity + granularity: str + + @property + def window_string(self) -> str: # noqa: D + return f"{self.count} {self.granularity}" + + @property + def is_standard_granularity(self) -> bool: # noqa: D + return self.granularity.casefold() in {item.value.casefold() for item in TimeGranularity} @dataclass @@ -55,7 +63,7 @@ class MetricInput(dbtClassMixin): filter: Optional[WhereFilterIntersection] = None alias: Optional[str] = None offset_window: Optional[MetricTimeWindow] = None - offset_to_grain: Optional[TimeGranularity] = None + offset_to_grain: Optional[str] = None def as_reference(self) -> MetricReference: return MetricReference(element_name=self.name) @@ -83,7 +91,7 @@ class ConversionTypeParams(dbtClassMixin): @dataclass class CumulativeTypeParams(dbtClassMixin): window: Optional[MetricTimeWindow] = None - grain_to_date: Optional[TimeGranularity] = None + grain_to_date: Optional[str] = None period_agg: PeriodAggregation = PeriodAggregation.FIRST @@ -95,7 +103,9 @@ class MetricTypeParams(dbtClassMixin): denominator: Optional[MetricInput] = None expr: Optional[str] = None window: Optional[MetricTimeWindow] = None - grain_to_date: Optional[TimeGranularity] = None + grain_to_date: Optional[TimeGranularity] = ( + None # legacy, use cumulative_type_params.grain_to_date + ) metrics: Optional[List[MetricInput]] = None conversion_type_params: Optional[ConversionTypeParams] = None cumulative_type_params: Optional[CumulativeTypeParams] = None @@ -121,7 +131,7 @@ class Metric(GraphResource): type_params: MetricTypeParams filter: Optional[WhereFilterIntersection] = None metadata: Optional[SourceFileMetadata] = None - time_granularity: Optional[TimeGranularity] = None + time_granularity: Optional[str] = None resource_type: Literal[NodeType.Metric] meta: Dict[str, Any] = field(default_factory=dict, metadata=MergeBehavior.Update.meta()) tags: List[str] = field(default_factory=list) diff --git a/core/dbt/artifacts/resources/v1/semantic_layer_components.py b/core/dbt/artifacts/resources/v1/semantic_layer_components.py index 89f87512b0b..65fb8ce0de7 100644 --- a/core/dbt/artifacts/resources/v1/semantic_layer_components.py +++ b/core/dbt/artifacts/resources/v1/semantic_layer_components.py @@ -12,17 +12,21 @@ class WhereFilter(dbtClassMixin): where_sql_template: str - @property - def call_parameter_sets(self) -> FilterCallParameterSets: - return WhereFilterParser.parse_call_parameter_sets(self.where_sql_template) + def call_parameter_sets( + self, custom_granularity_names: Sequence[str] + ) -> FilterCallParameterSets: + return WhereFilterParser.parse_call_parameter_sets( + self.where_sql_template, custom_granularity_names=custom_granularity_names + ) @dataclass class WhereFilterIntersection(dbtClassMixin): where_filters: List[WhereFilter] - @property - def filter_expression_parameter_sets(self) -> Sequence[Tuple[str, FilterCallParameterSets]]: + def filter_expression_parameter_sets( + self, custom_granularity_names: Sequence[str] + ) -> Sequence[Tuple[str, FilterCallParameterSets]]: raise NotImplementedError diff --git a/core/dbt/artifacts/resources/v1/semantic_model.py b/core/dbt/artifacts/resources/v1/semantic_model.py index 3e021b2f469..1721633d639 100644 --- a/core/dbt/artifacts/resources/v1/semantic_model.py +++ b/core/dbt/artifacts/resources/v1/semantic_model.py @@ -31,6 +31,14 @@ """ +@dataclass +class SemanticLayerElementConfig(dbtClassMixin): + meta: Dict[str, Any] = field( + default_factory=dict, + metadata=MergeBehavior.Update.meta(), + ) + + @dataclass class Defaults(dbtClassMixin): agg_time_dimension: Optional[str] = None @@ -72,6 +80,7 @@ class Dimension(dbtClassMixin): type_params: Optional[DimensionTypeParams] = None expr: Optional[str] = None metadata: Optional[SourceFileMetadata] = None + config: Optional[SemanticLayerElementConfig] = None @property def reference(self) -> DimensionReference: @@ -106,6 +115,7 @@ class Entity(dbtClassMixin): label: Optional[str] = None role: Optional[str] = None expr: Optional[str] = None + config: Optional[SemanticLayerElementConfig] = None @property def reference(self) -> EntityReference: @@ -147,6 +157,7 @@ class Measure(dbtClassMixin): agg_params: Optional[MeasureAggregationParameters] = None non_additive_dimension: Optional[NonAdditiveDimension] = None agg_time_dimension: Optional[str] = None + config: Optional[SemanticLayerElementConfig] = None @property def reference(self) -> MeasureReference: diff --git a/core/dbt/cli/main.py b/core/dbt/cli/main.py index a9de9441365..11cc81ef70e 100644 --- a/core/dbt/cli/main.py +++ b/core/dbt/cli/main.py @@ -140,6 +140,7 @@ def global_flags(func): @p.warn_error @p.warn_error_options @p.write_json + @p.use_fast_test_edges @functools.wraps(func) def wrapper(*args, **kwargs): return func(*args, **kwargs) diff --git a/core/dbt/cli/params.py b/core/dbt/cli/params.py index 96e9e7acd7a..612728de222 100644 --- a/core/dbt/cli/params.py +++ b/core/dbt/cli/params.py @@ -735,3 +735,10 @@ def _version_callback(ctx, _param, value): envvar="DBT_SHOW_RESOURCE_REPORT", hidden=True, ) + +use_fast_test_edges = click.option( + "--use-fast-test-edges/--no-use-fast-test-edges", + envvar="DBT_USE_FAST_TEST_EDGES", + default=False, + hidden=True, +) diff --git a/core/dbt/compilation.py b/core/dbt/compilation.py index 0ffa73df715..81ab849c8d1 100644 --- a/core/dbt/compilation.py +++ b/core/dbt/compilation.py @@ -1,8 +1,9 @@ +import dataclasses import json import os import pickle -from collections import defaultdict -from typing import Any, Dict, List, Optional, Tuple +from collections import defaultdict, deque +from typing import Any, Dict, Iterable, List, Optional, Set, Tuple import networkx as nx # type: ignore import sqlparse @@ -117,6 +118,16 @@ def _get_tests_for_node(manifest: Manifest, unique_id: UniqueID) -> List[UniqueI return tests +@dataclasses.dataclass +class SeenDetails: + node_id: UniqueID + visits: int = 0 + ancestors: Set[UniqueID] = dataclasses.field(default_factory=set) + awaits_tests: Set[Tuple[UniqueID, Tuple[UniqueID, ...]]] = dataclasses.field( + default_factory=set + ) + + class Linker: def __init__(self, data=None) -> None: if data is None: @@ -195,19 +206,62 @@ def link_graph(self, manifest: Manifest): raise RuntimeError("Found a cycle: {}".format(cycle)) def add_test_edges(self, manifest: Manifest) -> None: + if not get_flags().USE_FAST_TEST_EDGES: + self.add_test_edges_1(manifest) + else: + self.add_test_edges_2(manifest) + + def add_test_edges_1(self, manifest: Manifest) -> None: """This method adds additional edges to the DAG. For a given non-test executable node, add an edge from an upstream test to the given node if the set of nodes the test depends on is a subset of the upstream nodes for the given node.""" - # Given a graph: + # HISTORICAL NOTE: To understand the motivation behind this function, + # consider a node A with tests and a node B which depends (either directly + # or indirectly) on A. It would be nice if B were not executed until + # all of the tests on A are finished. After all, we don't want to + # propagate bad data. We can enforce that behavior by adding new + # dependencies (edges) from tests to nodes that should wait on them. + # + # This function implements a rough approximation of the behavior just + # described. In fact, for tests that only depend on a single node, it + # always works. + # + # Things get trickier for tests that depend on multiple nodes. In that + # case, if we are not careful, we will introduce cycles. That seems to + # be the reason this function adds dependencies from a downstream node to + # an upstream test if and only if the downstream node is already a + # descendant of all the nodes the upstream test depends on. By following + # that rule, it never makes the node dependent on new upstream nodes other + # than the tests themselves, and no cycles will be created. + # + # One drawback (Drawback 1) of the approach taken in this function is + # that it could still allow a downstream node to proceed before all + # testing is done on its ancestors, if it happens to have ancestors that + # are not also ancestors of a test with multiple dependencies. + # + # Another drawback (Drawback 2) is that the approach below adds far more + # edges than are strictly needed. After all, if we have A -> B -> C, + # there is no need to add a new edge A -> C. But this function often does. + # + # Drawback 2 is resolved in the new add_test_edges_2() implementation + # below, which is also typically much faster. Drawback 1 has been left in + # place in order to conservatively retain existing behavior, and so that + # the new implementation can be verified against this existing + # implementation by ensuring both resulting graphs have the same transitive + # reduction. + + # MOTIVATING IDEA: Given a graph... + # # model1 --> model2 --> model3 # | | # | \/ # \/ test 2 # test1 # - # Produce the following graph: + # ...produce the following... + # # model1 --> model2 --> model3 # | /\ | /\ /\ # | | \/ | | @@ -247,6 +301,139 @@ def add_test_edges(self, manifest: Manifest) -> None: if test_depends_on.issubset(upstream_nodes): self.graph.add_edge(upstream_test, node_id, edge_type="parent_test") + def add_test_edges_2(self, manifest: Manifest): + graph = self.graph + new_edges = self._get_test_edges_2(graph, manifest) + for e in new_edges: + graph.add_edge(e[0], e[1], edge_type="parent_test") + + @staticmethod + def _get_test_edges_2( + graph: nx.DiGraph, manifest: Manifest + ) -> Iterable[Tuple[UniqueID, UniqueID]]: + # This function enforces the same execution behavior as add_test_edges, + # but executes far more quickly and adds far fewer edges. See the + # HISTORICAL NOTE above. + # + # The idea is to first scan for "single-tested" nodes (which have tests + # that depend only upon on that node) and "multi-tested" nodes (which + # have tests that depend on multiple nodes). Single-tested nodes are + # handled quickly and easily. + # + # The less common but more complex case of multi-tested nodes is handled + # by a specialized function. + + new_edges: List[Tuple[UniqueID, UniqueID]] = [] + + source_nodes: List[UniqueID] = [] + executable_nodes: Set[UniqueID] = set() + multi_tested_nodes = set() + # Dictionary mapping nodes with single-dep tests to a list of those tests. + single_tested_nodes: dict[UniqueID, List[UniqueID]] = defaultdict(list) + for node_id in graph.nodes: + manifest_node = manifest.nodes.get(node_id, None) + if manifest_node is None: + continue + + if next(graph.predecessors(node_id), None) is None: + source_nodes.append(node_id) + + if manifest_node.resource_type != NodeType.Test: + executable_nodes.add(node_id) + else: + test_deps = manifest_node.depends_on_nodes + if len(test_deps) == 1: + single_tested_nodes[test_deps[0]].append(node_id) + elif len(test_deps) > 1: + multi_tested_nodes.update(manifest_node.depends_on_nodes) + + # Now that we have all the necessary information conveniently organized, + # add new edges for single-tested nodes. + for node_id, test_ids in single_tested_nodes.items(): + succs = [s for s in graph.successors(node_id) if s in executable_nodes] + for succ_id in succs: + for test_id in test_ids: + new_edges.append((test_id, succ_id)) + + # Get the edges for multi-tested nodes separately, if needed. + if len(multi_tested_nodes) > 0: + multi_test_edges = Linker._get_multi_test_edges( + graph, manifest, source_nodes, executable_nodes, multi_tested_nodes + ) + new_edges += multi_test_edges + + return new_edges + + @staticmethod + def _get_multi_test_edges( + graph: nx.DiGraph, + manifest: Manifest, + source_nodes: Iterable[UniqueID], + executable_nodes: Set[UniqueID], + multi_tested_nodes, + ) -> List[Tuple[UniqueID, UniqueID]]: + # Works through the graph in a breadth-first style, processing nodes from + # a ready queue which initially consists of nodes with no ancestors, + # and adding more nodes to the ready queue after all their ancestors + # have been processed. All the while, the relevant details of all nodes + # "seen" by the search so far are maintained in a SeenDetails record, + # including the ancestor set which tests it is "awaiting" (i.e. tests of + # its ancestors). The processing step adds test edges when every dependency + # of an awaited test is an ancestor of a node that is being processed. + # Downstream nodes are then exempted from awaiting the test. + # + # Memory consumption is potentially O(n^2) with n the number of nodes in + # the graph, since the average number of ancestors and tests being awaited + # for each of the n nodes could itself be O(n) but we only track ancestors + # that are multi-tested, which should keep things closer to O(n) in real- + # world scenarios. + + new_edges: List[Tuple[UniqueID, UniqueID]] = [] + ready: deque = deque(source_nodes) + details = {node_id: SeenDetails(node_id) for node_id in source_nodes} + + while len(ready) > 0: + curr_details: SeenDetails = details[ready.pop()] + test_ids = _get_tests_for_node(manifest, curr_details.node_id) + new_awaits_for_succs = curr_details.awaits_tests.copy() + for test_id in test_ids: + deps: List[UniqueID] = sorted(manifest.nodes[test_id].depends_on_nodes) + if len(deps) > 1: + # Tests with only one dep were already handled. + new_awaits_for_succs.add((test_id, tuple(deps))) + + for succ_id in [ + s for s in graph.successors(curr_details.node_id) if s in executable_nodes + ]: + suc_details = details.get(succ_id, None) + if suc_details is None: + suc_details = SeenDetails(succ_id) + details[succ_id] = suc_details + suc_details.visits += 1 + suc_details.awaits_tests.update(new_awaits_for_succs) + suc_details.ancestors.update(curr_details.ancestors) + if curr_details.node_id in multi_tested_nodes: + # Only track ancestry information for the set of nodes + # we will actually check against later. + suc_details.ancestors.add(curr_details.node_id) + + if suc_details.visits == graph.in_degree(succ_id): + if len(suc_details.awaits_tests) > 0: + removes = set() + for awt in suc_details.awaits_tests: + if not any(True for a in awt[1] if a not in suc_details.ancestors): + removes.add(awt) + new_edges.append((awt[0], succ_id)) + + suc_details.awaits_tests.difference_update(removes) + ready.appendleft(succ_id) + + # We are now done with the current node and all of its ancestors. + # Discard its details to save memory. + del details[curr_details.node_id] + + return new_edges + def get_graph(self, manifest: Manifest) -> Graph: self.link_graph(manifest) return Graph(self.graph) diff --git a/core/dbt/context/providers.py b/core/dbt/context/providers.py index 3b3c718570a..a4717a7418c 100644 --- a/core/dbt/context/providers.py +++ b/core/dbt/context/providers.py @@ -244,9 +244,10 @@ def resolve_event_time_filter(self, target: ManifestNode) -> Optional[EventTimeF and self.model.config.materialized == "incremental" and self.model.config.incremental_strategy == "microbatch" and self.manifest.use_microbatch_batches(project_name=self.config.project_name) + and self.model.batch is not None ): - start = self.model.config.get("__dbt_internal_microbatch_event_time_start") - end = self.model.config.get("__dbt_internal_microbatch_event_time_end") + start = self.model.batch.event_time_start + end = self.model.batch.event_time_end if start is not None or end is not None: event_time_filter = EventTimeFilter( diff --git a/core/dbt/contracts/graph/nodes.py b/core/dbt/contracts/graph/nodes.py index d341b167ab9..8fc39c7621b 100644 --- a/core/dbt/contracts/graph/nodes.py +++ b/core/dbt/contracts/graph/nodes.py @@ -93,6 +93,7 @@ ConstraintType, ModelLevelConstraint, ) +from dbt_common.dataclass_schema import dbtClassMixin from dbt_common.events.contextvars import set_log_contextvars from dbt_common.events.functions import warn_or_error @@ -442,15 +443,38 @@ def resource_class(cls) -> Type[HookNodeResource]: return HookNodeResource +@dataclass +class BatchContext(dbtClassMixin): + id: str + event_time_start: datetime + event_time_end: datetime + + def __post_serialize__(self, data, context): + # This is insane, but necessary, I apologize. Mashumaro handles the + # dictification of this class via a compile time generated `to_dict` + # method based off of the _typing_ of th class. By default `datetime` + # types are converted to strings. We don't want that, we want them to + # stay datetimes. + # Note: This is safe because the `BatchContext` isn't part of the artifact + # and thus doesn't get written out. + new_data = super().__post_serialize__(data, context) + new_data["event_time_start"] = self.event_time_start + new_data["event_time_end"] = self.event_time_end + return new_data + + @dataclass class ModelNode(ModelResource, CompiledNode): - batch_info: Optional[BatchResults] = None + previous_batch_results: Optional[BatchResults] = None + batch: Optional[BatchContext] = None _has_this: Optional[bool] = None def __post_serialize__(self, dct: Dict, context: Optional[Dict] = None): dct = super().__post_serialize__(dct, context) if "_has_this" in dct: del dct["_has_this"] + if "previous_batch_results" in dct: + del dct["previous_batch_results"] return dct @classmethod diff --git a/core/dbt/contracts/graph/unparsed.py b/core/dbt/contracts/graph/unparsed.py index 5e63c487e89..f78ba15a50f 100644 --- a/core/dbt/contracts/graph/unparsed.py +++ b/core/dbt/contracts/graph/unparsed.py @@ -564,7 +564,7 @@ class UnparsedMetricInput(dbtClassMixin): filter: Union[str, List[str], None] = None alias: Optional[str] = None offset_window: Optional[str] = None - offset_to_grain: Optional[str] = None # str is really a TimeGranularity Enum + offset_to_grain: Optional[str] = None @dataclass diff --git a/core/dbt/events/core_types.proto b/core/dbt/events/core_types.proto index 2938ebb554f..817d5623350 100644 --- a/core/dbt/events/core_types.proto +++ b/core/dbt/events/core_types.proto @@ -1690,6 +1690,35 @@ message MicrobatchExecutionDebugMsg { MicrobatchExecutionDebug data = 2; } +// Q045 +message LogStartBatch { + NodeInfo node_info = 1; + string description = 2; + int32 batch_index = 3; + int32 total_batches = 4; +} + +message LogStartBatchMsg { + CoreEventInfo info = 1; + LogStartBatch data = 2; +} + +// Q046 +message LogBatchResult { + NodeInfo node_info = 1; + string description = 2; + string status = 3; + int32 batch_index = 4; + int32 total_batches = 5; + float execution_time = 6; + Group group = 7; +} + +message LogBatchResultMsg { + CoreEventInfo info = 1; + LogBatchResult data = 2; +} + // W - Node testing // Skipped W001 diff --git a/core/dbt/events/core_types_pb2.py b/core/dbt/events/core_types_pb2.py index 1e8444f4833..b744a4b8662 100644 --- a/core/dbt/events/core_types_pb2.py +++ b/core/dbt/events/core_types_pb2.py @@ -26,7 +26,7 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x63ore_types.proto\x12\x0bproto_types\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x99\x02\n\rCoreEventInfo\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\x34\n\x05\x65xtra\x18\t \x03(\x0b\x32%.proto_types.CoreEventInfo.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\"V\n\x0cNodeRelation\x12\x10\n\x08\x64\x61tabase\x18\n \x01(\t\x12\x0e\n\x06schema\x18\x0b \x01(\t\x12\r\n\x05\x61lias\x18\x0c \x01(\t\x12\x15\n\rrelation_name\x18\r \x01(\t\"\x91\x02\n\x08NodeInfo\x12\x11\n\tnode_path\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x11\n\tunique_id\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x14\n\x0cmaterialized\x18\x05 \x01(\t\x12\x13\n\x0bnode_status\x18\x06 \x01(\t\x12\x17\n\x0fnode_started_at\x18\x07 \x01(\t\x12\x18\n\x10node_finished_at\x18\x08 \x01(\t\x12%\n\x04meta\x18\t \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\rnode_relation\x18\n \x01(\x0b\x32\x19.proto_types.NodeRelation\"\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\"\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\"\\\n\nColumnType\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x1c\n\x14previous_column_type\x18\x02 \x01(\t\x12\x1b\n\x13\x63urrent_column_type\x18\x03 \x01(\t\"Y\n\x10\x43olumnConstraint\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63onstraint_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63onstraint_type\x18\x03 \x01(\t\"T\n\x0fModelConstraint\x12\x17\n\x0f\x63onstraint_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63onstraint_type\x18\x02 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x03 \x03(\t\"9\n\x11MainReportVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x13\n\x0blog_version\x18\x02 \x01(\x05\"n\n\x14MainReportVersionMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11MainReportArgsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18MainTrackingUserStateMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12MergedFromStateMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17MissingProfileTargetMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MissingProfileTarget\"(\n\x11InvalidOptionYAML\x12\x13\n\x0boption_name\x18\x01 \x01(\t\"n\n\x14InvalidOptionYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogDbtProjectErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogDbtProfileErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15StarterProjectPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18\x43onfigFolderDirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17NoSampleProfileFoundMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1bProfileWrittenWithSampleMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x94\x01\n\'ProfileWrittenWithTargetTemplateYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x96\x01\n(ProfileWrittenWithProjectTemplateYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.ProfileWrittenWithProjectTemplateYAML\"\x12\n\x10SettingUpProfile\"l\n\x13SettingUpProfileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SettingUpProfile\"\x1c\n\x1aInvalidProfileTemplateYAML\"\x80\x01\n\x1dInvalidProfileTemplateYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.InvalidProfileTemplateYAML\"(\n\x18ProjectNameAlreadyExists\x12\x0c\n\x04name\x18\x01 \x01(\t\"|\n\x1bProjectNameAlreadyExistsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11ProjectCreatedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x80\x01\n\x1dPackageRedirectDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PackageRedirectDeprecation\"\x1f\n\x1dPackageInstallPathDeprecation\"\x86\x01\n PackageInstallPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1e\x43onfigSourcePathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"~\n\x1c\x43onfigDataPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConfigDataPathDeprecation\".\n\x17MetricAttributesRenamed\x12\x13\n\x0bmetric_name\x18\x01 \x01(\t\"z\n\x1aMetricAttributesRenamedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1a\x45xposureNameDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"r\n\x16InternalDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x80\x01\n\x1d\x45nvironmentVariableRenamedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1b\x43onfigLogPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1e\x43onfigTargetPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigTargetPathDeprecation\"C\n\x16TestsConfigDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"x\n\x19TestsConfigDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.TestsConfigDeprecation\"\x1e\n\x1cProjectFlagsMovedDeprecation\"\x84\x01\n\x1fProjectFlagsMovedDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x37\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32).proto_types.ProjectFlagsMovedDeprecation\"C\n\x1fSpacesInResourceNameDeprecation\x12\x11\n\tunique_id\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\t\"\x8a\x01\n\"SpacesInResourceNameDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SpacesInResourceNameDeprecation\"i\n\"ResourceNamesWithSpacesDeprecation\x12\x1b\n\x13\x63ount_invalid_names\x18\x01 \x01(\x05\x12\x17\n\x0fshow_debug_hint\x18\x02 \x01(\x08\x12\r\n\x05level\x18\x03 \x01(\t\"\x90\x01\n%ResourceNamesWithSpacesDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12=\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32/.proto_types.ResourceNamesWithSpacesDeprecation\"_\n)PackageMaterializationOverrideDeprecation\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x1c\n\x14materialization_name\x18\x02 \x01(\t\"\x9e\x01\n,PackageMaterializationOverrideDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x44\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x36.proto_types.PackageMaterializationOverrideDeprecation\"#\n!SourceFreshnessProjectHooksNotRun\"\x8e\x01\n$SourceFreshnessProjectHooksNotRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.SourceFreshnessProjectHooksNotRun\"0\n.MFTimespineWithoutYamlConfigurationDeprecation\"\xa8\x01\n1MFTimespineWithoutYamlConfigurationDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12I\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32;.proto_types.MFTimespineWithoutYamlConfigurationDeprecation\"#\n!MFCumulativeTypeParamsDeprecation\"\x8e\x01\n$MFCumulativeTypeParamsDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.MFCumulativeTypeParamsDeprecation\",\n*MicrobatchMacroOutsideOfBatchesDeprecation\"\xa0\x01\n-MicrobatchMacroOutsideOfBatchesDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x45\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x37.proto_types.MicrobatchMacroOutsideOfBatchesDeprecation\"V\n\x0f\x44\x65precatedModel\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x15\n\rmodel_version\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65precation_date\x18\x03 \x01(\t\"j\n\x12\x44\x65precatedModelMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DeprecatedModel\"7\n\x12InputFileDiffError\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"p\n\x15InputFileDiffErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17InvalidValueForFieldMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"n\n\x14ValidationWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ValidationWarning\"!\n\x11ParsePerfInfoPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"n\n\x14ParsePerfInfoPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ParsePerfInfoPath\"1\n!PartialParsingErrorProcessingFile\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\"\x8e\x01\n$PartialParsingErrorProcessingFileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"r\n\x16PartialParsingErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.PartialParsingError\"\x1b\n\x19PartialParsingSkipParsing\"~\n\x1cPartialParsingSkipParsingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.PartialParsingSkipParsing\"&\n\x14UnableToPartialParse\x12\x0e\n\x06reason\x18\x01 \x01(\t\"t\n\x17UnableToPartialParseMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15StateCheckVarsHashMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StateCheckVarsHash\"\x1a\n\x18PartialParsingNotEnabled\"|\n\x1bPartialParsingNotEnabledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17ParsedFileLoadFailedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18PartialParsingEnabledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15PartialParsingFileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"InvalidDisabledTargetInTestNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1bUnusedResourceConfigPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10SeedIncreasedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1bSeedExceedsLimitSamePathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x88\x01\n!SeedExceedsLimitAndPathChangedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"SeedExceedsLimitChecksumChangedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SeedExceedsLimitChecksumChanged\"%\n\x0cUnusedTables\x12\x15\n\runused_tables\x18\x01 \x03(\t\"d\n\x0fUnusedTablesMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1aWrongResourceSchemaFileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13NoNodeForYamlKeyMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18MacroNotFoundForPatchMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"x\n\x19NodeNotFoundOrDisabledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12JinjaLogWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fJinjaLogInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10JinjaLogDebugMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.JinjaLogDebug\"\xae\x01\n\x1eUnpinnedRefNewVersionAvailable\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rref_node_name\x18\x02 \x01(\t\x12\x18\n\x10ref_node_package\x18\x03 \x01(\t\x12\x18\n\x10ref_node_version\x18\x04 \x01(\t\x12\x17\n\x0fref_max_version\x18\x05 \x01(\t\"\x88\x01\n!UnpinnedRefNewVersionAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.UnpinnedRefNewVersionAvailable\"\xc6\x01\n\x1cUpcomingReferenceDeprecation\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"\x84\x01\n\x1fUpcomingReferenceDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x37\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32).proto_types.UpcomingReferenceDeprecation\"\xbd\x01\n\x13\x44\x65precatedReference\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"r\n\x16\x44\x65precatedReferenceMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DeprecatedReference\"<\n$UnsupportedConstraintMaterialization\x12\x14\n\x0cmaterialized\x18\x01 \x01(\t\"\x94\x01\n\'UnsupportedConstraintMaterializationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.UnsupportedConstraintMaterialization\"M\n\x14ParseInlineNodeError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"t\n\x17ParseInlineNodeErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParseInlineNodeError\"(\n\x19SemanticValidationFailure\x12\x0b\n\x03msg\x18\x02 \x01(\t\"~\n\x1cSemanticValidationFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.SemanticValidationFailure\"\x8a\x03\n\x19UnversionedBreakingChange\x12\x18\n\x10\x62reaking_changes\x18\x01 \x03(\t\x12\x12\n\nmodel_name\x18\x02 \x01(\t\x12\x17\n\x0fmodel_file_path\x18\x03 \x01(\t\x12\"\n\x1a\x63ontract_enforced_disabled\x18\x04 \x01(\x08\x12\x17\n\x0f\x63olumns_removed\x18\x05 \x03(\t\x12\x34\n\x13\x63olumn_type_changes\x18\x06 \x03(\x0b\x32\x17.proto_types.ColumnType\x12I\n\"enforced_column_constraint_removed\x18\x07 \x03(\x0b\x32\x1d.proto_types.ColumnConstraint\x12G\n!enforced_model_constraint_removed\x18\x08 \x03(\x0b\x32\x1c.proto_types.ModelConstraint\x12\x1f\n\x17materialization_changed\x18\t \x03(\t\"~\n\x1cUnversionedBreakingChangeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.UnversionedBreakingChange\"*\n\x14WarnStateTargetEqual\x12\x12\n\nstate_path\x18\x01 \x01(\t\"t\n\x17WarnStateTargetEqualMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.WarnStateTargetEqual\"%\n\x16\x46reshnessConfigProblem\x12\x0b\n\x03msg\x18\x01 \x01(\t\"x\n\x19\x46reshnessConfigProblemMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.FreshnessConfigProblem\"6\n MicrobatchModelNoEventTimeInputs\x12\x12\n\nmodel_name\x18\x01 \x01(\t\"\x8c\x01\n#MicrobatchModelNoEventTimeInputsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.MicrobatchModelNoEventTimeInputs\"/\n\x1dGitSparseCheckoutSubdirectory\x12\x0e\n\x06subdir\x18\x01 \x01(\t\"\x86\x01\n GitSparseCheckoutSubdirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.GitSparseCheckoutSubdirectory\"/\n\x1bGitProgressCheckoutRevision\x12\x10\n\x08revision\x18\x01 \x01(\t\"\x82\x01\n\x1eGitProgressCheckoutRevisionMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x96\x01\n(GitProgressUpdatingExistingDependencyMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"GitProgressPullingNewDependencyMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressPullingNewDependency\"\x1d\n\x0eGitNothingToDo\x12\x0b\n\x03sha\x18\x01 \x01(\t\"h\n\x11GitNothingToDoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"GitProgressUpdatedCheckoutRangeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1aGitProgressCheckedOutAtMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.GitProgressCheckedOutAt\")\n\x1aRegistryProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x80\x01\n\x1dRegistryProgressGETRequestMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1eRegistryProgressGETResponseMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x86\x01\n SelectorReportInvalidSelectorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.SelectorReportInvalidSelector\"\x15\n\x13\x44\x65psNoPackagesFound\"r\n\x16\x44\x65psNoPackagesFoundMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1a\x44\x65psStartPackageInstallMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12\x44\x65psInstallInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"r\n\x16\x44\x65psUpdateAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsUpdateAvailable\"\x0e\n\x0c\x44\x65psUpToDate\"d\n\x0f\x44\x65psUpToDateMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17\x44\x65psListSubdirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.DepsListSubdirectory\".\n\x1a\x44\x65psNotifyUpdatesAvailable\x12\x10\n\x08packages\x18\x01 \x03(\t\"\x80\x01\n\x1d\x44\x65psNotifyUpdatesAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.DepsNotifyUpdatesAvailable\".\n\x1fRegistryIndexProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x8a\x01\n\"RegistryIndexProgressGETRequestMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8c\x01\n#RegistryIndexProgressGETResponseMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.RegistryIndexProgressGETResponse\"2\n\x1eRegistryResponseUnexpectedType\x12\x10\n\x08response\x18\x01 \x01(\t\"\x88\x01\n!RegistryResponseUnexpectedTypeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x88\x01\n!RegistryResponseMissingTopKeysMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8e\x01\n$RegistryResponseMissingNestedKeysMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.RegistryResponseMissingNestedKeys\"3\n\x1fRegistryResponseExtraNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x8a\x01\n\"RegistryResponseExtraNestedKeysMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1b\x44\x65psSetDownloadDirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0f\x44\x65psUnpinnedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1eNoNodesForSelectionCriteriaMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.NoNodesForSelectionCriteria\")\n\x10\x44\x65psLockUpdating\x12\x15\n\rlock_filepath\x18\x01 \x01(\t\"l\n\x13\x44\x65psLockUpdatingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.DepsLockUpdating\"R\n\x0e\x44\x65psAddPackage\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x19\n\x11packages_filepath\x18\x03 \x01(\t\"h\n\x11\x44\x65psAddPackageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DepsAddPackage\"\xa7\x01\n\x19\x44\x65psFoundDuplicatePackage\x12S\n\x0fremoved_package\x18\x01 \x03(\x0b\x32:.proto_types.DepsFoundDuplicatePackage.RemovedPackageEntry\x1a\x35\n\x13RemovedPackageEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"~\n\x1c\x44\x65psFoundDuplicatePackageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.DepsFoundDuplicatePackage\"$\n\x12\x44\x65psVersionMissing\x12\x0e\n\x06source\x18\x01 \x01(\t\"p\n\x15\x44\x65psVersionMissingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.DepsVersionMissing\"/\n\x17\x44\x65psScrubbedPackageName\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\"z\n\x1a\x44\x65psScrubbedPackageNameMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsScrubbedPackageName\"?\n\x0f\x41rtifactWritten\x12\x15\n\rartifact_type\x18\x01 \x01(\t\x12\x15\n\rartifact_path\x18\x02 \x01(\t\"j\n\x12\x41rtifactWrittenMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ArtifactWritten\"*\n\x1bRunningOperationCaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"\x82\x01\n\x1eRunningOperationCaughtErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RunningOperationCaughtError\"\x11\n\x0f\x43ompileComplete\"j\n\x12\x43ompileCompleteMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.CompileComplete\"\x18\n\x16\x46reshnessCheckComplete\"x\n\x19\x46reshnessCheckCompleteMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\x1a.proto_types.CoreEventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SeedHeader\"]\n\x12SQLRunnerException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x02 \x01(\t\x12(\n\tnode_info\x18\x03 \x01(\x0b\x32\x15.proto_types.NodeInfo\"p\n\x15SQLRunnerExceptionMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SQLRunnerException\"\x87\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x14\n\x0cpackage_name\x18\x03 \x01(\t\x12,\n\x05owner\x18\x07 \x03(\x0b\x32\x1d.proto_types.Group.OwnerEntry\x1a,\n\nOwnerEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe2\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\x12!\n\x05group\x18\x08 \x01(\x0b\x32\x12.proto_types.Group\x12\x15\n\rattached_node\x18\t \x01(\t\"f\n\x10LogTestResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fLogStartLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.LogStartLine\"\xb8\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\x12!\n\x05group\x18\x07 \x01(\x0b\x32\x12.proto_types.Group\"h\n\x11LogModelResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogModelResult\"\x92\x02\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\x12\x16\n\x0eresult_message\x18\x08 \x01(\t\x1a*\n\x08\x43\x66gEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x14LogSnapshotResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10LogSeedResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogFreshnessResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogFreshnessResult\"\x98\x01\n\x11LogNodeNoOpResult\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\"n\n\x14LogNodeNoOpResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.LogNodeNoOpResult\"\"\n\rLogCancelLine\x12\x11\n\tconn_name\x18\x01 \x01(\t\"f\n\x10LogCancelLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12\x44\x65\x66\x61ultSelectorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"^\n\x0cNodeStartMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fNodeFinishedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.NodeFinished\"+\n\x1bQueryCancelationUnsupported\x12\x0c\n\x04type\x18\x01 \x01(\t\"\x82\x01\n\x1eQueryCancelationUnsupportedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12\x43oncurrencyLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ConcurrencyLine\"E\n\x19WritingInjectedSQLForNode\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"~\n\x1cWritingInjectedSQLForNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10NodeCompilingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10NodeExecutingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13LogHookStartLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11LogHookEndLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12SkippingDetailsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SkippingDetails\"\r\n\x0bNothingToDo\"b\n\x0eNothingToDoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x86\x01\n RunningOperationUncaughtErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0f\x45ndRunResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.EndRunResult\"\x11\n\x0fNoNodesSelected\"j\n\x12NoNodesSelectedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13\x43ommandCompletedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.CommandCompleted\"z\n\x08ShowNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0f\n\x07preview\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\x12\r\n\x05quiet\x18\x06 \x01(\x08\"\\\n\x0bShowNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.ShowNode\"\x7f\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\x12\r\n\x05quiet\x18\x06 \x01(\x08\"d\n\x0f\x43ompiledNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.CompiledNode\"Y\n\x18SnapshotTimestampWarning\x12\x1f\n\x17snapshot_time_data_type\x18\x01 \x01(\t\x12\x1c\n\x14updated_at_data_type\x18\x02 \x01(\t\"|\n\x1bSnapshotTimestampWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.SnapshotTimestampWarning\"\'\n\x18MicrobatchExecutionDebug\x12\x0b\n\x03msg\x18\x01 \x01(\t\"|\n\x1bMicrobatchExecutionDebugMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.MicrobatchExecutionDebug\"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\"z\n\x1a\x43\x61tchableExceptionOnRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.CatchableExceptionOnRun\"_\n\x12InternalErrorOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12(\n\tnode_info\x18\x03 \x01(\x0b\x32\x15.proto_types.NodeInfo\"p\n\x15InternalErrorOnRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InternalErrorOnRun\"u\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\x12(\n\tnode_info\x18\x04 \x01(\x0b\x32\x15.proto_types.NodeInfo\"v\n\x18GenericExceptionOnRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x80\x01\n\x1dNodeConnectionReleaseErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\x1a.proto_types.CoreEventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.FoundStats\"\x17\n\x15MainKeyboardInterrupt\"v\n\x18MainKeyboardInterruptMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17MainEncounteredErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MainEncounteredError\"%\n\x0eMainStackTrace\x12\x13\n\x0bstack_trace\x18\x01 \x01(\t\"h\n\x11MainStackTraceMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainStackTrace\"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\"r\n\x16TimingInfoCollectedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogDebugStackTraceMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11\x43heckCleanPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13\x43onfirmCleanPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConfirmCleanPath\"\"\n\x12ProtectedCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"p\n\x15ProtectedCleanPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ProtectedCleanPath\"\x14\n\x12\x46inishedCleanPaths\"p\n\x15\x46inishedCleanPathsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"b\n\x0eOpenCommandMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.OpenCommand\"0\n\x0fServingDocsPort\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"j\n\x12ServingDocsPortMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ServingDocsPort\"%\n\x15ServingDocsAccessInfo\x12\x0c\n\x04port\x18\x01 \x01(\t\"v\n\x18ServingDocsAccessInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ServingDocsAccessInfo\"\x15\n\x13ServingDocsExitInfo\"r\n\x16ServingDocsExitInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.ServingDocsExitInfo\"\x97\x01\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\x12(\n\tnode_info\x18\x04 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12!\n\x05group\x18\x05 \x01(\x0b\x32\x12.proto_types.Group\"l\n\x13RunResultWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultWarning\"\x97\x01\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\x12(\n\tnode_info\x18\x04 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12!\n\x05group\x18\x05 \x01(\x0b\x32\x12.proto_types.Group\"l\n\x13RunResultFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"^\n\x0cStatsLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.StatsLine\"j\n\x0eRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12!\n\x05group\x18\x03 \x01(\x0b\x32\x12.proto_types.Group\"h\n\x11RunResultErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RunResultError\"S\n\x17RunResultErrorNoMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1aRunResultErrorNoMessageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultErrorNoMessage\"I\n\x0fSQLCompiledPath\x12\x0c\n\x04path\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"j\n\x12SQLCompiledPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SQLCompiledPath\"W\n\x14\x43heckNodeTestFailure\x12\x15\n\rrelation_name\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"t\n\x17\x43heckNodeTestFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.CheckNodeTestFailure\"t\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\x12\x1b\n\x13num_partial_success\x18\x04 \x01(\x05\"j\n\x12\x45ndOfRunSummaryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.EndOfRunSummary\"g\n\x13MarkSkippedChildren\x12\x11\n\tunique_id\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12-\n\nrun_result\x18\x03 \x01(\x0b\x32\x19.proto_types.RunResultMsg\"r\n\x16MarkSkippedChildrenMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.MarkSkippedChildren\"e\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\x12\x0e\n\x06status\x18\x05 \x01(\t\"r\n\x16LogSkipBecauseErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.LogSkipBecauseError\"\x14\n\x12\x45nsureGitInstalled\"p\n\x15\x45nsureGitInstalledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.EnsureGitInstalled\"\x1a\n\x18\x44\x65psCreatingLocalSymlink\"|\n\x1b\x44\x65psCreatingLocalSymlinkMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsCreatingLocalSymlink\"\x19\n\x17\x44\x65psSymlinkNotAvailable\"z\n\x1a\x44\x65psSymlinkNotAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsSymlinkNotAvailable\"\x11\n\x0f\x44isableTracking\"j\n\x12\x44isableTrackingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fSendingEventMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SendingEvent\"\x12\n\x10SendEventFailure\"l\n\x13SendEventFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SendEventFailure\"\r\n\x0b\x46lushEvents\"b\n\x0e\x46lushEventsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.FlushEvents\"\x14\n\x12\x46lushEventsFailure\"p\n\x15\x46lushEventsFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"~\n\x1cTrackingInitializeFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.TrackingInitializeFailure\"P\n\x17RunResultWarningMessage\x12\x0b\n\x03msg\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1aRunResultWarningMessageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"b\n\x0e\x44\x65\x62ugCmdOutMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11\x44\x65\x62ugCmdResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\x1a.proto_types.CoreEventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.ListCmdOut\"\xec\x01\n\x0eResourceReport\x12\x14\n\x0c\x63ommand_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ommand_success\x18\x03 \x01(\x08\x12\x1f\n\x17\x63ommand_wall_clock_time\x18\x04 \x01(\x02\x12\x19\n\x11process_user_time\x18\x05 \x01(\x02\x12\x1b\n\x13process_kernel_time\x18\x06 \x01(\x02\x12\x1b\n\x13process_mem_max_rss\x18\x07 \x01(\x03\x12\x19\n\x11process_in_blocks\x18\x08 \x01(\x03\x12\x1a\n\x12process_out_blocks\x18\t \x01(\x03\"h\n\x11ResourceReportMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ResourceReportb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x63ore_types.proto\x12\x0bproto_types\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x99\x02\n\rCoreEventInfo\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\x34\n\x05\x65xtra\x18\t \x03(\x0b\x32%.proto_types.CoreEventInfo.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\"V\n\x0cNodeRelation\x12\x10\n\x08\x64\x61tabase\x18\n \x01(\t\x12\x0e\n\x06schema\x18\x0b \x01(\t\x12\r\n\x05\x61lias\x18\x0c \x01(\t\x12\x15\n\rrelation_name\x18\r \x01(\t\"\x91\x02\n\x08NodeInfo\x12\x11\n\tnode_path\x18\x01 \x01(\t\x12\x11\n\tnode_name\x18\x02 \x01(\t\x12\x11\n\tunique_id\x18\x03 \x01(\t\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x14\n\x0cmaterialized\x18\x05 \x01(\t\x12\x13\n\x0bnode_status\x18\x06 \x01(\t\x12\x17\n\x0fnode_started_at\x18\x07 \x01(\t\x12\x18\n\x10node_finished_at\x18\x08 \x01(\t\x12%\n\x04meta\x18\t \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x30\n\rnode_relation\x18\n \x01(\x0b\x32\x19.proto_types.NodeRelation\"\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\"\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\"\\\n\nColumnType\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x1c\n\x14previous_column_type\x18\x02 \x01(\t\x12\x1b\n\x13\x63urrent_column_type\x18\x03 \x01(\t\"Y\n\x10\x43olumnConstraint\x12\x13\n\x0b\x63olumn_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63onstraint_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63onstraint_type\x18\x03 \x01(\t\"T\n\x0fModelConstraint\x12\x17\n\x0f\x63onstraint_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63onstraint_type\x18\x02 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x03 \x03(\t\"9\n\x11MainReportVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x13\n\x0blog_version\x18\x02 \x01(\x05\"n\n\x14MainReportVersionMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11MainReportArgsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18MainTrackingUserStateMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12MergedFromStateMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17MissingProfileTargetMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MissingProfileTarget\"(\n\x11InvalidOptionYAML\x12\x13\n\x0boption_name\x18\x01 \x01(\t\"n\n\x14InvalidOptionYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogDbtProjectErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogDbtProfileErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15StarterProjectPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18\x43onfigFolderDirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17NoSampleProfileFoundMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1bProfileWrittenWithSampleMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x94\x01\n\'ProfileWrittenWithTargetTemplateYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x96\x01\n(ProfileWrittenWithProjectTemplateYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12@\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x32.proto_types.ProfileWrittenWithProjectTemplateYAML\"\x12\n\x10SettingUpProfile\"l\n\x13SettingUpProfileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SettingUpProfile\"\x1c\n\x1aInvalidProfileTemplateYAML\"\x80\x01\n\x1dInvalidProfileTemplateYAMLMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.InvalidProfileTemplateYAML\"(\n\x18ProjectNameAlreadyExists\x12\x0c\n\x04name\x18\x01 \x01(\t\"|\n\x1bProjectNameAlreadyExistsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11ProjectCreatedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x80\x01\n\x1dPackageRedirectDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.PackageRedirectDeprecation\"\x1f\n\x1dPackageInstallPathDeprecation\"\x86\x01\n PackageInstallPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1e\x43onfigSourcePathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"~\n\x1c\x43onfigDataPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.ConfigDataPathDeprecation\".\n\x17MetricAttributesRenamed\x12\x13\n\x0bmetric_name\x18\x01 \x01(\t\"z\n\x1aMetricAttributesRenamedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1a\x45xposureNameDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"r\n\x16InternalDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x80\x01\n\x1d\x45nvironmentVariableRenamedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1b\x43onfigLogPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1e\x43onfigTargetPathDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.ConfigTargetPathDeprecation\"C\n\x16TestsConfigDeprecation\x12\x17\n\x0f\x64\x65precated_path\x18\x01 \x01(\t\x12\x10\n\x08\x65xp_path\x18\x02 \x01(\t\"x\n\x19TestsConfigDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.TestsConfigDeprecation\"\x1e\n\x1cProjectFlagsMovedDeprecation\"\x84\x01\n\x1fProjectFlagsMovedDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x37\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32).proto_types.ProjectFlagsMovedDeprecation\"C\n\x1fSpacesInResourceNameDeprecation\x12\x11\n\tunique_id\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\t\"\x8a\x01\n\"SpacesInResourceNameDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SpacesInResourceNameDeprecation\"i\n\"ResourceNamesWithSpacesDeprecation\x12\x1b\n\x13\x63ount_invalid_names\x18\x01 \x01(\x05\x12\x17\n\x0fshow_debug_hint\x18\x02 \x01(\x08\x12\r\n\x05level\x18\x03 \x01(\t\"\x90\x01\n%ResourceNamesWithSpacesDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12=\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32/.proto_types.ResourceNamesWithSpacesDeprecation\"_\n)PackageMaterializationOverrideDeprecation\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x1c\n\x14materialization_name\x18\x02 \x01(\t\"\x9e\x01\n,PackageMaterializationOverrideDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x44\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x36.proto_types.PackageMaterializationOverrideDeprecation\"#\n!SourceFreshnessProjectHooksNotRun\"\x8e\x01\n$SourceFreshnessProjectHooksNotRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.SourceFreshnessProjectHooksNotRun\"0\n.MFTimespineWithoutYamlConfigurationDeprecation\"\xa8\x01\n1MFTimespineWithoutYamlConfigurationDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12I\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32;.proto_types.MFTimespineWithoutYamlConfigurationDeprecation\"#\n!MFCumulativeTypeParamsDeprecation\"\x8e\x01\n$MFCumulativeTypeParamsDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.MFCumulativeTypeParamsDeprecation\",\n*MicrobatchMacroOutsideOfBatchesDeprecation\"\xa0\x01\n-MicrobatchMacroOutsideOfBatchesDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x45\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x37.proto_types.MicrobatchMacroOutsideOfBatchesDeprecation\"V\n\x0f\x44\x65precatedModel\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x15\n\rmodel_version\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65precation_date\x18\x03 \x01(\t\"j\n\x12\x44\x65precatedModelMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.DeprecatedModel\"7\n\x12InputFileDiffError\x12\x10\n\x08\x63\x61tegory\x18\x01 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x02 \x01(\t\"p\n\x15InputFileDiffErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17InvalidValueForFieldMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"n\n\x14ValidationWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ValidationWarning\"!\n\x11ParsePerfInfoPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"n\n\x14ParsePerfInfoPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.ParsePerfInfoPath\"1\n!PartialParsingErrorProcessingFile\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\"\x8e\x01\n$PartialParsingErrorProcessingFileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"r\n\x16PartialParsingErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.PartialParsingError\"\x1b\n\x19PartialParsingSkipParsing\"~\n\x1cPartialParsingSkipParsingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.PartialParsingSkipParsing\"&\n\x14UnableToPartialParse\x12\x0e\n\x06reason\x18\x01 \x01(\t\"t\n\x17UnableToPartialParseMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15StateCheckVarsHashMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.StateCheckVarsHash\"\x1a\n\x18PartialParsingNotEnabled\"|\n\x1bPartialParsingNotEnabledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17ParsedFileLoadFailedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18PartialParsingEnabledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15PartialParsingFileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"InvalidDisabledTargetInTestNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1bUnusedResourceConfigPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10SeedIncreasedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1bSeedExceedsLimitSamePathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x88\x01\n!SeedExceedsLimitAndPathChangedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"SeedExceedsLimitChecksumChangedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.SeedExceedsLimitChecksumChanged\"%\n\x0cUnusedTables\x12\x15\n\runused_tables\x18\x01 \x03(\t\"d\n\x0fUnusedTablesMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1aWrongResourceSchemaFileMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13NoNodeForYamlKeyMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"v\n\x18MacroNotFoundForPatchMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"x\n\x19NodeNotFoundOrDisabledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12JinjaLogWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fJinjaLogInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10JinjaLogDebugMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.JinjaLogDebug\"\xae\x01\n\x1eUnpinnedRefNewVersionAvailable\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x15\n\rref_node_name\x18\x02 \x01(\t\x12\x18\n\x10ref_node_package\x18\x03 \x01(\t\x12\x18\n\x10ref_node_version\x18\x04 \x01(\t\x12\x17\n\x0fref_max_version\x18\x05 \x01(\t\"\x88\x01\n!UnpinnedRefNewVersionAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x39\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32+.proto_types.UnpinnedRefNewVersionAvailable\"\xc6\x01\n\x1cUpcomingReferenceDeprecation\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"\x84\x01\n\x1fUpcomingReferenceDeprecationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x37\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32).proto_types.UpcomingReferenceDeprecation\"\xbd\x01\n\x13\x44\x65precatedReference\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x19\n\x11ref_model_package\x18\x02 \x01(\t\x12\x16\n\x0eref_model_name\x18\x03 \x01(\t\x12\x19\n\x11ref_model_version\x18\x04 \x01(\t\x12 \n\x18ref_model_latest_version\x18\x05 \x01(\t\x12\"\n\x1aref_model_deprecation_date\x18\x06 \x01(\t\"r\n\x16\x44\x65precatedReferenceMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DeprecatedReference\"<\n$UnsupportedConstraintMaterialization\x12\x14\n\x0cmaterialized\x18\x01 \x01(\t\"\x94\x01\n\'UnsupportedConstraintMaterializationMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12?\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x31.proto_types.UnsupportedConstraintMaterialization\"M\n\x14ParseInlineNodeError\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\"t\n\x17ParseInlineNodeErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.ParseInlineNodeError\"(\n\x19SemanticValidationFailure\x12\x0b\n\x03msg\x18\x02 \x01(\t\"~\n\x1cSemanticValidationFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.SemanticValidationFailure\"\x8a\x03\n\x19UnversionedBreakingChange\x12\x18\n\x10\x62reaking_changes\x18\x01 \x03(\t\x12\x12\n\nmodel_name\x18\x02 \x01(\t\x12\x17\n\x0fmodel_file_path\x18\x03 \x01(\t\x12\"\n\x1a\x63ontract_enforced_disabled\x18\x04 \x01(\x08\x12\x17\n\x0f\x63olumns_removed\x18\x05 \x03(\t\x12\x34\n\x13\x63olumn_type_changes\x18\x06 \x03(\x0b\x32\x17.proto_types.ColumnType\x12I\n\"enforced_column_constraint_removed\x18\x07 \x03(\x0b\x32\x1d.proto_types.ColumnConstraint\x12G\n!enforced_model_constraint_removed\x18\x08 \x03(\x0b\x32\x1c.proto_types.ModelConstraint\x12\x1f\n\x17materialization_changed\x18\t \x03(\t\"~\n\x1cUnversionedBreakingChangeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.UnversionedBreakingChange\"*\n\x14WarnStateTargetEqual\x12\x12\n\nstate_path\x18\x01 \x01(\t\"t\n\x17WarnStateTargetEqualMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.WarnStateTargetEqual\"%\n\x16\x46reshnessConfigProblem\x12\x0b\n\x03msg\x18\x01 \x01(\t\"x\n\x19\x46reshnessConfigProblemMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.proto_types.FreshnessConfigProblem\"6\n MicrobatchModelNoEventTimeInputs\x12\x12\n\nmodel_name\x18\x01 \x01(\t\"\x8c\x01\n#MicrobatchModelNoEventTimeInputsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.MicrobatchModelNoEventTimeInputs\"/\n\x1dGitSparseCheckoutSubdirectory\x12\x0e\n\x06subdir\x18\x01 \x01(\t\"\x86\x01\n GitSparseCheckoutSubdirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.GitSparseCheckoutSubdirectory\"/\n\x1bGitProgressCheckoutRevision\x12\x10\n\x08revision\x18\x01 \x01(\t\"\x82\x01\n\x1eGitProgressCheckoutRevisionMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x96\x01\n(GitProgressUpdatingExistingDependencyMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"GitProgressPullingNewDependencyMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12:\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32,.proto_types.GitProgressPullingNewDependency\"\x1d\n\x0eGitNothingToDo\x12\x0b\n\x03sha\x18\x01 \x01(\t\"h\n\x11GitNothingToDoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8a\x01\n\"GitProgressUpdatedCheckoutRangeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1aGitProgressCheckedOutAtMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.GitProgressCheckedOutAt\")\n\x1aRegistryProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x80\x01\n\x1dRegistryProgressGETRequestMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1eRegistryProgressGETResponseMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x86\x01\n SelectorReportInvalidSelectorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x38\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32*.proto_types.SelectorReportInvalidSelector\"\x15\n\x13\x44\x65psNoPackagesFound\"r\n\x16\x44\x65psNoPackagesFoundMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"z\n\x1a\x44\x65psStartPackageInstallMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12\x44\x65psInstallInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"r\n\x16\x44\x65psUpdateAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.DepsUpdateAvailable\"\x0e\n\x0c\x44\x65psUpToDate\"d\n\x0f\x44\x65psUpToDateMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17\x44\x65psListSubdirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.DepsListSubdirectory\".\n\x1a\x44\x65psNotifyUpdatesAvailable\x12\x10\n\x08packages\x18\x01 \x03(\t\"\x80\x01\n\x1d\x44\x65psNotifyUpdatesAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x35\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\'.proto_types.DepsNotifyUpdatesAvailable\".\n\x1fRegistryIndexProgressGETRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\"\x8a\x01\n\"RegistryIndexProgressGETRequestMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8c\x01\n#RegistryIndexProgressGETResponseMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12;\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32-.proto_types.RegistryIndexProgressGETResponse\"2\n\x1eRegistryResponseUnexpectedType\x12\x10\n\x08response\x18\x01 \x01(\t\"\x88\x01\n!RegistryResponseUnexpectedTypeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x88\x01\n!RegistryResponseMissingTopKeysMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x8e\x01\n$RegistryResponseMissingNestedKeysMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12<\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32..proto_types.RegistryResponseMissingNestedKeys\"3\n\x1fRegistryResponseExtraNestedKeys\x12\x10\n\x08response\x18\x01 \x01(\t\"\x8a\x01\n\"RegistryResponseExtraNestedKeysMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"|\n\x1b\x44\x65psSetDownloadDirectoryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0f\x44\x65psUnpinnedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x82\x01\n\x1eNoNodesForSelectionCriteriaMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.NoNodesForSelectionCriteria\")\n\x10\x44\x65psLockUpdating\x12\x15\n\rlock_filepath\x18\x01 \x01(\t\"l\n\x13\x44\x65psLockUpdatingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.DepsLockUpdating\"R\n\x0e\x44\x65psAddPackage\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x19\n\x11packages_filepath\x18\x03 \x01(\t\"h\n\x11\x44\x65psAddPackageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.DepsAddPackage\"\xa7\x01\n\x19\x44\x65psFoundDuplicatePackage\x12S\n\x0fremoved_package\x18\x01 \x03(\x0b\x32:.proto_types.DepsFoundDuplicatePackage.RemovedPackageEntry\x1a\x35\n\x13RemovedPackageEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"~\n\x1c\x44\x65psFoundDuplicatePackageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.DepsFoundDuplicatePackage\"$\n\x12\x44\x65psVersionMissing\x12\x0e\n\x06source\x18\x01 \x01(\t\"p\n\x15\x44\x65psVersionMissingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.DepsVersionMissing\"/\n\x17\x44\x65psScrubbedPackageName\x12\x14\n\x0cpackage_name\x18\x01 \x01(\t\"z\n\x1a\x44\x65psScrubbedPackageNameMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsScrubbedPackageName\"?\n\x0f\x41rtifactWritten\x12\x15\n\rartifact_type\x18\x01 \x01(\t\x12\x15\n\rartifact_path\x18\x02 \x01(\t\"j\n\x12\x41rtifactWrittenMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ArtifactWritten\"*\n\x1bRunningOperationCaughtError\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\"\x82\x01\n\x1eRunningOperationCaughtErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x36\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32(.proto_types.RunningOperationCaughtError\"\x11\n\x0f\x43ompileComplete\"j\n\x12\x43ompileCompleteMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.CompileComplete\"\x18\n\x16\x46reshnessCheckComplete\"x\n\x19\x46reshnessCheckCompleteMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\x1a.proto_types.CoreEventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.SeedHeader\"]\n\x12SQLRunnerException\x12\x0b\n\x03\x65xc\x18\x01 \x01(\t\x12\x10\n\x08\x65xc_info\x18\x02 \x01(\t\x12(\n\tnode_info\x18\x03 \x01(\x0b\x32\x15.proto_types.NodeInfo\"p\n\x15SQLRunnerExceptionMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.SQLRunnerException\"\x87\x01\n\x05Group\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x14\n\x0cpackage_name\x18\x03 \x01(\t\x12,\n\x05owner\x18\x07 \x03(\x0b\x32\x1d.proto_types.Group.OwnerEntry\x1a,\n\nOwnerEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe2\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\x12!\n\x05group\x18\x08 \x01(\x0b\x32\x12.proto_types.Group\x12\x15\n\rattached_node\x18\t \x01(\t\"f\n\x10LogTestResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fLogStartLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.LogStartLine\"\xb8\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\x12!\n\x05group\x18\x07 \x01(\x0b\x32\x12.proto_types.Group\"h\n\x11LogModelResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogModelResult\"\x92\x02\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\x12\x16\n\x0eresult_message\x18\x08 \x01(\t\x1a*\n\x08\x43\x66gEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x14LogSnapshotResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10LogSeedResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogFreshnessResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.LogFreshnessResult\"\x98\x01\n\x11LogNodeNoOpResult\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\"n\n\x14LogNodeNoOpResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1e.proto_types.LogNodeNoOpResult\"\"\n\rLogCancelLine\x12\x11\n\tconn_name\x18\x01 \x01(\t\"f\n\x10LogCancelLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12\x44\x65\x66\x61ultSelectorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"^\n\x0cNodeStartMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fNodeFinishedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.NodeFinished\"+\n\x1bQueryCancelationUnsupported\x12\x0c\n\x04type\x18\x01 \x01(\t\"\x82\x01\n\x1eQueryCancelationUnsupportedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12\x43oncurrencyLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ConcurrencyLine\"E\n\x19WritingInjectedSQLForNode\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\"~\n\x1cWritingInjectedSQLForNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10NodeCompilingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"f\n\x10NodeExecutingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13LogHookStartLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11LogHookEndLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"j\n\x12SkippingDetailsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SkippingDetails\"\r\n\x0bNothingToDo\"b\n\x0eNothingToDoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x86\x01\n RunningOperationUncaughtErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0f\x45ndRunResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.EndRunResult\"\x11\n\x0fNoNodesSelected\"j\n\x12NoNodesSelectedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13\x43ommandCompletedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.CommandCompleted\"z\n\x08ShowNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x0f\n\x07preview\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\x12\r\n\x05quiet\x18\x06 \x01(\x08\"\\\n\x0bShowNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12#\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x15.proto_types.ShowNode\"\x7f\n\x0c\x43ompiledNode\x12\x11\n\tnode_name\x18\x01 \x01(\t\x12\x10\n\x08\x63ompiled\x18\x02 \x01(\t\x12\x11\n\tis_inline\x18\x03 \x01(\x08\x12\x15\n\routput_format\x18\x04 \x01(\t\x12\x11\n\tunique_id\x18\x05 \x01(\t\x12\r\n\x05quiet\x18\x06 \x01(\x08\"d\n\x0f\x43ompiledNodeMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.CompiledNode\"Y\n\x18SnapshotTimestampWarning\x12\x1f\n\x17snapshot_time_data_type\x18\x01 \x01(\t\x12\x1c\n\x14updated_at_data_type\x18\x02 \x01(\t\"|\n\x1bSnapshotTimestampWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.SnapshotTimestampWarning\"\'\n\x18MicrobatchExecutionDebug\x12\x0b\n\x03msg\x18\x01 \x01(\t\"|\n\x1bMicrobatchExecutionDebugMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.MicrobatchExecutionDebug\"z\n\rLogStartBatch\x12(\n\tnode_info\x18\x01 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x0b\x62\x61tch_index\x18\x03 \x01(\x05\x12\x15\n\rtotal_batches\x18\x04 \x01(\x05\"f\n\x10LogStartBatchMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12(\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1a.proto_types.LogStartBatch\"\xc6\x01\n\x0eLogBatchResult\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\x13\n\x0b\x62\x61tch_index\x18\x04 \x01(\x05\x12\x15\n\rtotal_batches\x18\x05 \x01(\x05\x12\x16\n\x0e\x65xecution_time\x18\x06 \x01(\x02\x12!\n\x05group\x18\x07 \x01(\x0b\x32\x12.proto_types.Group\"h\n\x11LogBatchResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.LogBatchResult\"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\"z\n\x1a\x43\x61tchableExceptionOnRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.CatchableExceptionOnRun\"_\n\x12InternalErrorOnRun\x12\x12\n\nbuild_path\x18\x01 \x01(\t\x12\x0b\n\x03\x65xc\x18\x02 \x01(\t\x12(\n\tnode_info\x18\x03 \x01(\x0b\x32\x15.proto_types.NodeInfo\"p\n\x15InternalErrorOnRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.InternalErrorOnRun\"u\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\x12(\n\tnode_info\x18\x04 \x01(\x0b\x32\x15.proto_types.NodeInfo\"v\n\x18GenericExceptionOnRunMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"\x80\x01\n\x1dNodeConnectionReleaseErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\x1a.proto_types.CoreEventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.FoundStats\"\x17\n\x15MainKeyboardInterrupt\"v\n\x18MainKeyboardInterruptMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"t\n\x17MainEncounteredErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.MainEncounteredError\"%\n\x0eMainStackTrace\x12\x13\n\x0bstack_trace\x18\x01 \x01(\t\"h\n\x11MainStackTraceMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.MainStackTrace\"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\"r\n\x16TimingInfoCollectedMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"p\n\x15LogDebugStackTraceMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11\x43heckCleanPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"l\n\x13\x43onfirmCleanPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.ConfirmCleanPath\"\"\n\x12ProtectedCleanPath\x12\x0c\n\x04path\x18\x01 \x01(\t\"p\n\x15ProtectedCleanPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.ProtectedCleanPath\"\x14\n\x12\x46inishedCleanPaths\"p\n\x15\x46inishedCleanPathsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"b\n\x0eOpenCommandMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.OpenCommand\"0\n\x0fServingDocsPort\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"j\n\x12ServingDocsPortMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.ServingDocsPort\"%\n\x15ServingDocsAccessInfo\x12\x0c\n\x04port\x18\x01 \x01(\t\"v\n\x18ServingDocsAccessInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\".proto_types.ServingDocsAccessInfo\"\x15\n\x13ServingDocsExitInfo\"r\n\x16ServingDocsExitInfoMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.ServingDocsExitInfo\"\x97\x01\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\x12(\n\tnode_info\x18\x04 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12!\n\x05group\x18\x05 \x01(\x0b\x32\x12.proto_types.Group\"l\n\x13RunResultWarningMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.RunResultWarning\"\x97\x01\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\x12(\n\tnode_info\x18\x04 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12!\n\x05group\x18\x05 \x01(\x0b\x32\x12.proto_types.Group\"l\n\x13RunResultFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"^\n\x0cStatsLineMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x16.proto_types.StatsLine\"j\n\x0eRunResultError\x12\x0b\n\x03msg\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\x12!\n\x05group\x18\x03 \x01(\x0b\x32\x12.proto_types.Group\"h\n\x11RunResultErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.RunResultError\"S\n\x17RunResultErrorNoMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1aRunResultErrorNoMessageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.RunResultErrorNoMessage\"I\n\x0fSQLCompiledPath\x12\x0c\n\x04path\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"j\n\x12SQLCompiledPathMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.SQLCompiledPath\"W\n\x14\x43heckNodeTestFailure\x12\x15\n\rrelation_name\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"t\n\x17\x43heckNodeTestFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12/\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32!.proto_types.CheckNodeTestFailure\"t\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\x12\x1b\n\x13num_partial_success\x18\x04 \x01(\x05\"j\n\x12\x45ndOfRunSummaryMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12*\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1c.proto_types.EndOfRunSummary\"g\n\x13MarkSkippedChildren\x12\x11\n\tunique_id\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12-\n\nrun_result\x18\x03 \x01(\x0b\x32\x19.proto_types.RunResultMsg\"r\n\x16MarkSkippedChildrenMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.MarkSkippedChildren\"e\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\x12\x0e\n\x06status\x18\x05 \x01(\t\"r\n\x16LogSkipBecauseErrorMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12.\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .proto_types.LogSkipBecauseError\"\x14\n\x12\x45nsureGitInstalled\"p\n\x15\x45nsureGitInstalledMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12-\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1f.proto_types.EnsureGitInstalled\"\x1a\n\x18\x44\x65psCreatingLocalSymlink\"|\n\x1b\x44\x65psCreatingLocalSymlinkMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x33\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32%.proto_types.DepsCreatingLocalSymlink\"\x19\n\x17\x44\x65psSymlinkNotAvailable\"z\n\x1a\x44\x65psSymlinkNotAvailableMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x32\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32$.proto_types.DepsSymlinkNotAvailable\"\x11\n\x0f\x44isableTracking\"j\n\x12\x44isableTrackingMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"d\n\x0fSendingEventMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\'\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x19.proto_types.SendingEvent\"\x12\n\x10SendEventFailure\"l\n\x13SendEventFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1d.proto_types.SendEventFailure\"\r\n\x0b\x46lushEvents\"b\n\x0e\x46lushEventsMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12&\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.proto_types.FlushEvents\"\x14\n\x12\x46lushEventsFailure\"p\n\x15\x46lushEventsFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"~\n\x1cTrackingInitializeFailureMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.proto_types.TrackingInitializeFailure\"P\n\x17RunResultWarningMessage\x12\x0b\n\x03msg\x18\x01 \x01(\t\x12(\n\tnode_info\x18\x02 \x01(\x0b\x32\x15.proto_types.NodeInfo\"z\n\x1aRunResultWarningMessageMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"b\n\x0e\x44\x65\x62ugCmdOutMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\"h\n\x11\x44\x65\x62ugCmdResultMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\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\x1a.proto_types.CoreEventInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.proto_types.ListCmdOut\"\xec\x01\n\x0eResourceReport\x12\x14\n\x0c\x63ommand_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ommand_success\x18\x03 \x01(\x08\x12\x1f\n\x17\x63ommand_wall_clock_time\x18\x04 \x01(\x02\x12\x19\n\x11process_user_time\x18\x05 \x01(\x02\x12\x1b\n\x13process_kernel_time\x18\x06 \x01(\x02\x12\x1b\n\x13process_mem_max_rss\x18\x07 \x01(\x03\x12\x19\n\x11process_in_blocks\x18\x08 \x01(\x03\x12\x1a\n\x12process_out_blocks\x18\t \x01(\x03\"h\n\x11ResourceReportMsg\x12(\n\x04info\x18\x01 \x01(\x0b\x32\x1a.proto_types.CoreEventInfo\x12)\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x1b.proto_types.ResourceReportb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -637,174 +637,182 @@ _globals['_MICROBATCHEXECUTIONDEBUG']._serialized_end=28950 _globals['_MICROBATCHEXECUTIONDEBUGMSG']._serialized_start=28952 _globals['_MICROBATCHEXECUTIONDEBUGMSG']._serialized_end=29076 - _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_start=29078 - _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_end=29176 - _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_start=29178 - _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_end=29300 - _globals['_INTERNALERRORONRUN']._serialized_start=29302 - _globals['_INTERNALERRORONRUN']._serialized_end=29397 - _globals['_INTERNALERRORONRUNMSG']._serialized_start=29399 - _globals['_INTERNALERRORONRUNMSG']._serialized_end=29511 - _globals['_GENERICEXCEPTIONONRUN']._serialized_start=29513 - _globals['_GENERICEXCEPTIONONRUN']._serialized_end=29630 - _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_start=29632 - _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_end=29750 - _globals['_NODECONNECTIONRELEASEERROR']._serialized_start=29752 - _globals['_NODECONNECTIONRELEASEERROR']._serialized_end=29830 - _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_start=29833 - _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_end=29961 - _globals['_FOUNDSTATS']._serialized_start=29963 - _globals['_FOUNDSTATS']._serialized_end=29994 - _globals['_FOUNDSTATSMSG']._serialized_start=29996 - _globals['_FOUNDSTATSMSG']._serialized_end=30092 - _globals['_MAINKEYBOARDINTERRUPT']._serialized_start=30094 - _globals['_MAINKEYBOARDINTERRUPT']._serialized_end=30117 - _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_start=30119 - _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_end=30237 - _globals['_MAINENCOUNTEREDERROR']._serialized_start=30239 - _globals['_MAINENCOUNTEREDERROR']._serialized_end=30274 - _globals['_MAINENCOUNTEREDERRORMSG']._serialized_start=30276 - _globals['_MAINENCOUNTEREDERRORMSG']._serialized_end=30392 - _globals['_MAINSTACKTRACE']._serialized_start=30394 - _globals['_MAINSTACKTRACE']._serialized_end=30431 - _globals['_MAINSTACKTRACEMSG']._serialized_start=30433 - _globals['_MAINSTACKTRACEMSG']._serialized_end=30537 - _globals['_TIMINGINFOCOLLECTED']._serialized_start=30539 - _globals['_TIMINGINFOCOLLECTED']._serialized_end=30651 - _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_start=30653 - _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_end=30767 - _globals['_LOGDEBUGSTACKTRACE']._serialized_start=30769 - _globals['_LOGDEBUGSTACKTRACE']._serialized_end=30807 - _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_start=30809 - _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_end=30921 - _globals['_CHECKCLEANPATH']._serialized_start=30923 - _globals['_CHECKCLEANPATH']._serialized_end=30953 - _globals['_CHECKCLEANPATHMSG']._serialized_start=30955 - _globals['_CHECKCLEANPATHMSG']._serialized_end=31059 - _globals['_CONFIRMCLEANPATH']._serialized_start=31061 - _globals['_CONFIRMCLEANPATH']._serialized_end=31093 - _globals['_CONFIRMCLEANPATHMSG']._serialized_start=31095 - _globals['_CONFIRMCLEANPATHMSG']._serialized_end=31203 - _globals['_PROTECTEDCLEANPATH']._serialized_start=31205 - _globals['_PROTECTEDCLEANPATH']._serialized_end=31239 - _globals['_PROTECTEDCLEANPATHMSG']._serialized_start=31241 - _globals['_PROTECTEDCLEANPATHMSG']._serialized_end=31353 - _globals['_FINISHEDCLEANPATHS']._serialized_start=31355 - _globals['_FINISHEDCLEANPATHS']._serialized_end=31375 - _globals['_FINISHEDCLEANPATHSMSG']._serialized_start=31377 - _globals['_FINISHEDCLEANPATHSMSG']._serialized_end=31489 - _globals['_OPENCOMMAND']._serialized_start=31491 - _globals['_OPENCOMMAND']._serialized_end=31544 - _globals['_OPENCOMMANDMSG']._serialized_start=31546 - _globals['_OPENCOMMANDMSG']._serialized_end=31644 - _globals['_SERVINGDOCSPORT']._serialized_start=31646 - _globals['_SERVINGDOCSPORT']._serialized_end=31694 - _globals['_SERVINGDOCSPORTMSG']._serialized_start=31696 - _globals['_SERVINGDOCSPORTMSG']._serialized_end=31802 - _globals['_SERVINGDOCSACCESSINFO']._serialized_start=31804 - _globals['_SERVINGDOCSACCESSINFO']._serialized_end=31841 - _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_start=31843 - _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_end=31961 - _globals['_SERVINGDOCSEXITINFO']._serialized_start=31963 - _globals['_SERVINGDOCSEXITINFO']._serialized_end=31984 - _globals['_SERVINGDOCSEXITINFOMSG']._serialized_start=31986 - _globals['_SERVINGDOCSEXITINFOMSG']._serialized_end=32100 - _globals['_RUNRESULTWARNING']._serialized_start=32103 - _globals['_RUNRESULTWARNING']._serialized_end=32254 - _globals['_RUNRESULTWARNINGMSG']._serialized_start=32256 - _globals['_RUNRESULTWARNINGMSG']._serialized_end=32364 - _globals['_RUNRESULTFAILURE']._serialized_start=32367 - _globals['_RUNRESULTFAILURE']._serialized_end=32518 - _globals['_RUNRESULTFAILUREMSG']._serialized_start=32520 - _globals['_RUNRESULTFAILUREMSG']._serialized_end=32628 - _globals['_STATSLINE']._serialized_start=32630 - _globals['_STATSLINE']._serialized_end=32737 - _globals['_STATSLINE_STATSENTRY']._serialized_start=32693 - _globals['_STATSLINE_STATSENTRY']._serialized_end=32737 - _globals['_STATSLINEMSG']._serialized_start=32739 - _globals['_STATSLINEMSG']._serialized_end=32833 - _globals['_RUNRESULTERROR']._serialized_start=32835 - _globals['_RUNRESULTERROR']._serialized_end=32941 - _globals['_RUNRESULTERRORMSG']._serialized_start=32943 - _globals['_RUNRESULTERRORMSG']._serialized_end=33047 - _globals['_RUNRESULTERRORNOMESSAGE']._serialized_start=33049 - _globals['_RUNRESULTERRORNOMESSAGE']._serialized_end=33132 - _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_start=33134 - _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_end=33256 - _globals['_SQLCOMPILEDPATH']._serialized_start=33258 - _globals['_SQLCOMPILEDPATH']._serialized_end=33331 - _globals['_SQLCOMPILEDPATHMSG']._serialized_start=33333 - _globals['_SQLCOMPILEDPATHMSG']._serialized_end=33439 - _globals['_CHECKNODETESTFAILURE']._serialized_start=33441 - _globals['_CHECKNODETESTFAILURE']._serialized_end=33528 - _globals['_CHECKNODETESTFAILUREMSG']._serialized_start=33530 - _globals['_CHECKNODETESTFAILUREMSG']._serialized_end=33646 - _globals['_ENDOFRUNSUMMARY']._serialized_start=33648 - _globals['_ENDOFRUNSUMMARY']._serialized_end=33764 - _globals['_ENDOFRUNSUMMARYMSG']._serialized_start=33766 - _globals['_ENDOFRUNSUMMARYMSG']._serialized_end=33872 - _globals['_MARKSKIPPEDCHILDREN']._serialized_start=33874 - _globals['_MARKSKIPPEDCHILDREN']._serialized_end=33977 - _globals['_MARKSKIPPEDCHILDRENMSG']._serialized_start=33979 - _globals['_MARKSKIPPEDCHILDRENMSG']._serialized_end=34093 - _globals['_LOGSKIPBECAUSEERROR']._serialized_start=34095 - _globals['_LOGSKIPBECAUSEERROR']._serialized_end=34196 - _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_start=34198 - _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_end=34312 - _globals['_ENSUREGITINSTALLED']._serialized_start=34314 - _globals['_ENSUREGITINSTALLED']._serialized_end=34334 - _globals['_ENSUREGITINSTALLEDMSG']._serialized_start=34336 - _globals['_ENSUREGITINSTALLEDMSG']._serialized_end=34448 - _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_start=34450 - _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_end=34476 - _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_start=34478 - _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_end=34602 - _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_start=34604 - _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_end=34629 - _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_start=34631 - _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_end=34753 - _globals['_DISABLETRACKING']._serialized_start=34755 - _globals['_DISABLETRACKING']._serialized_end=34772 - _globals['_DISABLETRACKINGMSG']._serialized_start=34774 - _globals['_DISABLETRACKINGMSG']._serialized_end=34880 - _globals['_SENDINGEVENT']._serialized_start=34882 - _globals['_SENDINGEVENT']._serialized_end=34912 - _globals['_SENDINGEVENTMSG']._serialized_start=34914 - _globals['_SENDINGEVENTMSG']._serialized_end=35014 - _globals['_SENDEVENTFAILURE']._serialized_start=35016 - _globals['_SENDEVENTFAILURE']._serialized_end=35034 - _globals['_SENDEVENTFAILUREMSG']._serialized_start=35036 - _globals['_SENDEVENTFAILUREMSG']._serialized_end=35144 - _globals['_FLUSHEVENTS']._serialized_start=35146 - _globals['_FLUSHEVENTS']._serialized_end=35159 - _globals['_FLUSHEVENTSMSG']._serialized_start=35161 - _globals['_FLUSHEVENTSMSG']._serialized_end=35259 - _globals['_FLUSHEVENTSFAILURE']._serialized_start=35261 - _globals['_FLUSHEVENTSFAILURE']._serialized_end=35281 - _globals['_FLUSHEVENTSFAILUREMSG']._serialized_start=35283 - _globals['_FLUSHEVENTSFAILUREMSG']._serialized_end=35395 - _globals['_TRACKINGINITIALIZEFAILURE']._serialized_start=35397 - _globals['_TRACKINGINITIALIZEFAILURE']._serialized_end=35442 - _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_start=35444 - _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_end=35570 - _globals['_RUNRESULTWARNINGMESSAGE']._serialized_start=35572 - _globals['_RUNRESULTWARNINGMESSAGE']._serialized_end=35652 - _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_start=35654 - _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_end=35776 - _globals['_DEBUGCMDOUT']._serialized_start=35778 - _globals['_DEBUGCMDOUT']._serialized_end=35804 - _globals['_DEBUGCMDOUTMSG']._serialized_start=35806 - _globals['_DEBUGCMDOUTMSG']._serialized_end=35904 - _globals['_DEBUGCMDRESULT']._serialized_start=35906 - _globals['_DEBUGCMDRESULT']._serialized_end=35935 - _globals['_DEBUGCMDRESULTMSG']._serialized_start=35937 - _globals['_DEBUGCMDRESULTMSG']._serialized_end=36041 - _globals['_LISTCMDOUT']._serialized_start=36043 - _globals['_LISTCMDOUT']._serialized_end=36068 - _globals['_LISTCMDOUTMSG']._serialized_start=36070 - _globals['_LISTCMDOUTMSG']._serialized_end=36166 - _globals['_RESOURCEREPORT']._serialized_start=36169 - _globals['_RESOURCEREPORT']._serialized_end=36405 - _globals['_RESOURCEREPORTMSG']._serialized_start=36407 - _globals['_RESOURCEREPORTMSG']._serialized_end=36511 + _globals['_LOGSTARTBATCH']._serialized_start=29078 + _globals['_LOGSTARTBATCH']._serialized_end=29200 + _globals['_LOGSTARTBATCHMSG']._serialized_start=29202 + _globals['_LOGSTARTBATCHMSG']._serialized_end=29304 + _globals['_LOGBATCHRESULT']._serialized_start=29307 + _globals['_LOGBATCHRESULT']._serialized_end=29505 + _globals['_LOGBATCHRESULTMSG']._serialized_start=29507 + _globals['_LOGBATCHRESULTMSG']._serialized_end=29611 + _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_start=29613 + _globals['_CATCHABLEEXCEPTIONONRUN']._serialized_end=29711 + _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_start=29713 + _globals['_CATCHABLEEXCEPTIONONRUNMSG']._serialized_end=29835 + _globals['_INTERNALERRORONRUN']._serialized_start=29837 + _globals['_INTERNALERRORONRUN']._serialized_end=29932 + _globals['_INTERNALERRORONRUNMSG']._serialized_start=29934 + _globals['_INTERNALERRORONRUNMSG']._serialized_end=30046 + _globals['_GENERICEXCEPTIONONRUN']._serialized_start=30048 + _globals['_GENERICEXCEPTIONONRUN']._serialized_end=30165 + _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_start=30167 + _globals['_GENERICEXCEPTIONONRUNMSG']._serialized_end=30285 + _globals['_NODECONNECTIONRELEASEERROR']._serialized_start=30287 + _globals['_NODECONNECTIONRELEASEERROR']._serialized_end=30365 + _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_start=30368 + _globals['_NODECONNECTIONRELEASEERRORMSG']._serialized_end=30496 + _globals['_FOUNDSTATS']._serialized_start=30498 + _globals['_FOUNDSTATS']._serialized_end=30529 + _globals['_FOUNDSTATSMSG']._serialized_start=30531 + _globals['_FOUNDSTATSMSG']._serialized_end=30627 + _globals['_MAINKEYBOARDINTERRUPT']._serialized_start=30629 + _globals['_MAINKEYBOARDINTERRUPT']._serialized_end=30652 + _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_start=30654 + _globals['_MAINKEYBOARDINTERRUPTMSG']._serialized_end=30772 + _globals['_MAINENCOUNTEREDERROR']._serialized_start=30774 + _globals['_MAINENCOUNTEREDERROR']._serialized_end=30809 + _globals['_MAINENCOUNTEREDERRORMSG']._serialized_start=30811 + _globals['_MAINENCOUNTEREDERRORMSG']._serialized_end=30927 + _globals['_MAINSTACKTRACE']._serialized_start=30929 + _globals['_MAINSTACKTRACE']._serialized_end=30966 + _globals['_MAINSTACKTRACEMSG']._serialized_start=30968 + _globals['_MAINSTACKTRACEMSG']._serialized_end=31072 + _globals['_TIMINGINFOCOLLECTED']._serialized_start=31074 + _globals['_TIMINGINFOCOLLECTED']._serialized_end=31186 + _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_start=31188 + _globals['_TIMINGINFOCOLLECTEDMSG']._serialized_end=31302 + _globals['_LOGDEBUGSTACKTRACE']._serialized_start=31304 + _globals['_LOGDEBUGSTACKTRACE']._serialized_end=31342 + _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_start=31344 + _globals['_LOGDEBUGSTACKTRACEMSG']._serialized_end=31456 + _globals['_CHECKCLEANPATH']._serialized_start=31458 + _globals['_CHECKCLEANPATH']._serialized_end=31488 + _globals['_CHECKCLEANPATHMSG']._serialized_start=31490 + _globals['_CHECKCLEANPATHMSG']._serialized_end=31594 + _globals['_CONFIRMCLEANPATH']._serialized_start=31596 + _globals['_CONFIRMCLEANPATH']._serialized_end=31628 + _globals['_CONFIRMCLEANPATHMSG']._serialized_start=31630 + _globals['_CONFIRMCLEANPATHMSG']._serialized_end=31738 + _globals['_PROTECTEDCLEANPATH']._serialized_start=31740 + _globals['_PROTECTEDCLEANPATH']._serialized_end=31774 + _globals['_PROTECTEDCLEANPATHMSG']._serialized_start=31776 + _globals['_PROTECTEDCLEANPATHMSG']._serialized_end=31888 + _globals['_FINISHEDCLEANPATHS']._serialized_start=31890 + _globals['_FINISHEDCLEANPATHS']._serialized_end=31910 + _globals['_FINISHEDCLEANPATHSMSG']._serialized_start=31912 + _globals['_FINISHEDCLEANPATHSMSG']._serialized_end=32024 + _globals['_OPENCOMMAND']._serialized_start=32026 + _globals['_OPENCOMMAND']._serialized_end=32079 + _globals['_OPENCOMMANDMSG']._serialized_start=32081 + _globals['_OPENCOMMANDMSG']._serialized_end=32179 + _globals['_SERVINGDOCSPORT']._serialized_start=32181 + _globals['_SERVINGDOCSPORT']._serialized_end=32229 + _globals['_SERVINGDOCSPORTMSG']._serialized_start=32231 + _globals['_SERVINGDOCSPORTMSG']._serialized_end=32337 + _globals['_SERVINGDOCSACCESSINFO']._serialized_start=32339 + _globals['_SERVINGDOCSACCESSINFO']._serialized_end=32376 + _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_start=32378 + _globals['_SERVINGDOCSACCESSINFOMSG']._serialized_end=32496 + _globals['_SERVINGDOCSEXITINFO']._serialized_start=32498 + _globals['_SERVINGDOCSEXITINFO']._serialized_end=32519 + _globals['_SERVINGDOCSEXITINFOMSG']._serialized_start=32521 + _globals['_SERVINGDOCSEXITINFOMSG']._serialized_end=32635 + _globals['_RUNRESULTWARNING']._serialized_start=32638 + _globals['_RUNRESULTWARNING']._serialized_end=32789 + _globals['_RUNRESULTWARNINGMSG']._serialized_start=32791 + _globals['_RUNRESULTWARNINGMSG']._serialized_end=32899 + _globals['_RUNRESULTFAILURE']._serialized_start=32902 + _globals['_RUNRESULTFAILURE']._serialized_end=33053 + _globals['_RUNRESULTFAILUREMSG']._serialized_start=33055 + _globals['_RUNRESULTFAILUREMSG']._serialized_end=33163 + _globals['_STATSLINE']._serialized_start=33165 + _globals['_STATSLINE']._serialized_end=33272 + _globals['_STATSLINE_STATSENTRY']._serialized_start=33228 + _globals['_STATSLINE_STATSENTRY']._serialized_end=33272 + _globals['_STATSLINEMSG']._serialized_start=33274 + _globals['_STATSLINEMSG']._serialized_end=33368 + _globals['_RUNRESULTERROR']._serialized_start=33370 + _globals['_RUNRESULTERROR']._serialized_end=33476 + _globals['_RUNRESULTERRORMSG']._serialized_start=33478 + _globals['_RUNRESULTERRORMSG']._serialized_end=33582 + _globals['_RUNRESULTERRORNOMESSAGE']._serialized_start=33584 + _globals['_RUNRESULTERRORNOMESSAGE']._serialized_end=33667 + _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_start=33669 + _globals['_RUNRESULTERRORNOMESSAGEMSG']._serialized_end=33791 + _globals['_SQLCOMPILEDPATH']._serialized_start=33793 + _globals['_SQLCOMPILEDPATH']._serialized_end=33866 + _globals['_SQLCOMPILEDPATHMSG']._serialized_start=33868 + _globals['_SQLCOMPILEDPATHMSG']._serialized_end=33974 + _globals['_CHECKNODETESTFAILURE']._serialized_start=33976 + _globals['_CHECKNODETESTFAILURE']._serialized_end=34063 + _globals['_CHECKNODETESTFAILUREMSG']._serialized_start=34065 + _globals['_CHECKNODETESTFAILUREMSG']._serialized_end=34181 + _globals['_ENDOFRUNSUMMARY']._serialized_start=34183 + _globals['_ENDOFRUNSUMMARY']._serialized_end=34299 + _globals['_ENDOFRUNSUMMARYMSG']._serialized_start=34301 + _globals['_ENDOFRUNSUMMARYMSG']._serialized_end=34407 + _globals['_MARKSKIPPEDCHILDREN']._serialized_start=34409 + _globals['_MARKSKIPPEDCHILDREN']._serialized_end=34512 + _globals['_MARKSKIPPEDCHILDRENMSG']._serialized_start=34514 + _globals['_MARKSKIPPEDCHILDRENMSG']._serialized_end=34628 + _globals['_LOGSKIPBECAUSEERROR']._serialized_start=34630 + _globals['_LOGSKIPBECAUSEERROR']._serialized_end=34731 + _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_start=34733 + _globals['_LOGSKIPBECAUSEERRORMSG']._serialized_end=34847 + _globals['_ENSUREGITINSTALLED']._serialized_start=34849 + _globals['_ENSUREGITINSTALLED']._serialized_end=34869 + _globals['_ENSUREGITINSTALLEDMSG']._serialized_start=34871 + _globals['_ENSUREGITINSTALLEDMSG']._serialized_end=34983 + _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_start=34985 + _globals['_DEPSCREATINGLOCALSYMLINK']._serialized_end=35011 + _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_start=35013 + _globals['_DEPSCREATINGLOCALSYMLINKMSG']._serialized_end=35137 + _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_start=35139 + _globals['_DEPSSYMLINKNOTAVAILABLE']._serialized_end=35164 + _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_start=35166 + _globals['_DEPSSYMLINKNOTAVAILABLEMSG']._serialized_end=35288 + _globals['_DISABLETRACKING']._serialized_start=35290 + _globals['_DISABLETRACKING']._serialized_end=35307 + _globals['_DISABLETRACKINGMSG']._serialized_start=35309 + _globals['_DISABLETRACKINGMSG']._serialized_end=35415 + _globals['_SENDINGEVENT']._serialized_start=35417 + _globals['_SENDINGEVENT']._serialized_end=35447 + _globals['_SENDINGEVENTMSG']._serialized_start=35449 + _globals['_SENDINGEVENTMSG']._serialized_end=35549 + _globals['_SENDEVENTFAILURE']._serialized_start=35551 + _globals['_SENDEVENTFAILURE']._serialized_end=35569 + _globals['_SENDEVENTFAILUREMSG']._serialized_start=35571 + _globals['_SENDEVENTFAILUREMSG']._serialized_end=35679 + _globals['_FLUSHEVENTS']._serialized_start=35681 + _globals['_FLUSHEVENTS']._serialized_end=35694 + _globals['_FLUSHEVENTSMSG']._serialized_start=35696 + _globals['_FLUSHEVENTSMSG']._serialized_end=35794 + _globals['_FLUSHEVENTSFAILURE']._serialized_start=35796 + _globals['_FLUSHEVENTSFAILURE']._serialized_end=35816 + _globals['_FLUSHEVENTSFAILUREMSG']._serialized_start=35818 + _globals['_FLUSHEVENTSFAILUREMSG']._serialized_end=35930 + _globals['_TRACKINGINITIALIZEFAILURE']._serialized_start=35932 + _globals['_TRACKINGINITIALIZEFAILURE']._serialized_end=35977 + _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_start=35979 + _globals['_TRACKINGINITIALIZEFAILUREMSG']._serialized_end=36105 + _globals['_RUNRESULTWARNINGMESSAGE']._serialized_start=36107 + _globals['_RUNRESULTWARNINGMESSAGE']._serialized_end=36187 + _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_start=36189 + _globals['_RUNRESULTWARNINGMESSAGEMSG']._serialized_end=36311 + _globals['_DEBUGCMDOUT']._serialized_start=36313 + _globals['_DEBUGCMDOUT']._serialized_end=36339 + _globals['_DEBUGCMDOUTMSG']._serialized_start=36341 + _globals['_DEBUGCMDOUTMSG']._serialized_end=36439 + _globals['_DEBUGCMDRESULT']._serialized_start=36441 + _globals['_DEBUGCMDRESULT']._serialized_end=36470 + _globals['_DEBUGCMDRESULTMSG']._serialized_start=36472 + _globals['_DEBUGCMDRESULTMSG']._serialized_end=36576 + _globals['_LISTCMDOUT']._serialized_start=36578 + _globals['_LISTCMDOUT']._serialized_end=36603 + _globals['_LISTCMDOUTMSG']._serialized_start=36605 + _globals['_LISTCMDOUTMSG']._serialized_end=36701 + _globals['_RESOURCEREPORT']._serialized_start=36704 + _globals['_RESOURCEREPORT']._serialized_end=36940 + _globals['_RESOURCEREPORTMSG']._serialized_start=36942 + _globals['_RESOURCEREPORTMSG']._serialized_end=37046 # @@protoc_insertion_point(module_scope) diff --git a/core/dbt/events/types.py b/core/dbt/events/types.py index 85d2df355ae..5770a6518ad 100644 --- a/core/dbt/events/types.py +++ b/core/dbt/events/types.py @@ -1710,6 +1710,51 @@ def message(self) -> str: return self.msg +class LogStartBatch(InfoLevel): + def code(self) -> str: + return "Q045" + + def message(self) -> str: + msg = f"START {self.description}" + + # TODO update common so that we can append "batch" in `format_fancy_output_line` + formatted = format_fancy_output_line( + msg=msg, + status="RUN", + index=self.batch_index, + total=self.total_batches, + ) + return f"Batch {formatted}" + + +class LogBatchResult(DynamicLevel): + def code(self) -> str: + return "Q046" + + def message(self) -> str: + if self.status == "error": + info = "ERROR creating" + status = red(self.status.upper()) + elif self.status == "skipped": + info = "SKIP" + status = yellow(self.status.upper()) + else: + info = "OK created" + status = green(self.status) + + msg = f"{info} {self.description}" + + # TODO update common so that we can append "batch" in `format_fancy_output_line` + formatted = format_fancy_output_line( + msg=msg, + status=status, + index=self.batch_index, + total=self.total_batches, + execution_time=self.execution_time, + ) + return f"Batch {formatted}" + + # ======================================================= # W - Node testing # ======================================================= diff --git a/core/dbt/graph/graph.py b/core/dbt/graph/graph.py index cf569f3547d..4d1e545cbd2 100644 --- a/core/dbt/graph/graph.py +++ b/core/dbt/graph/graph.py @@ -67,8 +67,14 @@ def select_children( while len(selected) > 0 and (max_depth is None or i < max_depth): next_layer: Set[UniqueId] = set() for node in selected: - next_layer.update(self.descendants(node, 1)) - next_layer = next_layer - children # Avoid re-searching + next_layer.update( + iter( + e[1] + for e in self.graph.out_edges(node) + if e[1] not in children + and self.filter_edges_by_type(e[0], e[1], "parent_test") + ) + ) children.update(next_layer) selected = next_layer i += 1 @@ -86,8 +92,14 @@ def select_parents( while len(selected) > 0 and (max_depth is None or i < max_depth): next_layer: Set[UniqueId] = set() for node in selected: - next_layer.update(self.ancestors(node, 1)) - next_layer = next_layer - parents # Avoid re-searching + next_layer.update( + iter( + e[0] + for e in self.graph.in_edges(node) + if e[0] not in parents + and self.filter_edges_by_type(e[0], e[1], "parent_test") + ) + ) parents.update(next_layer) selected = next_layer i += 1 diff --git a/core/dbt/materializations/incremental/microbatch.py b/core/dbt/materializations/incremental/microbatch.py index b89c834d4a2..6de6945704c 100644 --- a/core/dbt/materializations/incremental/microbatch.py +++ b/core/dbt/materializations/incremental/microbatch.py @@ -100,25 +100,25 @@ def build_batches(self, start: datetime, end: datetime) -> List[BatchType]: return batches - def build_batch_context(self, incremental_batch: bool) -> Dict[str, Any]: + def build_jinja_context_for_batch(self, incremental_batch: bool) -> Dict[str, Any]: """ Create context with entries that reflect microbatch model + incremental execution state Assumes self.model has been (re)-compiled with necessary batch filters applied. """ - batch_context: Dict[str, Any] = {} + jinja_context: Dict[str, Any] = {} # Microbatch model properties - batch_context["model"] = self.model.to_dict() - batch_context["sql"] = self.model.compiled_code - batch_context["compiled_code"] = self.model.compiled_code + jinja_context["model"] = self.model.to_dict() + jinja_context["sql"] = self.model.compiled_code + jinja_context["compiled_code"] = self.model.compiled_code # Add incremental context variables for batches running incrementally if incremental_batch: - batch_context["is_incremental"] = lambda: True - batch_context["should_full_refresh"] = lambda: False + jinja_context["is_incremental"] = lambda: True + jinja_context["should_full_refresh"] = lambda: False - return batch_context + return jinja_context @staticmethod def offset_timestamp(timestamp: datetime, batch_size: BatchSize, offset: int) -> datetime: @@ -193,12 +193,11 @@ def truncate_timestamp(timestamp: datetime, batch_size: BatchSize) -> datetime: return truncated @staticmethod - def format_batch_start( - batch_start: Optional[datetime], batch_size: BatchSize - ) -> Optional[str]: - if batch_start is None: - return batch_start + def batch_id(start_time: datetime, batch_size: BatchSize) -> str: + return MicrobatchBuilder.format_batch_start(start_time, batch_size).replace("-", "") + @staticmethod + def format_batch_start(batch_start: datetime, batch_size: BatchSize) -> str: return str( batch_start.date() if (batch_start and batch_size != BatchSize.hour) else batch_start ) diff --git a/core/dbt/parser/manifest.py b/core/dbt/parser/manifest.py index 98e7cea6257..72f328a0bbe 100644 --- a/core/dbt/parser/manifest.py +++ b/core/dbt/parser/manifest.py @@ -627,9 +627,11 @@ def check_for_spaces_in_resource_names(self): else EventLevel.WARN ) + flags = get_flags() + for node in self.manifest.nodes.values(): if " " in node.name: - if improper_resource_names == 0 or self.root_project.args.DEBUG: + if improper_resource_names == 0 or flags.DEBUG: fire_event( SpacesInResourceNameDeprecation( unique_id=node.unique_id, @@ -641,7 +643,6 @@ def check_for_spaces_in_resource_names(self): if improper_resource_names > 0: if level == EventLevel.WARN: - flags = get_flags() dbt.deprecations.warn( "resource-names-with-spaces", count_invalid_names=improper_resource_names, diff --git a/core/dbt/parser/partial.py b/core/dbt/parser/partial.py index d4e20a617e1..e011c57670a 100644 --- a/core/dbt/parser/partial.py +++ b/core/dbt/parser/partial.py @@ -725,6 +725,7 @@ def handle_change(key: str, delete: Callable): handle_change("semantic_models", self.delete_schema_semantic_model) handle_change("unit_tests", self.delete_schema_unit_test) handle_change("saved_queries", self.delete_schema_saved_query) + handle_change("data_tests", self.delete_schema_data_test_patch) def _handle_element_change( self, schema_file, saved_yaml_dict, new_yaml_dict, env_var_changes, dict_key: str, delete @@ -919,6 +920,23 @@ def delete_schema_macro_patch(self, schema_file, macro): self.saved_files[macro_file_id] = deepcopy(self.new_files[macro_file_id]) self.add_to_pp_files(self.saved_files[macro_file_id]) + def delete_schema_data_test_patch(self, schema_file, data_test): + data_test_unique_id = None + for unique_id in schema_file.node_patches: + if not unique_id.startswith("test"): + continue + parts = unique_id.split(".") + elem_name = parts[2] + if elem_name == data_test["name"]: + data_test_unique_id = unique_id + break + if data_test_unique_id and data_test_unique_id in self.saved_manifest.nodes: + singular_data_test = self.saved_manifest.nodes.pop(data_test_unique_id) + file_id = singular_data_test.file_id + if file_id in self.new_files: + self.saved_files[file_id] = deepcopy(self.new_files[file_id]) + self.add_to_pp_files(self.saved_files[file_id]) + # exposures are created only from schema files, so just delete # the exposure or the disabled exposure. def delete_schema_exposure(self, schema_file, exposure_dict): diff --git a/core/dbt/parser/schema_yaml_readers.py b/core/dbt/parser/schema_yaml_readers.py index 19141b9499f..1aa77371e0a 100644 --- a/core/dbt/parser/schema_yaml_readers.py +++ b/core/dbt/parser/schema_yaml_readers.py @@ -226,19 +226,11 @@ def _get_input_measures( def _get_period_agg(self, unparsed_period_agg: str) -> PeriodAggregation: return PeriodAggregation(unparsed_period_agg) - def _get_optional_grain_to_date( - self, unparsed_grain_to_date: Optional[str] - ) -> Optional[TimeGranularity]: - if not unparsed_grain_to_date: - return None - - return TimeGranularity(unparsed_grain_to_date) - def _get_optional_time_window( self, unparsed_window: Optional[str] ) -> Optional[MetricTimeWindow]: if unparsed_window is not None: - parts = unparsed_window.split(" ") + parts = unparsed_window.lower().split(" ") if len(parts) != 2: raise YamlParseDictError( self.yaml.path, @@ -250,16 +242,11 @@ def _get_optional_time_window( granularity = parts[1] # once we drop python 3.8 this could just be `granularity = parts[0].removesuffix('s') - if granularity.endswith("s"): - # months -> month + if granularity.endswith("s") and granularity[:-1] in [ + item.value for item in TimeGranularity + ]: + # Can only remove the `s` if it's a standard grain, months -> month granularity = granularity[:-1] - if granularity not in [item.value for item in TimeGranularity]: - raise YamlParseDictError( - self.yaml.path, - "window", - {"window": unparsed_window}, - f"Invalid time granularity {granularity} in cumulative/conversion metric window string: ({unparsed_window})", - ) count = parts[0] if not count.isdigit(): @@ -272,7 +259,7 @@ def _get_optional_time_window( return MetricTimeWindow( count=int(count), - granularity=TimeGranularity(granularity), + granularity=granularity, ) else: return None @@ -281,16 +268,12 @@ def _get_metric_input(self, unparsed: Union[UnparsedMetricInput, str]) -> Metric if isinstance(unparsed, str): return MetricInput(name=unparsed) else: - offset_to_grain: Optional[TimeGranularity] = None - if unparsed.offset_to_grain is not None: - offset_to_grain = TimeGranularity(unparsed.offset_to_grain) - return MetricInput( name=unparsed.name, filter=parse_where_filter(unparsed.filter), alias=unparsed.alias, offset_window=self._get_optional_time_window(unparsed.offset_window), - offset_to_grain=offset_to_grain, + offset_to_grain=unparsed.offset_to_grain, ) def _get_optional_metric_input( @@ -352,9 +335,7 @@ def _get_optional_cumulative_type_params( window=self._get_optional_time_window( unparsed_type_params.cumulative_type_params.window ), - grain_to_date=self._get_optional_grain_to_date( - unparsed_type_params.cumulative_type_params.grain_to_date - ), + grain_to_date=unparsed_type_params.cumulative_type_params.grain_to_date, period_agg=self._get_period_agg( unparsed_type_params.cumulative_type_params.period_agg ), @@ -367,6 +348,10 @@ def _get_metric_type_params(self, unparsed_metric: UnparsedMetric) -> MetricType grain_to_date: Optional[TimeGranularity] = None if type_params.grain_to_date is not None: + # This should've been changed to a string (to support custom grain), but since this + # is a legacy field waiting to be deprecated, we will not support custom grain here + # in order to force customers off of using this field. The field to use should be + # `cumulative_type_params.grain_to_date` grain_to_date = TimeGranularity(type_params.grain_to_date) return MetricTypeParams( @@ -432,9 +417,7 @@ def parse_metric(self, unparsed: UnparsedMetric, generated_from: Optional[str] = label=unparsed.label, type=MetricType(unparsed.type), type_params=self._get_metric_type_params(unparsed), - time_granularity=( - TimeGranularity(unparsed.time_granularity) if unparsed.time_granularity else None - ), + time_granularity=unparsed.time_granularity, filter=parse_where_filter(unparsed.filter), meta=unparsed.meta, tags=unparsed.tags, diff --git a/core/dbt/parser/schemas.py b/core/dbt/parser/schemas.py index 0fd5126a3c8..8d05ef8bcf5 100644 --- a/core/dbt/parser/schemas.py +++ b/core/dbt/parser/schemas.py @@ -1199,8 +1199,6 @@ def parse_patch(self, block: TargetBlock[UnparsedSingularTestUpdate], refs: Pars node.patch_path = patch.file_id node.description = patch.description node.created_at = time.time() - node.meta = patch.meta - node.docs = patch.docs class MacroPatchParser(PatchParser[UnparsedMacroUpdate, ParsedMacroPatch]): diff --git a/core/dbt/task/retry.py b/core/dbt/task/retry.py index 9b3c3874718..5bafa39a136 100644 --- a/core/dbt/task/retry.py +++ b/core/dbt/task/retry.py @@ -42,7 +42,7 @@ "warn_error", } -ALLOW_CLI_OVERRIDE_FLAGS = {"vars"} +ALLOW_CLI_OVERRIDE_FLAGS = {"vars", "threads"} TASK_DICT = { "build": BuildTask, @@ -136,7 +136,7 @@ def run(self): # batch info if there were _no_ successful batches previously. This is # because passing the batch info _forces_ the microbatch process into # _incremental_ model, and it may be that we need to be in full refresh - # mode which is only handled if batch_info _isn't_ passed for a node + # mode which is only handled if previous_batch_results _isn't_ passed for a node batch_map = { result.unique_id: result.batch_results for result in self.previous_results.results diff --git a/core/dbt/task/run.py b/core/dbt/task/run.py index 1cd41cd6f39..44d45272cfb 100644 --- a/core/dbt/task/run.py +++ b/core/dbt/task/run.py @@ -27,12 +27,14 @@ from dbt.config import RuntimeConfig from dbt.context.providers import generate_runtime_model_context from dbt.contracts.graph.manifest import Manifest -from dbt.contracts.graph.nodes import HookNode, ModelNode, ResultNode +from dbt.contracts.graph.nodes import BatchContext, HookNode, ModelNode, ResultNode from dbt.events.types import ( GenericExceptionOnRun, + LogBatchResult, LogHookEndLine, LogHookStartLine, LogModelResult, + LogStartBatch, LogStartLine, MicrobatchExecutionDebug, ) @@ -283,7 +285,6 @@ def _execute_model( hook_ctx: Any, context_config: Any, model: ModelNode, - manifest: Manifest, context: Dict[str, Any], materialization_macro: MacroProtocol, ) -> RunResult: @@ -328,9 +329,7 @@ def execute(self, model, manifest): hook_ctx = self.adapter.pre_model_hook(context_config) - return self._execute_model( - hook_ctx, context_config, model, manifest, context, materialization_macro - ) + return self._execute_model(hook_ctx, context_config, model, context, materialization_macro) class MicrobatchModelRunner(ModelRunner): @@ -341,6 +340,33 @@ def __init__(self, config, adapter, node, node_index: int, num_nodes: int): self.batches: Dict[int, BatchType] = {} self.relation_exists: bool = False + def compile(self, manifest: Manifest): + if self.batch_idx is not None: + batch = self.batches[self.batch_idx] + + # LEGACY: Set start/end in context prior to re-compiling (Will be removed for 1.10+) + # TODO: REMOVE before 1.10 GA + self.node.config["__dbt_internal_microbatch_event_time_start"] = batch[0] + self.node.config["__dbt_internal_microbatch_event_time_end"] = batch[1] + # Create batch context on model node prior to re-compiling + self.node.batch = BatchContext( + id=MicrobatchBuilder.batch_id(batch[0], self.node.config.batch_size), + event_time_start=batch[0], + event_time_end=batch[1], + ) + # Recompile node to re-resolve refs with event time filters rendered, update context + self.compiler.compile_node( + self.node, + manifest, + {}, + split_suffix=MicrobatchBuilder.format_batch_start( + batch[0], self.node.config.batch_size + ), + ) + + # Skips compilation for non-batch runs + return self.node + def set_batch_idx(self, batch_idx: int) -> None: self.batch_idx = batch_idx @@ -350,10 +376,21 @@ def set_relation_exists(self, relation_exists: bool) -> None: def set_batches(self, batches: Dict[int, BatchType]) -> None: self.batches = batches + @property + def batch_start(self) -> Optional[datetime]: + if self.batch_idx is None: + return None + else: + return self.batches[self.batch_idx][0] + def describe_node(self) -> str: return f"{self.node.language} microbatch model {self.get_node_representation()}" - def describe_batch(self, batch_start: Optional[datetime]) -> str: + def describe_batch(self) -> str: + batch_start = self.batch_start + if batch_start is None: + return "" + # Only visualize date if batch_start year/month/day formatted_batch_start = MicrobatchBuilder.format_batch_start( batch_start, self.node.config.batch_size @@ -367,21 +404,23 @@ def print_batch_result_line( if self.batch_idx is None: return - batch_start = self.batches[self.batch_idx][0] - description = self.describe_batch(batch_start) + description = self.describe_batch() group = group_lookup.get(self.node.unique_id) if result.status == NodeStatus.Error: status = result.status level = EventLevel.ERROR + elif result.status == NodeStatus.Skipped: + status = result.status + level = EventLevel.INFO else: status = result.message level = EventLevel.INFO fire_event( - LogModelResult( + LogBatchResult( description=description, status=status, - index=self.batch_idx + 1, - total=len(self.batches), + batch_index=self.batch_idx + 1, + total_batches=len(self.batches), execution_time=result.execution_time, node_info=self.node.node_info, group=group, @@ -397,12 +436,12 @@ def print_batch_start_line(self) -> None: if batch_start is None: return - batch_description = self.describe_batch(batch_start) + batch_description = self.describe_batch() fire_event( - LogStartLine( + LogStartBatch( description=batch_description, - index=self.batch_idx + 1, - total=len(self.batches), + batch_index=self.batch_idx + 1, + total_batches=len(self.batches), node_info=self.node.node_info, ) ) @@ -445,8 +484,27 @@ def merge_batch_results(self, result: RunResult, batch_results: List[RunResult]) result.batch_results.failed = sorted(result.batch_results.failed) # # If retrying, propagate previously successful batches into final result, even thoguh they were not run in this invocation - if self.node.batch_info is not None: - result.batch_results.successful += self.node.batch_info.successful + if self.node.previous_batch_results is not None: + result.batch_results.successful += self.node.previous_batch_results.successful + + def on_skip(self): + # If node.batch is None, then we're dealing with skipping of the entire node + if self.batch_idx is None: + return super().on_skip() + else: + result = RunResult( + node=self.node, + status=RunStatus.Skipped, + timing=[], + thread_id=threading.current_thread().name, + execution_time=0.0, + message="SKIPPED", + adapter_response={}, + failures=1, + batch_results=BatchResults(failed=[self.batches[self.batch_idx]]), + ) + self.print_batch_result_line(result=result) + return result def _build_succesful_run_batch_result( self, @@ -495,7 +553,6 @@ def _build_run_microbatch_model_result(self, model: ModelNode) -> RunResult: def _execute_microbatch_materialization( self, model: ModelNode, - manifest: Manifest, context: Dict[str, Any], materialization_macro: MacroProtocol, ) -> RunResult: @@ -508,15 +565,15 @@ def _execute_microbatch_materialization( ) if self.batch_idx is None: - # Note currently (9/30/2024) model.batch_info is only ever _not_ `None` + # Note currently (9/30/2024) model.previous_batch_results is only ever _not_ `None` # IFF `dbt retry` is being run and the microbatch model had batches which # failed on the run of the model (which is being retried) - if model.batch_info is None: + if model.previous_batch_results is None: end = microbatch_builder.build_end_time() start = microbatch_builder.build_start_time(end) batches = microbatch_builder.build_batches(start, end) else: - batches = model.batch_info.failed + batches = model.previous_batch_results.failed # If there is batch info, then don't run as full_refresh and do force is_incremental # not doing this risks blowing away the work that has already been done if self._has_relation(model=model): @@ -530,24 +587,11 @@ def _execute_microbatch_materialization( # call materialization_macro to get a batch-level run result start_time = time.perf_counter() try: - # Set start/end in context prior to re-compiling - model.config["__dbt_internal_microbatch_event_time_start"] = batch[0] - model.config["__dbt_internal_microbatch_event_time_end"] = batch[1] - - # Recompile node to re-resolve refs with event time filters rendered, update context - self.compiler.compile_node( - model, - manifest, - {}, - split_suffix=MicrobatchBuilder.format_batch_start( - batch[0], model.config.batch_size - ), - ) # Update jinja context with batch context members - batch_context = microbatch_builder.build_batch_context( + jinja_context = microbatch_builder.build_jinja_context_for_batch( incremental_batch=self.relation_exists ) - context.update(batch_context) + context.update(jinja_context) # Materialize batch and cache any materialized relations result = MacroGenerator( @@ -592,13 +636,10 @@ def _has_relation(self, model) -> bool: ) return relation is not None - def _should_run_in_parallel( - self, - relation_exists: bool, - ) -> bool: + def should_run_in_parallel(self) -> bool: if not self.adapter.supports(Capability.MicrobatchConcurrency): run_in_parallel = False - elif not relation_exists: + elif not self.relation_exists: # If the relation doesn't exist, we can't run in parallel run_in_parallel = False elif self.node.config.concurrent_batches is not None: @@ -630,37 +671,23 @@ def _is_incremental(self, model) -> bool: else: return False - def _execute_microbatch_model( + def _execute_model( self, hook_ctx: Any, context_config: Any, model: ModelNode, - manifest: Manifest, context: Dict[str, Any], materialization_macro: MacroProtocol, ) -> RunResult: try: batch_result = self._execute_microbatch_materialization( - model, manifest, context, materialization_macro + model, context, materialization_macro ) finally: self.adapter.post_model_hook(context_config, hook_ctx) return batch_result - def _execute_model( - self, - hook_ctx: Any, - context_config: Any, - model: ModelNode, - manifest: Manifest, - context: Dict[str, Any], - materialization_macro: MacroProtocol, - ) -> RunResult: - return self._execute_microbatch_model( - hook_ctx, context_config, model, manifest, context, materialization_macro - ) - class RunTask(CompileTask): def __init__( @@ -707,52 +734,125 @@ def handle_microbatch_model( runner: MicrobatchModelRunner, pool: ThreadPool, ) -> RunResult: - # Initial run computes batch metadata, unless model is skipped + # Initial run computes batch metadata result = self.call_runner(runner) + batches, node, relation_exists = runner.batches, runner.node, runner.relation_exists + + # Return early if model should be skipped, or there are no batches to execute if result.status == RunStatus.Skipped: return result + elif len(runner.batches) == 0: + return result batch_results: List[RunResult] = [] - - # Execute batches serially until a relation exists, at which point future batches are run in parallel - relation_exists = runner.relation_exists batch_idx = 0 - while batch_idx < len(runner.batches): - batch_runner = MicrobatchModelRunner( - self.config, runner.adapter, deepcopy(runner.node), self.run_count, self.num_nodes - ) - batch_runner.set_batch_idx(batch_idx) - batch_runner.set_relation_exists(relation_exists) - batch_runner.set_batches(runner.batches) - - if runner._should_run_in_parallel(relation_exists): - fire_event( - MicrobatchExecutionDebug( - msg=f"{batch_runner.describe_batch} is being run concurrently" - ) - ) - self._submit(pool, [batch_runner], batch_results.append) - else: - fire_event( - MicrobatchExecutionDebug( - msg=f"{batch_runner.describe_batch} is being run sequentially" - ) - ) - batch_results.append(self.call_runner(batch_runner)) - relation_exists = batch_runner.relation_exists + # Run first batch not in parallel + relation_exists = self._submit_batch( + node=node, + adapter=runner.adapter, + relation_exists=relation_exists, + batches=batches, + batch_idx=batch_idx, + batch_results=batch_results, + pool=pool, + force_sequential_run=True, + ) + batch_idx += 1 + skip_batches = batch_results[0].status != RunStatus.Success + + # Run all batches except first and last batch, in parallel if possible + while batch_idx < len(runner.batches) - 1: + relation_exists = self._submit_batch( + node=node, + adapter=runner.adapter, + relation_exists=relation_exists, + batches=batches, + batch_idx=batch_idx, + batch_results=batch_results, + pool=pool, + skip=skip_batches, + ) batch_idx += 1 - # Wait until all batches have completed - while len(batch_results) != len(runner.batches): + # Wait until all submitted batches have completed + while len(batch_results) != batch_idx: pass + # Only run "last" batch if there is more than one batch + if len(batches) != 1: + # Final batch runs once all others complete to ensure post_hook runs at the end + self._submit_batch( + node=node, + adapter=runner.adapter, + relation_exists=relation_exists, + batches=batches, + batch_idx=batch_idx, + batch_results=batch_results, + pool=pool, + force_sequential_run=True, + skip=skip_batches, + ) + + # Finalize run: merge results, track model run, and print final result line runner.merge_batch_results(result, batch_results) track_model_run(runner.node_index, runner.num_nodes, result, adapter=runner.adapter) runner.print_result_line(result) return result + def _submit_batch( + self, + node: ModelNode, + adapter: BaseAdapter, + relation_exists: bool, + batches: Dict[int, BatchType], + batch_idx: int, + batch_results: List[RunResult], + pool: ThreadPool, + force_sequential_run: bool = False, + skip: bool = False, + ): + node_copy = deepcopy(node) + # Only run pre_hook(s) for first batch + if batch_idx != 0: + node_copy.config.pre_hook = [] + + # Only run post_hook(s) for last batch + if batch_idx != len(batches) - 1: + node_copy.config.post_hook = [] + + # TODO: We should be doing self.get_runner, however doing so + # currently causes the tracking of how many nodes there are to + # increment when we don't want it to + batch_runner = MicrobatchModelRunner( + self.config, adapter, node_copy, self.run_count, self.num_nodes + ) + batch_runner.set_batch_idx(batch_idx) + batch_runner.set_relation_exists(relation_exists) + batch_runner.set_batches(batches) + + if skip: + batch_runner.do_skip() + + if not force_sequential_run and batch_runner.should_run_in_parallel(): + fire_event( + MicrobatchExecutionDebug( + msg=f"{batch_runner.describe_batch()} is being run concurrently" + ) + ) + self._submit(pool, [batch_runner], batch_results.append) + else: + fire_event( + MicrobatchExecutionDebug( + msg=f"{batch_runner.describe_batch()} is being run sequentially" + ) + ) + batch_results.append(self.call_runner(batch_runner)) + relation_exists = batch_runner.relation_exists + + return relation_exists + def _hook_keyfunc(self, hook: HookNode) -> Tuple[str, Optional[int]]: package_name = hook.package_name if package_name == self.config.project_name: @@ -885,7 +985,7 @@ def populate_microbatch_batches(self, selected_uids: AbstractSet[str]): if uid in self.batch_map: node = self.manifest.ref_lookup.perform_lookup(uid, self.manifest) if isinstance(node, ModelNode): - node.batch_info = self.batch_map[uid] + node.previous_batch_results = self.batch_map[uid] def before_run(self, adapter: BaseAdapter, selected_uids: AbstractSet[str]) -> RunStatus: with adapter.connection_named("master"): diff --git a/core/dbt/task/runnable.py b/core/dbt/task/runnable.py index b889558d048..55342cafbbc 100644 --- a/core/dbt/task/runnable.py +++ b/core/dbt/task/runnable.py @@ -626,6 +626,7 @@ def interpret_results(cls, results): NodeStatus.Error, NodeStatus.Fail, NodeStatus.Skipped, # propogate error message causing skip + NodeStatus.PartialSuccess, # because partial success also means partial failure ) ] return len(failures) == 0 diff --git a/core/setup.py b/core/setup.py index c8fa182d318..a78e64c6e6d 100644 --- a/core/setup.py +++ b/core/setup.py @@ -69,7 +69,7 @@ # These are major-version-0 packages also maintained by dbt-labs. # Accept patches but avoid automatically updating past a set minor version range. "dbt-extractor>=0.5.0,<=0.6", - "dbt-semantic-interfaces>=0.7.4,<0.8", + "dbt-semantic-interfaces>=0.8.3,<0.9", # Minor versions for these are expected to be backwards-compatible "dbt-common>=1.13.0,<2.0", "dbt-adapters>=1.10.1,<2.0", diff --git a/schemas/dbt/manifest/v12.json b/schemas/dbt/manifest/v12.json index 4c66e128fe2..5d1966d49c7 100644 --- a/schemas/dbt/manifest/v12.json +++ b/schemas/dbt/manifest/v12.json @@ -8990,19 +8990,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -9020,19 +9008,7 @@ "offset_to_grain": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -9116,19 +9092,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -9146,19 +9110,7 @@ "offset_to_grain": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -9315,19 +9267,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -9345,19 +9285,7 @@ "offset_to_grain": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -9550,19 +9478,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -9635,19 +9551,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -9665,19 +9569,7 @@ "grain_to_date": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -9789,19 +9681,7 @@ "time_granularity": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -18734,19 +18614,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -18764,19 +18632,7 @@ "offset_to_grain": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -18860,19 +18716,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -18890,19 +18734,7 @@ "offset_to_grain": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -19059,19 +18891,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -19089,19 +18909,7 @@ "offset_to_grain": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -19294,19 +19102,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -19379,19 +19175,7 @@ "type": "integer" }, "granularity": { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" } }, "additionalProperties": false, @@ -19409,19 +19193,7 @@ "grain_to_date": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" @@ -19533,19 +19305,7 @@ "time_granularity": { "anyOf": [ { - "enum": [ - "nanosecond", - "microsecond", - "millisecond", - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "type": "string" }, { "type": "null" diff --git a/tests/functional/data_test_patch/fixtures.py b/tests/functional/data_test_patch/fixtures.py index be056f32680..5bac70969c5 100644 --- a/tests/functional/data_test_patch/fixtures.py +++ b/tests/functional/data_test_patch/fixtures.py @@ -13,8 +13,18 @@ description: "{{ doc('my_singular_test_documentation') }}" config: error_if: ">10" - meta: - some_key: some_val + meta: + some_key: some_val +""" + +tests__schema_2_yml = """ +data_tests: + - name: my_singular_test + description: "My singular test description" + config: + error_if: ">10" + meta: + some_key: another_val """ tests__doc_block_md = """ diff --git a/tests/functional/data_test_patch/test_singular_test_patch.py b/tests/functional/data_test_patch/test_singular_test_patch.py index df359c5e645..e7004bab9e2 100644 --- a/tests/functional/data_test_patch/test_singular_test_patch.py +++ b/tests/functional/data_test_patch/test_singular_test_patch.py @@ -2,12 +2,13 @@ import pytest -from dbt.tests.util import get_artifact, run_dbt, run_dbt_and_capture +from dbt.tests.util import get_manifest, run_dbt, run_dbt_and_capture, write_file from tests.functional.data_test_patch.fixtures import ( tests__doc_block_md, tests__invalid_name_schema_yml, tests__malformed_schema_yml, tests__my_singular_test_sql, + tests__schema_2_yml, tests__schema_yml, ) @@ -23,13 +24,22 @@ def tests(self): def test_compile(self, project): run_dbt(["compile"]) - manifest = get_artifact(project.project_root, "target", "manifest.json") - assert len(manifest["nodes"]) == 1 + manifest = get_manifest(project.project_root) + assert len(manifest.nodes) == 1 - my_singular_test_node = manifest["nodes"]["test.test.my_singular_test"] - assert my_singular_test_node["description"] == "Some docs from a doc block" - assert my_singular_test_node["config"]["error_if"] == ">10" - assert my_singular_test_node["config"]["meta"] == {"some_key": "some_val"} + my_singular_test_node = manifest.nodes["test.test.my_singular_test"] + assert my_singular_test_node.description == "Some docs from a doc block" + assert my_singular_test_node.config.error_if == ">10" + assert my_singular_test_node.config.meta == {"some_key": "some_val"} + assert my_singular_test_node.meta == {"some_key": "some_val"} + + # partial parsing test + write_file(tests__schema_2_yml, project.project_root, "tests", "schema.yml") + manifest = run_dbt(["parse"]) + test_node = manifest.nodes["test.test.my_singular_test"] + assert test_node.description == "My singular test description" + assert test_node.config.meta == {"some_key": "another_val"} + assert test_node.meta == {"some_key": "another_val"} class TestPatchSingularTestInvalidName: diff --git a/tests/functional/metrics/fixtures.py b/tests/functional/metrics/fixtures.py index 5614fab8c63..693c8a3fc4d 100644 --- a/tests/functional/metrics/fixtures.py +++ b/tests/functional/metrics/fixtures.py @@ -462,6 +462,8 @@ dimensions: - name: purchased_at type: TIME + type_params: + time_granularity: day entities: - name: purchase type: primary @@ -494,6 +496,16 @@ name: sum_order_revenue denominator: name: count_orders + + - name: sum_order_revenue_plus_one_custom_offset_window + label: "Total order revenue, plus 1 with custom offset window" + description: "The total order revenue plus 1 offset by 1 martian day" + type: derived + type_params: + metrics: + - name: sum_order_revenue + offset_window: 1 martian_day + expr: "sum_order_revenue + 1" """ disabled_metric_level_schema_yml = """ @@ -736,6 +748,8 @@ dimensions: - name: purchased_at type: TIME + type_params: + time_granularity: day entities: - name: purchase type: primary @@ -796,6 +810,21 @@ type: cumulative type_params: measure: num_visits + # TODO: Re-enable this when custom grain is supported for this type + # - name: visits_martian_day + # label: Visits since start of martian_day + # type: cumulative + # type_params: + # measure: num_visits + # cumulative_type_params: + # grain_to_date: martian_day + # - name: visits_martian_day_window + # label: Visits since start of martian_day window + # type: cumulative + # type_params: + # measure: num_visits + # cumulative_type_params: + # window: 1 martian_day """ conversion_metric_yml = """ @@ -809,6 +838,25 @@ base_measure: num_visits conversion_measure: num_orders entity: purchase + - name: converted_orders_over_visits_with_window + label: Number of orders converted from visits with window + type: conversion + type_params: + conversion_type_params: + base_measure: num_visits + conversion_measure: num_orders + entity: purchase + window: 4 day + # TODO: Re-enable this when custom grain is supported for this type + # - name: converted_orders_over_visits_with_custom_window + # label: Number of orders converted from visits with custom window + # type: conversion + # type_params: + # conversion_type_params: + # base_measure: num_visits + # conversion_measure: num_orders + # entity: purchase + # window: 4 martian_day """ filtered_metrics_yml = """ diff --git a/tests/functional/metrics/test_metrics.py b/tests/functional/metrics/test_metrics.py index 3f8fba2a19c..eddf641801b 100644 --- a/tests/functional/metrics/test_metrics.py +++ b/tests/functional/metrics/test_metrics.py @@ -34,6 +34,7 @@ semantic_model_people_yml, semantic_model_purchasing_yml, ) +from tests.functional.time_spines.fixtures import time_spine_yml class TestSimpleMetrics: @@ -85,7 +86,7 @@ def test_simple_metric( ) assert ( manifest.metrics["metric.test.number_of_people"].time_granularity - == TimeGranularity.MONTH + == TimeGranularity.MONTH.value ) assert manifest.metrics["metric.test.collective_tenure"].time_granularity is None @@ -251,6 +252,7 @@ def models(self): "metricflow_time_spine.sql": metricflow_time_spine_sql, "semantic_models.yml": semantic_model_purchasing_yml, "derived_metric.yml": derived_metric_yml, + "time_spine.yml": time_spine_yml, } # not strictly necessary to use "real" mock data for this test @@ -276,6 +278,7 @@ def test_derived_metric( "metric.test.count_orders", "metric.test.sum_order_revenue", "metric.test.average_order_value", + "metric.test.sum_order_revenue_plus_one_custom_offset_window", ] assert metric_ids == expected_metric_ids @@ -297,12 +300,24 @@ def test_derived_metric( "metric.test.sum_order_revenue", ] + derived_metric_with_custom_offset_window = manifest.metrics[ + "metric.test.sum_order_revenue_plus_one_custom_offset_window" + ] + assert len(derived_metric_with_custom_offset_window.input_metrics) == 1 + assert derived_metric_with_custom_offset_window.input_metrics[ + 0 + ].offset_window == MetricTimeWindow(count=1, granularity="martian_day") + # actually compile results = run_dbt(["compile", "--select", "downstream_model"]) compiled_code = results[0].node.compiled_code # make sure all these metrics properties show up in compiled SQL for metric_name in manifest.metrics: + if metric_name == "metric.test.sum_order_revenue_plus_one_custom_offset_window": + # Skip this metric + continue + parsed_metric_node = manifest.metrics[metric_name] for property in [ "name", @@ -361,6 +376,7 @@ def models(self): "metricflow_time_spine.sql": metricflow_time_spine_sql, "semantic_models.yml": conversion_semantic_model_purchasing_yml, "conversion_metric.yml": conversion_metric_yml, + "time_spine.yml": time_spine_yml, } @pytest.fixture(scope="class") @@ -382,10 +398,13 @@ def test_conversion_metric( # make sure the metric is in the manifest manifest = get_manifest(project.project_root) metric_ids = list(manifest.metrics.keys()) - expected_metric_ids = [ - "metric.test.converted_orders_over_visits", - ] - assert metric_ids == expected_metric_ids + expected_metric_ids = { + "metric.test.converted_orders_over_visits": None, + "metric.test.converted_orders_over_visits_with_window": MetricTimeWindow( + count=4, granularity=TimeGranularity.DAY.value + ), + } + assert set(metric_ids) == set(expected_metric_ids.keys()) assert manifest.metrics[ "metric.test.converted_orders_over_visits" ].type_params.conversion_type_params @@ -409,6 +428,14 @@ def test_conversion_metric( ].type_params.conversion_type_params.entity == "purchase" ) + for ( + metric_id, + expected_window, + ) in expected_metric_ids.items(): + assert ( + manifest.metrics[metric_id].type_params.conversion_type_params.window + == expected_window + ), f"Found unexpected conversion window for {metric_id}" class TestCumulativeMetric: @@ -418,7 +445,8 @@ def models(self): "purchasing.sql": purchasing_model_sql, "metricflow_time_spine.sql": metricflow_time_spine_sql, "semantic_models.yml": conversion_semantic_model_purchasing_yml, - "conversion_metric.yml": cumulative_metric_yml, + "cumulative_metric.yml": cumulative_metric_yml, + "time_spine.yml": time_spine_yml, } @pytest.fixture(scope="class") @@ -436,25 +464,25 @@ def test_cumulative_metric(self, project): metric_ids = set(manifest.metrics.keys()) expected_metric_ids_to_cumulative_type_params = { "metric.test.weekly_visits": CumulativeTypeParams( - window=MetricTimeWindow(count=7, granularity=TimeGranularity.DAY), + window=MetricTimeWindow(count=7, granularity=TimeGranularity.DAY.value), period_agg=PeriodAggregation.AVERAGE, ), "metric.test.cumulative_orders": CumulativeTypeParams( period_agg=PeriodAggregation.LAST ), "metric.test.orders_ytd": CumulativeTypeParams( - grain_to_date=TimeGranularity.YEAR, period_agg=PeriodAggregation.FIRST + grain_to_date=TimeGranularity.YEAR.value, period_agg=PeriodAggregation.FIRST ), "metric.test.monthly_orders": CumulativeTypeParams( - window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH), + window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH.value), period_agg=PeriodAggregation.AVERAGE, ), "metric.test.yearly_orders": CumulativeTypeParams( - window=MetricTimeWindow(count=1, granularity=TimeGranularity.YEAR), + window=MetricTimeWindow(count=1, granularity=TimeGranularity.YEAR.value), period_agg=PeriodAggregation.FIRST, ), "metric.test.visits_mtd": CumulativeTypeParams( - grain_to_date=TimeGranularity.MONTH, period_agg=PeriodAggregation.FIRST + grain_to_date=TimeGranularity.MONTH.value, period_agg=PeriodAggregation.FIRST ), "metric.test.cumulative_visits": CumulativeTypeParams( period_agg=PeriodAggregation.FIRST diff --git a/tests/functional/microbatch/test_microbatch.py b/tests/functional/microbatch/test_microbatch.py index f0f4097b9c9..c31657d94fc 100644 --- a/tests/functional/microbatch/test_microbatch.py +++ b/tests/functional/microbatch/test_microbatch.py @@ -7,6 +7,8 @@ ArtifactWritten, EndOfRunSummary, GenericExceptionOnRun, + JinjaLogDebug, + LogBatchResult, LogModelResult, MicrobatchExecutionDebug, MicrobatchMacroOutsideOfBatchesDeprecation, @@ -54,6 +56,21 @@ select * from {{ ref('input_model') }} """ +microbatch_model_with_pre_and_post_sql = """ +{{ config( + materialized='incremental', + incremental_strategy='microbatch', + unique_key='id', + event_time='event_time', + batch_size='day', + begin=modules.datetime.datetime(2020, 1, 1, 0, 0, 0), + pre_hook='{{log("execute: " ~ execute ~ ", pre-hook run by batch " ~ model.batch.id)}}', + post_hook='{{log("execute: " ~ execute ~ ", post-hook run by batch " ~ model.batch.id)}}', + ) +}} +select * from {{ ref('input_model') }} +""" + microbatch_yearly_model_sql = """ {{ config(materialized='incremental', incremental_strategy='microbatch', unique_key='id', event_time='event_time', batch_size='year', begin=modules.datetime.datetime(2020, 1, 1, 0, 0, 0)) }} select * from {{ ref('input_model') }} @@ -64,8 +81,8 @@ select * from {{ ref('microbatch_model') }} """ -invalid_batch_context_macro_sql = """ -{% macro check_invalid_batch_context() %} +invalid_batch_jinja_context_macro_sql = """ +{% macro check_invalid_batch_jinja_context() %} {% if model is not mapping %} {{ exceptions.raise_compiler_error("`model` is invalid: expected mapping type") }} @@ -83,9 +100,9 @@ """ microbatch_model_with_context_checks_sql = """ -{{ config(pre_hook="{{ check_invalid_batch_context() }}", materialized='incremental', incremental_strategy='microbatch', unique_key='id', event_time='event_time', batch_size='day', begin=modules.datetime.datetime(2020, 1, 1, 0, 0, 0)) }} +{{ config(pre_hook="{{ check_invalid_batch_jinja_context() }}", materialized='incremental', incremental_strategy='microbatch', unique_key='id', event_time='event_time', batch_size='day', begin=modules.datetime.datetime(2020, 1, 1, 0, 0, 0)) }} -{{ check_invalid_batch_context() }} +{{ check_invalid_batch_jinja_context() }} select * from {{ ref('input_model') }} """ @@ -273,15 +290,18 @@ class TestMicrobatchCLI(BaseMicrobatchTest): def test_run_with_event_time(self, project): # run without --event-time-start or --event-time-end - 3 expected rows in output - catcher = EventCatcher(event_to_catch=LogModelResult) + + model_catcher = EventCatcher(event_to_catch=LogModelResult) + batch_catcher = EventCatcher(event_to_catch=LogBatchResult) with patch_microbatch_end_time("2020-01-03 13:57:00"): - run_dbt([self.CLI_COMMAND_NAME], callbacks=[catcher.catch]) + run_dbt([self.CLI_COMMAND_NAME], callbacks=[model_catcher.catch, batch_catcher.catch]) self.assert_row_count(project, "microbatch_model", 3) - assert len(catcher.caught_events) == 5 + assert len(model_catcher.caught_events) == 2 + assert len(batch_catcher.caught_events) == 3 batch_creation_events = 0 - for caught_event in catcher.caught_events: + for caught_event in batch_catcher.caught_events: if "batch 2020" in caught_event.data.description: batch_creation_events += 1 assert caught_event.data.execution_time > 0 @@ -404,7 +424,7 @@ class TestMicrobatchJinjaContext(BaseMicrobatchTest): @pytest.fixture(scope="class") def macros(self): - return {"check_batch_context.sql": invalid_batch_context_macro_sql} + return {"check_batch_jinja_context.sql": invalid_batch_jinja_context_macro_sql} @pytest.fixture(scope="class") def models(self): @@ -498,6 +518,13 @@ def test_run_with_event_time(self, project): {{ config(materialized='incremental', incremental_strategy='microbatch', unique_key='id', event_time='event_time', batch_size='day', begin=modules.datetime.datetime(2020, 1, 1, 0, 0, 0)) }} {{ log("start: "~ model.config.__dbt_internal_microbatch_event_time_start, info=True)}} {{ log("end: "~ model.config.__dbt_internal_microbatch_event_time_end, info=True)}} +{% if model.batch %} +{{ log("batch.event_time_start: "~ model.batch.event_time_start, info=True)}} +{{ log("batch.event_time_end: "~ model.batch.event_time_end, info=True)}} +{{ log("batch.id: "~ model.batch.id, info=True)}} +{{ log("start timezone: "~ model.batch.event_time_start.tzinfo, info=True)}} +{{ log("end timezone: "~ model.batch.event_time_end.tzinfo, info=True)}} +{% endif %} select * from {{ ref('input_model') }} """ @@ -516,12 +543,23 @@ def test_run_with_event_time_logs(self, project): assert "start: 2020-01-01 00:00:00+00:00" in logs assert "end: 2020-01-02 00:00:00+00:00" in logs + assert "batch.event_time_start: 2020-01-01 00:00:00+00:00" in logs + assert "batch.event_time_end: 2020-01-02 00:00:00+00:00" in logs + assert "batch.id: 20200101" in logs + assert "start timezone: UTC" in logs + assert "end timezone: UTC" in logs assert "start: 2020-01-02 00:00:00+00:00" in logs assert "end: 2020-01-03 00:00:00+00:00" in logs + assert "batch.event_time_start: 2020-01-02 00:00:00+00:00" in logs + assert "batch.event_time_end: 2020-01-03 00:00:00+00:00" in logs + assert "batch.id: 20200102" in logs assert "start: 2020-01-03 00:00:00+00:00" in logs assert "end: 2020-01-03 13:57:00+00:00" in logs + assert "batch.event_time_start: 2020-01-03 00:00:00+00:00" in logs + assert "batch.event_time_end: 2020-01-03 13:57:00+00:00" in logs + assert "batch.id: 20200103" in logs microbatch_model_failing_incremental_partition_sql = """ @@ -575,7 +613,7 @@ def models(self): def test_run_with_event_time(self, project): # run all partitions from start - 2 expected rows in output, one failed with patch_microbatch_end_time("2020-01-03 13:57:00"): - _, console_output = run_dbt_and_capture(["run"]) + _, console_output = run_dbt_and_capture(["run"], expect_pass=False) assert "PARTIAL SUCCESS (2/3)" in console_output assert "Completed with 1 partial success" in console_output @@ -614,7 +652,7 @@ def models(self): def test_run_with_event_time(self, project): # run all partitions from start - 2 expected rows in output, one failed with patch_microbatch_end_time("2020-01-03 13:57:00"): - _, console_output = run_dbt_and_capture(["run"]) + _, console_output = run_dbt_and_capture(["run"], expect_pass=False) assert "PARTIAL SUCCESS (2/3)" in console_output assert "Completed with 1 partial success" in console_output @@ -648,6 +686,14 @@ def test_run_with_event_time(self, project): select * from {{ ref('input_model') }} """ +microbatch_model_second_batch_failing_sql = """ +{{ config(materialized='incremental', incremental_strategy='microbatch', unique_key='id', event_time='event_time', batch_size='day', begin=modules.datetime.datetime(2020, 1, 1, 0, 0, 0)) }} +{% if '20200102' == model.batch.id %} + invalid_sql +{% endif %} +select * from {{ ref('input_model') }} +""" + class TestMicrobatchInitialBatchFailure(BaseMicrobatchTest): @pytest.fixture(scope="class") @@ -657,6 +703,47 @@ def models(self): "microbatch_model.sql": microbatch_model_first_partition_failing_sql, } + def test_run_with_event_time(self, project): + # When the first batch of a microbatch model fails, the rest of the batches should + # be skipped and the model marked as failed (not _partial success_) + + general_exc_catcher = EventCatcher( + GenericExceptionOnRun, + predicate=lambda event: event.data.node_info is not None, + ) + batch_catcher = EventCatcher( + event_to_catch=LogBatchResult, + predicate=lambda event: event.data.status == "skipped", + ) + + # run all partitions from start - 2 expected rows in output, one failed + with patch_microbatch_end_time("2020-01-03 13:57:00"): + run_dbt( + ["run"], + expect_pass=False, + callbacks=[general_exc_catcher.catch, batch_catcher.catch], + ) + + assert len(general_exc_catcher.caught_events) == 1 + assert len(batch_catcher.caught_events) == 2 + + # Because the first batch failed, and the rest of the batches were skipped, the table shouldn't + # exist in the data warehosue + relation_info = relation_from_name(project.adapter, "microbatch_model") + relation = project.adapter.get_relation( + relation_info.database, relation_info.schema, relation_info.name + ) + assert relation is None + + +class TestMicrobatchSecondBatchFailure(BaseMicrobatchTest): + @pytest.fixture(scope="class") + def models(self): + return { + "input_model.sql": input_model_sql, + "microbatch_model.sql": microbatch_model_second_batch_failing_sql, + } + def test_run_with_event_time(self, project): event_catcher = EventCatcher( GenericExceptionOnRun, predicate=lambda event: event.data.node_info is not None @@ -664,7 +751,7 @@ def test_run_with_event_time(self, project): # run all partitions from start - 2 expected rows in output, one failed with patch_microbatch_end_time("2020-01-03 13:57:00"): - run_dbt(["run"], callbacks=[event_catcher.catch]) + run_dbt(["run"], expect_pass=False, callbacks=[event_catcher.catch]) assert len(event_catcher.caught_events) == 1 self.assert_row_count(project, "microbatch_model", 2) @@ -675,16 +762,6 @@ def test_run_with_event_time(self, project): with patch_microbatch_end_time("2020-01-03 13:57:00"): run_dbt(["run"]) - # Compiled paths - compiled model without filter only - assert read_file( - project.project_root, - "target", - "compiled", - "test", - "models", - "microbatch_model.sql", - ) - # Compiled paths - batch compilations assert read_file( project.project_root, @@ -867,7 +944,7 @@ def batch_exc_catcher(self) -> EventCatcher: def test_microbatch( self, mocker: MockerFixture, project, batch_exc_catcher: EventCatcher ) -> None: - mocked_srip = mocker.patch("dbt.task.run.MicrobatchModelRunner._should_run_in_parallel") + mocked_srip = mocker.patch("dbt.task.run.MicrobatchModelRunner.should_run_in_parallel") # Should be run in parallel mocked_srip.return_value = True @@ -897,3 +974,112 @@ def test_microbatch( some_batches_run_concurrently = True break assert not some_batches_run_concurrently, "Found a batch being run concurrently!" + + +class TestFirstAndLastBatchAlwaysSequential(BaseMicrobatchTest): + @pytest.fixture + def batch_exc_catcher(self) -> EventCatcher: + return EventCatcher(MicrobatchExecutionDebug) # type: ignore + + def test_microbatch( + self, mocker: MockerFixture, project, batch_exc_catcher: EventCatcher + ) -> None: + mocked_srip = mocker.patch("dbt.task.run.MicrobatchModelRunner.should_run_in_parallel") + + # Should be run in parallel + mocked_srip.return_value = True + with patch_microbatch_end_time("2020-01-03 13:57:00"): + _ = run_dbt(["run"], callbacks=[batch_exc_catcher.catch]) + + assert len(batch_exc_catcher.caught_events) > 1 + + first_batch_event = batch_exc_catcher.caught_events[0] + last_batch_event = batch_exc_catcher.caught_events[-1] + + for event in [first_batch_event, last_batch_event]: + assert "is being run sequentially" in event.data.msg # type: ignore + + for event in batch_exc_catcher.caught_events[1:-1]: + assert "is being run concurrently" in event.data.msg # type: ignore + + +class TestFirstBatchRunsPreHookLastBatchRunsPostHook(BaseMicrobatchTest): + @pytest.fixture(scope="class") + def models(self): + return { + "input_model.sql": input_model_sql, + "microbatch_model.sql": microbatch_model_with_pre_and_post_sql, + } + + @pytest.fixture + def batch_log_catcher(self) -> EventCatcher: + def pre_or_post_hook(event) -> bool: + return "execute: True" in event.data.msg and ( + "pre-hook" in event.data.msg or "post-hook" in event.data.msg + ) + + return EventCatcher(event_to_catch=JinjaLogDebug, predicate=pre_or_post_hook) # type: ignore + + def test_microbatch( + self, mocker: MockerFixture, project, batch_log_catcher: EventCatcher + ) -> None: + with patch_microbatch_end_time("2020-01-04 13:57:00"): + _ = run_dbt(["run"], callbacks=[batch_log_catcher.catch]) + + # There should be two logs as the pre-hook and post-hook should + # both only be run once + assert len(batch_log_catcher.caught_events) == 2 + + for event in batch_log_catcher.caught_events: + # batch id that should be firing pre-hook + if "20200101" in event.data.msg: # type: ignore + assert "pre-hook" in event.data.msg # type: ignore + + # batch id that should be firing the post-hook + if "20200104" in event.data.msg: # type: ignore + assert "post-hook" in event.data.msg # type: ignore + + +class TestWhenOnlyOneBatchRunBothPostAndPreHooks(BaseMicrobatchTest): + @pytest.fixture(scope="class") + def models(self): + return { + "input_model.sql": input_model_sql, + "microbatch_model.sql": microbatch_model_with_pre_and_post_sql, + } + + @pytest.fixture + def batch_log_catcher(self) -> EventCatcher: + def pre_or_post_hook(event) -> bool: + return "execute: True" in event.data.msg and ( + "pre-hook" in event.data.msg or "post-hook" in event.data.msg + ) + + return EventCatcher(event_to_catch=JinjaLogDebug, predicate=pre_or_post_hook) # type: ignore + + @pytest.fixture + def generic_exception_catcher(self) -> EventCatcher: + return EventCatcher(event_to_catch=GenericExceptionOnRun) # type: ignore + + def test_microbatch( + self, + project, + batch_log_catcher: EventCatcher, + generic_exception_catcher: EventCatcher, + ) -> None: + with patch_microbatch_end_time("2020-01-01 13:57:00"): + _ = run_dbt( + ["run"], callbacks=[batch_log_catcher.catch, generic_exception_catcher.catch] + ) + + # There should be two logs as the pre-hook and post-hook should + # both only be run once + assert len(batch_log_catcher.caught_events) == 2 + + assert "20200101" in batch_log_catcher.caught_events[0].data.msg # type: ignore + assert "pre-hook" in batch_log_catcher.caught_events[0].data.msg # type: ignore + assert "20200101" in batch_log_catcher.caught_events[1].data.msg # type: ignore + assert "post-hook" in batch_log_catcher.caught_events[1].data.msg # type: ignore + + # we had a bug where having only one batch caused a generic exception + assert len(generic_exception_catcher.caught_events) == 0 diff --git a/tests/functional/retry/fixtures.py b/tests/functional/retry/fixtures.py index 64adf9c684f..52c9d8afdfc 100644 --- a/tests/functional/retry/fixtures.py +++ b/tests/functional/retry/fixtures.py @@ -1,5 +1,6 @@ models__sample_model = """select 1 as id, baz as foo""" models__second_model = """select 1 as id, 2 as bar""" +models__thread_model = """select idx as id""" models__union_model = """ select foo + bar as sum3 from {{ ref('sample_model') }} @@ -58,3 +59,13 @@ data_tests: - not_null """ + +schema_test_thread_yml = """ +models: + - name: thread_model + columns: + - name: id + data_tests: + - not_null + +""" diff --git a/tests/functional/retry/test_retry_threads.py b/tests/functional/retry/test_retry_threads.py new file mode 100644 index 00000000000..8e9fae8135f --- /dev/null +++ b/tests/functional/retry/test_retry_threads.py @@ -0,0 +1,56 @@ +import pytest + +from dbt.contracts.results import RunStatus, TestStatus +from dbt.tests.util import run_dbt, write_file +from tests.functional.retry.fixtures import models__thread_model, schema_test_thread_yml + + +class TestCustomThreadRetry: + @pytest.fixture(scope="class") + def models(self): + return { + "thread_model.sql": models__thread_model, + "schema.yml": schema_test_thread_yml, + } + + def test_thread_target(self, project): + # Passing Threads to check + results = run_dbt( + ["build", "--select", "thread_model", "--threads", "3"], expect_pass=False + ) + expected_statuses = { + "thread_model": RunStatus.Error, + "not_null_thread_model_id": TestStatus.Skipped, + } + assert {n.node.name: n.status for n in results.results} == expected_statuses + + # Retry Running the Dbt with simple Retry + results = run_dbt(["retry", "--threads", "2"], expect_pass=False) + expected_statuses = { + "thread_model": RunStatus.Error, + "not_null_thread_model_id": TestStatus.Skipped, + } + assert {n.node.name: n.status for n in results.results} == expected_statuses + assert results.args["threads"] == 2 + + # running with retry withour threads + results = run_dbt(["retry"], expect_pass=False) + expected_statuses = { + "thread_model": RunStatus.Error, + "not_null_thread_model_id": TestStatus.Skipped, + } + assert {n.node.name: n.status for n in results.results} == expected_statuses + assert results.args["threads"] == 2 + + # Retry with fixing the model and running with --threads 1 + fixed_sql = "select 1 as id" + write_file(fixed_sql, "models", "thread_model.sql") + + results = run_dbt(["retry", "--threads", "1"]) + expected_statuses = { + "thread_model": RunStatus.Success, + "not_null_thread_model_id": TestStatus.Pass, + } + + assert {n.node.name: n.status for n in results.results} == expected_statuses + assert results.args["threads"] == 1 diff --git a/tests/functional/time_spines/fixtures.py b/tests/functional/time_spines/fixtures.py index 0f67488ff11..e6012cb7154 100644 --- a/tests/functional/time_spines/fixtures.py +++ b/tests/functional/time_spines/fixtures.py @@ -103,3 +103,21 @@ - name: date_day granularity: day """ + +time_spine_yml = """ +version: 2 + +models: + - name: metricflow_time_spine + time_spine: + standard_granularity_column: date_day + custom_granularities: + - name: retail_month + - name: martian_day + column_name: martian_day + columns: + - name: date_day + granularity: day + - name: retail_month + - name: martian_day +""" diff --git a/tests/unit/contracts/graph/test_manifest.py b/tests/unit/contracts/graph/test_manifest.py index 146a51d5856..3505ee80037 100644 --- a/tests/unit/contracts/graph/test_manifest.py +++ b/tests/unit/contracts/graph/test_manifest.py @@ -96,7 +96,7 @@ "deprecation_date", "defer_relation", "time_spine", - "batch_info", + "batch", } ) diff --git a/tests/unit/contracts/graph/test_semantic_manifest.py b/tests/unit/contracts/graph/test_semantic_manifest.py index 043f9b7ad33..229fb314515 100644 --- a/tests/unit/contracts/graph/test_semantic_manifest.py +++ b/tests/unit/contracts/graph/test_semantic_manifest.py @@ -66,7 +66,7 @@ def test_require_yaml_configuration_for_mf_time_spines( ), ( MetricTypeParams( - window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH) + window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH.value) ), 1, False, @@ -75,7 +75,7 @@ def test_require_yaml_configuration_for_mf_time_spines( ( MetricTypeParams( cumulative_type_params=CumulativeTypeParams( - grain_to_date=TimeGranularity.MONTH, + grain_to_date=TimeGranularity.MONTH.value, ) ), 0, @@ -85,7 +85,7 @@ def test_require_yaml_configuration_for_mf_time_spines( ( MetricTypeParams( cumulative_type_params=CumulativeTypeParams( - window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH), + window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH.value), ) ), 0, @@ -100,7 +100,7 @@ def test_require_yaml_configuration_for_mf_time_spines( ), ( MetricTypeParams( - window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH) + window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH.value) ), 0, True, @@ -109,7 +109,7 @@ def test_require_yaml_configuration_for_mf_time_spines( ( MetricTypeParams( cumulative_type_params=CumulativeTypeParams( - grain_to_date=TimeGranularity.MONTH, + grain_to_date=TimeGranularity.MONTH.value, ) ), 0, @@ -119,7 +119,7 @@ def test_require_yaml_configuration_for_mf_time_spines( ( MetricTypeParams( cumulative_type_params=CumulativeTypeParams( - window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH), + window=MetricTimeWindow(count=1, granularity=TimeGranularity.MONTH.value), ) ), 0, diff --git a/tests/unit/materializations/incremental/test_microbatch.py b/tests/unit/materializations/incremental/test_microbatch.py index f114d8649c3..3d827a79975 100644 --- a/tests/unit/materializations/incremental/test_microbatch.py +++ b/tests/unit/materializations/incremental/test_microbatch.py @@ -489,11 +489,11 @@ def test_build_batches(self, microbatch_model, start, end, batch_size, expected_ assert len(actual_batches) == len(expected_batches) assert actual_batches == expected_batches - def test_build_batch_context_incremental_batch(self, microbatch_model): + def test_build_jinja_context_for_incremental_batch(self, microbatch_model): microbatch_builder = MicrobatchBuilder( model=microbatch_model, is_incremental=True, event_time_start=None, event_time_end=None ) - context = microbatch_builder.build_batch_context(incremental_batch=True) + context = microbatch_builder.build_jinja_context_for_batch(incremental_batch=True) assert context["model"] == microbatch_model.to_dict() assert context["sql"] == microbatch_model.compiled_code @@ -502,11 +502,11 @@ def test_build_batch_context_incremental_batch(self, microbatch_model): assert context["is_incremental"]() is True assert context["should_full_refresh"]() is False - def test_build_batch_context_incremental_batch_false(self, microbatch_model): + def test_build_jinja_context_for_incremental_batch_false(self, microbatch_model): microbatch_builder = MicrobatchBuilder( model=microbatch_model, is_incremental=True, event_time_start=None, event_time_end=None ) - context = microbatch_builder.build_batch_context(incremental_batch=False) + context = microbatch_builder.build_jinja_context_for_batch(incremental_batch=False) assert context["model"] == microbatch_model.to_dict() assert context["sql"] == microbatch_model.compiled_code @@ -605,7 +605,6 @@ def test_truncate_timestamp(self, timestamp, batch_size, expected_timestamp): @pytest.mark.parametrize( "batch_size,batch_start,expected_formatted_batch_start", [ - (None, None, None), (BatchSize.year, datetime(2020, 1, 1, 1), "2020-01-01"), (BatchSize.month, datetime(2020, 1, 1, 1), "2020-01-01"), (BatchSize.day, datetime(2020, 1, 1, 1), "2020-01-01"), diff --git a/tests/unit/task/test_run.py b/tests/unit/task/test_run.py index b33e6f57ffe..b28ac505a7f 100644 --- a/tests/unit/task/test_run.py +++ b/tests/unit/task/test_run.py @@ -264,7 +264,7 @@ class Relation: (False, False, False, True, False), ], ) - def test__should_run_in_parallel( + def test_should_run_in_parallel( self, mocker: MockerFixture, model_runner: MicrobatchModelRunner, @@ -276,11 +276,13 @@ def test__should_run_in_parallel( ) -> None: model_runner.node._has_this = has_this model_runner.node.config = ModelConfig(concurrent_batches=concurrent_batches) + model_runner.set_relation_exists(has_relation) + mocked_supports = mocker.patch.object(model_runner.adapter, "supports") mocked_supports.return_value = adapter_microbatch_concurrency - # Assert result of _should_run_in_parallel - assert model_runner._should_run_in_parallel(has_relation) == expectation + # Assert result of should_run_in_parallel + assert model_runner.should_run_in_parallel() == expectation class TestRunTask: diff --git a/tests/unit/test_events.py b/tests/unit/test_events.py index e336ad139ff..3d8dfb76916 100644 --- a/tests/unit/test_events.py +++ b/tests/unit/test_events.py @@ -421,6 +421,14 @@ def test_event_codes(self): snapshot_time_data_type="DATETIME", updated_at_data_type="DATETIMEZ" ), core_types.MicrobatchExecutionDebug(msg=""), + core_types.LogStartBatch(description="", batch_index=0, total_batches=0), + core_types.LogBatchResult( + description="", + status="", + batch_index=0, + total_batches=0, + execution_time=0, + ), # W - Node testing ====================== core_types.CatchableExceptionOnRun(exc=""), core_types.InternalErrorOnRun(build_path="", exc=""), diff --git a/tests/unit/test_semantic_layer_nodes_satisfy_protocols.py b/tests/unit/test_semantic_layer_nodes_satisfy_protocols.py index 3838b1a4a33..156b4f9b9a8 100644 --- a/tests/unit/test_semantic_layer_nodes_satisfy_protocols.py +++ b/tests/unit/test_semantic_layer_nodes_satisfy_protocols.py @@ -196,7 +196,7 @@ def where_filter() -> WhereFilter: @pytest.fixture(scope="session") def metric_time_window() -> MetricTimeWindow: - return MetricTimeWindow(count=1, granularity=TimeGranularity.DAY) + return MetricTimeWindow(count=1, granularity=TimeGranularity.DAY.value) @pytest.fixture(scope="session") @@ -211,7 +211,7 @@ def complex_metric_input(metric_time_window, where_filter) -> MetricInput: filter=where_filter, alias="aliased_metric_input", offset_window=metric_time_window, - offset_to_grain=TimeGranularity.DAY, + offset_to_grain=TimeGranularity.DAY.value, )