feat(table): ajouter postprocess_page pour post-traiter une page seule
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -410,6 +410,22 @@ def table_postprocess(lff) -> pl.DataFrame:
|
||||
return dff
|
||||
|
||||
|
||||
def postprocess_page(dff: pl.DataFrame) -> pl.DataFrame:
|
||||
"""Post-traitement à appliquer sur une page déjà paginée.
|
||||
|
||||
Équivalent à table_postprocess mais prend une DataFrame (pas un LazyFrame)
|
||||
et ne matérialise rien de plus. À appeler après que la pagination ait été
|
||||
poussée en SQL.
|
||||
"""
|
||||
dff = dff.with_columns(pl.all().cast(pl.String).fill_null(""))
|
||||
dff = add_links(dff)
|
||||
if "sourceFile" in dff.columns:
|
||||
dff = add_resource_link(dff)
|
||||
if dff.height > 0:
|
||||
dff = format_values(dff)
|
||||
return dff
|
||||
|
||||
|
||||
def prepare_table_data(
|
||||
data, data_timestamp, filter_query, page_current, page_size, sort_by, source_table
|
||||
):
|
||||
|
||||
@@ -303,3 +303,19 @@ def test_prepare_table_data_with_external_data_does_not_use_cache(
|
||||
)
|
||||
|
||||
assert sentinel["called"] is False
|
||||
|
||||
|
||||
def test_postprocess_page_produces_same_result_as_full_then_slice(
|
||||
flask_app, sample_lff
|
||||
):
|
||||
"""Post-traiter 20 lignes doit donner le même résultat que post-traiter
|
||||
l'ensemble puis slicer."""
|
||||
from src.utils import table
|
||||
|
||||
full = sample_lff.collect()
|
||||
with flask_app.app_context():
|
||||
via_full = table.table_postprocess(full.lazy()).slice(0, 1)
|
||||
via_page = table.postprocess_page(full.slice(0, 1))
|
||||
assert via_full.columns == via_page.columns
|
||||
for col in via_full.columns:
|
||||
assert via_full[col].to_list() == via_page[col].to_list()
|
||||
|
||||
Reference in New Issue
Block a user