From bb5acd3dd72803963727593d0142d14957fb25de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 11 Oct 2016 14:44:57 +0200 Subject: [PATCH] Task view: Show user name instead of ID. --- attract/tasks/routes.py | 34 ++++++++++++++++--- .../attract/tasks/view_task_embed.jade | 2 +- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/attract/tasks/routes.py b/attract/tasks/routes.py index 1e481c7..36a05bb 100644 --- a/attract/tasks/routes.py +++ b/attract/tasks/routes.py @@ -1,11 +1,10 @@ import logging -from flask import Blueprint, render_template, request +from flask import Blueprint, render_template, request, current_app import flask import flask_login import pillarsdk -import pillarsdk.exceptions as sdk_exceptions from pillar.web.system_util import pillar_api import pillar.api.utils @@ -51,6 +50,24 @@ def for_project(project, task_id=None): project=project) +def _get_user_info(user_id): + """Returns email & full name of the user. + + Only returns those two fields, so the return value is the same + for authenticated & non-authenticated users, which is why we're + allowed to cache it globally. + + Returns None when the user cannot be found. + """ + + user = pillarsdk.User.find(user_id, api=pillar_api()) + if not user: + return user + + return {'email': user.email, + 'full_name': user.full_name} + + @perproject_blueprint.route('/') @attract_project_view(extension_props=True) def view_task(project, attract_props, task_id): @@ -60,12 +77,19 @@ def view_task(project, attract_props, task_id): api = pillar_api() task = pillarsdk.Node.find(task_id, api=api) node_type = project.get_node_type(node_type_task['name']) + # Fetch project users so that we can assign them tasks - try: + if 'PUT' in task.allowed_methods: users = project.get_users(api=api) project.users = users['_items'] - except sdk_exceptions.ForbiddenAccess: - project.users = [] + else: + # Cache user info for 5 minutes. + @current_app.cache.memoize(timeout=300, make_name='%s._cached_user_info' % __name__) + def _cached_user_info(user_id): + return _get_user_info(user_id) + + task.properties.assigned_to.users = [_cached_user_info(uid) + for uid in task.properties.assigned_to.users] return render_template('attract/tasks/view_task_embed.html', task=task, diff --git a/src/templates/attract/tasks/view_task_embed.jade b/src/templates/attract/tasks/view_task_embed.jade index 48f374e..1049c7a 100644 --- a/src/templates/attract/tasks/view_task_embed.jade +++ b/src/templates/attract/tasks/view_task_embed.jade @@ -89,7 +89,7 @@ dd {{ task.properties.status | undertitle }} dt Assignees: | {% for u in task.properties.assigned_to['users'] %} - dd {{ u }} + dd {{ u.full_name }} | {% else %} dd not assigned | {% endfor %}