Molodetz blogrol volgens DPP-template
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
import math
|
||||
|
||||
from molodetz.database.core import db
|
||||
|
||||
|
||||
def paginate(table_name, before=None, order="desc", cursor_field="created_at", limit=25, **filters):
|
||||
if table_name not in db.tables:
|
||||
return [], None
|
||||
table = db[table_name]
|
||||
criteria = dict(filters)
|
||||
if "deleted_at" not in criteria:
|
||||
criteria["deleted_at"] = None
|
||||
if before:
|
||||
criteria[cursor_field] = {"<": before} if order == "desc" else {">": before}
|
||||
order_by = [f"-{cursor_field}"] if order == "desc" else [cursor_field]
|
||||
rows = list(table.find(_limit=limit + 1, order_by=order_by, **criteria))
|
||||
next_cursor = None
|
||||
if len(rows) > limit:
|
||||
rows = rows[:limit]
|
||||
next_cursor = rows[-1][cursor_field]
|
||||
return rows, next_cursor
|
||||
|
||||
|
||||
def build_pagination(page, total, per_page):
|
||||
pages = max(1, math.ceil(total / per_page)) if per_page else 1
|
||||
page = min(max(1, page), pages)
|
||||
return {
|
||||
"page": page,
|
||||
"pages": pages,
|
||||
"total": total,
|
||||
"per_page": per_page,
|
||||
"offset": (page - 1) * per_page,
|
||||
"has_prev": page > 1,
|
||||
"has_next": page < pages,
|
||||
}
|
||||
Reference in New Issue
Block a user