From 5080e61abb51ba12a1f7dfbed0b45e01f4b84e74 Mon Sep 17 00:00:00 2001 From: 3wc <3wc@doesthisthing.work> Date: Fri, 11 Nov 2022 17:18:23 -0800 Subject: [PATCH] Add categories tidy command --- hamstertools/__init__.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/hamstertools/__init__.py b/hamstertools/__init__.py index 55696ca..fcef0b2 100755 --- a/hamstertools/__init__.py +++ b/hamstertools/__init__.py @@ -106,7 +106,7 @@ def delete_categories(ids): results = get_categories(ids) for r in results: - sql = 'SELECT COUNT(id) FROM activities WHERE category_id = ?' + sql = 'select count(id) from activities where category_id = ?' count = c.execute(sql, (r[0],)).fetchone()[0] click.echo('@{0[0]}: {0[1]} ({1} activities)'.format(r, count)) @@ -169,6 +169,30 @@ def list_category_activities(ids): click.echo('@{0[0]}: {0[2]} ยป {0[1]}'.format(r)) +@categories.command('tidy') +def tidy_categories(): + """ Remove categories with no activities """ + + sql = 'SELECT categories.id, categories.name FROM categories LEFT JOIN activities ON categories.id = activities.category_id WHERE activities.id IS NULL' + categories = c.execute(sql).fetchall() + + click.echo('Found {0} empty categories:'.format(len(categories))) + + for cat in categories: + click.echo('@{0[0]}: {0[1]}'.format(cat)) + + click.confirm('Do you want to continue?', abort=True) + + sql = 'DELETE FROM categories ' + + sql = sql + 'WHERE id IN ({seq})'.format( + seq=','.join(['?'] * len(categories)) + ) + + c.execute(sql, [cat[0] for cat in categories]) + conn.commit() + + @cli.group() def activities(): pass