You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.4 KiB
Python

from itertools import groupby
from app import get_db_connection
conn = get_db_connection()
todos = conn.execute('SELECT i.id, i.done, i.content, l.title \
FROM items i JOIN lists l \
ON i.list_id = l.id ORDER BY l.title;').fetchall()
lists = {}
for k, g in groupby(todos, key=lambda t: t['title']):
# lists[k] = list(g)
items = []
for item in g :
#get the assignees of the current todo item
assignees = conn.execute('SELECT a.id, a.name FROM assignees a \
JOIN items_assignees i_a \
ON a.id = i_a.assignee_id \
WHERE i_a.item_id = ?',
(item['id'],)).fetchall()
# convert the item row into a dictionary to add assignees
item = dict(item)
item['assignees'] = assignees
items.append(item)
#build the list of dictionaries
# the list's name (ex: Home/Study/Work) as the key
# and a list of dictionaries of to-do items
# belonging to that list as the value
lists[k] = list(items)
for list_, items in lists.items():
print(list_)
for item in items:
assignee_names = ', '.join(a['name'] for a in item['assignees'])
print(' ', item['content'], '| id:',
item['id'], 'done:', item['done'],
'| assignees:', assignee_names)