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,300 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Download JDBC connectors for DVT Spark integration.
|
|
4
|
+
|
|
5
|
+
This script downloads JDBC drivers from Maven Central and places them in the
|
|
6
|
+
connectors directory for use by DVT's Spark compute engine.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
python download_connectors.py [--all] [--connector=NAME] [--list]
|
|
10
|
+
|
|
11
|
+
Options:
|
|
12
|
+
--all Download all connectors
|
|
13
|
+
--connector=NAME Download specific connector
|
|
14
|
+
--list List all available connectors
|
|
15
|
+
--output-dir=PATH Output directory (default: ./jars)
|
|
16
|
+
--clean Remove existing JARs before downloading
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import argparse
|
|
20
|
+
import hashlib
|
|
21
|
+
import os
|
|
22
|
+
import sys
|
|
23
|
+
import urllib.request
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Dict, List, Optional
|
|
26
|
+
|
|
27
|
+
import yaml
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ConnectorDownloader:
|
|
31
|
+
"""Downloads and manages JDBC connectors."""
|
|
32
|
+
|
|
33
|
+
MAVEN_CENTRAL = "https://repo1.maven.org/maven2"
|
|
34
|
+
|
|
35
|
+
def __init__(self, catalog_path: Path, output_dir: Path):
|
|
36
|
+
"""
|
|
37
|
+
Initialize downloader.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
catalog_path: Path to connector catalog YAML
|
|
41
|
+
output_dir: Directory to save JARs
|
|
42
|
+
"""
|
|
43
|
+
self.catalog_path = catalog_path
|
|
44
|
+
self.output_dir = output_dir
|
|
45
|
+
self.catalog = self._load_catalog()
|
|
46
|
+
|
|
47
|
+
def _load_catalog(self) -> Dict:
|
|
48
|
+
"""Load connector catalog from YAML."""
|
|
49
|
+
with open(self.catalog_path) as f:
|
|
50
|
+
return yaml.safe_load(f)
|
|
51
|
+
|
|
52
|
+
def list_connectors(self) -> None:
|
|
53
|
+
"""List all available connectors."""
|
|
54
|
+
print("\n" + "=" * 70)
|
|
55
|
+
print("DVT JDBC Connector Catalog")
|
|
56
|
+
print("=" * 70)
|
|
57
|
+
print(f"\nVersion: {self.catalog.get('version', 'unknown')}\n")
|
|
58
|
+
|
|
59
|
+
connectors = self.catalog.get("connectors", {})
|
|
60
|
+
print(f"Available connectors: {len(connectors)}\n")
|
|
61
|
+
|
|
62
|
+
for name, info in sorted(connectors.items()):
|
|
63
|
+
print(f" {name:20s} - {info['description']}")
|
|
64
|
+
print(f" {'':20s} Maven: {info['maven_coordinates']}")
|
|
65
|
+
print(f" {'':20s} License: {info['license']}")
|
|
66
|
+
print()
|
|
67
|
+
|
|
68
|
+
def _maven_to_url(self, maven_coords: str) -> str:
|
|
69
|
+
"""
|
|
70
|
+
Convert Maven coordinates to download URL.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
maven_coords: Maven coordinates (group:artifact:version)
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
Download URL
|
|
77
|
+
"""
|
|
78
|
+
parts = maven_coords.split(":")
|
|
79
|
+
if len(parts) != 3:
|
|
80
|
+
raise ValueError(f"Invalid Maven coordinates: {maven_coords}")
|
|
81
|
+
|
|
82
|
+
group, artifact, version = parts
|
|
83
|
+
group_path = group.replace(".", "/")
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
f"{self.MAVEN_CENTRAL}/{group_path}/{artifact}/{version}/"
|
|
87
|
+
f"{artifact}-{version}.jar"
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def download_connector(self, name: str, force: bool = False) -> bool:
|
|
91
|
+
"""
|
|
92
|
+
Download a specific connector.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
name: Connector name
|
|
96
|
+
force: Force re-download if already exists
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
True if successful, False otherwise
|
|
100
|
+
"""
|
|
101
|
+
connectors = self.catalog.get("connectors", {})
|
|
102
|
+
if name not in connectors:
|
|
103
|
+
print(f"Error: Connector '{name}' not found in catalog")
|
|
104
|
+
return False
|
|
105
|
+
|
|
106
|
+
connector = connectors[name]
|
|
107
|
+
maven_coords = connector["maven_coordinates"]
|
|
108
|
+
url = self._maven_to_url(maven_coords)
|
|
109
|
+
|
|
110
|
+
# Extract filename from Maven coordinates
|
|
111
|
+
parts = maven_coords.split(":")
|
|
112
|
+
artifact, version = parts[1], parts[2]
|
|
113
|
+
filename = f"{artifact}-{version}.jar"
|
|
114
|
+
output_path = self.output_dir / filename
|
|
115
|
+
|
|
116
|
+
# Check if already exists
|
|
117
|
+
if output_path.exists() and not force:
|
|
118
|
+
print(f"✓ {name}: Already downloaded ({filename})")
|
|
119
|
+
return True
|
|
120
|
+
|
|
121
|
+
# Download
|
|
122
|
+
print(f"↓ {name}: Downloading from Maven Central...")
|
|
123
|
+
print(f" URL: {url}")
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
# Ensure output directory exists
|
|
127
|
+
self.output_dir.mkdir(parents=True, exist_ok=True)
|
|
128
|
+
|
|
129
|
+
# Download with progress
|
|
130
|
+
def progress_hook(block_num, block_size, total_size):
|
|
131
|
+
if total_size > 0:
|
|
132
|
+
percent = min(100, block_num * block_size * 100 / total_size)
|
|
133
|
+
print(f"\r Progress: {percent:.1f}%", end="", flush=True)
|
|
134
|
+
|
|
135
|
+
urllib.request.urlretrieve(url, output_path, progress_hook)
|
|
136
|
+
print() # New line after progress
|
|
137
|
+
|
|
138
|
+
# Verify download
|
|
139
|
+
if output_path.exists():
|
|
140
|
+
size_mb = output_path.stat().st_size / (1024 * 1024)
|
|
141
|
+
print(f"✓ {name}: Downloaded successfully ({size_mb:.2f} MB)")
|
|
142
|
+
print(f" Saved to: {output_path}")
|
|
143
|
+
return True
|
|
144
|
+
else:
|
|
145
|
+
print(f"✗ {name}: Download failed")
|
|
146
|
+
return False
|
|
147
|
+
|
|
148
|
+
except Exception as e:
|
|
149
|
+
print(f"✗ {name}: Download failed - {str(e)}")
|
|
150
|
+
if output_path.exists():
|
|
151
|
+
output_path.unlink() # Clean up partial download
|
|
152
|
+
return False
|
|
153
|
+
|
|
154
|
+
def download_all(self, force: bool = False) -> Dict[str, bool]:
|
|
155
|
+
"""
|
|
156
|
+
Download all connectors.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
force: Force re-download if already exists
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
Dictionary mapping connector names to success status
|
|
163
|
+
"""
|
|
164
|
+
connectors = self.catalog.get("connectors", {})
|
|
165
|
+
results = {}
|
|
166
|
+
|
|
167
|
+
print(f"\nDownloading {len(connectors)} connectors...\n")
|
|
168
|
+
|
|
169
|
+
for i, name in enumerate(sorted(connectors.keys()), 1):
|
|
170
|
+
print(f"[{i}/{len(connectors)}] ", end="")
|
|
171
|
+
results[name] = self.download_connector(name, force)
|
|
172
|
+
print()
|
|
173
|
+
|
|
174
|
+
return results
|
|
175
|
+
|
|
176
|
+
def clean_jars(self) -> None:
|
|
177
|
+
"""Remove all downloaded JARs."""
|
|
178
|
+
if not self.output_dir.exists():
|
|
179
|
+
print("No JARs directory found")
|
|
180
|
+
return
|
|
181
|
+
|
|
182
|
+
jar_files = list(self.output_dir.glob("*.jar"))
|
|
183
|
+
if not jar_files:
|
|
184
|
+
print("No JARs to clean")
|
|
185
|
+
return
|
|
186
|
+
|
|
187
|
+
print(f"\nRemoving {len(jar_files)} JAR files from {self.output_dir}...")
|
|
188
|
+
for jar in jar_files:
|
|
189
|
+
jar.unlink()
|
|
190
|
+
print(f" Removed: {jar.name}")
|
|
191
|
+
|
|
192
|
+
print("\nCleanup complete")
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def main():
|
|
196
|
+
"""Main entry point."""
|
|
197
|
+
parser = argparse.ArgumentParser(
|
|
198
|
+
description="Download JDBC connectors for DVT",
|
|
199
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
200
|
+
epilog=__doc__,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
parser.add_argument(
|
|
204
|
+
"--all",
|
|
205
|
+
action="store_true",
|
|
206
|
+
help="Download all connectors",
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
parser.add_argument(
|
|
210
|
+
"--connector",
|
|
211
|
+
type=str,
|
|
212
|
+
help="Download specific connector by name",
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
parser.add_argument(
|
|
216
|
+
"--list",
|
|
217
|
+
action="store_true",
|
|
218
|
+
help="List all available connectors",
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
parser.add_argument(
|
|
222
|
+
"--output-dir",
|
|
223
|
+
type=Path,
|
|
224
|
+
default=Path("jars"),
|
|
225
|
+
help="Output directory for JARs (default: ./jars)",
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
parser.add_argument(
|
|
229
|
+
"--clean",
|
|
230
|
+
action="store_true",
|
|
231
|
+
help="Remove existing JARs before downloading",
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
parser.add_argument(
|
|
235
|
+
"--force",
|
|
236
|
+
action="store_true",
|
|
237
|
+
help="Force re-download even if JAR exists",
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
args = parser.parse_args()
|
|
241
|
+
|
|
242
|
+
# Find catalog file
|
|
243
|
+
script_dir = Path(__file__).parent
|
|
244
|
+
catalog_path = script_dir / "catalog.yml"
|
|
245
|
+
|
|
246
|
+
if not catalog_path.exists():
|
|
247
|
+
print(f"Error: Catalog file not found: {catalog_path}")
|
|
248
|
+
sys.exit(1)
|
|
249
|
+
|
|
250
|
+
# Initialize downloader
|
|
251
|
+
downloader = ConnectorDownloader(catalog_path, args.output_dir)
|
|
252
|
+
|
|
253
|
+
# Execute command
|
|
254
|
+
if args.list:
|
|
255
|
+
downloader.list_connectors()
|
|
256
|
+
|
|
257
|
+
elif args.clean:
|
|
258
|
+
downloader.clean_jars()
|
|
259
|
+
|
|
260
|
+
elif args.all:
|
|
261
|
+
if args.clean:
|
|
262
|
+
downloader.clean_jars()
|
|
263
|
+
print()
|
|
264
|
+
|
|
265
|
+
results = downloader.download_all(args.force)
|
|
266
|
+
|
|
267
|
+
# Summary
|
|
268
|
+
success_count = sum(1 for v in results.values() if v)
|
|
269
|
+
fail_count = len(results) - success_count
|
|
270
|
+
|
|
271
|
+
print("=" * 70)
|
|
272
|
+
print("Download Summary")
|
|
273
|
+
print("=" * 70)
|
|
274
|
+
print(f"Total connectors: {len(results)}")
|
|
275
|
+
print(f"Successful: {success_count}")
|
|
276
|
+
print(f"Failed: {fail_count}")
|
|
277
|
+
|
|
278
|
+
if fail_count > 0:
|
|
279
|
+
print("\nFailed connectors:")
|
|
280
|
+
for name, success in results.items():
|
|
281
|
+
if not success:
|
|
282
|
+
print(f" - {name}")
|
|
283
|
+
|
|
284
|
+
sys.exit(0 if fail_count == 0 else 1)
|
|
285
|
+
|
|
286
|
+
elif args.connector:
|
|
287
|
+
if args.clean:
|
|
288
|
+
downloader.clean_jars()
|
|
289
|
+
print()
|
|
290
|
+
|
|
291
|
+
success = downloader.download_connector(args.connector, args.force)
|
|
292
|
+
sys.exit(0 if success else 1)
|
|
293
|
+
|
|
294
|
+
else:
|
|
295
|
+
parser.print_help()
|
|
296
|
+
sys.exit(1)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
if __name__ == "__main__":
|
|
300
|
+
main()
|
dvt/constants.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from dbt_semantic_interfaces.type_enums import TimeGranularity
|
|
2
|
+
|
|
3
|
+
DEFAULT_ENV_PLACEHOLDER = "DBT_DEFAULT_PLACEHOLDER"
|
|
4
|
+
|
|
5
|
+
SECRET_PLACEHOLDER = "$$$DBT_SECRET_START$$${}$$$DBT_SECRET_END$$$"
|
|
6
|
+
|
|
7
|
+
MAXIMUM_SEED_SIZE = 1 * 1024 * 1024
|
|
8
|
+
MAXIMUM_SEED_SIZE_NAME = "1MB"
|
|
9
|
+
|
|
10
|
+
PIN_PACKAGE_URL = (
|
|
11
|
+
"https://docs.getdbt.com/docs/package-management#section-specifying-package-versions"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
DVT_PROJECT_FILE_NAME = "dvt_project.yml"
|
|
15
|
+
DBT_PROJECT_FILE_NAME = "dbt_project.yml" # Deprecated, use DVT_PROJECT_FILE_NAME
|
|
16
|
+
PACKAGES_FILE_NAME = "packages.yml"
|
|
17
|
+
DEPENDENCIES_FILE_NAME = "dependencies.yml"
|
|
18
|
+
PACKAGE_LOCK_FILE_NAME = "package-lock.yml"
|
|
19
|
+
MANIFEST_FILE_NAME = "manifest.json"
|
|
20
|
+
SEMANTIC_MANIFEST_FILE_NAME = "semantic_manifest.json"
|
|
21
|
+
LEGACY_TIME_SPINE_MODEL_NAME = "metricflow_time_spine"
|
|
22
|
+
LEGACY_TIME_SPINE_GRANULARITY = TimeGranularity.DAY
|
|
23
|
+
MINIMUM_REQUIRED_TIME_SPINE_GRANULARITY = TimeGranularity.DAY
|
|
24
|
+
PARTIAL_PARSE_FILE_NAME = "partial_parse.msgpack"
|
|
25
|
+
PACKAGE_LOCK_HASH_KEY = "sha1_hash"
|
|
26
|
+
CATALOGS_FILE_NAME = "catalogs.yml"
|
|
27
|
+
RUN_RESULTS_FILE_NAME = "run_results.json"
|
|
28
|
+
CATALOG_FILENAME = "catalog.json"
|
|
29
|
+
SOURCE_RESULT_FILE_NAME = "sources.json"
|
dvt/context/__init__.py
ADDED
|
File without changes
|