-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Added default to order by * Chenged version * Fixed tests * Refactor order by * Refactor order by * Deleted not need code
- Loading branch information
1 parent
956420b
commit a5912f3
Showing
14 changed files
with
142 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import pytest | ||
from rest_framework import exceptions | ||
|
||
import winter | ||
|
||
|
||
def test_with_default_not_in_allowed_fields(): | ||
with pytest.raises(exceptions.ParseError) as exception: | ||
winter.pagination.order_by(['id'], default_sort=('uid',)) | ||
|
||
assert exception.value.args == ('Fields do not allowed as order by fields: "uid"',) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
__version__ = '1.11.1' | ||
__version__ = '1.11.2' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,5 @@ | ||
from .order_by import order_by | ||
from .order_by_annotation import OrderByAnnotation | ||
from .order_by_annotation import get_allowed_order_by_fields | ||
from .sort import Order | ||
from .sort import Sort | ||
from .sort import SortDirection |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import typing | ||
|
||
from rest_framework import exceptions | ||
|
||
if typing.TYPE_CHECKING: | ||
from .sort import Sort | ||
|
||
|
||
def check_sort(sort: 'Sort', allowed_fields: typing.FrozenSet[str]): | ||
not_allowed_fields = [ | ||
order.field | ||
for order in sort.orders | ||
if order.field not in allowed_fields | ||
] | ||
if not_allowed_fields: | ||
not_allowed_fields = ','.join(not_allowed_fields) | ||
raise exceptions.ParseError(f'Fields do not allowed as order by fields: "{not_allowed_fields}"') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,15 @@ | ||
import typing | ||
|
||
from .check_sort import check_sort | ||
from .order_by_annotation import OrderByAnnotation | ||
from .parse_sort import parse_sort | ||
from ...core.annotation_decorator import annotate_method | ||
|
||
|
||
def order_by(allowed_fields: typing.Iterable[str]): | ||
def order_by(allowed_fields: typing.Iterable[str], default_sort: typing.Tuple[str] = None): | ||
allowed_fields = frozenset(allowed_fields) | ||
annotation = OrderByAnnotation(allowed_fields) | ||
if default_sort is not None: | ||
default_sort = parse_sort(','.join(default_sort)) | ||
check_sort(default_sort, allowed_fields) | ||
annotation = OrderByAnnotation(allowed_fields, default_sort) | ||
return annotate_method(annotation, single=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import re | ||
|
||
from rest_framework import exceptions | ||
|
||
from .sort import Order | ||
from .sort import SortDirection | ||
|
||
_field_pattern = re.compile(r'(-?)(\w+)') | ||
|
||
|
||
def parse_order(field: str): | ||
match = _field_pattern.match(field) | ||
|
||
if match is None: | ||
raise exceptions.ParseError(f'Invalid field for order: "{field}"') | ||
|
||
direction, field = match.groups() | ||
direction = SortDirection.DESC if direction == '-' else SortDirection.ASC | ||
return Order(field, direction) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import typing | ||
|
||
from .parse_order import parse_order | ||
from .sort import Sort | ||
|
||
|
||
def parse_sort(str_sort: typing.Optional[str]) -> typing.Optional[Sort]: | ||
if not str_sort: | ||
return None | ||
sort_parts = str_sort.split(',') | ||
orders = (parse_order(sort_part) for sort_part in sort_parts) | ||
return Sort(*orders) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters