From d1416d3706c70ea82c5335d2c357cc1b8be129bd Mon Sep 17 00:00:00 2001 From: Lili Date: Mon, 26 Jun 2023 13:28:34 +0200 Subject: [PATCH] add reset-milestone and hard-reset-milestone commands to click --- tlapbot/db.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tlapbot/db.py b/tlapbot/db.py index d9ba327..3519bf8 100644 --- a/tlapbot/db.py +++ b/tlapbot/db.py @@ -4,6 +4,7 @@ import click from flask import current_app, g from flask.cli import with_appcontext +from tlapbot.redeems import milestone_complete def get_db(): if 'db' not in g: @@ -115,6 +116,25 @@ def refresh_milestones(): print("Failed inserting milestones to db:", e.args[0]) +def reset_milestone(milestone): + if not redeem_name in current_app.config['REDEEMS']: + print(f"Failed resetting milestone, {milestone} not in redeems file.") + return None + try: + db.execute( + "DELETE FROM milestones WHERE name = ?", + (milestone,) + ) + db.execute( + "INSERT INTO milestones(name, progress, goal) VALUES(?, ?, ?)", + (milestone, 0, current_app.config['REDEEMS'][milestone]['goal']) + ) + db.commit() + return True + except Error as e: + current_app.logger.error(f"Error occured adding a milestone: {e.args[0]}") + return None + @click.command('init-db') @@ -160,6 +180,28 @@ def refresh_milestones_command(): click.echo('Refreshed milestones.') +@click.command('reset-milestone') +@click.argument('milestone') +def reset_milestone_command(milestone): + """Resets a completed milestone back to zero.""" + if milestone_complete(milestone): + if reset_milestone(milestone): + click.echo(f"Reset milestone {milestone}.") + else: + click.echo(f"Resetting milestone {milestone} failed.") + else: + click.echo(f"Could not reset milestone {milestone}, milestone not completed.") + click.echo("(You can hard-reset-milestone if you really want to reset it.)") + +@click.command('hard-reset-milestone') +@click.argument('milestone') +def hard_reset_milestone_command(milestone): + """Resets any milestone back to zero.""" + if reset_milestone(milestone): + click.echo(f"Hard reset milestone {milestone}.") + else: + click.echo(f"Hard resetting milestone {milestone} failed.") + def init_app(app): app.teardown_appcontext(close_db) app.cli.add_command(init_db_command)