66
77from dataclasses import dataclass
88from typing import List , Optional , Dict
9- from .utils import dbt_diff_string_template , getLogger
9+ from .utils import (
10+ dbt_diff_string_template ,
11+ getLogger ,
12+ columns_added_template ,
13+ columns_removed_template ,
14+ no_differences_template ,
15+ )
1016from pathlib import Path
1117
1218import keyring
@@ -182,7 +188,6 @@ def _get_diff_vars(
182188
183189
184190def _local_diff (diff_vars : DiffVars ) -> None :
185- column_diffs_str = ""
186191 dev_qualified_str = "." .join (diff_vars .dev_path )
187192 prod_qualified_str = "." .join (diff_vars .prod_path )
188193 diff_output_str = _diff_output_base (dev_qualified_str , prod_qualified_str )
@@ -203,14 +208,14 @@ def _local_diff(diff_vars: DiffVars) -> None:
203208 return
204209
205210 mutual_set = set (table1_columns ) & set (table2_columns )
206- table1_set_diff = list (set (table1_columns ) - set (table2_columns ))
207- table2_set_diff = list (set (table2_columns ) - set (table1_columns ))
211+ columns_added = list (set (table1_columns ) - set (table2_columns ))
212+ columns_removed = list (set (table2_columns ) - set (table1_columns ))
208213
209- if table1_set_diff :
210- column_diffs_str += "Column(s) added: " + str ( table1_set_diff ) + " \n "
214+ if columns_added :
215+ diff_output_str += columns_added_template ( columns_added )
211216
212- if table2_set_diff :
213- column_diffs_str += "Column(s) removed: " + str ( table2_set_diff ) + " \n "
217+ if columns_removed :
218+ diff_output_str += columns_removed_template ( columns_removed )
214219
215220 mutual_set = mutual_set - set (diff_vars .primary_keys )
216221 extra_columns = tuple (mutual_set )
@@ -225,10 +230,10 @@ def _local_diff(diff_vars: DiffVars) -> None:
225230 )
226231
227232 if list (diff ):
228- diff_output_str += f"{ column_diffs_str } { diff .get_stats_string (is_dbt = True )} \n "
233+ diff_output_str += f"{ diff .get_stats_string (is_dbt = True )} \n "
229234 rich .print (diff_output_str )
230235 else :
231- diff_output_str += f" { column_diffs_str } [bold][green]No row differences[/][/] \n "
236+ diff_output_str += no_differences_template ()
232237 rich .print (diff_output_str )
233238
234239
@@ -302,6 +307,18 @@ def _cloud_diff(diff_vars: DiffVars, datasource_id: int, api: DatafoldAPI) -> No
302307 diff_percent_list = {
303308 x .column_name : str (x .match ) + "%" for x in diff_results .values .columns_diff_stats if x .match != 100.0
304309 }
310+ columns_added = diff_results .schema_ .exclusive_columns [1 ]
311+ columns_removed = diff_results .schema_ .exclusive_columns [0 ]
312+ column_type_changes = diff_results .schema_ .column_type_differs
313+
314+ if columns_added :
315+ diff_output_str += columns_added_template (columns_added )
316+
317+ if columns_removed :
318+ diff_output_str += columns_removed_template (columns_removed )
319+
320+ if column_type_changes :
321+ diff_output_str += "Type change: " + str (column_type_changes ) + "\n "
305322
306323 if any ([rows_added_count , rows_removed_count , rows_updated ]):
307324 diff_output = dbt_diff_string_template (
@@ -312,10 +329,10 @@ def _cloud_diff(diff_vars: DiffVars, datasource_id: int, api: DatafoldAPI) -> No
312329 diff_percent_list ,
313330 "Value Match Percent:" ,
314331 )
315- diff_output_str += f"{ diff_url } \n { diff_output } \n "
332+ diff_output_str += f"\n { diff_url } \n { diff_output } \n "
316333 rich .print (diff_output_str )
317334 else :
318- diff_output_str += f"{ diff_url } \n [green]No row differences[/] \n "
335+ diff_output_str += f"\n { diff_url } \n { no_differences_template () } \n "
319336 rich .print (diff_output_str )
320337
321338 except BaseException as ex : # Catch KeyboardInterrupt too
0 commit comments