Merge branch 'main' into dev
This commit is contained in:
@@ -206,7 +206,8 @@ def dashboard_filters_to_sql(
|
|||||||
def tokenize_text_filter(column: str, text: str) -> tuple[str, list]:
|
def tokenize_text_filter(column: str, text: str) -> tuple[str, list]:
|
||||||
terms = text.split()
|
terms = text.split()
|
||||||
|
|
||||||
conditions = []
|
conditions = [f'"{column}" IS NOT NULL', f"\"{column}\" <> ''"]
|
||||||
|
|
||||||
params = []
|
params = []
|
||||||
|
|
||||||
for term in terms:
|
for term in terms:
|
||||||
@@ -214,7 +215,7 @@ def tokenize_text_filter(column: str, text: str) -> tuple[str, list]:
|
|||||||
|
|
||||||
if term.startswith("*") or term.endswith("*"):
|
if term.startswith("*") or term.endswith("*"):
|
||||||
params.append(term.replace("*", "%"))
|
params.append(term.replace("*", "%"))
|
||||||
if "+" in term:
|
elif "+" in term:
|
||||||
params.append(f"%{term.replace('+', ' ')}%")
|
params.append(f"%{term.replace('+', ' ')}%")
|
||||||
else:
|
else:
|
||||||
params.append(f"%{term}%")
|
params.append(f"%{term}%")
|
||||||
|
|||||||
@@ -77,7 +77,10 @@ def test_marche_objet_uses_case_insensitive_ilike():
|
|||||||
dashboard_year="2025",
|
dashboard_year="2025",
|
||||||
dashboard_marche_objet="travaux",
|
dashboard_marche_objet="travaux",
|
||||||
)
|
)
|
||||||
assert where_sql == 'YEAR("dateNotification") = ? AND "objet" ILIKE ?'
|
assert (
|
||||||
|
where_sql
|
||||||
|
== 'YEAR("dateNotification") = ? AND "objet" IS NOT NULL AND "objet" <> \'\' AND "objet" ILIKE ?'
|
||||||
|
)
|
||||||
assert params == [2025, "%travaux%"]
|
assert params == [2025, "%travaux%"]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -106,16 +106,6 @@ def test_unknown_column_is_skipped():
|
|||||||
assert params == []
|
assert params == []
|
||||||
|
|
||||||
|
|
||||||
def test_escapes_identifier_with_quotes_not_concatenation():
|
|
||||||
from src.utils.table_sql import filter_query_to_sql
|
|
||||||
|
|
||||||
where, params = filter_query_to_sql(
|
|
||||||
"{objet} icontains '; DROP TABLE decp; --", SCHEMA
|
|
||||||
)
|
|
||||||
assert "DROP TABLE" not in where
|
|
||||||
assert any("DROP TABLE" in str(p) for p in params)
|
|
||||||
|
|
||||||
|
|
||||||
def test_sort_by_empty():
|
def test_sort_by_empty():
|
||||||
from src.utils.table_sql import sort_by_to_sql
|
from src.utils.table_sql import sort_by_to_sql
|
||||||
|
|
||||||
|
|||||||
@@ -760,7 +760,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "decp-info"
|
name = "decp-info"
|
||||||
version = "2.7.4"
|
version = "2.7.5"
|
||||||
source = { virtual = "." }
|
source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "dash", extra = ["compress"] },
|
{ name = "dash", extra = ["compress"] },
|
||||||
|
|||||||
Reference in New Issue
Block a user