|
1 | 1 | """tifeatures.layers.""" |
2 | 2 |
|
3 | 3 | import abc |
| 4 | +import re |
4 | 5 | from dataclasses import dataclass |
5 | 6 | from typing import Any, ClassVar, Dict, List, Optional, Tuple |
6 | 7 |
|
@@ -262,17 +263,26 @@ def _datetime_filter_to_sql(self, interval: List[str], dt_name: str): |
262 | 263 | ) |
263 | 264 |
|
264 | 265 | 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.") |
271 | 282 | 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) |
276 | 286 |
|
277 | 287 | def _features_query( |
278 | 288 | self, |
|
0 commit comments