Skip to content

Commit 2f9e8e0

Browse files
committed
[UPD] add pagination to GET API response
Signed-off-by: Red <[email protected]>
1 parent 1bb19df commit 2f9e8e0

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

spp_api/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"images": [
88
"images/icon.png",
99
],
10-
"version": "17.0.1.3.1",
10+
"version": "17.0.1.4.1",
1111
"application": False,
1212
"author": "OpenSPP.org",
1313
"development_status": "Production/Stable",

spp_api/controllers/api.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,19 +207,29 @@ def read_multi__GET(self, namespace, version, model, **kw):
207207
path = kw.get("path")
208208
del kw["path"]
209209

210+
page = kw.get("page", 1)
211+
210212
kw = path.search_treatment_kwargs(kw)
213+
limit = kw.get("limit")
214+
211215
records = self.get_records(path.model, kw)
212216
records_data = records.search_read(**kw)
213217
records_all = records.search_count(kw.get("domain"))
214218
records_data = path._get_response_treatment(records_data)
219+
220+
pagination = {
221+
"page": page,
222+
"limit": limit,
223+
"total_records": records_all,
224+
"total_pages": (records_all + limit - 1) // limit,
225+
}
226+
215227
response_data = {
216228
"results": records_data,
217-
"count": records_all,
218-
"offset": kw.get("offset", 0),
219-
"limit": kw.get("limit", 0),
220229
"version": version,
221230
"timestamp": datetime_format(datetime.datetime.now()),
222231
"reply_id": self.get_reply_id(),
232+
"pagination": pagination,
223233
}
224234

225235
return successful_response(200, response_data)

spp_api/models/spp_api_path.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class SPPAPIPath(models.Model):
8989
# Read
9090
filter_domain = fields.Char(default="[]")
9191
field_ids = fields.Many2many("ir.model.fields", domain="[('model_id', '=', model_id)]", string="Fields")
92-
limit = fields.Integer(string="Limit of results", default=500)
92+
limit = fields.Integer(string="Limit of results", default=80, help="Limit of results per page")
9393
# Create / Update
9494
warning_required = fields.Boolean(compute="_compute_warning_required", compute_sudo=True)
9595
api_field_ids = fields.One2many("spp_api.field", "path_id", string="API Fields", copy=True)
@@ -663,15 +663,24 @@ def search_treatment_kwargs(self, kwargs):
663663
"""
664664
self.ensure_one()
665665

666-
# Limit
667-
limit = kwargs.get("limit", 0)
668-
max_limit = self.limit if self.limit else MAX_LIMIT
669-
kwargs["limit"] = limit if (limit and limit <= max_limit) else max_limit
666+
# Page
667+
page = kwargs.get("page", 1)
668+
669+
# Get defined limit first in spp_api.path
670+
# if limit is defined in kwargs (query parameter), use it; else use self.limit or MAX_LIMIT
671+
limit = kwargs.get("limit", self.limit if self.limit else MAX_LIMIT)
672+
673+
# Validate limit
674+
try:
675+
limit = int(limit)
676+
except (ValueError, TypeError):
677+
limit = self.limit if self.limit else MAX_LIMIT
678+
679+
kwargs["limit"] = limit
670680

671681
# Offset
672-
kwargs["offset"] = kwargs.get("start_from", 0)
673-
if "start_from" in kwargs:
674-
del kwargs["start_from"]
682+
offset = (page - 1) * limit if page > 1 else kwargs.get("offset", 0)
683+
kwargs["offset"] = offset
675684

676685
# Domain
677686
kwargs["domain"] = self.get_domain(kwargs)

0 commit comments

Comments
 (0)