Proposal Migration Script (#47)

* init script

* only modify object in not dry runs
This commit is contained in:
Danny Skubak 2019-11-13 18:59:35 -05:00 committed by Daniel Ternyak
parent 08fe3efca5
commit ec3350e45f
2 changed files with 44 additions and 3 deletions

View File

@ -163,5 +163,6 @@ def register_commands(app):
app.cli.add_command(commands.reset_db_chain_data) app.cli.add_command(commands.reset_db_chain_data)
app.cli.add_command(proposal.commands.create_proposal) app.cli.add_command(proposal.commands.create_proposal)
app.cli.add_command(proposal.commands.create_proposals) app.cli.add_command(proposal.commands.create_proposals)
app.cli.add_command(proposal.commands.retire_v1_proposals)
app.cli.add_command(user.commands.set_admin) app.cli.add_command(user.commands.set_admin)
app.cli.add_command(task.commands.create_task) app.cli.add_command(task.commands.create_task)

View File

@ -7,7 +7,7 @@ from flask.cli import with_appcontext
from .models import Proposal, db from .models import Proposal, db
from grant.milestone.models import Milestone from grant.milestone.models import Milestone
from grant.comment.models import Comment from grant.comment.models import Comment
from grant.utils.enums import ProposalStatus, Category, ProposalStageEnum from grant.utils.enums import ProposalStatus, Category, ProposalStage
from grant.user.models import User from grant.user.models import User
@ -35,9 +35,9 @@ def create_proposals(count):
user = User.query.filter_by().first() user = User.query.filter_by().first()
for i in range(count): for i in range(count):
if i < 5: if i < 5:
stage = ProposalStageEnum.WIP stage = ProposalStage.WIP
else: else:
stage = ProposalStageEnum.COMPLETED stage = ProposalStage.COMPLETED
p = Proposal.create( p = Proposal.create(
stage=stage, stage=stage,
status=ProposalStatus.LIVE, status=ProposalStatus.LIVE,
@ -76,3 +76,43 @@ def create_proposals(count):
db.session.commit() db.session.commit()
print(f'Added {count} LIVE fake proposals') print(f'Added {count} LIVE fake proposals')
@click.command()
@click.argument('dry', required=False)
@with_appcontext
def retire_v1_proposals(dry):
now = datetime.datetime.now()
proposals = Proposal.query.filter_by(stage="FUNDING_REQUIRED").all()
modified_count = 0
if not proposals:
print("No proposals found. Exiting...")
return
print(f"Found {len(proposals)} proposals to modify")
if dry:
print(f"This is a dry run. Changes will not be committed to database")
confirm = input("Continue? (y/n) ")
if confirm != "y":
print("Exiting...")
return
for p in proposals:
if not dry:
new_deadline = (now - p.date_published).total_seconds()
p.stage = ProposalStage.FAILED
p.deadline_duration = int(new_deadline)
db.session.add(p)
modified_count += 1
print(f"Modified proposal {p.id} - {p.title}")
if not dry:
print(f"Committing changes to database")
db.session.commit()
print(f"Modified {modified_count} proposals")