From b99ec7b283ed003d7443a54effa2ae4b00df2f2d Mon Sep 17 00:00:00 2001 From: Julian Rother <julianr@fsmpi.rwth-aachen.de> Date: Wed, 28 Jul 2021 14:41:34 +0200 Subject: [PATCH] Improved performance of getuser api endpoint --- uffd/api/views.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/uffd/api/views.py b/uffd/api/views.py index 399ff5d0..1871f0ef 100644 --- a/uffd/api/views.py +++ b/uffd/api/views.py @@ -47,9 +47,11 @@ def getgroups(): abort(400) return jsonify([generate_group_dict(group) for group in groups]) -def generate_user_dict(user): +def generate_user_dict(user, all_groups=None): + if all_groups is None: + all_groups = user.groups return {'id': user.uid, 'loginname': user.loginname, 'email': user.mail, 'displayname': user.displayname, - 'groups': [group.name for group in user.groups]} + 'groups': [group.name for group in all_groups if user in group.members]} @bp.route('/getusers', methods=['GET', 'POST']) @apikey_required() @@ -58,7 +60,6 @@ def getusers(): abort(400) key = (list(request.values.keys()) or [None])[0] values = request.values.getlist(key) - Group.query.all() # Fill object cache for better preformance if key is None: users = User.query.all() elif key == 'id' and len(values) == 1: @@ -72,7 +73,10 @@ def getusers(): users = [] if group is None else group.members else: abort(400) - return jsonify([generate_user_dict(user) for user in users]) + all_groups = None + if len(users) > 1: + all_groups = Group.query.all() + return jsonify([generate_user_dict(user, all_groups) for user in users]) @bp.route('/checkpassword', methods=['POST']) @apikey_required('checkpassword') -- GitLab