dvt-core 1.11.0b4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of dvt-core might be problematic. Click here for more details.

Files changed (261) hide show
  1. dvt/__init__.py +7 -0
  2. dvt/_pydantic_shim.py +26 -0
  3. dvt/adapters/__init__.py +16 -0
  4. dvt/adapters/multi_adapter_manager.py +268 -0
  5. dvt/artifacts/__init__.py +0 -0
  6. dvt/artifacts/exceptions/__init__.py +1 -0
  7. dvt/artifacts/exceptions/schemas.py +31 -0
  8. dvt/artifacts/resources/__init__.py +116 -0
  9. dvt/artifacts/resources/base.py +68 -0
  10. dvt/artifacts/resources/types.py +93 -0
  11. dvt/artifacts/resources/v1/analysis.py +10 -0
  12. dvt/artifacts/resources/v1/catalog.py +23 -0
  13. dvt/artifacts/resources/v1/components.py +275 -0
  14. dvt/artifacts/resources/v1/config.py +282 -0
  15. dvt/artifacts/resources/v1/documentation.py +11 -0
  16. dvt/artifacts/resources/v1/exposure.py +52 -0
  17. dvt/artifacts/resources/v1/function.py +53 -0
  18. dvt/artifacts/resources/v1/generic_test.py +32 -0
  19. dvt/artifacts/resources/v1/group.py +22 -0
  20. dvt/artifacts/resources/v1/hook.py +11 -0
  21. dvt/artifacts/resources/v1/macro.py +30 -0
  22. dvt/artifacts/resources/v1/metric.py +173 -0
  23. dvt/artifacts/resources/v1/model.py +146 -0
  24. dvt/artifacts/resources/v1/owner.py +10 -0
  25. dvt/artifacts/resources/v1/saved_query.py +112 -0
  26. dvt/artifacts/resources/v1/seed.py +42 -0
  27. dvt/artifacts/resources/v1/semantic_layer_components.py +72 -0
  28. dvt/artifacts/resources/v1/semantic_model.py +315 -0
  29. dvt/artifacts/resources/v1/singular_test.py +14 -0
  30. dvt/artifacts/resources/v1/snapshot.py +92 -0
  31. dvt/artifacts/resources/v1/source_definition.py +85 -0
  32. dvt/artifacts/resources/v1/sql_operation.py +10 -0
  33. dvt/artifacts/resources/v1/unit_test_definition.py +78 -0
  34. dvt/artifacts/schemas/__init__.py +0 -0
  35. dvt/artifacts/schemas/base.py +191 -0
  36. dvt/artifacts/schemas/batch_results.py +24 -0
  37. dvt/artifacts/schemas/catalog/__init__.py +12 -0
  38. dvt/artifacts/schemas/catalog/v1/__init__.py +0 -0
  39. dvt/artifacts/schemas/catalog/v1/catalog.py +60 -0
  40. dvt/artifacts/schemas/freshness/__init__.py +1 -0
  41. dvt/artifacts/schemas/freshness/v3/__init__.py +0 -0
  42. dvt/artifacts/schemas/freshness/v3/freshness.py +159 -0
  43. dvt/artifacts/schemas/manifest/__init__.py +2 -0
  44. dvt/artifacts/schemas/manifest/v12/__init__.py +0 -0
  45. dvt/artifacts/schemas/manifest/v12/manifest.py +212 -0
  46. dvt/artifacts/schemas/results.py +148 -0
  47. dvt/artifacts/schemas/run/__init__.py +2 -0
  48. dvt/artifacts/schemas/run/v5/__init__.py +0 -0
  49. dvt/artifacts/schemas/run/v5/run.py +184 -0
  50. dvt/artifacts/schemas/upgrades/__init__.py +4 -0
  51. dvt/artifacts/schemas/upgrades/upgrade_manifest.py +174 -0
  52. dvt/artifacts/schemas/upgrades/upgrade_manifest_dbt_version.py +2 -0
  53. dvt/artifacts/utils/validation.py +153 -0
  54. dvt/cli/__init__.py +1 -0
  55. dvt/cli/context.py +16 -0
  56. dvt/cli/exceptions.py +56 -0
  57. dvt/cli/flags.py +558 -0
  58. dvt/cli/main.py +971 -0
  59. dvt/cli/option_types.py +121 -0
  60. dvt/cli/options.py +79 -0
  61. dvt/cli/params.py +803 -0
  62. dvt/cli/requires.py +478 -0
  63. dvt/cli/resolvers.py +32 -0
  64. dvt/cli/types.py +40 -0
  65. dvt/clients/__init__.py +0 -0
  66. dvt/clients/checked_load.py +82 -0
  67. dvt/clients/git.py +164 -0
  68. dvt/clients/jinja.py +206 -0
  69. dvt/clients/jinja_static.py +245 -0
  70. dvt/clients/registry.py +192 -0
  71. dvt/clients/yaml_helper.py +68 -0
  72. dvt/compilation.py +833 -0
  73. dvt/compute/__init__.py +26 -0
  74. dvt/compute/base.py +288 -0
  75. dvt/compute/engines/__init__.py +13 -0
  76. dvt/compute/engines/duckdb_engine.py +368 -0
  77. dvt/compute/engines/spark_engine.py +273 -0
  78. dvt/compute/query_analyzer.py +212 -0
  79. dvt/compute/router.py +483 -0
  80. dvt/config/__init__.py +4 -0
  81. dvt/config/catalogs.py +95 -0
  82. dvt/config/compute_config.py +406 -0
  83. dvt/config/profile.py +411 -0
  84. dvt/config/profiles_v2.py +464 -0
  85. dvt/config/project.py +893 -0
  86. dvt/config/renderer.py +232 -0
  87. dvt/config/runtime.py +491 -0
  88. dvt/config/selectors.py +209 -0
  89. dvt/config/utils.py +78 -0
  90. dvt/connectors/.gitignore +6 -0
  91. dvt/connectors/README.md +306 -0
  92. dvt/connectors/catalog.yml +217 -0
  93. dvt/connectors/download_connectors.py +300 -0
  94. dvt/constants.py +29 -0
  95. dvt/context/__init__.py +0 -0
  96. dvt/context/base.py +746 -0
  97. dvt/context/configured.py +136 -0
  98. dvt/context/context_config.py +350 -0
  99. dvt/context/docs.py +82 -0
  100. dvt/context/exceptions_jinja.py +179 -0
  101. dvt/context/macro_resolver.py +195 -0
  102. dvt/context/macros.py +171 -0
  103. dvt/context/manifest.py +73 -0
  104. dvt/context/providers.py +2198 -0
  105. dvt/context/query_header.py +14 -0
  106. dvt/context/secret.py +59 -0
  107. dvt/context/target.py +74 -0
  108. dvt/contracts/__init__.py +0 -0
  109. dvt/contracts/files.py +413 -0
  110. dvt/contracts/graph/__init__.py +0 -0
  111. dvt/contracts/graph/manifest.py +1904 -0
  112. dvt/contracts/graph/metrics.py +98 -0
  113. dvt/contracts/graph/model_config.py +71 -0
  114. dvt/contracts/graph/node_args.py +42 -0
  115. dvt/contracts/graph/nodes.py +1806 -0
  116. dvt/contracts/graph/semantic_manifest.py +233 -0
  117. dvt/contracts/graph/unparsed.py +812 -0
  118. dvt/contracts/project.py +417 -0
  119. dvt/contracts/results.py +53 -0
  120. dvt/contracts/selection.py +23 -0
  121. dvt/contracts/sql.py +86 -0
  122. dvt/contracts/state.py +69 -0
  123. dvt/contracts/util.py +46 -0
  124. dvt/deprecations.py +347 -0
  125. dvt/deps/__init__.py +0 -0
  126. dvt/deps/base.py +153 -0
  127. dvt/deps/git.py +196 -0
  128. dvt/deps/local.py +80 -0
  129. dvt/deps/registry.py +131 -0
  130. dvt/deps/resolver.py +149 -0
  131. dvt/deps/tarball.py +121 -0
  132. dvt/docs/source/_ext/dbt_click.py +118 -0
  133. dvt/docs/source/conf.py +32 -0
  134. dvt/env_vars.py +64 -0
  135. dvt/event_time/event_time.py +40 -0
  136. dvt/event_time/sample_window.py +60 -0
  137. dvt/events/__init__.py +16 -0
  138. dvt/events/base_types.py +37 -0
  139. dvt/events/core_types_pb2.py +2 -0
  140. dvt/events/logging.py +109 -0
  141. dvt/events/types.py +2534 -0
  142. dvt/exceptions.py +1487 -0
  143. dvt/flags.py +89 -0
  144. dvt/graph/__init__.py +11 -0
  145. dvt/graph/cli.py +248 -0
  146. dvt/graph/graph.py +172 -0
  147. dvt/graph/queue.py +213 -0
  148. dvt/graph/selector.py +375 -0
  149. dvt/graph/selector_methods.py +976 -0
  150. dvt/graph/selector_spec.py +223 -0
  151. dvt/graph/thread_pool.py +18 -0
  152. dvt/hooks.py +21 -0
  153. dvt/include/README.md +49 -0
  154. dvt/include/__init__.py +3 -0
  155. dvt/include/global_project.py +4 -0
  156. dvt/include/starter_project/.gitignore +4 -0
  157. dvt/include/starter_project/README.md +15 -0
  158. dvt/include/starter_project/__init__.py +3 -0
  159. dvt/include/starter_project/analyses/.gitkeep +0 -0
  160. dvt/include/starter_project/dvt_project.yml +36 -0
  161. dvt/include/starter_project/macros/.gitkeep +0 -0
  162. dvt/include/starter_project/models/example/my_first_dbt_model.sql +27 -0
  163. dvt/include/starter_project/models/example/my_second_dbt_model.sql +6 -0
  164. dvt/include/starter_project/models/example/schema.yml +21 -0
  165. dvt/include/starter_project/seeds/.gitkeep +0 -0
  166. dvt/include/starter_project/snapshots/.gitkeep +0 -0
  167. dvt/include/starter_project/tests/.gitkeep +0 -0
  168. dvt/internal_deprecations.py +27 -0
  169. dvt/jsonschemas/__init__.py +3 -0
  170. dvt/jsonschemas/jsonschemas.py +309 -0
  171. dvt/jsonschemas/project/0.0.110.json +4717 -0
  172. dvt/jsonschemas/project/0.0.85.json +2015 -0
  173. dvt/jsonschemas/resources/0.0.110.json +2636 -0
  174. dvt/jsonschemas/resources/0.0.85.json +2536 -0
  175. dvt/jsonschemas/resources/latest.json +6773 -0
  176. dvt/links.py +4 -0
  177. dvt/materializations/__init__.py +0 -0
  178. dvt/materializations/incremental/__init__.py +0 -0
  179. dvt/materializations/incremental/microbatch.py +235 -0
  180. dvt/mp_context.py +8 -0
  181. dvt/node_types.py +37 -0
  182. dvt/parser/__init__.py +23 -0
  183. dvt/parser/analysis.py +21 -0
  184. dvt/parser/base.py +549 -0
  185. dvt/parser/common.py +267 -0
  186. dvt/parser/docs.py +52 -0
  187. dvt/parser/fixtures.py +51 -0
  188. dvt/parser/functions.py +30 -0
  189. dvt/parser/generic_test.py +100 -0
  190. dvt/parser/generic_test_builders.py +334 -0
  191. dvt/parser/hooks.py +119 -0
  192. dvt/parser/macros.py +137 -0
  193. dvt/parser/manifest.py +2204 -0
  194. dvt/parser/models.py +574 -0
  195. dvt/parser/partial.py +1179 -0
  196. dvt/parser/read_files.py +445 -0
  197. dvt/parser/schema_generic_tests.py +423 -0
  198. dvt/parser/schema_renderer.py +111 -0
  199. dvt/parser/schema_yaml_readers.py +936 -0
  200. dvt/parser/schemas.py +1467 -0
  201. dvt/parser/search.py +149 -0
  202. dvt/parser/seeds.py +28 -0
  203. dvt/parser/singular_test.py +20 -0
  204. dvt/parser/snapshots.py +44 -0
  205. dvt/parser/sources.py +557 -0
  206. dvt/parser/sql.py +63 -0
  207. dvt/parser/unit_tests.py +622 -0
  208. dvt/plugins/__init__.py +20 -0
  209. dvt/plugins/contracts.py +10 -0
  210. dvt/plugins/exceptions.py +2 -0
  211. dvt/plugins/manager.py +164 -0
  212. dvt/plugins/manifest.py +21 -0
  213. dvt/profiler.py +20 -0
  214. dvt/py.typed +1 -0
  215. dvt/runners/__init__.py +2 -0
  216. dvt/runners/exposure_runner.py +7 -0
  217. dvt/runners/no_op_runner.py +46 -0
  218. dvt/runners/saved_query_runner.py +7 -0
  219. dvt/selected_resources.py +8 -0
  220. dvt/task/__init__.py +0 -0
  221. dvt/task/base.py +504 -0
  222. dvt/task/build.py +197 -0
  223. dvt/task/clean.py +57 -0
  224. dvt/task/clone.py +162 -0
  225. dvt/task/compile.py +151 -0
  226. dvt/task/compute.py +366 -0
  227. dvt/task/debug.py +650 -0
  228. dvt/task/deps.py +280 -0
  229. dvt/task/docs/__init__.py +3 -0
  230. dvt/task/docs/generate.py +408 -0
  231. dvt/task/docs/index.html +250 -0
  232. dvt/task/docs/serve.py +28 -0
  233. dvt/task/freshness.py +323 -0
  234. dvt/task/function.py +122 -0
  235. dvt/task/group_lookup.py +46 -0
  236. dvt/task/init.py +374 -0
  237. dvt/task/list.py +237 -0
  238. dvt/task/printer.py +176 -0
  239. dvt/task/profiles.py +256 -0
  240. dvt/task/retry.py +175 -0
  241. dvt/task/run.py +1146 -0
  242. dvt/task/run_operation.py +142 -0
  243. dvt/task/runnable.py +802 -0
  244. dvt/task/seed.py +104 -0
  245. dvt/task/show.py +150 -0
  246. dvt/task/snapshot.py +57 -0
  247. dvt/task/sql.py +111 -0
  248. dvt/task/test.py +464 -0
  249. dvt/tests/fixtures/__init__.py +1 -0
  250. dvt/tests/fixtures/project.py +620 -0
  251. dvt/tests/util.py +651 -0
  252. dvt/tracking.py +529 -0
  253. dvt/utils/__init__.py +3 -0
  254. dvt/utils/artifact_upload.py +151 -0
  255. dvt/utils/utils.py +408 -0
  256. dvt/version.py +249 -0
  257. dvt_core-1.11.0b4.dist-info/METADATA +252 -0
  258. dvt_core-1.11.0b4.dist-info/RECORD +261 -0
  259. dvt_core-1.11.0b4.dist-info/WHEEL +5 -0
  260. dvt_core-1.11.0b4.dist-info/entry_points.txt +2 -0
  261. dvt_core-1.11.0b4.dist-info/top_level.txt +1 -0
dvt/plugins/manager.py ADDED
@@ -0,0 +1,164 @@
1
+ import functools
2
+ import importlib
3
+ import pkgutil
4
+ from types import ModuleType
5
+ from typing import Callable, Dict, List, Mapping
6
+
7
+ import dvt.tracking
8
+ from dvt.contracts.graph.manifest import Manifest
9
+ from dvt.plugins.contracts import PluginArtifacts
10
+ from dvt.plugins.manifest import PluginNodes
11
+
12
+ from dbt_common.exceptions import DbtRuntimeError
13
+ from dbt_common.tests import test_caching_enabled
14
+
15
+
16
+ def dbt_hook(func):
17
+ def inner(*args, **kwargs):
18
+ try:
19
+ return func(*args, **kwargs)
20
+ except Exception as e:
21
+ raise DbtRuntimeError(f"{func.__name__}: {e}")
22
+
23
+ setattr(inner, "is_dbt_hook", True)
24
+ return inner
25
+
26
+
27
+ class dbtPlugin:
28
+ """
29
+ EXPERIMENTAL: dbtPlugin is the base class for creating plugins.
30
+ Its interface is **not** stable and will likely change between dbt-core versions.
31
+ """
32
+
33
+ def __init__(self, project_name: str) -> None:
34
+ self.project_name = project_name
35
+ try:
36
+ self.initialize()
37
+ except DbtRuntimeError as e:
38
+ # Remove the first line of DbtRuntimeError to avoid redundant "Runtime Error" line
39
+ raise DbtRuntimeError("\n".join(str(e).split("\n")[1:]))
40
+ except Exception as e:
41
+ raise DbtRuntimeError(str(e))
42
+
43
+ @property
44
+ def name(self) -> str:
45
+ return self.__class__.__name__
46
+
47
+ def initialize(self) -> None:
48
+ """
49
+ Initialize the plugin. This function may be overridden by subclasses that have
50
+ additional initialization steps.
51
+ """
52
+ pass
53
+
54
+ def get_nodes(self) -> PluginNodes:
55
+ """
56
+ Provide PluginNodes to dbt for injection into dbt's DAG.
57
+ Currently the only node types that are accepted are model nodes.
58
+ """
59
+ raise NotImplementedError(f"get_nodes hook not implemented for {self.name}")
60
+
61
+ def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts:
62
+ """
63
+ Given a manifest, provide PluginArtifacts derived for writing by core.
64
+ PluginArtifacts share the same lifecycle as the manifest.json file -- they
65
+ will either be written or not depending on whether the manifest is written.
66
+ """
67
+ raise NotImplementedError(f"get_manifest_artifacts hook not implemented for {self.name}")
68
+
69
+
70
+ @functools.lru_cache(maxsize=None)
71
+ def _get_dbt_modules() -> Mapping[str, ModuleType]:
72
+ # This is an expensive function, especially in the context of testing, when
73
+ # it is called repeatedly, so we break it out and cache the result globally.
74
+ return {
75
+ name: importlib.import_module(name)
76
+ for _, name, _ in pkgutil.iter_modules()
77
+ if name.startswith(PluginManager.PLUGIN_MODULE_PREFIX)
78
+ }
79
+
80
+
81
+ _MODULES_CACHE = None
82
+
83
+
84
+ class PluginManager:
85
+ PLUGIN_MODULE_PREFIX = "dbt_"
86
+ PLUGIN_ATTR_NAME = "plugins"
87
+
88
+ def __init__(self, plugins: List[dbtPlugin]) -> None:
89
+ self._plugins = plugins
90
+ self._valid_hook_names = set()
91
+ # default hook implementations from dbtPlugin
92
+ for hook_name in dir(dbtPlugin):
93
+ if not hook_name.startswith("_"):
94
+ self._valid_hook_names.add(hook_name)
95
+
96
+ self.hooks: Dict[str, List[Callable]] = {}
97
+ for plugin in self._plugins:
98
+ for hook_name in dir(plugin):
99
+ hook = getattr(plugin, hook_name)
100
+ if (
101
+ callable(hook)
102
+ and hasattr(hook, "is_dbt_hook")
103
+ and hook_name in self._valid_hook_names
104
+ ):
105
+ if hook_name in self.hooks:
106
+ self.hooks[hook_name].append(hook)
107
+ else:
108
+ self.hooks[hook_name] = [hook]
109
+
110
+ @classmethod
111
+ def from_modules(cls, project_name: str) -> "PluginManager":
112
+
113
+ if test_caching_enabled():
114
+ global _MODULES_CACHE
115
+ if _MODULES_CACHE is None:
116
+ discovered_dbt_modules = cls.get_prefixed_modules()
117
+ _MODULES_CACHE = discovered_dbt_modules
118
+ else:
119
+ discovered_dbt_modules = _MODULES_CACHE
120
+ else:
121
+ discovered_dbt_modules = cls.get_prefixed_modules()
122
+
123
+ plugins = []
124
+ for name, module in discovered_dbt_modules.items():
125
+ if hasattr(module, cls.PLUGIN_ATTR_NAME):
126
+ available_plugins = getattr(module, cls.PLUGIN_ATTR_NAME, [])
127
+ for plugin_cls in available_plugins:
128
+ assert issubclass(
129
+ plugin_cls, dbtPlugin
130
+ ), f"'plugin' in {name} must be subclass of dbtPlugin"
131
+ plugin = plugin_cls(project_name=project_name)
132
+ plugins.append(plugin)
133
+ return cls(plugins=plugins)
134
+
135
+ @classmethod
136
+ def get_prefixed_modules(cls):
137
+ return {
138
+ name: importlib.import_module(name)
139
+ for _, name, _ in pkgutil.iter_modules()
140
+ if name.startswith(cls.PLUGIN_MODULE_PREFIX)
141
+ }
142
+
143
+ def get_manifest_artifacts(self, manifest: Manifest) -> PluginArtifacts:
144
+ all_plugin_artifacts = {}
145
+ for hook_method in self.hooks.get("get_manifest_artifacts", []):
146
+ plugin_artifacts = hook_method(manifest)
147
+ all_plugin_artifacts.update(plugin_artifacts)
148
+ return all_plugin_artifacts
149
+
150
+ def get_nodes(self) -> PluginNodes:
151
+ all_plugin_nodes = PluginNodes()
152
+ for hook_method in self.hooks.get("get_nodes", []):
153
+ plugin_nodes = hook_method()
154
+ dbt.tracking.track_plugin_get_nodes(
155
+ {
156
+ "plugin_name": hook_method.__self__.name, # type: ignore
157
+ "num_model_nodes": len(plugin_nodes.models),
158
+ "num_model_packages": len(
159
+ {model.package_name for model in plugin_nodes.models.values()}
160
+ ),
161
+ }
162
+ )
163
+ all_plugin_nodes.update(plugin_nodes)
164
+ return all_plugin_nodes
@@ -0,0 +1,21 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Dict
3
+
4
+ from dvt.artifacts.resources import NodeVersion # noqa
5
+
6
+ # all these are just exports, they need "noqa" so flake8 will not complain.
7
+ from dvt.contracts.graph.manifest import Manifest # noqa
8
+ from dvt.contracts.graph.node_args import ModelNodeArgs
9
+ from dvt.graph.graph import UniqueId # noqa
10
+ from dvt.node_types import AccessType, NodeType # noqa
11
+
12
+
13
+ @dataclass
14
+ class PluginNodes:
15
+ models: Dict[str, ModelNodeArgs] = field(default_factory=dict)
16
+
17
+ def add_model(self, model_args: ModelNodeArgs) -> None:
18
+ self.models[model_args.unique_id] = model_args
19
+
20
+ def update(self, other: "PluginNodes") -> None:
21
+ self.models.update(other.models)
dvt/profiler.py ADDED
@@ -0,0 +1,20 @@
1
+ from contextlib import contextmanager
2
+ from cProfile import Profile
3
+ from pstats import Stats
4
+ from typing import Any, Generator
5
+
6
+
7
+ @contextmanager
8
+ def profiler(enable: bool, outfile: str) -> Generator[Any, None, None]:
9
+ try:
10
+ if enable:
11
+ profiler = Profile()
12
+ profiler.enable()
13
+
14
+ yield
15
+ finally:
16
+ if enable:
17
+ profiler.disable()
18
+ stats = Stats(profiler)
19
+ stats.sort_stats("tottime")
20
+ stats.dump_stats(str(outfile))
dvt/py.typed ADDED
@@ -0,0 +1 @@
1
+ # dummy file, our types are defined inline
@@ -0,0 +1,2 @@
1
+ from .exposure_runner import ExposureRunner
2
+ from .saved_query_runner import SavedQueryRunner
@@ -0,0 +1,7 @@
1
+ from dvt.runners.no_op_runner import NoOpRunner
2
+
3
+
4
+ class ExposureRunner(NoOpRunner):
5
+ @property
6
+ def description(self) -> str:
7
+ return f"exposure {self.node.name}"
@@ -0,0 +1,46 @@
1
+ import threading
2
+
3
+ from dvt.artifacts.schemas.results import RunStatus
4
+ from dvt.artifacts.schemas.run import RunResult
5
+ from dvt.contracts.graph.manifest import Manifest
6
+ from dvt.events.types import LogNodeNoOpResult
7
+ from dvt.task.base import BaseRunner
8
+
9
+ from dbt_common.events.functions import fire_event
10
+
11
+
12
+ class NoOpRunner(BaseRunner):
13
+ @property
14
+ def description(self) -> str:
15
+ raise NotImplementedError("description not implemented")
16
+
17
+ def before_execute(self) -> None:
18
+ pass
19
+
20
+ def compile(self, manifest: Manifest):
21
+ return self.node
22
+
23
+ def after_execute(self, result) -> None:
24
+ fire_event(
25
+ LogNodeNoOpResult(
26
+ description=self.description,
27
+ index=self.node_index,
28
+ total=self.num_nodes,
29
+ node_info=self.node.node_info,
30
+ )
31
+ )
32
+
33
+ def execute(self, compiled_node, manifest):
34
+ # no-op
35
+ return RunResult(
36
+ node=compiled_node,
37
+ status=RunStatus.NoOp,
38
+ timing=[],
39
+ thread_id=threading.current_thread().name,
40
+ execution_time=0,
41
+ message="NO-OP",
42
+ adapter_response={},
43
+ failures=0,
44
+ batch_results=None,
45
+ agate_table=None,
46
+ )
@@ -0,0 +1,7 @@
1
+ from dvt.runners.no_op_runner import NoOpRunner
2
+
3
+
4
+ class SavedQueryRunner(NoOpRunner):
5
+ @property
6
+ def description(self) -> str:
7
+ return f"saved query {self.node.name}"
@@ -0,0 +1,8 @@
1
+ from typing import Any, Set
2
+
3
+ SELECTED_RESOURCES = []
4
+
5
+
6
+ def set_selected_resources(selected_resources: Set[Any]) -> None:
7
+ global SELECTED_RESOURCES
8
+ SELECTED_RESOURCES = list(selected_resources)
dvt/task/__init__.py ADDED
File without changes