Skip to content

Commit 96383dd

Browse files
committed
allow sortby multiple fields, sort fixes
1 parent 08b4ad9 commit 96383dd

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

tifeatures/dbmodel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class Table(BaseModel):
5555
table: str
5656
dbschema: str = Field(..., alias="schema")
5757
description: Optional[str]
58-
id_column: Optional[str]
58+
id_column: str
5959
geometry_columns: List[GeometryColumn]
6060
properties: List[Column]
6161

tifeatures/layer.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""tifeatures.layers."""
22

33
import abc
4+
import re
45
from dataclasses import dataclass
56
from typing import Any, ClassVar, Dict, List, Optional, Tuple
67

@@ -262,17 +263,26 @@ def _datetime_filter_to_sql(self, interval: List[str], dt_name: str):
262263
)
263264

264265
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()
266+
sorts = []
267+
if sortby:
268+
sortby = sortby.strip()
269+
for s in sortby.split(","):
270+
parts = re.match(
271+
"^(?P<direction>[+-]?)(?P<column>.*)$", s
272+
).groupdict() # type:ignore
273+
direction = parts["direction"]
274+
column = parts["column"].strip()
275+
if self.get_column(column):
276+
if direction == "-":
277+
sorts.append(logic.V(column).desc())
278+
else:
279+
sorts.append(logic.V(column))
280+
else:
281+
raise InvalidPropertyName("Property {column} does not exist.")
271282
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)
283+
sorts.append(logic.V(self.id_column))
284+
print(sorts)
285+
return clauses.OrderBy(*sorts)
276286

277287
def _features_query(
278288
self,

0 commit comments

Comments
 (0)