From 06ae67f1db936c35f2dc1310a2b17cb45764e637 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Tue, 19 Mar 2019 15:14:49 -0400 Subject: [PATCH] Flask command for clearing chain dependent db state --- backend/grant/app.py | 1 + backend/grant/commands.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/backend/grant/app.py b/backend/grant/app.py index b6f2c9a1..c58e87a1 100644 --- a/backend/grant/app.py +++ b/backend/grant/app.py @@ -158,6 +158,7 @@ def register_commands(app): app.cli.add_command(commands.lint) app.cli.add_command(commands.clean) app.cli.add_command(commands.urls) + app.cli.add_command(commands.reset_db_chain_data) app.cli.add_command(proposal.commands.create_proposal) app.cli.add_command(proposal.commands.create_proposals) app.cli.add_command(user.commands.set_admin) diff --git a/backend/grant/commands.py b/backend/grant/commands.py index b652e099..65f09cf3 100644 --- a/backend/grant/commands.py +++ b/backend/grant/commands.py @@ -137,3 +137,37 @@ def urls(url, order): for row in rows: click.echo(str_template.format(*row[:column_length])) + + +@click.command() +@with_appcontext +def reset_db_chain_data(): + """Removes chain-state dependent entities from the database. Cannot be undone!""" + from grant.extensions import db + from grant.proposal.models import Proposal + from grant.user.models import UserSettings + from grant.task.models import Task + + # Delete all proposals. Should cascade to contributions, comments etc. + p_count = 0 + for proposal in Proposal.query.all(): + db.session.delete(proposal) + p_count = p_count + 1 + + # Delete all outstanding tasks + t_count = Task.query.delete() + + # Delete refund address from settings + s_count = 0 + for settings in UserSettings.query.all(): + if settings.refund_address: + settings.refund_address = None + db.session.add(settings) + s_count = s_count + 1 + + # Commit state + db.session.commit() + print('Successfully wiped chain-dependent db state!') + print(f'* Deleted {p_count} proposals and their linked entities') + print(f'* Deleted {t_count} tasks') + print(f'* Removed refund address from {s_count} user settings')