From bdc0ead231374ae3dff6d7afbdbd02d8b6026014 Mon Sep 17 00:00:00 2001 From: Adam Coldrick Date: Mon, 9 Oct 2017 20:52:32 +0100 Subject: [PATCH] Properly populate Worklist.items in automatic worklists In responses that send the contents of the worklist without resolving the actual stories and tasks, automatic worklists have no contents. This patch fixes that bug by getting the fake WorklistItems and sending them, rather than trying to get real ones from the database. Change-Id: I574c42c220241d52a1d479f73f896a6a42311dc7 --- storyboard/api/v1/wmodels.py | 11 +++++++++-- storyboard/api/v1/worklists.py | 15 +++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/storyboard/api/v1/wmodels.py b/storyboard/api/v1/wmodels.py index 52796c9b..3f2b4fc3 100644 --- a/storyboard/api/v1/wmodels.py +++ b/storyboard/api/v1/wmodels.py @@ -896,14 +896,21 @@ class Lane(base.APIBase): self.worklist = Worklist.from_db_model(lane.worklist) self.worklist.resolve_permissions(lane.worklist) self.worklist.resolve_filters(lane.worklist) + user_id = request.current_user_id if resolve_items: self.worklist.resolve_items( lane.worklist, story_cache, task_cache) - else: + elif not lane.worklist.automatic: items = worklists_api.get_visible_items( - lane.worklist, current_user=request.current_user_id) + lane.worklist, current_user=user_id) self.worklist.items = [WorklistItem.from_db_model(item) for item in items] + else: + self.worklist.items = [ + WorklistItem(**item) + for item in worklists_api.filter_items( + lane.worklist, user_id)[0] + ] class Board(base.APIBase): diff --git a/storyboard/api/v1/worklists.py b/storyboard/api/v1/worklists.py index 7ecbb841..fbbac202 100644 --- a/storyboard/api/v1/worklists.py +++ b/storyboard/api/v1/worklists.py @@ -702,10 +702,17 @@ class WorklistsController(rest.RestController): worklist_model.resolve_permissions(worklist) visible_items = worklists_api.get_visible_items( worklist, request.current_user_id) - worklist_model.items = [ - wmodels.WorklistItem.from_db_model(item) - for item in visible_items - ] + if not worklist.automatic: + worklist_model.items = [ + wmodels.WorklistItem.from_db_model(item) + for item in visible_items + ] + else: + worklist_model.items = [ + wmodels.WorklistItem(**item) + for item in worklists_api.filter_items( + worklist, request.current_user_id)[0] + ] visible_worklists.append(worklist_model) # Apply the query response headers