From 3f8291b7c3e73be526a4cfdc892eac8004850c76 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Sun, 3 Jan 2021 20:48:35 +0100
Subject: [PATCH] =?UTF-8?q?Util:=20Vylep=C5=A1en=C3=BD=20PagerForm?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Ostatní formy z něj mohou dědit.
---
mo/web/org_users.py | 24 ++----------------------
mo/web/util.py | 27 +++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 22 deletions(-)
create mode 100644 mo/web/util.py
diff --git a/mo/web/org_users.py b/mo/web/org_users.py
index 59c7993b..86fcfcb6 100644
--- a/mo/web/org_users.py
+++ b/mo/web/org_users.py
@@ -4,7 +4,6 @@ import werkzeug.exceptions
import wtforms
from sqlalchemy import or_
-from typing import Optional
from wtforms import validators
from wtforms.validators import Required
@@ -15,13 +14,7 @@ import mo.rights
import mo.util
import mo.users
from mo.web import app
-
-
-class PagerForm(FlaskForm):
- limit = wtforms.IntegerField()
- offset = wtforms.IntegerField()
- next = wtforms.SubmitField("Další")
- previous = wtforms.SubmitField("Předchozí")
+from mo.web.util import PagerForm
class UsersFilterForm(PagerForm):
@@ -104,20 +97,7 @@ def org_users():
q = q.filter(db.User.user_id.in_(participation_filter))
# print(str(q))
- count = q.count()
-
- if not filter.offset.data:
- filter.offset.data = 0
- if not filter.limit.data:
- filter.limit.data = 50
-
- if filter.previous.data:
- filter.offset.data = max(0, filter.offset.data - 50)
- if filter.next.data:
- filter.offset.data = min(count // 50 * 50, filter.offset.data + 50)
-
- q = q.offset(filter.offset.data)
- q = q.limit(filter.limit.data)
+ (count, q) = filter.apply_limits(q, pagesize=50)
users = q.all()
return render_template(
diff --git a/mo/web/util.py b/mo/web/util.py
new file mode 100644
index 00000000..00e5e329
--- /dev/null
+++ b/mo/web/util.py
@@ -0,0 +1,27 @@
+from flask_wtf import FlaskForm
+import wtforms
+from sqlalchemy.orm.query import Query
+
+
+class PagerForm(FlaskForm):
+ limit = wtforms.IntegerField()
+ offset = wtforms.IntegerField()
+ next = wtforms.SubmitField("Další")
+ previous = wtforms.SubmitField("Předchozí")
+
+ def apply_limits(self, query: Query, pagesize: int = 50) -> (int, Query):
+ count = query.count()
+ if not self.offset.data:
+ self.offset.data = 0
+ if not self.limit.data:
+ self.limit.data = pagesize
+
+ if self.previous.data:
+ self.offset.data = max(0, self.offset.data - pagesize)
+ if self.next.data:
+ self.offset.data = min(count // pagesize * pagesize, self.offset.data + pagesize)
+
+ query = query.offset(self.offset.data)
+ query = query.limit(self.limit.data)
+
+ return (count, query)
--
GitLab