Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit 1094999

Browse files
authored
Merge pull request #636 from datafold/fix-parsing-column-names-for-json
fix crashing when parsing column names including _a, _b
2 parents 39a1629 + 9baf256 commit 1094999

File tree

2 files changed

+62
-5
lines changed

2 files changed

+62
-5
lines changed

data_diff/format.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -213,16 +213,16 @@ def _jsonify_diff(row: Dict[str, Any], key_columns: List[str]) -> Dict[str, Json
213213
continue
214214

215215
if field.startswith("is_diff_"):
216-
column_name = field.replace("is_diff_", "")
216+
column_name = field[len("is_diff_") :]
217217
columns[column_name]["isDiff"] = bool(value)
218218

219219
elif field.endswith("_a"):
220-
column_name = field.replace("_a", "")
220+
column_name = field[: -len("_a")]
221221
columns[column_name]["dataset1"] = value
222222
columns[column_name]["isPK"] = column_name in key_columns
223223

224224
elif field.endswith("_b"):
225-
column_name = field.replace("_b", "")
225+
column_name = field[: -len("_b")]
226226
columns[column_name]["dataset2"] = value
227227
columns[column_name]["isPK"] = column_name in key_columns
228228

@@ -237,11 +237,11 @@ def _jsonify_exclusive(row: Dict[str, Any], key_columns: List[str]) -> Dict[str,
237237
if field.startswith("is_diff_"):
238238
continue
239239
if field.endswith("_b") and row["is_exclusive_b"]:
240-
column_name = field.replace("_b", "")
240+
column_name = field[: -len("_b")]
241241
columns[column_name]["isPK"] = column_name in key_columns
242242
columns[column_name]["value"] = value
243243
elif field.endswith("_a") and row["is_exclusive_a"]:
244-
column_name = field.replace("_a", "")
244+
column_name = field[: -len("_a")]
245245
columns[column_name]["isPK"] = column_name in key_columns
246246
columns[column_name]["value"] = value
247247
return {column: JsonExclusiveRowValue(**data) for column, data in columns.items()}

tests/test_format.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,60 @@ def test_jsonify_diff_no_difeference(self):
104104
"columns": None,
105105
},
106106
)
107+
108+
def test_jsonify_column_suffix_fix(self):
109+
diff = DiffResultWrapper(
110+
info_tree=InfoTree(
111+
info=SegmentInfo(
112+
tables=[
113+
TableSegment(table_path=("db", "schema", "table1"), key_columns=("id_a",), database=Database()),
114+
TableSegment(table_path=("db", "schema", "table2"), key_columns=("id_a",), database=Database()),
115+
],
116+
diff_schema=(
117+
("is_exclusive_a", bool),
118+
("is_exclusive_b", bool),
119+
("is_diff_id_a", int),
120+
("is_diff_value_b", int),
121+
("id_a_a", str),
122+
("id_a_b", str),
123+
("value_b_a", str),
124+
("value_b_b", str),
125+
),
126+
diff=[
127+
(False, False, 0, 1, "1", "1", "3", "201"),
128+
(True, False, 1, 1, "2", None, "4", None),
129+
(False, True, 1, 1, None, "3", None, "202"),
130+
],
131+
)
132+
),
133+
diff=[],
134+
stats={},
135+
)
136+
json_diff = jsonify(diff, dbt_model="my_model")
137+
self.assertEqual(
138+
json_diff,
139+
{
140+
"version": "1.0.0",
141+
"status": "success",
142+
"result": "different",
143+
"model": "my_model",
144+
"dataset1": ["db", "schema", "table1"],
145+
"dataset2": ["db", "schema", "table2"],
146+
"rows": {
147+
"exclusive": {
148+
"dataset1": [{"id_a": {"isPK": True, "value": "2"}, "value_b": {"isPK": False, "value": "4"}}],
149+
"dataset2": [
150+
{"id_a": {"isPK": True, "value": "3"}, "value_b": {"isPK": False, "value": "202"}}
151+
],
152+
},
153+
"diff": [
154+
{
155+
"id_a": {"isPK": True, "dataset1": "1", "dataset2": "1", "isDiff": False},
156+
"value_b": {"isPK": False, "dataset1": "3", "dataset2": "201", "isDiff": True},
157+
},
158+
],
159+
},
160+
"summary": None,
161+
"columns": None,
162+
},
163+
)

0 commit comments

Comments
 (0)