Skip to content

Commit 65c4375

Browse files
committed
Fix agreement_level in 1 table merges
1 parent 71c2586 commit 65c4375

2 files changed

Lines changed: 32 additions & 6 deletions

File tree

src/tablemerge/merge.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ def normalize_value(value: str | list[ValueWithAgreement]) -> str:
3434
return value
3535

3636

37-
def normalize_row(row: Row) -> Row:
37+
def normalize_row(row: Row, with_row_agreement: bool = False) -> Row:
3838
return Row(
3939
**{
4040
column: normalize_value(value)
4141
for column, value in row.get_columns().items()
4242
},
43-
agreement_level_=row.agreement_level_,
43+
agreement_level_=(
44+
row.get_agreement_level() if with_row_agreement else row.agreement_level_
45+
),
4446
)
4547

4648

@@ -167,7 +169,12 @@ class TableFragmentBuilder:
167169
with_row_agreement: bool
168170

169171
def __init__(self, initial_fragment: TableFragment, with_row_agreement: bool):
170-
self.rows = list(map(normalize_row, initial_fragment.rows))
172+
self.rows = list(
173+
map(
174+
lambda row: normalize_row(row, with_row_agreement),
175+
initial_fragment.rows,
176+
)
177+
)
171178
self.page = initial_fragment.page
172179
self.with_row_agreement = with_row_agreement
173180

@@ -177,9 +184,7 @@ def next_left_rows(self):
177184
return list(rows)
178185

179186
def _append(self, row: Row):
180-
new = normalize_row(row)
181-
if self.with_row_agreement:
182-
new.agreement_level_ = new.get_agreement_level()
187+
new = normalize_row(row, self.with_row_agreement)
183188
self.rows.append(new)
184189

185190
def append_skipped(self, rows: list[Row]):

tests/test_merge.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ def test_single_table_returns_normalized():
3333
]
3434

3535

36+
def test_single_table_with_row_agreement():
37+
table = [Row(family=" Apiaceae ", scientific_name="Ammi majus L.")]
38+
39+
result = merge_tablesfiles([wrap(table)], with_row_agreement=True)
40+
assert len(result.tables) == 1
41+
assert result.tables[0].table_fragments[0].rows == [
42+
Row(family="apiaceae", scientific_name="ammi majus l.", agreement_level_=1)
43+
]
44+
45+
3646
def test_two_identical_tables():
3747
table = [Row(family="Apiaceae", scientific_name="Ammi majus L.")]
3848

@@ -43,6 +53,16 @@ def test_two_identical_tables():
4353
]
4454

4555

56+
def test_two_identical_tables_with_row_agreement():
57+
table = [Row(family="Apiaceae", scientific_name="Ammi majus L.")]
58+
59+
result = merge_tablesfiles([wrap(table), wrap(table)], with_row_agreement=True)
60+
assert len(result.tables) == 1
61+
assert result.tables[0].table_fragments[0].rows == [
62+
Row(family="apiaceae", scientific_name="ammi majus l.", agreement_level_=2)
63+
]
64+
65+
4666
def test_two_tables_with_non_normalized_columns():
4767
table_1 = [Row(family=" Apiaceae ", scientific_name=" Ammi majus L. ")]
4868
table_2 = [Row(family="apiaceae", scientific_name="ammi majus l.")]
@@ -85,6 +105,7 @@ def test_two_tablesfiles_with_different_pages():
85105
Row(family="rosaceae", scientific_name="rosa canina l."),
86106
]
87107

108+
88109
def test_two_tables_with_mixed_values():
89110
table_1 = [Row(family="Apiaceae", scientific_name="Ammi majus L.")]
90111
table_2 = [

0 commit comments

Comments
 (0)