11import json
22import os
33import time
4+ import webbrowser
45import rich
6+ from rich .prompt import Confirm
57
68from collections import defaultdict
79from dataclasses import dataclass
@@ -220,16 +222,24 @@ def _local_diff(diff_vars: DiffVars) -> None:
220222
221223
222224def _cloud_diff (diff_vars : DiffVars ) -> None :
225+ datafold_host = os .environ .get ("DATAFOLD_HOST" , "https://app.datafold.com" ).rstrip ("/" )
223226 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' )
224236
225237 if diff_vars .datasource_id is None :
226238 raise ValueError (
227239 "Datasource ID not found, include it as a dbt variable in the dbt_project.yml. \n vars:\n data_diff:\n datasource_id: 1234"
228240 )
229- if api_key is None :
230- raise ValueError ("API key not found, add it as an environment variable called DATAFOLD_API_KEY." )
231241
232- url = "https://app.datafold.com /api/v1/datadiffs"
242+ url = f" { datafold_host } /api/v1/datadiffs"
233243
234244 payload = {
235245 "data_source1_id" : diff_vars .datasource_id ,
@@ -256,7 +266,7 @@ def _cloud_diff(diff_vars: DiffVars) -> None:
256266 data = response .json ()
257267 diff_id = data ["id" ]
258268 # 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"
260270 rich .print (
261271 "[red]"
262272 + "." .join (diff_vars .prod_path )
0 commit comments