1+ import json
12import time
23from typing import List , Optional , Union , overload
34
@@ -111,6 +112,29 @@ def _cast_value(value: str, type_: str) -> Union[bool, int, str]:
111112 return value
112113
113114
115+ def _get_data_from_bigquery_json (path : str ):
116+ with open (path , 'r' ) as file :
117+ return json .load (file )
118+
119+
120+ def _align_dbt_cred_params_with_datafold_params (dbt_creds : dict ) -> dict :
121+ db_type = dbt_creds ['type' ]
122+ if db_type == 'bigquery' :
123+ method = dbt_creds ['method' ]
124+ if method == 'service-account' :
125+ data = _get_data_from_bigquery_json (path = dbt_creds ['keyfile' ])
126+ dbt_creds ['jsonKeyFile' ] = json .dumps (data )
127+ elif method == 'service-account-json' :
128+ dbt_creds ['jsonKeyFile' ] = json .dumps (dbt_creds ['keyfile_json' ])
129+ dbt_creds ['projectId' ] = dbt_creds ['project' ]
130+ elif db_type == 'snowflake' :
131+ dbt_creds ['default_db' ] = dbt_creds ['database' ]
132+ elif db_type == 'databricks' :
133+ dbt_creds ['http_password' ] = dbt_creds ['token' ]
134+ dbt_creds ['database' ] = dbt_creds .get ('catalog' )
135+ return dbt_creds
136+
137+
114138def _parse_ds_credentials (
115139 ds_config : TCloudApiDataSourceConfigSchema , only_basic_settings : bool = True , dbt_parser : Optional [DbtParser ] = None
116140):
@@ -120,6 +144,7 @@ def _parse_ds_credentials(
120144 use_dbt_data = Confirm .ask ("Would you like to extract database credentials from dbt profiles.yml?" )
121145 try :
122146 creds = dbt_parser .get_connection_creds ()[0 ]
147+ creds = _align_dbt_cred_params_with_datafold_params (dbt_creds = creds )
123148 except Exception as e :
124149 rich .print (f"[red]Cannot parse database credentials from dbt profiles.yml. Reason: { e } " )
125150
0 commit comments