dvt-core 0.59.0a51__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.
Files changed (299) hide show
  1. dbt/__init__.py +7 -0
  2. dbt/_pydantic_shim.py +26 -0
  3. dbt/artifacts/__init__.py +0 -0
  4. dbt/artifacts/exceptions/__init__.py +1 -0
  5. dbt/artifacts/exceptions/schemas.py +31 -0
  6. dbt/artifacts/resources/__init__.py +116 -0
  7. dbt/artifacts/resources/base.py +67 -0
  8. dbt/artifacts/resources/types.py +93 -0
  9. dbt/artifacts/resources/v1/analysis.py +10 -0
  10. dbt/artifacts/resources/v1/catalog.py +23 -0
  11. dbt/artifacts/resources/v1/components.py +274 -0
  12. dbt/artifacts/resources/v1/config.py +277 -0
  13. dbt/artifacts/resources/v1/documentation.py +11 -0
  14. dbt/artifacts/resources/v1/exposure.py +51 -0
  15. dbt/artifacts/resources/v1/function.py +52 -0
  16. dbt/artifacts/resources/v1/generic_test.py +31 -0
  17. dbt/artifacts/resources/v1/group.py +21 -0
  18. dbt/artifacts/resources/v1/hook.py +11 -0
  19. dbt/artifacts/resources/v1/macro.py +29 -0
  20. dbt/artifacts/resources/v1/metric.py +172 -0
  21. dbt/artifacts/resources/v1/model.py +145 -0
  22. dbt/artifacts/resources/v1/owner.py +10 -0
  23. dbt/artifacts/resources/v1/saved_query.py +111 -0
  24. dbt/artifacts/resources/v1/seed.py +41 -0
  25. dbt/artifacts/resources/v1/semantic_layer_components.py +72 -0
  26. dbt/artifacts/resources/v1/semantic_model.py +314 -0
  27. dbt/artifacts/resources/v1/singular_test.py +14 -0
  28. dbt/artifacts/resources/v1/snapshot.py +91 -0
  29. dbt/artifacts/resources/v1/source_definition.py +84 -0
  30. dbt/artifacts/resources/v1/sql_operation.py +10 -0
  31. dbt/artifacts/resources/v1/unit_test_definition.py +77 -0
  32. dbt/artifacts/schemas/__init__.py +0 -0
  33. dbt/artifacts/schemas/base.py +191 -0
  34. dbt/artifacts/schemas/batch_results.py +24 -0
  35. dbt/artifacts/schemas/catalog/__init__.py +11 -0
  36. dbt/artifacts/schemas/catalog/v1/__init__.py +0 -0
  37. dbt/artifacts/schemas/catalog/v1/catalog.py +59 -0
  38. dbt/artifacts/schemas/freshness/__init__.py +1 -0
  39. dbt/artifacts/schemas/freshness/v3/__init__.py +0 -0
  40. dbt/artifacts/schemas/freshness/v3/freshness.py +158 -0
  41. dbt/artifacts/schemas/manifest/__init__.py +2 -0
  42. dbt/artifacts/schemas/manifest/v12/__init__.py +0 -0
  43. dbt/artifacts/schemas/manifest/v12/manifest.py +211 -0
  44. dbt/artifacts/schemas/results.py +147 -0
  45. dbt/artifacts/schemas/run/__init__.py +2 -0
  46. dbt/artifacts/schemas/run/v5/__init__.py +0 -0
  47. dbt/artifacts/schemas/run/v5/run.py +184 -0
  48. dbt/artifacts/schemas/upgrades/__init__.py +4 -0
  49. dbt/artifacts/schemas/upgrades/upgrade_manifest.py +174 -0
  50. dbt/artifacts/schemas/upgrades/upgrade_manifest_dbt_version.py +2 -0
  51. dbt/artifacts/utils/validation.py +153 -0
  52. dbt/cli/__init__.py +1 -0
  53. dbt/cli/context.py +17 -0
  54. dbt/cli/exceptions.py +57 -0
  55. dbt/cli/flags.py +560 -0
  56. dbt/cli/main.py +2660 -0
  57. dbt/cli/option_types.py +121 -0
  58. dbt/cli/options.py +80 -0
  59. dbt/cli/params.py +844 -0
  60. dbt/cli/requires.py +490 -0
  61. dbt/cli/resolvers.py +60 -0
  62. dbt/cli/types.py +40 -0
  63. dbt/clients/__init__.py +0 -0
  64. dbt/clients/checked_load.py +83 -0
  65. dbt/clients/git.py +164 -0
  66. dbt/clients/jinja.py +206 -0
  67. dbt/clients/jinja_static.py +245 -0
  68. dbt/clients/registry.py +192 -0
  69. dbt/clients/yaml_helper.py +68 -0
  70. dbt/compilation.py +876 -0
  71. dbt/compute/__init__.py +14 -0
  72. dbt/compute/engines/__init__.py +12 -0
  73. dbt/compute/engines/spark_engine.py +642 -0
  74. dbt/compute/federated_executor.py +1080 -0
  75. dbt/compute/filter_pushdown.py +273 -0
  76. dbt/compute/jar_provisioning.py +273 -0
  77. dbt/compute/java_compat.py +689 -0
  78. dbt/compute/jdbc_utils.py +1252 -0
  79. dbt/compute/metadata/__init__.py +63 -0
  80. dbt/compute/metadata/adapters_registry.py +370 -0
  81. dbt/compute/metadata/catalog_store.py +1036 -0
  82. dbt/compute/metadata/registry.py +674 -0
  83. dbt/compute/metadata/store.py +1020 -0
  84. dbt/compute/smart_selector.py +377 -0
  85. dbt/compute/spark_logger.py +272 -0
  86. dbt/compute/strategies/__init__.py +55 -0
  87. dbt/compute/strategies/base.py +165 -0
  88. dbt/compute/strategies/dataproc.py +207 -0
  89. dbt/compute/strategies/emr.py +203 -0
  90. dbt/compute/strategies/local.py +472 -0
  91. dbt/compute/strategies/standalone.py +262 -0
  92. dbt/config/__init__.py +4 -0
  93. dbt/config/catalogs.py +94 -0
  94. dbt/config/compute.py +513 -0
  95. dbt/config/dvt_profile.py +408 -0
  96. dbt/config/profile.py +422 -0
  97. dbt/config/project.py +888 -0
  98. dbt/config/project_utils.py +48 -0
  99. dbt/config/renderer.py +231 -0
  100. dbt/config/runtime.py +564 -0
  101. dbt/config/selectors.py +208 -0
  102. dbt/config/utils.py +77 -0
  103. dbt/constants.py +28 -0
  104. dbt/context/__init__.py +0 -0
  105. dbt/context/base.py +745 -0
  106. dbt/context/configured.py +135 -0
  107. dbt/context/context_config.py +382 -0
  108. dbt/context/docs.py +82 -0
  109. dbt/context/exceptions_jinja.py +178 -0
  110. dbt/context/macro_resolver.py +195 -0
  111. dbt/context/macros.py +171 -0
  112. dbt/context/manifest.py +72 -0
  113. dbt/context/providers.py +2249 -0
  114. dbt/context/query_header.py +13 -0
  115. dbt/context/secret.py +58 -0
  116. dbt/context/target.py +74 -0
  117. dbt/contracts/__init__.py +0 -0
  118. dbt/contracts/files.py +413 -0
  119. dbt/contracts/graph/__init__.py +0 -0
  120. dbt/contracts/graph/manifest.py +1904 -0
  121. dbt/contracts/graph/metrics.py +97 -0
  122. dbt/contracts/graph/model_config.py +70 -0
  123. dbt/contracts/graph/node_args.py +42 -0
  124. dbt/contracts/graph/nodes.py +1806 -0
  125. dbt/contracts/graph/semantic_manifest.py +232 -0
  126. dbt/contracts/graph/unparsed.py +811 -0
  127. dbt/contracts/project.py +419 -0
  128. dbt/contracts/results.py +53 -0
  129. dbt/contracts/selection.py +23 -0
  130. dbt/contracts/sql.py +85 -0
  131. dbt/contracts/state.py +68 -0
  132. dbt/contracts/util.py +46 -0
  133. dbt/deprecations.py +348 -0
  134. dbt/deps/__init__.py +0 -0
  135. dbt/deps/base.py +152 -0
  136. dbt/deps/git.py +195 -0
  137. dbt/deps/local.py +79 -0
  138. dbt/deps/registry.py +130 -0
  139. dbt/deps/resolver.py +149 -0
  140. dbt/deps/tarball.py +120 -0
  141. dbt/docs/source/_ext/dbt_click.py +119 -0
  142. dbt/docs/source/conf.py +32 -0
  143. dbt/env_vars.py +64 -0
  144. dbt/event_time/event_time.py +40 -0
  145. dbt/event_time/sample_window.py +60 -0
  146. dbt/events/__init__.py +15 -0
  147. dbt/events/base_types.py +36 -0
  148. dbt/events/core_types_pb2.py +2 -0
  149. dbt/events/logging.py +108 -0
  150. dbt/events/types.py +2516 -0
  151. dbt/exceptions.py +1486 -0
  152. dbt/flags.py +89 -0
  153. dbt/graph/__init__.py +11 -0
  154. dbt/graph/cli.py +249 -0
  155. dbt/graph/graph.py +172 -0
  156. dbt/graph/queue.py +214 -0
  157. dbt/graph/selector.py +374 -0
  158. dbt/graph/selector_methods.py +975 -0
  159. dbt/graph/selector_spec.py +222 -0
  160. dbt/graph/thread_pool.py +18 -0
  161. dbt/hooks.py +21 -0
  162. dbt/include/README.md +49 -0
  163. dbt/include/__init__.py +3 -0
  164. dbt/include/data/adapters_registry.duckdb +0 -0
  165. dbt/include/data/build_comprehensive_registry.py +1254 -0
  166. dbt/include/data/build_registry.py +242 -0
  167. dbt/include/data/csv/adapter_queries.csv +33 -0
  168. dbt/include/data/csv/syntax_rules.csv +9 -0
  169. dbt/include/data/csv/type_mappings_bigquery.csv +28 -0
  170. dbt/include/data/csv/type_mappings_databricks.csv +30 -0
  171. dbt/include/data/csv/type_mappings_mysql.csv +40 -0
  172. dbt/include/data/csv/type_mappings_oracle.csv +30 -0
  173. dbt/include/data/csv/type_mappings_postgres.csv +56 -0
  174. dbt/include/data/csv/type_mappings_redshift.csv +33 -0
  175. dbt/include/data/csv/type_mappings_snowflake.csv +38 -0
  176. dbt/include/data/csv/type_mappings_sqlserver.csv +35 -0
  177. dbt/include/dvt_starter_project/README.md +15 -0
  178. dbt/include/dvt_starter_project/__init__.py +3 -0
  179. dbt/include/dvt_starter_project/analyses/PLACEHOLDER +0 -0
  180. dbt/include/dvt_starter_project/dvt_project.yml +39 -0
  181. dbt/include/dvt_starter_project/logs/PLACEHOLDER +0 -0
  182. dbt/include/dvt_starter_project/macros/PLACEHOLDER +0 -0
  183. dbt/include/dvt_starter_project/models/example/my_first_dbt_model.sql +27 -0
  184. dbt/include/dvt_starter_project/models/example/my_second_dbt_model.sql +6 -0
  185. dbt/include/dvt_starter_project/models/example/schema.yml +21 -0
  186. dbt/include/dvt_starter_project/seeds/PLACEHOLDER +0 -0
  187. dbt/include/dvt_starter_project/snapshots/PLACEHOLDER +0 -0
  188. dbt/include/dvt_starter_project/tests/PLACEHOLDER +0 -0
  189. dbt/internal_deprecations.py +26 -0
  190. dbt/jsonschemas/__init__.py +3 -0
  191. dbt/jsonschemas/jsonschemas.py +309 -0
  192. dbt/jsonschemas/project/0.0.110.json +4717 -0
  193. dbt/jsonschemas/project/0.0.85.json +2015 -0
  194. dbt/jsonschemas/resources/0.0.110.json +2636 -0
  195. dbt/jsonschemas/resources/0.0.85.json +2536 -0
  196. dbt/jsonschemas/resources/latest.json +6773 -0
  197. dbt/links.py +4 -0
  198. dbt/materializations/__init__.py +0 -0
  199. dbt/materializations/incremental/__init__.py +0 -0
  200. dbt/materializations/incremental/microbatch.py +236 -0
  201. dbt/mp_context.py +8 -0
  202. dbt/node_types.py +37 -0
  203. dbt/parser/__init__.py +23 -0
  204. dbt/parser/analysis.py +21 -0
  205. dbt/parser/base.py +548 -0
  206. dbt/parser/common.py +266 -0
  207. dbt/parser/docs.py +52 -0
  208. dbt/parser/fixtures.py +51 -0
  209. dbt/parser/functions.py +30 -0
  210. dbt/parser/generic_test.py +100 -0
  211. dbt/parser/generic_test_builders.py +333 -0
  212. dbt/parser/hooks.py +122 -0
  213. dbt/parser/macros.py +137 -0
  214. dbt/parser/manifest.py +2208 -0
  215. dbt/parser/models.py +573 -0
  216. dbt/parser/partial.py +1178 -0
  217. dbt/parser/read_files.py +445 -0
  218. dbt/parser/schema_generic_tests.py +422 -0
  219. dbt/parser/schema_renderer.py +111 -0
  220. dbt/parser/schema_yaml_readers.py +935 -0
  221. dbt/parser/schemas.py +1466 -0
  222. dbt/parser/search.py +149 -0
  223. dbt/parser/seeds.py +28 -0
  224. dbt/parser/singular_test.py +20 -0
  225. dbt/parser/snapshots.py +44 -0
  226. dbt/parser/sources.py +558 -0
  227. dbt/parser/sql.py +62 -0
  228. dbt/parser/unit_tests.py +621 -0
  229. dbt/plugins/__init__.py +20 -0
  230. dbt/plugins/contracts.py +9 -0
  231. dbt/plugins/exceptions.py +2 -0
  232. dbt/plugins/manager.py +163 -0
  233. dbt/plugins/manifest.py +21 -0
  234. dbt/profiler.py +20 -0
  235. dbt/py.typed +1 -0
  236. dbt/query_analyzer.py +410 -0
  237. dbt/runners/__init__.py +2 -0
  238. dbt/runners/exposure_runner.py +7 -0
  239. dbt/runners/no_op_runner.py +45 -0
  240. dbt/runners/saved_query_runner.py +7 -0
  241. dbt/selected_resources.py +8 -0
  242. dbt/task/__init__.py +0 -0
  243. dbt/task/base.py +506 -0
  244. dbt/task/build.py +197 -0
  245. dbt/task/clean.py +56 -0
  246. dbt/task/clone.py +161 -0
  247. dbt/task/compile.py +150 -0
  248. dbt/task/compute.py +458 -0
  249. dbt/task/debug.py +513 -0
  250. dbt/task/deps.py +280 -0
  251. dbt/task/docs/__init__.py +3 -0
  252. dbt/task/docs/api/__init__.py +23 -0
  253. dbt/task/docs/api/catalog.py +204 -0
  254. dbt/task/docs/api/lineage.py +234 -0
  255. dbt/task/docs/api/profile.py +204 -0
  256. dbt/task/docs/api/spark.py +186 -0
  257. dbt/task/docs/generate.py +1002 -0
  258. dbt/task/docs/index.html +250 -0
  259. dbt/task/docs/serve.py +174 -0
  260. dbt/task/dvt_output.py +509 -0
  261. dbt/task/dvt_run.py +282 -0
  262. dbt/task/dvt_seed.py +806 -0
  263. dbt/task/freshness.py +322 -0
  264. dbt/task/function.py +121 -0
  265. dbt/task/group_lookup.py +46 -0
  266. dbt/task/init.py +1022 -0
  267. dbt/task/java.py +316 -0
  268. dbt/task/list.py +236 -0
  269. dbt/task/metadata.py +804 -0
  270. dbt/task/migrate.py +714 -0
  271. dbt/task/printer.py +175 -0
  272. dbt/task/profile.py +1489 -0
  273. dbt/task/profile_serve.py +662 -0
  274. dbt/task/retract.py +441 -0
  275. dbt/task/retry.py +175 -0
  276. dbt/task/run.py +1647 -0
  277. dbt/task/run_operation.py +141 -0
  278. dbt/task/runnable.py +758 -0
  279. dbt/task/seed.py +103 -0
  280. dbt/task/show.py +149 -0
  281. dbt/task/snapshot.py +56 -0
  282. dbt/task/spark.py +414 -0
  283. dbt/task/sql.py +110 -0
  284. dbt/task/target_sync.py +814 -0
  285. dbt/task/test.py +464 -0
  286. dbt/tests/fixtures/__init__.py +1 -0
  287. dbt/tests/fixtures/project.py +620 -0
  288. dbt/tests/util.py +651 -0
  289. dbt/tracking.py +529 -0
  290. dbt/utils/__init__.py +3 -0
  291. dbt/utils/artifact_upload.py +151 -0
  292. dbt/utils/utils.py +408 -0
  293. dbt/version.py +271 -0
  294. dvt_cli/__init__.py +158 -0
  295. dvt_core-0.59.0a51.dist-info/METADATA +288 -0
  296. dvt_core-0.59.0a51.dist-info/RECORD +299 -0
  297. dvt_core-0.59.0a51.dist-info/WHEEL +5 -0
  298. dvt_core-0.59.0a51.dist-info/entry_points.txt +2 -0
  299. dvt_core-0.59.0a51.dist-info/top_level.txt +2 -0
@@ -0,0 +1,97 @@
1
+ from typing import Any, Dict, Iterator, List
2
+
3
+ from dbt.contracts.graph.manifest import Manifest, Metric
4
+ from dbt_semantic_interfaces.type_enums import MetricType
5
+
6
+ DERIVED_METRICS = [MetricType.DERIVED, MetricType.RATIO]
7
+ BASE_METRICS = [MetricType.SIMPLE, MetricType.CUMULATIVE, MetricType.CONVERSION]
8
+
9
+
10
+ class MetricReference(object):
11
+ def __init__(self, metric_name, package_name=None) -> None:
12
+ self.metric_name = metric_name
13
+ self.package_name = package_name
14
+
15
+ def __str__(self):
16
+ return f"{self.metric_name}"
17
+
18
+
19
+ class ResolvedMetricReference(MetricReference):
20
+ """
21
+ Simple proxy over a Metric which delegates property
22
+ lookups to the underlying node. Also adds helper functions
23
+ for working with metrics (ie. __str__ and templating functions)
24
+ """
25
+
26
+ def __init__(self, node: Metric, manifest: Manifest) -> None:
27
+ super().__init__(node.name, node.package_name)
28
+ self.node = node
29
+ self.manifest = manifest
30
+
31
+ def __getattr__(self, key) -> Any:
32
+ return getattr(self.node, key)
33
+
34
+ def __str__(self) -> str:
35
+ return f"{self.node.name}"
36
+
37
+ @classmethod
38
+ def parent_metrics(cls, metric_node: Metric, manifest: Manifest) -> Iterator[Metric]:
39
+ """For a given metric, yeilds all upstream metrics."""
40
+ yield metric_node
41
+
42
+ for parent_unique_id in metric_node.depends_on.nodes:
43
+ node = manifest.expect(parent_unique_id)
44
+ if isinstance(node, Metric):
45
+ yield from cls.parent_metrics(node, manifest)
46
+
47
+ @classmethod
48
+ def parent_metrics_names(cls, metric_node: Metric, manifest: Manifest) -> Iterator[str]:
49
+ """For a given metric, yeilds all upstream metric names"""
50
+ for metric in cls.parent_metrics(metric_node, manifest):
51
+ yield metric.name
52
+
53
+ @classmethod
54
+ def reverse_dag_parsing(
55
+ cls, metric_node: Metric, manifest: Manifest, metric_depth_count: int
56
+ ) -> Iterator[Dict[str, int]]:
57
+ """For the given metric, yeilds dictionaries having {<metric_name>: <depth_from_initial_metric} of upstream derived metrics.
58
+
59
+ This function is intended as a helper function for other metric helper functions.
60
+ """
61
+ if metric_node.type in DERIVED_METRICS:
62
+ yield {metric_node.name: metric_depth_count}
63
+
64
+ for parent_unique_id in metric_node.depends_on.nodes:
65
+ node = manifest.expect(parent_unique_id)
66
+ if isinstance(node, Metric):
67
+ yield from cls.reverse_dag_parsing(node, manifest, metric_depth_count + 1)
68
+
69
+ def full_metric_dependency(self):
70
+ """Returns a unique list of all upstream metric names."""
71
+ to_return = list(set(self.parent_metrics_names(self.node, self.manifest)))
72
+ return to_return
73
+
74
+ def base_metric_dependency(self) -> List[str]:
75
+ """Returns a unique list of names for all upstream non-derived metrics."""
76
+ in_scope_metrics = list(self.parent_metrics(self.node, self.manifest))
77
+ base_metrics = {
78
+ metric.name for metric in in_scope_metrics if metric.type not in DERIVED_METRICS
79
+ }
80
+
81
+ return list(base_metrics)
82
+
83
+ def derived_metric_dependency(self) -> List[str]:
84
+ """Returns a unique list of names for all upstream derived metrics."""
85
+ in_scope_metrics = list(self.parent_metrics(self.node, self.manifest))
86
+ derived_metrics = {
87
+ metric.name for metric in in_scope_metrics if metric.type in DERIVED_METRICS
88
+ }
89
+
90
+ return list(derived_metrics)
91
+
92
+ def derived_metric_dependency_depth(self) -> List[Dict[str, int]]:
93
+ """Returns a list of {<metric_name>: <depth_from_initial_metric>} for all upstream metrics."""
94
+ metric_depth_count = 1
95
+ to_return = list(self.reverse_dag_parsing(self.node, self.manifest, metric_depth_count))
96
+
97
+ return to_return
@@ -0,0 +1,70 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Any, Dict, List, Optional, Type
3
+
4
+ from dbt.artifacts.resources import (
5
+ ExposureConfig,
6
+ FunctionConfig,
7
+ GroupConfig,
8
+ MetricConfig,
9
+ ModelConfig,
10
+ NodeConfig,
11
+ SavedQueryConfig,
12
+ SeedConfig,
13
+ SemanticModelConfig,
14
+ SnapshotConfig,
15
+ SourceConfig,
16
+ TestConfig,
17
+ UnitTestConfig,
18
+ )
19
+ from dbt.node_types import NodeType
20
+ from dbt_common.contracts.config.base import BaseConfig
21
+ from dbt_common.contracts.config.metadata import Metadata
22
+
23
+
24
+ def metas(*metas: Metadata) -> Dict[str, Any]:
25
+ existing: Dict[str, Any] = {}
26
+ for m in metas:
27
+ existing = m.meta(existing)
28
+ return existing
29
+
30
+
31
+ def insensitive_patterns(*patterns: str):
32
+ lowercased = []
33
+ for pattern in patterns:
34
+ lowercased.append("".join("[{}{}]".format(s.upper(), s.lower()) for s in pattern))
35
+ return "^({})$".format("|".join(lowercased))
36
+
37
+
38
+ @dataclass
39
+ class UnitTestNodeConfig(NodeConfig):
40
+ expected_rows: List[Dict[str, Any]] = field(default_factory=list)
41
+ expected_sql: Optional[str] = None
42
+
43
+
44
+ RESOURCE_TYPES: Dict[NodeType, Type[BaseConfig]] = {
45
+ NodeType.Metric: MetricConfig,
46
+ NodeType.SemanticModel: SemanticModelConfig,
47
+ NodeType.SavedQuery: SavedQueryConfig,
48
+ NodeType.Exposure: ExposureConfig,
49
+ NodeType.Source: SourceConfig,
50
+ NodeType.Seed: SeedConfig,
51
+ NodeType.Test: TestConfig,
52
+ NodeType.Model: ModelConfig,
53
+ NodeType.Snapshot: SnapshotConfig,
54
+ NodeType.Unit: UnitTestConfig,
55
+ NodeType.Group: GroupConfig,
56
+ NodeType.Function: FunctionConfig,
57
+ }
58
+
59
+
60
+ # base resource types are like resource types, except nothing has mandatory
61
+ # configs.
62
+ BASE_RESOURCE_TYPES: Dict[NodeType, Type[BaseConfig]] = RESOURCE_TYPES.copy()
63
+
64
+
65
+ def get_config_for(resource_type: NodeType, base=False) -> Type[BaseConfig]:
66
+ if base:
67
+ lookup = BASE_RESOURCE_TYPES
68
+ else:
69
+ lookup = RESOURCE_TYPES
70
+ return lookup.get(resource_type, NodeConfig)
@@ -0,0 +1,42 @@
1
+ from dataclasses import dataclass, field
2
+ from datetime import datetime, timezone
3
+ from typing import List, Optional
4
+
5
+ from dbt.artifacts.resources import NodeVersion
6
+ from dbt.node_types import AccessType, NodeType
7
+
8
+
9
+ @dataclass
10
+ class ModelNodeArgs:
11
+ name: str
12
+ package_name: str
13
+ identifier: str
14
+ schema: str
15
+ database: Optional[str] = None
16
+ relation_name: Optional[str] = None
17
+ version: Optional[NodeVersion] = None
18
+ latest_version: Optional[NodeVersion] = None
19
+ deprecation_date: Optional[datetime] = None
20
+ access: Optional[str] = AccessType.Protected.value
21
+ generated_at: datetime = field(
22
+ default_factory=lambda: datetime.now(timezone.utc).replace(tzinfo=None)
23
+ )
24
+ depends_on_nodes: List[str] = field(default_factory=list)
25
+ enabled: bool = True
26
+
27
+ @property
28
+ def unique_id(self) -> str:
29
+ unique_id = f"{NodeType.Model}.{self.package_name}.{self.name}"
30
+ if self.version:
31
+ unique_id = f"{unique_id}.v{self.version}"
32
+
33
+ return unique_id
34
+
35
+ @property
36
+ def fqn(self) -> List[str]:
37
+ fqn = [self.package_name, self.name]
38
+ # Test for None explicitly because version can be 0
39
+ if self.version is not None:
40
+ fqn.append(f"v{self.version}")
41
+
42
+ return fqn