feat(api): renomme le param réservé count en count_results (#78)
- Renomme RESERVED_PARAMS dans src/api/filters.py - Fait passer le paramètre de 'count' à 'count_results' dans src/api/routes.py - Met à jour la documentation swagger pour le nouveau nom Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -17,7 +17,7 @@ OPERATORS = {
|
|||||||
"sort",
|
"sort",
|
||||||
}
|
}
|
||||||
|
|
||||||
RESERVED_PARAMS = {"page", "page_size", "columns", "count"}
|
RESERVED_PARAMS = {"page", "page_size", "columns", "count_results"}
|
||||||
|
|
||||||
|
|
||||||
class FilterError(ValueError):
|
class FilterError(ValueError):
|
||||||
|
|||||||
+5
-5
@@ -114,10 +114,10 @@ def schema():
|
|||||||
"description": "Liste de colonnes à retourner, séparées par des virgules (ex: `id,acheteur_id,montant`). Par défaut : toutes.",
|
"description": "Liste de colonnes à retourner, séparées par des virgules (ex: `id,acheteur_id,montant`). Par défaut : toutes.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "count",
|
"name": "count_results",
|
||||||
"in": "query",
|
"in": "query",
|
||||||
"schema": {"type": "string", "enum": ["true", "false"], "default": "true"},
|
"schema": {"type": "string", "enum": ["true", "false"], "default": "true"},
|
||||||
"description": "Inclure le total (`COUNT(*)`) dans la réponse. Mettre `false` pour accélérer la requête.",
|
"description": "Inclure le total (`COUNT(*)`) dans `meta`. Mettre `false` pour accélérer la requête. Ignoré en mode agrégation.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "<colonne>__<opérateur>",
|
"name": "<colonne>__<opérateur>",
|
||||||
@@ -142,14 +142,14 @@ def data():
|
|||||||
strictly_less, strictly_greater, in, notin, isnull, isnotnull, sort.
|
strictly_less, strictly_greater, in, notin, isnull, isnotnull, sort.
|
||||||
|
|
||||||
Paramètres réservés : page (défaut 1), page_size (défaut 50, max 1000),
|
Paramètres réservés : page (défaut 1), page_size (défaut 50, max 1000),
|
||||||
columns (csv), count (true|false ; mettre false pour économiser le COUNT(*)).
|
columns (csv), count_results (true|false ; mettre false pour économiser le COUNT(*)).
|
||||||
"""
|
"""
|
||||||
import polars as pl
|
import polars as pl
|
||||||
import polars.selectors as cs
|
import polars.selectors as cs
|
||||||
|
|
||||||
page, page_size = _parse_pagination()
|
page, page_size = _parse_pagination()
|
||||||
columns = _parse_columns()
|
columns = _parse_columns()
|
||||||
count = request.args.get("count", "true").lower() != "false"
|
count_results = request.args.get("count_results", "true").lower() != "false"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
where_sql, params, order_sql = build_where(
|
where_sql, params, order_sql = build_where(
|
||||||
@@ -170,7 +170,7 @@ def data():
|
|||||||
# JSON ne sérialise pas date/datetime nativement → cast en string ISO
|
# JSON ne sérialise pas date/datetime nativement → cast en string ISO
|
||||||
df_ready = df.with_columns(cs.temporal().cast(pl.String))
|
df_ready = df.with_columns(cs.temporal().cast(pl.String))
|
||||||
|
|
||||||
total = count_marches(where_sql, params) if count else None
|
total = count_marches(where_sql, params) if count_results else None
|
||||||
meta = {"page": page, "page_size": page_size}
|
meta = {"page": page, "page_size": page_size}
|
||||||
if total is not None:
|
if total is not None:
|
||||||
meta["total"] = total
|
meta["total"] = total
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ def test_data_default_pagination(api_client, valid_token_header):
|
|||||||
assert "total" in body["meta"]
|
assert "total" in body["meta"]
|
||||||
|
|
||||||
|
|
||||||
def test_data_count_false_omits_total(api_client, valid_token_header):
|
def test_data_count_results_false_omits_total(api_client, valid_token_header):
|
||||||
client, _ = api_client
|
client, _ = api_client
|
||||||
resp = client.get("/api/v1/data?count=false", headers=valid_token_header)
|
resp = client.get("/api/v1/data?count_results=false", headers=valid_token_header)
|
||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
body = resp.get_json()
|
body = resp.get_json()
|
||||||
assert "total" not in body["meta"]
|
assert "total" not in body["meta"]
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ def test_reserved_params_are_ignored():
|
|||||||
("page", "2"),
|
("page", "2"),
|
||||||
("page_size", "100"),
|
("page_size", "100"),
|
||||||
("columns", "uid"),
|
("columns", "uid"),
|
||||||
("count", "false"),
|
("count_results", "false"),
|
||||||
("uid__exact", "z"),
|
("uid__exact", "z"),
|
||||||
],
|
],
|
||||||
SCHEMA,
|
SCHEMA,
|
||||||
|
|||||||
+2
-1
@@ -74,7 +74,8 @@ def test_data():
|
|||||||
_cleanup_db_artifacts()
|
_cleanup_db_artifacts()
|
||||||
|
|
||||||
|
|
||||||
def pytest_setup_options():
|
@pytest.fixture(scope="session")
|
||||||
|
def chrome_options():
|
||||||
options = Options()
|
options = Options()
|
||||||
options.add_argument("--window-size=1200,1200 ")
|
options.add_argument("--window-size=1200,1200 ")
|
||||||
options.add_experimental_option(
|
options.add_experimental_option(
|
||||||
|
|||||||
Reference in New Issue
Block a user