Skip to content

Commit 4a4e659

Browse files
committed
add support for sortby
1 parent 3d90780 commit 4a4e659

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

tifeatures/dependencies.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,7 @@ def filter_query(
241241
return cql2_text_parser(query)
242242

243243
return None
244+
245+
246+
def sortby_query(sortby: Optional[str] = Query(None, description="Sort By Column")):
247+
return sortby

tifeatures/factory.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
filter_query,
2121
ids_query,
2222
properties_query,
23+
sortby_query,
2324
)
2425
from tifeatures.errors import NotFound
2526
from tifeatures.layer import CollectionLayer
@@ -547,6 +548,7 @@ async def items(
547548
datetime_filter: Optional[List[str]] = Depends(datetime_query),
548549
properties: Optional[List[str]] = Depends(properties_query),
549550
cql_filter: Optional[AstType] = Depends(filter_query),
551+
sortby: Optional[str] = Depends(sortby_query),
550552
geom_column: Optional[str] = Query(
551553
None,
552554
description="Select geometry column.",
@@ -594,6 +596,7 @@ async def items(
594596
"offset",
595597
"bbox-only",
596598
"simplify",
599+
"sortby",
597600
]
598601
properties_filter = [
599602
(key, value)
@@ -608,6 +611,7 @@ async def items(
608611
datetime_filter=datetime_filter,
609612
properties_filter=properties_filter,
610613
cql_filter=cql_filter,
614+
sortby=sortby,
611615
properties=properties,
612616
limit=limit,
613617
offset=offset,

tifeatures/layer.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,19 @@ def _datetime_filter_to_sql(self, interval: List[str], dt_name: str):
261261
logic.V(dt_name) < logic.S(pg_funcs.cast(end, "timestamptz")),
262262
)
263263

264+
def _sortby(self, sortby: Optional[str]):
265+
sortby = sortby.strip()
266+
if sortby is None:
267+
sortby = self.id_column
268+
if sortby.startswith("-"):
269+
sortby = sortby.replace("-", "")
270+
sort_clause = logic.V(sortby).desc()
271+
else:
272+
sortby = sortby.replace("+", "")
273+
sort_clause = logic.V(sortby).asc()
274+
if self.get_column(sortby) is not None:
275+
return clauses.OrderBy(sort_clause)
276+
264277
def _features_query(
265278
self,
266279
*,
@@ -269,6 +282,7 @@ def _features_query(
269282
datetime_filter: Optional[List[str]] = None,
270283
properties_filter: Optional[List[Tuple[str, str]]] = None,
271284
cql_filter: Optional[AstType] = None,
285+
sortby: Optional[str] = None,
272286
properties: Optional[List[str]] = None,
273287
geom: str = None,
274288
dt: str = None,
@@ -288,6 +302,7 @@ def _features_query(
288302
geom=geom,
289303
dt=dt,
290304
)
305+
+ self._sortby(sortby)
291306
+ clauses.Limit(limit or 10)
292307
+ clauses.Offset(offset or 0)
293308
)
@@ -327,6 +342,7 @@ async def query(
327342
datetime_filter: Optional[List[str]] = None,
328343
properties_filter: Optional[List[Tuple[str, str]]] = None,
329344
cql_filter: Optional[AstType] = None,
345+
sortby: Optional[str] = None,
330346
properties: Optional[List[str]] = None,
331347
geom: str = None,
332348
dt: str = None,
@@ -370,6 +386,7 @@ async def query(
370386
datetime_filter=datetime_filter,
371387
properties_filter=properties_filter,
372388
cql_filter=cql_filter,
389+
sortby=sortby,
373390
properties=properties,
374391
geom=geom,
375392
dt=dt,

0 commit comments

Comments
 (0)