dvt-core 0.52.2__cp310-cp310-macosx_10_9_x86_64.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 (275) 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 +2039 -0
  57. dbt/cli/option_types.py +121 -0
  58. dbt/cli/options.py +80 -0
  59. dbt/cli/params.py +804 -0
  60. dbt/cli/requires.py +490 -0
  61. dbt/cli/resolvers.py +50 -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 +624 -0
  74. dbt/compute/federated_executor.py +837 -0
  75. dbt/compute/filter_pushdown.cpython-310-darwin.so +0 -0
  76. dbt/compute/filter_pushdown.py +273 -0
  77. dbt/compute/jar_provisioning.cpython-310-darwin.so +0 -0
  78. dbt/compute/jar_provisioning.py +255 -0
  79. dbt/compute/java_compat.cpython-310-darwin.so +0 -0
  80. dbt/compute/java_compat.py +689 -0
  81. dbt/compute/jdbc_utils.cpython-310-darwin.so +0 -0
  82. dbt/compute/jdbc_utils.py +678 -0
  83. dbt/compute/smart_selector.cpython-310-darwin.so +0 -0
  84. dbt/compute/smart_selector.py +311 -0
  85. dbt/compute/strategies/__init__.py +54 -0
  86. dbt/compute/strategies/base.py +165 -0
  87. dbt/compute/strategies/dataproc.py +207 -0
  88. dbt/compute/strategies/emr.py +203 -0
  89. dbt/compute/strategies/local.py +364 -0
  90. dbt/compute/strategies/standalone.py +262 -0
  91. dbt/config/__init__.py +4 -0
  92. dbt/config/catalogs.py +94 -0
  93. dbt/config/compute.cpython-310-darwin.so +0 -0
  94. dbt/config/compute.py +547 -0
  95. dbt/config/dvt_profile.cpython-310-darwin.so +0 -0
  96. dbt/config/dvt_profile.py +342 -0
  97. dbt/config/profile.py +422 -0
  98. dbt/config/project.py +873 -0
  99. dbt/config/project_utils.py +28 -0
  100. dbt/config/renderer.py +231 -0
  101. dbt/config/runtime.py +553 -0
  102. dbt/config/selectors.py +208 -0
  103. dbt/config/utils.py +77 -0
  104. dbt/constants.py +28 -0
  105. dbt/context/__init__.py +0 -0
  106. dbt/context/base.py +745 -0
  107. dbt/context/configured.py +135 -0
  108. dbt/context/context_config.py +382 -0
  109. dbt/context/docs.py +82 -0
  110. dbt/context/exceptions_jinja.py +178 -0
  111. dbt/context/macro_resolver.py +195 -0
  112. dbt/context/macros.py +171 -0
  113. dbt/context/manifest.py +72 -0
  114. dbt/context/providers.py +2249 -0
  115. dbt/context/query_header.py +13 -0
  116. dbt/context/secret.py +58 -0
  117. dbt/context/target.py +74 -0
  118. dbt/contracts/__init__.py +0 -0
  119. dbt/contracts/files.py +413 -0
  120. dbt/contracts/graph/__init__.py +0 -0
  121. dbt/contracts/graph/manifest.py +1904 -0
  122. dbt/contracts/graph/metrics.py +97 -0
  123. dbt/contracts/graph/model_config.py +70 -0
  124. dbt/contracts/graph/node_args.py +42 -0
  125. dbt/contracts/graph/nodes.py +1806 -0
  126. dbt/contracts/graph/semantic_manifest.py +232 -0
  127. dbt/contracts/graph/unparsed.py +811 -0
  128. dbt/contracts/project.py +417 -0
  129. dbt/contracts/results.py +53 -0
  130. dbt/contracts/selection.py +23 -0
  131. dbt/contracts/sql.py +85 -0
  132. dbt/contracts/state.py +68 -0
  133. dbt/contracts/util.py +46 -0
  134. dbt/deprecations.py +346 -0
  135. dbt/deps/__init__.py +0 -0
  136. dbt/deps/base.py +152 -0
  137. dbt/deps/git.py +195 -0
  138. dbt/deps/local.py +79 -0
  139. dbt/deps/registry.py +130 -0
  140. dbt/deps/resolver.py +149 -0
  141. dbt/deps/tarball.py +120 -0
  142. dbt/docs/source/_ext/dbt_click.py +119 -0
  143. dbt/docs/source/conf.py +32 -0
  144. dbt/env_vars.py +64 -0
  145. dbt/event_time/event_time.py +40 -0
  146. dbt/event_time/sample_window.py +60 -0
  147. dbt/events/__init__.py +15 -0
  148. dbt/events/base_types.py +36 -0
  149. dbt/events/core_types_pb2.py +2 -0
  150. dbt/events/logging.py +108 -0
  151. dbt/events/types.py +2516 -0
  152. dbt/exceptions.py +1486 -0
  153. dbt/flags.py +89 -0
  154. dbt/graph/__init__.py +11 -0
  155. dbt/graph/cli.py +247 -0
  156. dbt/graph/graph.py +172 -0
  157. dbt/graph/queue.py +214 -0
  158. dbt/graph/selector.py +374 -0
  159. dbt/graph/selector_methods.py +975 -0
  160. dbt/graph/selector_spec.py +222 -0
  161. dbt/graph/thread_pool.py +18 -0
  162. dbt/hooks.py +21 -0
  163. dbt/include/README.md +49 -0
  164. dbt/include/__init__.py +3 -0
  165. dbt/include/starter_project/.gitignore +4 -0
  166. dbt/include/starter_project/README.md +15 -0
  167. dbt/include/starter_project/__init__.py +3 -0
  168. dbt/include/starter_project/analyses/.gitkeep +0 -0
  169. dbt/include/starter_project/dbt_project.yml +36 -0
  170. dbt/include/starter_project/macros/.gitkeep +0 -0
  171. dbt/include/starter_project/models/example/my_first_dbt_model.sql +27 -0
  172. dbt/include/starter_project/models/example/my_second_dbt_model.sql +6 -0
  173. dbt/include/starter_project/models/example/schema.yml +21 -0
  174. dbt/include/starter_project/seeds/.gitkeep +0 -0
  175. dbt/include/starter_project/snapshots/.gitkeep +0 -0
  176. dbt/include/starter_project/tests/.gitkeep +0 -0
  177. dbt/internal_deprecations.py +26 -0
  178. dbt/jsonschemas/__init__.py +3 -0
  179. dbt/jsonschemas/jsonschemas.py +309 -0
  180. dbt/jsonschemas/project/0.0.110.json +4717 -0
  181. dbt/jsonschemas/project/0.0.85.json +2015 -0
  182. dbt/jsonschemas/resources/0.0.110.json +2636 -0
  183. dbt/jsonschemas/resources/0.0.85.json +2536 -0
  184. dbt/jsonschemas/resources/latest.json +6773 -0
  185. dbt/links.py +4 -0
  186. dbt/materializations/__init__.py +0 -0
  187. dbt/materializations/incremental/__init__.py +0 -0
  188. dbt/materializations/incremental/microbatch.py +236 -0
  189. dbt/mp_context.py +8 -0
  190. dbt/node_types.py +37 -0
  191. dbt/parser/__init__.py +23 -0
  192. dbt/parser/analysis.py +21 -0
  193. dbt/parser/base.py +548 -0
  194. dbt/parser/common.py +266 -0
  195. dbt/parser/docs.py +52 -0
  196. dbt/parser/fixtures.py +51 -0
  197. dbt/parser/functions.py +30 -0
  198. dbt/parser/generic_test.py +100 -0
  199. dbt/parser/generic_test_builders.py +333 -0
  200. dbt/parser/hooks.py +118 -0
  201. dbt/parser/macros.py +137 -0
  202. dbt/parser/manifest.py +2204 -0
  203. dbt/parser/models.py +573 -0
  204. dbt/parser/partial.py +1178 -0
  205. dbt/parser/read_files.py +445 -0
  206. dbt/parser/schema_generic_tests.py +422 -0
  207. dbt/parser/schema_renderer.py +111 -0
  208. dbt/parser/schema_yaml_readers.py +935 -0
  209. dbt/parser/schemas.py +1466 -0
  210. dbt/parser/search.py +149 -0
  211. dbt/parser/seeds.py +28 -0
  212. dbt/parser/singular_test.py +20 -0
  213. dbt/parser/snapshots.py +44 -0
  214. dbt/parser/sources.py +558 -0
  215. dbt/parser/sql.py +62 -0
  216. dbt/parser/unit_tests.py +621 -0
  217. dbt/plugins/__init__.py +20 -0
  218. dbt/plugins/contracts.py +9 -0
  219. dbt/plugins/exceptions.py +2 -0
  220. dbt/plugins/manager.py +163 -0
  221. dbt/plugins/manifest.py +21 -0
  222. dbt/profiler.py +20 -0
  223. dbt/py.typed +1 -0
  224. dbt/query_analyzer.cpython-310-darwin.so +0 -0
  225. dbt/query_analyzer.py +410 -0
  226. dbt/runners/__init__.py +2 -0
  227. dbt/runners/exposure_runner.py +7 -0
  228. dbt/runners/no_op_runner.py +45 -0
  229. dbt/runners/saved_query_runner.py +7 -0
  230. dbt/selected_resources.py +8 -0
  231. dbt/task/__init__.py +0 -0
  232. dbt/task/base.py +503 -0
  233. dbt/task/build.py +197 -0
  234. dbt/task/clean.py +56 -0
  235. dbt/task/clone.py +161 -0
  236. dbt/task/compile.py +150 -0
  237. dbt/task/compute.py +454 -0
  238. dbt/task/debug.py +505 -0
  239. dbt/task/deps.py +280 -0
  240. dbt/task/docs/__init__.py +3 -0
  241. dbt/task/docs/generate.py +660 -0
  242. dbt/task/docs/index.html +250 -0
  243. dbt/task/docs/serve.py +29 -0
  244. dbt/task/freshness.py +322 -0
  245. dbt/task/function.py +121 -0
  246. dbt/task/group_lookup.py +46 -0
  247. dbt/task/init.py +553 -0
  248. dbt/task/java.py +316 -0
  249. dbt/task/list.py +236 -0
  250. dbt/task/printer.py +175 -0
  251. dbt/task/retry.py +175 -0
  252. dbt/task/run.py +1306 -0
  253. dbt/task/run_operation.py +141 -0
  254. dbt/task/runnable.py +758 -0
  255. dbt/task/seed.py +103 -0
  256. dbt/task/show.py +149 -0
  257. dbt/task/snapshot.py +56 -0
  258. dbt/task/spark.py +414 -0
  259. dbt/task/sql.py +110 -0
  260. dbt/task/target_sync.py +759 -0
  261. dbt/task/test.py +464 -0
  262. dbt/tests/fixtures/__init__.py +1 -0
  263. dbt/tests/fixtures/project.py +620 -0
  264. dbt/tests/util.py +651 -0
  265. dbt/tracking.py +529 -0
  266. dbt/utils/__init__.py +3 -0
  267. dbt/utils/artifact_upload.py +151 -0
  268. dbt/utils/utils.py +408 -0
  269. dbt/version.py +268 -0
  270. dvt_cli/__init__.py +72 -0
  271. dvt_core-0.52.2.dist-info/METADATA +286 -0
  272. dvt_core-0.52.2.dist-info/RECORD +275 -0
  273. dvt_core-0.52.2.dist-info/WHEEL +5 -0
  274. dvt_core-0.52.2.dist-info/entry_points.txt +2 -0
  275. dvt_core-0.52.2.dist-info/top_level.txt +2 -0
@@ -0,0 +1,4 @@
1
+ from dbt.artifacts.schemas.upgrades.upgrade_manifest import upgrade_manifest_json
2
+ from dbt.artifacts.schemas.upgrades.upgrade_manifest_dbt_version import (
3
+ upgrade_manifest_json_dbt_version,
4
+ )
@@ -0,0 +1,174 @@
1
+ def rename_sql_attr(node_content: dict) -> dict:
2
+ if "raw_sql" in node_content:
3
+ node_content["raw_code"] = node_content.pop("raw_sql")
4
+ if "compiled_sql" in node_content:
5
+ node_content["compiled_code"] = node_content.pop("compiled_sql")
6
+ node_content["language"] = "sql"
7
+ return node_content
8
+
9
+
10
+ def upgrade_ref_content(node_content: dict) -> dict:
11
+ # In v1.5 we switched Node.refs from List[List[str]] to List[Dict[str, Union[NodeVersion, str]]]
12
+ # Previous versions did not have a version keyword argument for ref
13
+ if "refs" in node_content:
14
+ upgraded_refs = []
15
+ for ref in node_content["refs"]:
16
+ if isinstance(ref, list):
17
+ if len(ref) == 1:
18
+ upgraded_refs.append({"package": None, "name": ref[0], "version": None})
19
+ else:
20
+ upgraded_refs.append({"package": ref[0], "name": ref[1], "version": None})
21
+ node_content["refs"] = upgraded_refs
22
+ return node_content
23
+
24
+
25
+ def upgrade_node_content(node_content):
26
+ rename_sql_attr(node_content)
27
+ upgrade_ref_content(node_content)
28
+ if node_content["resource_type"] != "seed" and "root_path" in node_content:
29
+ del node_content["root_path"]
30
+
31
+
32
+ def upgrade_seed_content(node_content):
33
+ # Remove compilation related attributes
34
+ for attr_name in (
35
+ "language",
36
+ "refs",
37
+ "sources",
38
+ "metrics",
39
+ "compiled_path",
40
+ "compiled",
41
+ "compiled_code",
42
+ "extra_ctes_injected",
43
+ "extra_ctes",
44
+ "relation_name",
45
+ ):
46
+ if attr_name in node_content:
47
+ del node_content[attr_name]
48
+ # In v1.4, we switched SeedNode.depends_on from DependsOn to MacroDependsOn
49
+ node_content.get("depends_on", {}).pop("nodes", None)
50
+
51
+
52
+ def drop_v9_and_prior_metrics(manifest: dict) -> None:
53
+ manifest["metrics"] = {}
54
+ filtered_disabled_entries = {}
55
+ for entry_name, resource_list in manifest.get("disabled", {}).items():
56
+ filtered_resource_list = []
57
+ for resource in resource_list:
58
+ if resource.get("resource_type") != "metric":
59
+ filtered_resource_list.append(resource)
60
+ filtered_disabled_entries[entry_name] = filtered_resource_list
61
+
62
+ manifest["disabled"] = filtered_disabled_entries
63
+
64
+
65
+ def _convert_dct_with_filter(v10_dct_with_opt_filter):
66
+ """Upgrage the filter object from v10 to v11.
67
+
68
+ v10 filters from a serialized manifest looked like:
69
+ {..., 'filter': {'where_sql_template': '<filter_value>'}}
70
+ whereas v11 filters look like:
71
+ {..., 'filter': {'where_filters': [{'where_sql_template': '<filter_value>'}, ...]}}
72
+ """
73
+ if v10_dct_with_opt_filter is not None and v10_dct_with_opt_filter.get("filter") is not None:
74
+ v10_dct_with_opt_filter["filter"] = {"where_filters": [v10_dct_with_opt_filter["filter"]]}
75
+
76
+
77
+ def _convert_metric(v10_metric_dict):
78
+ """Upgrades a v10 metric object to a v11 metric object.
79
+
80
+ Specifcally the following properties change
81
+ 1. metric.filter
82
+ 2. metric.type_params.measure.filter
83
+ 3. metric.type_params.input_measures[x].filter
84
+ 4. metric.type_params.numerator.filter
85
+ 5. metric.type_params.denominator.filter
86
+ 6. metric.type_params.metrics[x].filter"
87
+ """
88
+
89
+ # handles top level metric filter
90
+ _convert_dct_with_filter(v10_metric_dict)
91
+
92
+ type_params = v10_metric_dict.get("type_params")
93
+ if type_params is not None:
94
+ _convert_dct_with_filter(type_params.get("measure"))
95
+ _convert_dct_with_filter(type_params.get("numerator"))
96
+ _convert_dct_with_filter(type_params.get("denominator"))
97
+
98
+ # handles metric.type_params.input_measures[x].filter
99
+ input_measures = type_params.get("input_measures")
100
+ if input_measures is not None:
101
+ for input_measure in input_measures:
102
+ _convert_dct_with_filter(input_measure)
103
+
104
+ # handles metric.type_params.metrics[x].filter
105
+ metrics = type_params.get("metrics")
106
+ if metrics is not None:
107
+ for metric in metrics:
108
+ _convert_dct_with_filter(metric)
109
+
110
+
111
+ def upgrade_v10_metric_filters(manifest: dict):
112
+ """Handles metric filters changes from v10 to v11."""
113
+
114
+ metrics = manifest.get("metrics", {})
115
+ for metric in metrics.values():
116
+ _convert_metric(metric)
117
+
118
+ disabled_nodes = manifest.get("disabled", {})
119
+ for unique_id, nodes in disabled_nodes.items():
120
+ if unique_id.split(".")[0] == "metric":
121
+ for node in nodes:
122
+ _convert_metric(node)
123
+
124
+
125
+ def upgrade_manifest_json(manifest: dict, manifest_schema_version: int) -> dict:
126
+ # this should remain 9 while the check in `upgrade_schema_version` may change
127
+ if manifest_schema_version <= 9:
128
+ drop_v9_and_prior_metrics(manifest=manifest)
129
+ elif manifest_schema_version == 10:
130
+ upgrade_v10_metric_filters(manifest=manifest)
131
+
132
+ for node_content in manifest.get("nodes", {}).values():
133
+ upgrade_node_content(node_content)
134
+ if node_content["resource_type"] == "seed":
135
+ upgrade_seed_content(node_content)
136
+ for disabled in manifest.get("disabled", {}).values():
137
+ # There can be multiple disabled nodes for the same unique_id
138
+ # so make sure all the nodes get the attr renamed
139
+ for node_content in disabled:
140
+ upgrade_node_content(node_content)
141
+ if node_content["resource_type"] == "seed":
142
+ upgrade_seed_content(node_content)
143
+ # add group key
144
+ if "groups" not in manifest:
145
+ manifest["groups"] = {}
146
+ if "group_map" not in manifest:
147
+ manifest["group_map"] = {}
148
+ # add unit_tests key
149
+ if "unit_tests" not in manifest:
150
+ manifest["unit_tests"] = {}
151
+ for metric_content in manifest.get("metrics", {}).values():
152
+ # handle attr renames + value translation ("expression" -> "derived")
153
+ metric_content = upgrade_ref_content(metric_content)
154
+ if "root_path" in metric_content:
155
+ del metric_content["root_path"]
156
+ for exposure_content in manifest.get("exposures", {}).values():
157
+ exposure_content = upgrade_ref_content(exposure_content)
158
+ if "root_path" in exposure_content:
159
+ del exposure_content["root_path"]
160
+ for source_content in manifest.get("sources", {}).values():
161
+ if "root_path" in source_content:
162
+ del source_content["root_path"]
163
+ for macro_content in manifest.get("macros", {}).values():
164
+ if "root_path" in macro_content:
165
+ del macro_content["root_path"]
166
+ for doc_content in manifest.get("docs", {}).values():
167
+ if "root_path" in doc_content:
168
+ del doc_content["root_path"]
169
+ doc_content["resource_type"] = "doc"
170
+ if "semantic_models" not in manifest:
171
+ manifest["semantic_models"] = {}
172
+ if "saved_queries" not in manifest:
173
+ manifest["saved_queries"] = {}
174
+ return manifest
@@ -0,0 +1,2 @@
1
+ def upgrade_manifest_json_dbt_version(manifest: dict) -> dict:
2
+ return manifest
@@ -0,0 +1,153 @@
1
+ import re
2
+
3
+ HTML_COLORS = [
4
+ "aliceblue",
5
+ "antiquewhite",
6
+ "aqua",
7
+ "aquamarine",
8
+ "azure",
9
+ "beige",
10
+ "bisque",
11
+ "black",
12
+ "blanchedalmond",
13
+ "blue",
14
+ "blueviolet",
15
+ "brown",
16
+ "burlywood",
17
+ "cadetblue",
18
+ "chartreuse",
19
+ "chocolate",
20
+ "coral",
21
+ "cornflowerblue",
22
+ "cornsilk",
23
+ "crimson",
24
+ "cyan",
25
+ "darkblue",
26
+ "darkcyan",
27
+ "darkgoldenrod",
28
+ "darkgray",
29
+ "darkgreen",
30
+ "darkkhaki",
31
+ "darkmagenta",
32
+ "darkolivegreen",
33
+ "darkorange",
34
+ "darkorchid",
35
+ "darkred",
36
+ "darksalmon",
37
+ "darkseagreen",
38
+ "darkslateblue",
39
+ "darkslategray",
40
+ "darkturquoise",
41
+ "darkviolet",
42
+ "deeppink",
43
+ "deepskyblue",
44
+ "dimgray",
45
+ "dodgerblue",
46
+ "firebrick",
47
+ "floralwhite",
48
+ "forestgreen",
49
+ "fuchsia",
50
+ "gainsboro",
51
+ "ghostwhite",
52
+ "gold",
53
+ "goldenrod",
54
+ "gray",
55
+ "green",
56
+ "greenyellow",
57
+ "honeydew",
58
+ "hotpink",
59
+ "indianred",
60
+ "indigo",
61
+ "ivory",
62
+ "khaki",
63
+ "lavender",
64
+ "lavenderblush",
65
+ "lawngreen",
66
+ "lemonchiffon",
67
+ "lightblue",
68
+ "lightcoral",
69
+ "lightcyan",
70
+ "lightgoldenrodyellow",
71
+ "lightgray",
72
+ "lightgreen",
73
+ "lightpink",
74
+ "lightsalmon",
75
+ "lightsalmon",
76
+ "lightseagreen",
77
+ "lightskyblue",
78
+ "lightslategray",
79
+ "lightsteelblue",
80
+ "lightyellow",
81
+ "lime",
82
+ "limegreen",
83
+ "linen",
84
+ "magenta",
85
+ "maroon",
86
+ "mediumaquamarine",
87
+ "mediumblue",
88
+ "mediumorchid",
89
+ "mediumpurple",
90
+ "mediumseagreen",
91
+ "mediumslateblue",
92
+ "mediumslateblue",
93
+ "mediumspringgreen",
94
+ "mediumturquoise",
95
+ "mediumvioletred",
96
+ "midnightblue",
97
+ "mintcream",
98
+ "mistyrose",
99
+ "moccasin",
100
+ "navajowhite",
101
+ "navy",
102
+ "oldlace",
103
+ "olive",
104
+ "olivedrab",
105
+ "orange",
106
+ "orangered",
107
+ "orchid",
108
+ "palegoldenrod",
109
+ "palegreen",
110
+ "paleturquoise",
111
+ "palevioletred",
112
+ "papayawhip",
113
+ "peachpuff",
114
+ "peru",
115
+ "pink",
116
+ "plum",
117
+ "powderblue",
118
+ "purple",
119
+ "rebeccapurple",
120
+ "red",
121
+ "rosybrown",
122
+ "royalblue",
123
+ "saddlebrown",
124
+ "salmon",
125
+ "sandybrown",
126
+ "seagreen",
127
+ "seashell",
128
+ "sienna",
129
+ "silver",
130
+ "skyblue",
131
+ "slateblue",
132
+ "slategray",
133
+ "snow",
134
+ "springgreen",
135
+ "steelblue",
136
+ "tan",
137
+ "teal",
138
+ "thistle",
139
+ "tomato",
140
+ "turquoise",
141
+ "violet",
142
+ "wheat",
143
+ "white",
144
+ "whitesmoke",
145
+ "yellow",
146
+ "yellowgreen",
147
+ ]
148
+
149
+
150
+ def validate_color(color: str) -> bool:
151
+ match_hex = re.search(r"^#(?:[0-9a-f]{3}){1,2}$", color.lower())
152
+ match_html_color_name = color.lower() in HTML_COLORS
153
+ return bool(match_hex or match_html_color_name)
dbt/cli/__init__.py ADDED
@@ -0,0 +1 @@
1
+ from .main import cli as dbt_cli # noqa
dbt/cli/context.py ADDED
@@ -0,0 +1,17 @@
1
+ from typing import Optional
2
+
3
+ import click
4
+
5
+ from dbt.cli.main import cli as dbt
6
+
7
+
8
+ def make_context(args, command=dbt) -> Optional[click.Context]:
9
+ try:
10
+ ctx = command.make_context(command.name, args)
11
+ except click.exceptions.Exit:
12
+ return None
13
+
14
+ ctx.invoked_subcommand = ctx.protected_args[0] if ctx.protected_args else None
15
+ ctx.obj = {}
16
+
17
+ return ctx
dbt/cli/exceptions.py ADDED
@@ -0,0 +1,57 @@
1
+ from typing import IO, List, Optional, Union
2
+
3
+ from click.exceptions import ClickException
4
+
5
+ from dbt.artifacts.schemas.catalog import CatalogArtifact
6
+ from dbt.contracts.graph.manifest import Manifest
7
+ from dbt.contracts.results import RunExecutionResult
8
+ from dbt.utils import ExitCodes
9
+
10
+
11
+ class DbtUsageException(Exception):
12
+ pass
13
+
14
+
15
+ class DbtInternalException(Exception):
16
+ pass
17
+
18
+
19
+ class CliException(ClickException):
20
+ """The base exception class for our implementation of the click CLI.
21
+ The exit_code attribute is used by click to determine which exit code to produce
22
+ after an invocation."""
23
+
24
+ def __init__(self, exit_code: ExitCodes) -> None:
25
+ self.exit_code = exit_code.value
26
+
27
+ # the typing of _file is to satisfy the signature of ClickException.show
28
+ # overriding this method prevents click from printing any exceptions to stdout
29
+ def show(self, _file: Optional[IO] = None) -> None: # type: ignore[type-arg]
30
+ pass
31
+
32
+
33
+ class ResultExit(CliException):
34
+ """This class wraps any exception that contains results while invoking dbt, or the
35
+ results of an invocation that did not succeed but did not throw any exceptions."""
36
+
37
+ def __init__(
38
+ self,
39
+ result: Union[
40
+ bool, # debug
41
+ CatalogArtifact, # docs generate
42
+ List[str], # list/ls
43
+ Manifest, # parse
44
+ None, # clean, deps, init, source
45
+ RunExecutionResult, # build, compile, run, seed, snapshot, test, run-operation
46
+ ] = None,
47
+ ) -> None:
48
+ super().__init__(ExitCodes.ModelError)
49
+ self.result = result
50
+
51
+
52
+ class ExceptionExit(CliException):
53
+ """This class wraps any exception that does not contain results thrown while invoking dbt."""
54
+
55
+ def __init__(self, exception: Exception) -> None:
56
+ super().__init__(ExitCodes.UnhandledError)
57
+ self.exception = exception