From 804f6e7883007e1d6540dfeda3c92aedb1152c0e Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Tue, 10 Jun 2025 08:29:11 +0200 Subject: [PATCH] =?UTF-8?q?Filtres=20des=20champs=20num=C3=A9riques=20clos?= =?UTF-8?q?e=20#17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/home.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pages/home.py b/src/pages/home.py index e3b9f2e..95dcdfd 100644 --- a/src/pages/home.py +++ b/src/pages/home.py @@ -33,6 +33,7 @@ except ComputeError: sleep(seconds=10) df: pl.DataFrame = pl.read_parquet(os.getenv("DATA_FILE_PARQUET_PATH")) +schema = df.schema lf: pl.LazyFrame = df.lazy() # Suppression des colonnes inutiles @@ -133,13 +134,13 @@ layout = [ ) def update_table(page_current, page_size, filter_query, data_timestamp): print(" + + + + + + + + + + + + + + + + + + ") - print("Filter query:", filter_query) # 1. Apply Filters lff: pl.LazyFrame = lf # start from the original data if filter_query: filtering_expressions = filter_query.split(" && ") for filter_part in filtering_expressions: col_name, operator, filter_value = split_filter_part(filter_part) + col_type = str(schema[col_name]) print("filter_value:", filter_value) print("filter_value_type:", type(filter_value)) @@ -153,10 +154,18 @@ def update_table(page_current, page_size, filter_query, data_timestamp): lff = lff.filter(pl.col(col_name) >= filter_value) elif operator == "<=": lff = lff.filter(pl.col(col_name) <= filter_value) - # these operators match polars series filter operators - elif operator == "contains": + elif col_type.startswith("Int") or col_type.startswith("Float"): + try: + filter_value = int(filter_value) + except ValueError: + logger.error(f"Invalid numeric filter value: {filter_value}") + continue + lff = lff.filter(pl.col(col_name) == filter_value) + + elif operator == "contains" and col_type == "String": lff = lff.filter(pl.col(col_name).str.contains("(?i)" + filter_value)) + # elif operator == 'datestartswith': # lff = lff.filter(pl.col(col_name).str.startswith(filter_value)")