1
1
import json
2
2
import os
3
3
import time
4
+ import webbrowser
4
5
import rich
6
+ from rich .prompt import Confirm
5
7
6
8
from collections import defaultdict
7
9
from dataclasses import dataclass
@@ -220,16 +222,24 @@ def _local_diff(diff_vars: DiffVars) -> None:
220
222
221
223
222
224
def _cloud_diff (diff_vars : DiffVars ) -> None :
225
+ datafold_host = os .environ .get ("DATAFOLD_HOST" , "https://app.datafold.com" ).rstrip ("/" )
223
226
api_key = os .environ .get ("DATAFOLD_API_KEY" )
227
+ rich .print (f"Cloud datafold host: { datafold_host } " )
228
+ if not api_key :
229
+ rich .print ("[red]API key not found, add it as an environment variable called DATAFOLD_API_KEY." )
230
+ yes_or_no = Confirm .ask ("Would you like to generate a new API key?" )
231
+ if yes_or_no :
232
+ webbrowser .open (f"{ datafold_host } /login?next={ datafold_host } /users/me" )
233
+ return
234
+ else :
235
+ raise ValueError ('Cannot diff because the API key is not provided' )
224
236
225
237
if diff_vars .datasource_id is None :
226
238
raise ValueError (
227
239
"Datasource ID not found, include it as a dbt variable in the dbt_project.yml. \n vars:\n data_diff:\n datasource_id: 1234"
228
240
)
229
- if api_key is None :
230
- raise ValueError ("API key not found, add it as an environment variable called DATAFOLD_API_KEY." )
231
241
232
- url = "https://app.datafold.com /api/v1/datadiffs"
242
+ url = f" { datafold_host } /api/v1/datadiffs"
233
243
234
244
payload = {
235
245
"data_source1_id" : diff_vars .datasource_id ,
@@ -256,7 +266,7 @@ def _cloud_diff(diff_vars: DiffVars) -> None:
256
266
data = response .json ()
257
267
diff_id = data ["id" ]
258
268
# TODO in future we should support self hosted datafold
259
- diff_url = f"https://app.datafold.com /datadiffs/{ diff_id } /overview"
269
+ diff_url = f"{ datafold_host } /datadiffs/{ diff_id } /overview"
260
270
rich .print (
261
271
"[red]"
262
272
+ "." .join (diff_vars .prod_path )
0 commit comments