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.
- dvt/__init__.py +7 -0
- dvt/_pydantic_shim.py +26 -0
- dvt/adapters/__init__.py +16 -0
- dvt/adapters/multi_adapter_manager.py +268 -0
- dvt/artifacts/__init__.py +0 -0
- dvt/artifacts/exceptions/__init__.py +1 -0
- dvt/artifacts/exceptions/schemas.py +31 -0
- dvt/artifacts/resources/__init__.py +116 -0
- dvt/artifacts/resources/base.py +68 -0
- dvt/artifacts/resources/types.py +93 -0
- dvt/artifacts/resources/v1/analysis.py +10 -0
- dvt/artifacts/resources/v1/catalog.py +23 -0
- dvt/artifacts/resources/v1/components.py +275 -0
- dvt/artifacts/resources/v1/config.py +282 -0
- dvt/artifacts/resources/v1/documentation.py +11 -0
- dvt/artifacts/resources/v1/exposure.py +52 -0
- dvt/artifacts/resources/v1/function.py +53 -0
- dvt/artifacts/resources/v1/generic_test.py +32 -0
- dvt/artifacts/resources/v1/group.py +22 -0
- dvt/artifacts/resources/v1/hook.py +11 -0
- dvt/artifacts/resources/v1/macro.py +30 -0
- dvt/artifacts/resources/v1/metric.py +173 -0
- dvt/artifacts/resources/v1/model.py +146 -0
- dvt/artifacts/resources/v1/owner.py +10 -0
- dvt/artifacts/resources/v1/saved_query.py +112 -0
- dvt/artifacts/resources/v1/seed.py +42 -0
- dvt/artifacts/resources/v1/semantic_layer_components.py +72 -0
- dvt/artifacts/resources/v1/semantic_model.py +315 -0
- dvt/artifacts/resources/v1/singular_test.py +14 -0
- dvt/artifacts/resources/v1/snapshot.py +92 -0
- dvt/artifacts/resources/v1/source_definition.py +85 -0
- dvt/artifacts/resources/v1/sql_operation.py +10 -0
- dvt/artifacts/resources/v1/unit_test_definition.py +78 -0
- dvt/artifacts/schemas/__init__.py +0 -0
- dvt/artifacts/schemas/base.py +191 -0
- dvt/artifacts/schemas/batch_results.py +24 -0
- dvt/artifacts/schemas/catalog/__init__.py +12 -0
- dvt/artifacts/schemas/catalog/v1/__init__.py +0 -0
- dvt/artifacts/schemas/catalog/v1/catalog.py +60 -0
- dvt/artifacts/schemas/freshness/__init__.py +1 -0
- dvt/artifacts/schemas/freshness/v3/__init__.py +0 -0
- dvt/artifacts/schemas/freshness/v3/freshness.py +159 -0
- dvt/artifacts/schemas/manifest/__init__.py +2 -0
- dvt/artifacts/schemas/manifest/v12/__init__.py +0 -0
- dvt/artifacts/schemas/manifest/v12/manifest.py +212 -0
- dvt/artifacts/schemas/results.py +148 -0
- dvt/artifacts/schemas/run/__init__.py +2 -0
- dvt/artifacts/schemas/run/v5/__init__.py +0 -0
- dvt/artifacts/schemas/run/v5/run.py +184 -0
- dvt/artifacts/schemas/upgrades/__init__.py +4 -0
- dvt/artifacts/schemas/upgrades/upgrade_manifest.py +174 -0
- dvt/artifacts/schemas/upgrades/upgrade_manifest_dbt_version.py +2 -0
- dvt/artifacts/utils/validation.py +153 -0
- dvt/cli/__init__.py +1 -0
- dvt/cli/context.py +16 -0
- dvt/cli/exceptions.py +56 -0
- dvt/cli/flags.py +558 -0
- dvt/cli/main.py +971 -0
- dvt/cli/option_types.py +121 -0
- dvt/cli/options.py +79 -0
- dvt/cli/params.py +803 -0
- dvt/cli/requires.py +478 -0
- dvt/cli/resolvers.py +32 -0
- dvt/cli/types.py +40 -0
- dvt/clients/__init__.py +0 -0
- dvt/clients/checked_load.py +82 -0
- dvt/clients/git.py +164 -0
- dvt/clients/jinja.py +206 -0
- dvt/clients/jinja_static.py +245 -0
- dvt/clients/registry.py +192 -0
- dvt/clients/yaml_helper.py +68 -0
- dvt/compilation.py +833 -0
- dvt/compute/__init__.py +26 -0
- dvt/compute/base.py +288 -0
- dvt/compute/engines/__init__.py +13 -0
- dvt/compute/engines/duckdb_engine.py +368 -0
- dvt/compute/engines/spark_engine.py +273 -0
- dvt/compute/query_analyzer.py +212 -0
- dvt/compute/router.py +483 -0
- dvt/config/__init__.py +4 -0
- dvt/config/catalogs.py +95 -0
- dvt/config/compute_config.py +406 -0
- dvt/config/profile.py +411 -0
- dvt/config/profiles_v2.py +464 -0
- dvt/config/project.py +893 -0
- dvt/config/renderer.py +232 -0
- dvt/config/runtime.py +491 -0
- dvt/config/selectors.py +209 -0
- dvt/config/utils.py +78 -0
- dvt/connectors/.gitignore +6 -0
- dvt/connectors/README.md +306 -0
- dvt/connectors/catalog.yml +217 -0
- dvt/connectors/download_connectors.py +300 -0
- dvt/constants.py +29 -0
- dvt/context/__init__.py +0 -0
- dvt/context/base.py +746 -0
- dvt/context/configured.py +136 -0
- dvt/context/context_config.py +350 -0
- dvt/context/docs.py +82 -0
- dvt/context/exceptions_jinja.py +179 -0
- dvt/context/macro_resolver.py +195 -0
- dvt/context/macros.py +171 -0
- dvt/context/manifest.py +73 -0
- dvt/context/providers.py +2198 -0
- dvt/context/query_header.py +14 -0
- dvt/context/secret.py +59 -0
- dvt/context/target.py +74 -0
- dvt/contracts/__init__.py +0 -0
- dvt/contracts/files.py +413 -0
- dvt/contracts/graph/__init__.py +0 -0
- dvt/contracts/graph/manifest.py +1904 -0
- dvt/contracts/graph/metrics.py +98 -0
- dvt/contracts/graph/model_config.py +71 -0
- dvt/contracts/graph/node_args.py +42 -0
- dvt/contracts/graph/nodes.py +1806 -0
- dvt/contracts/graph/semantic_manifest.py +233 -0
- dvt/contracts/graph/unparsed.py +812 -0
- dvt/contracts/project.py +417 -0
- dvt/contracts/results.py +53 -0
- dvt/contracts/selection.py +23 -0
- dvt/contracts/sql.py +86 -0
- dvt/contracts/state.py +69 -0
- dvt/contracts/util.py +46 -0
- dvt/deprecations.py +347 -0
- dvt/deps/__init__.py +0 -0
- dvt/deps/base.py +153 -0
- dvt/deps/git.py +196 -0
- dvt/deps/local.py +80 -0
- dvt/deps/registry.py +131 -0
- dvt/deps/resolver.py +149 -0
- dvt/deps/tarball.py +121 -0
- dvt/docs/source/_ext/dbt_click.py +118 -0
- dvt/docs/source/conf.py +32 -0
- dvt/env_vars.py +64 -0
- dvt/event_time/event_time.py +40 -0
- dvt/event_time/sample_window.py +60 -0
- dvt/events/__init__.py +16 -0
- dvt/events/base_types.py +37 -0
- dvt/events/core_types_pb2.py +2 -0
- dvt/events/logging.py +109 -0
- dvt/events/types.py +2534 -0
- dvt/exceptions.py +1487 -0
- dvt/flags.py +89 -0
- dvt/graph/__init__.py +11 -0
- dvt/graph/cli.py +248 -0
- dvt/graph/graph.py +172 -0
- dvt/graph/queue.py +213 -0
- dvt/graph/selector.py +375 -0
- dvt/graph/selector_methods.py +976 -0
- dvt/graph/selector_spec.py +223 -0
- dvt/graph/thread_pool.py +18 -0
- dvt/hooks.py +21 -0
- dvt/include/README.md +49 -0
- dvt/include/__init__.py +3 -0
- dvt/include/global_project.py +4 -0
- dvt/include/starter_project/.gitignore +4 -0
- dvt/include/starter_project/README.md +15 -0
- dvt/include/starter_project/__init__.py +3 -0
- dvt/include/starter_project/analyses/.gitkeep +0 -0
- dvt/include/starter_project/dvt_project.yml +36 -0
- dvt/include/starter_project/macros/.gitkeep +0 -0
- dvt/include/starter_project/models/example/my_first_dbt_model.sql +27 -0
- dvt/include/starter_project/models/example/my_second_dbt_model.sql +6 -0
- dvt/include/starter_project/models/example/schema.yml +21 -0
- dvt/include/starter_project/seeds/.gitkeep +0 -0
- dvt/include/starter_project/snapshots/.gitkeep +0 -0
- dvt/include/starter_project/tests/.gitkeep +0 -0
- dvt/internal_deprecations.py +27 -0
- dvt/jsonschemas/__init__.py +3 -0
- dvt/jsonschemas/jsonschemas.py +309 -0
- dvt/jsonschemas/project/0.0.110.json +4717 -0
- dvt/jsonschemas/project/0.0.85.json +2015 -0
- dvt/jsonschemas/resources/0.0.110.json +2636 -0
- dvt/jsonschemas/resources/0.0.85.json +2536 -0
- dvt/jsonschemas/resources/latest.json +6773 -0
- dvt/links.py +4 -0
- dvt/materializations/__init__.py +0 -0
- dvt/materializations/incremental/__init__.py +0 -0
- dvt/materializations/incremental/microbatch.py +235 -0
- dvt/mp_context.py +8 -0
- dvt/node_types.py +37 -0
- dvt/parser/__init__.py +23 -0
- dvt/parser/analysis.py +21 -0
- dvt/parser/base.py +549 -0
- dvt/parser/common.py +267 -0
- dvt/parser/docs.py +52 -0
- dvt/parser/fixtures.py +51 -0
- dvt/parser/functions.py +30 -0
- dvt/parser/generic_test.py +100 -0
- dvt/parser/generic_test_builders.py +334 -0
- dvt/parser/hooks.py +119 -0
- dvt/parser/macros.py +137 -0
- dvt/parser/manifest.py +2204 -0
- dvt/parser/models.py +574 -0
- dvt/parser/partial.py +1179 -0
- dvt/parser/read_files.py +445 -0
- dvt/parser/schema_generic_tests.py +423 -0
- dvt/parser/schema_renderer.py +111 -0
- dvt/parser/schema_yaml_readers.py +936 -0
- dvt/parser/schemas.py +1467 -0
- dvt/parser/search.py +149 -0
- dvt/parser/seeds.py +28 -0
- dvt/parser/singular_test.py +20 -0
- dvt/parser/snapshots.py +44 -0
- dvt/parser/sources.py +557 -0
- dvt/parser/sql.py +63 -0
- dvt/parser/unit_tests.py +622 -0
- dvt/plugins/__init__.py +20 -0
- dvt/plugins/contracts.py +10 -0
- dvt/plugins/exceptions.py +2 -0
- dvt/plugins/manager.py +164 -0
- dvt/plugins/manifest.py +21 -0
- dvt/profiler.py +20 -0
- dvt/py.typed +1 -0
- dvt/runners/__init__.py +2 -0
- dvt/runners/exposure_runner.py +7 -0
- dvt/runners/no_op_runner.py +46 -0
- dvt/runners/saved_query_runner.py +7 -0
- dvt/selected_resources.py +8 -0
- dvt/task/__init__.py +0 -0
- dvt/task/base.py +504 -0
- dvt/task/build.py +197 -0
- dvt/task/clean.py +57 -0
- dvt/task/clone.py +162 -0
- dvt/task/compile.py +151 -0
- dvt/task/compute.py +366 -0
- dvt/task/debug.py +650 -0
- dvt/task/deps.py +280 -0
- dvt/task/docs/__init__.py +3 -0
- dvt/task/docs/generate.py +408 -0
- dvt/task/docs/index.html +250 -0
- dvt/task/docs/serve.py +28 -0
- dvt/task/freshness.py +323 -0
- dvt/task/function.py +122 -0
- dvt/task/group_lookup.py +46 -0
- dvt/task/init.py +374 -0
- dvt/task/list.py +237 -0
- dvt/task/printer.py +176 -0
- dvt/task/profiles.py +256 -0
- dvt/task/retry.py +175 -0
- dvt/task/run.py +1146 -0
- dvt/task/run_operation.py +142 -0
- dvt/task/runnable.py +802 -0
- dvt/task/seed.py +104 -0
- dvt/task/show.py +150 -0
- dvt/task/snapshot.py +57 -0
- dvt/task/sql.py +111 -0
- dvt/task/test.py +464 -0
- dvt/tests/fixtures/__init__.py +1 -0
- dvt/tests/fixtures/project.py +620 -0
- dvt/tests/util.py +651 -0
- dvt/tracking.py +529 -0
- dvt/utils/__init__.py +3 -0
- dvt/utils/artifact_upload.py +151 -0
- dvt/utils/utils.py +408 -0
- dvt/version.py +249 -0
- dvt_core-1.11.0b4.dist-info/METADATA +252 -0
- dvt_core-1.11.0b4.dist-info/RECORD +261 -0
- dvt_core-1.11.0b4.dist-info/WHEEL +5 -0
- dvt_core-1.11.0b4.dist-info/entry_points.txt +2 -0
- dvt_core-1.11.0b4.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import threading
|
|
3
|
+
import traceback
|
|
4
|
+
from datetime import datetime, timezone
|
|
5
|
+
from typing import TYPE_CHECKING, List
|
|
6
|
+
|
|
7
|
+
from dvt.artifacts.schemas.results import RunStatus, TimingInfo, collect_timing_info
|
|
8
|
+
from dvt.artifacts.schemas.run import RunResult, RunResultsArtifact
|
|
9
|
+
from dvt.constants import RUN_RESULTS_FILE_NAME
|
|
10
|
+
from dvt.contracts.files import FileHash
|
|
11
|
+
from dvt.contracts.graph.nodes import HookNode
|
|
12
|
+
from dvt.events.types import (
|
|
13
|
+
ArtifactWritten,
|
|
14
|
+
LogDebugStackTrace,
|
|
15
|
+
RunningOperationCaughtError,
|
|
16
|
+
RunningOperationUncaughtError,
|
|
17
|
+
)
|
|
18
|
+
from dvt.node_types import NodeType
|
|
19
|
+
from dvt.task.base import ConfiguredTask
|
|
20
|
+
|
|
21
|
+
import dbt_common.exceptions
|
|
22
|
+
from dbt.adapters.factory import get_adapter
|
|
23
|
+
from dbt_common.events.functions import fire_event
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
import agate
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class RunOperationTask(ConfiguredTask):
|
|
30
|
+
def _get_macro_parts(self):
|
|
31
|
+
macro_name = self.args.macro
|
|
32
|
+
if "." in macro_name:
|
|
33
|
+
package_name, macro_name = macro_name.split(".", 1)
|
|
34
|
+
else:
|
|
35
|
+
package_name = None
|
|
36
|
+
|
|
37
|
+
return package_name, macro_name
|
|
38
|
+
|
|
39
|
+
def _run_unsafe(self, package_name, macro_name) -> "agate.Table":
|
|
40
|
+
adapter = get_adapter(self.config)
|
|
41
|
+
|
|
42
|
+
macro_kwargs = self.args.args
|
|
43
|
+
|
|
44
|
+
with adapter.connection_named("macro_{}".format(macro_name)):
|
|
45
|
+
adapter.clear_transaction()
|
|
46
|
+
res = adapter.execute_macro(
|
|
47
|
+
macro_name, project=package_name, kwargs=macro_kwargs, macro_resolver=self.manifest
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
return res
|
|
51
|
+
|
|
52
|
+
def run(self) -> RunResultsArtifact:
|
|
53
|
+
timing: List[TimingInfo] = []
|
|
54
|
+
|
|
55
|
+
with collect_timing_info("compile", timing.append):
|
|
56
|
+
self.compile_manifest()
|
|
57
|
+
|
|
58
|
+
start = timing[0].started_at
|
|
59
|
+
|
|
60
|
+
success = True
|
|
61
|
+
package_name, macro_name = self._get_macro_parts()
|
|
62
|
+
|
|
63
|
+
with collect_timing_info("execute", timing.append):
|
|
64
|
+
try:
|
|
65
|
+
self._run_unsafe(package_name, macro_name)
|
|
66
|
+
except dbt_common.exceptions.DbtBaseException as exc:
|
|
67
|
+
fire_event(RunningOperationCaughtError(exc=str(exc)))
|
|
68
|
+
fire_event(LogDebugStackTrace(exc_info=traceback.format_exc()))
|
|
69
|
+
success = False
|
|
70
|
+
except Exception as exc:
|
|
71
|
+
fire_event(RunningOperationUncaughtError(exc=str(exc)))
|
|
72
|
+
fire_event(LogDebugStackTrace(exc_info=traceback.format_exc()))
|
|
73
|
+
success = False
|
|
74
|
+
|
|
75
|
+
end = timing[1].completed_at
|
|
76
|
+
|
|
77
|
+
macro = (
|
|
78
|
+
self.manifest.find_macro_by_name(macro_name, self.config.project_name, package_name)
|
|
79
|
+
if self.manifest
|
|
80
|
+
else None
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
if macro:
|
|
84
|
+
unique_id = macro.unique_id
|
|
85
|
+
fqn = unique_id.split(".")
|
|
86
|
+
else:
|
|
87
|
+
raise dbt_common.exceptions.UndefinedMacroError(
|
|
88
|
+
f"dbt could not find a macro with the name '{macro_name}' in any package"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
execution_time = (end - start).total_seconds() if start and end else 0.0
|
|
92
|
+
|
|
93
|
+
run_result = RunResult(
|
|
94
|
+
adapter_response={},
|
|
95
|
+
status=RunStatus.Success if success else RunStatus.Error,
|
|
96
|
+
execution_time=execution_time,
|
|
97
|
+
failures=0 if success else 1,
|
|
98
|
+
message=None,
|
|
99
|
+
node=HookNode(
|
|
100
|
+
alias=macro_name,
|
|
101
|
+
checksum=FileHash.from_contents(unique_id),
|
|
102
|
+
database=self.config.credentials.database,
|
|
103
|
+
schema=self.config.credentials.schema,
|
|
104
|
+
resource_type=NodeType.Operation,
|
|
105
|
+
fqn=fqn,
|
|
106
|
+
name=macro_name,
|
|
107
|
+
unique_id=unique_id,
|
|
108
|
+
package_name=package_name,
|
|
109
|
+
path="",
|
|
110
|
+
original_file_path="",
|
|
111
|
+
),
|
|
112
|
+
thread_id=threading.current_thread().name,
|
|
113
|
+
timing=timing,
|
|
114
|
+
batch_results=None,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
results = RunResultsArtifact.from_execution_results(
|
|
118
|
+
generated_at=end or datetime.now(timezone.utc).replace(tzinfo=None),
|
|
119
|
+
elapsed_time=execution_time,
|
|
120
|
+
args={
|
|
121
|
+
k: v
|
|
122
|
+
for k, v in self.args.__dict__.items()
|
|
123
|
+
if k.islower() and type(v) in (str, int, float, bool, list, dict)
|
|
124
|
+
},
|
|
125
|
+
results=[run_result],
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
result_path = os.path.join(self.config.project_target_path, RUN_RESULTS_FILE_NAME)
|
|
129
|
+
|
|
130
|
+
if self.args.write_json:
|
|
131
|
+
results.write(result_path)
|
|
132
|
+
fire_event(
|
|
133
|
+
ArtifactWritten(
|
|
134
|
+
artifact_type=results.__class__.__name__, artifact_path=result_path
|
|
135
|
+
)
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
return results
|
|
139
|
+
|
|
140
|
+
@classmethod
|
|
141
|
+
def interpret_results(cls, results):
|
|
142
|
+
return results.results[0].status == RunStatus.Success
|