|
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