Skip to content

Commit 139ec54

Browse files
authored
Merge pull request projectcaluma#470 from open-dynaMIX/offset_pagination
feat(pagination): implement offset pagination
2 parents 36ce43c + af6b360 commit 139ec54

File tree

3 files changed

+69
-28
lines changed

3 files changed

+69
-28
lines changed

caluma/core/filters.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,23 @@ def __init__(self, label, *args, fields=tuple(), **kwargs):
171171
)
172172

173173

174+
class IntegerFilter(Filter):
175+
field_class = forms.IntegerField
176+
177+
174178
class FilterSet(GrapheneFilterSetMixin, FilterSet):
175179
created_by_user = CharFilter()
176180
created_by_group = CharFilter()
181+
offset = IntegerFilter(method="filter_offset")
182+
limit = IntegerFilter(method="filter_limit")
183+
184+
@staticmethod
185+
def filter_offset(queryset, name, value):
186+
return queryset[value:]
187+
188+
@staticmethod
189+
def filter_limit(queryset, name, value):
190+
return queryset[:value]
177191

178192
@classmethod
179193
def filter_for_lookup(cls, field, lookup_type):

caluma/core/tests/test_pagination.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
def test_offset_pagination(db, schema_executor, document_factory):
2+
document_factory(meta={"position": 0})
3+
document_factory(meta={"position": 1})
4+
document_factory(meta={"position": 2})
5+
document_factory(meta={"position": 3})
6+
document_factory(meta={"position": 4})
7+
8+
query = """
9+
query AllDocumentsQuery {
10+
allDocuments(limit: 2, offset: 2) {
11+
totalCount
12+
edges {
13+
node {
14+
id
15+
meta
16+
}
17+
}
18+
}
19+
}
20+
"""
21+
22+
result = schema_executor(query)
23+
24+
assert not result.errors
25+
assert len(result.data["allDocuments"]["edges"]) == 2
26+
assert result.data["allDocuments"]["totalCount"] == 2
27+
assert result.data["allDocuments"]["edges"][0]["node"]["meta"]["position"] == 2
28+
assert result.data["allDocuments"]["edges"][1]["node"]["meta"]["position"] == 3

0 commit comments

Comments
 (0)