Skip to content

Commit 5bcd52e

Browse files
committed
[REF] refactor code and add backward compatibility
1 parent 2f9e8e0 commit 5bcd52e

2 files changed

Lines changed: 61 additions & 28 deletions

File tree

spp_api/controllers/api.py

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,17 @@ 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)
210+
# For backward compatibility
211+
# Will not use pagination
212+
backward_compat = False
213+
if "start_from" in kw:
214+
backward_compat = True
215+
216+
try:
217+
page = int(kw.get("page", 1))
218+
except (ValueError, TypeError):
219+
page = 1
220+
page = max(1, page)
211221

212222
kw = path.search_treatment_kwargs(kw)
213223
limit = kw.get("limit")
@@ -217,21 +227,25 @@ def read_multi__GET(self, namespace, version, model, **kw):
217227
records_all = records.search_count(kw.get("domain"))
218228
records_data = path._get_response_treatment(records_data)
219229

220-
pagination = {
221-
"page": page,
222-
"limit": limit,
223-
"total_records": records_all,
224-
"total_pages": (records_all + limit - 1) // limit,
225-
}
226-
227230
response_data = {
228231
"results": records_data,
229232
"version": version,
230233
"timestamp": datetime_format(datetime.datetime.now()),
231234
"reply_id": self.get_reply_id(),
232-
"pagination": pagination,
233235
}
234236

237+
if backward_compat:
238+
response_data["count"] = records_all
239+
response_data["offset"] = kw.get("offset", 0)
240+
response_data["limit"] = limit
241+
else:
242+
response_data["pagination"] = {
243+
"page": page,
244+
"limit": limit,
245+
"total_records": records_all,
246+
"total_pages": (records_all + limit - 1) // limit if limit > 0 else 1,
247+
}
248+
235249
return successful_response(200, response_data)
236250

237251
# ReadOne (optional: include_fields, exclude_fields)

spp_api/models/spp_api_path.py

Lines changed: 38 additions & 19 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=80, help="Limit of results per page")
92+
limit = fields.Integer(string="Limit of results", default=500, 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,24 +663,43 @@ def search_treatment_kwargs(self, kwargs):
663663
"""
664664
self.ensure_one()
665665

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
680-
681-
# Offset
682-
offset = (page - 1) * limit if page > 1 else kwargs.get("offset", 0)
683-
kwargs["offset"] = offset
666+
backward_compat = False
667+
if "start_from" in kwargs:
668+
backward_compat = True
669+
670+
if backward_compat:
671+
limit = kwargs.get("limit", 0)
672+
max_limit = self.limit if self.limit else MAX_LIMIT
673+
kwargs["limit"] = limit if (limit and limit <= max_limit) else max_limit
674+
kwargs["offset"] = kwargs.get("start_from", 0)
675+
if "start_from" in kwargs:
676+
del kwargs["start_from"]
677+
else:
678+
# Page
679+
try:
680+
page = int(kwargs.get("page", 1))
681+
except (ValueError, TypeError):
682+
page = 1
683+
page = max(1, page)
684+
685+
# Get defined limit first in spp_api.path
686+
# if limit is defined in kwargs (query parameter), use it; else use self.limit or MAX_LIMIT
687+
max_limit = self.limit if self.limit else MAX_LIMIT
688+
limit = kwargs.get("limit", max_limit)
689+
690+
# Validate limit
691+
try:
692+
limit = int(limit)
693+
if limit <= 0 or limit > max_limit:
694+
limit = max_limit
695+
except (ValueError, TypeError):
696+
limit = max_limit
697+
698+
kwargs["limit"] = limit
699+
700+
# Offset
701+
offset = (page - 1) * limit
702+
kwargs["offset"] = offset
684703

685704
# Domain
686705
kwargs["domain"] = self.get_domain(kwargs)

0 commit comments

Comments
 (0)