|
2 | 2 | import os
|
3 | 3 | import re
|
4 | 4 | import time
|
5 |
| -import webbrowser |
6 | 5 | from typing import List, Optional, Dict, Tuple, Union
|
7 | 6 | import keyring
|
8 | 7 | import pydantic
|
9 | 8 | import rich
|
10 |
| -from rich.prompt import Confirm, Prompt |
| 9 | +from rich.prompt import Prompt |
11 | 10 |
|
12 |
| -from data_diff.errors import DataDiffCustomSchemaNoConfigError, DataDiffDbtProjectVarsNotFoundError |
| 11 | +from data_diff.errors import ( |
| 12 | + DataDiffCustomSchemaNoConfigError, |
| 13 | + DataDiffDbtProjectVarsNotFoundError, |
| 14 | + DataDiffNoAPIKeyError, |
| 15 | + DataDiffNoDatasourceIdError, |
| 16 | +) |
13 | 17 |
|
14 | 18 | from . import connect_to_table, diff_tables, Algorithm
|
15 |
| -from .cloud import DatafoldAPI, TCloudApiDataDiff, TCloudApiOrgMeta, get_or_create_data_source |
16 |
| -from .dbt_parser import DbtParser, PROJECT_FILE, TDatadiffConfig |
| 19 | +from .cloud import DatafoldAPI, TCloudApiDataDiff, TCloudApiOrgMeta |
| 20 | +from .dbt_parser import DbtParser, TDatadiffConfig |
17 | 21 | from .diff_tables import DiffResultWrapper
|
18 | 22 | from .format import jsonify, jsonify_error
|
19 | 23 | from .tracking import (
|
|
41 | 45 | )
|
42 | 46 |
|
43 | 47 | logger = getLogger(__name__)
|
| 48 | +CLOUD_DOC_URL = "https://docs.datafold.com/development_testing/cloud" |
44 | 49 |
|
45 | 50 |
|
46 | 51 | class TDiffVars(pydantic.BaseModel):
|
@@ -86,20 +91,9 @@ def dbt_diff(
|
86 | 91 |
|
87 | 92 | if config.datasource_id is None:
|
88 | 93 | rich.print("[red]Data source ID not found in dbt_project.yml")
|
89 |
| - is_create_data_source = Confirm.ask("Would you like to create a new data source?") |
90 |
| - if is_create_data_source: |
91 |
| - config.datasource_id = get_or_create_data_source(api=api, dbt_parser=dbt_parser) |
92 |
| - rich.print(f'To use the data source in next runs, please, update your "{PROJECT_FILE}" with a block:') |
93 |
| - rich.print(f"[green]vars:\n data_diff:\n datasource_id: {config.datasource_id}\n") |
94 |
| - rich.print( |
95 |
| - "Read more about Datafold vars in docs: " |
96 |
| - "https://docs.datafold.com/os_diff/dbt_integration/#configure-a-data-source\n" |
97 |
| - ) |
98 |
| - else: |
99 |
| - raise ValueError( |
100 |
| - "Datasource ID not found, include it as a dbt variable in the dbt_project.yml. " |
101 |
| - "\nvars:\n data_diff:\n datasource_id: 1234" |
102 |
| - ) |
| 94 | + raise DataDiffNoDatasourceIdError( |
| 95 | + f"Datasource ID not found. Please include it as a dbt variable in the dbt_project.yml. \nInstructions: {CLOUD_DOC_URL}\n\nvars:\n data_diff:\n datasource_id: 1234" |
| 96 | + ) |
103 | 97 |
|
104 | 98 | data_source = api.get_data_source(config.datasource_id)
|
105 | 99 | dbt_parser.set_casing_policy_for(connection_type=data_source.type)
|
@@ -339,16 +333,9 @@ def _initialize_api() -> Optional[DatafoldAPI]:
|
339 | 333 | rich.print("[red]API key not found. Getting from the keyring service")
|
340 | 334 | api_key = keyring.get_password("data-diff", "DATAFOLD_API_KEY")
|
341 | 335 | if not api_key:
|
342 |
| - rich.print("[red]API key not found, add it as an environment variable called DATAFOLD_API_KEY.") |
343 |
| - |
344 |
| - yes_or_no = Confirm.ask("Would you like to generate a new API key?") |
345 |
| - if yes_or_no: |
346 |
| - webbrowser.open(f"{datafold_host}/login?next={datafold_host}/users/me") |
347 |
| - rich.print('After generating, please, perform in the terminal "export DATAFOLD_API_KEY=<key>"') |
348 |
| - return None |
349 |
| - else: |
350 |
| - raise ValueError("Cannot initialize API because the API key is not provided") |
351 |
| - |
| 336 | + raise DataDiffNoAPIKeyError( |
| 337 | + f"API key not found. Please follow the steps at {CLOUD_DOC_URL} to use the --cloud flag." |
| 338 | + ) |
352 | 339 | rich.print("Saving the API key to the system keyring service")
|
353 | 340 | try:
|
354 | 341 | keyring.set_password("data-diff", "DATAFOLD_API_KEY", api_key)
|
|
0 commit comments