From 2659eb1e451b102672f4e57af977cb6e382d872b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jan 17 2019 15:32:04 +0000 Subject: Cascade deleting flags when tokens are deleted A project is deleted, if may have PRs with flags, these flags have been added via the API via an API token (potentially linked to the project). When the project is deleted the API token gets deleted and the corresponding flags should be deleted as well, which this commit allows. Signed-off-by: Pierre-Yves Chibon --- diff --git a/alembic/versions/2b1743f77436_cascade_deleting_flags_when_tokens_are_.py b/alembic/versions/2b1743f77436_cascade_deleting_flags_when_tokens_are_.py new file mode 100644 index 0000000..1c11995 --- /dev/null +++ b/alembic/versions/2b1743f77436_cascade_deleting_flags_when_tokens_are_.py @@ -0,0 +1,46 @@ +"""Cascade deleting flags when tokens are deleted + +Revision ID: 2b1743f77436 +Revises: 5993f9240bcf +Create Date: 2019-01-16 13:38:34.954904 + +""" + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '2b1743f77436' +down_revision = '5993f9240bcf' + + +def upgrade(): + """ Remove the existing foreign key in pull_request_flags.token_id and + re-create it with CASCADE on delete and update. + """ + # alter the constraints + op.drop_constraint('pull_request_flags_token_id_fkey', 'pull_request_flags') + op.create_foreign_key( + u'pull_request_flags_token_id_fkey', + 'pull_request_flags', + 'tokens', + ['token_id'], + ['id'], + ondelete="CASCADE", + onupdate="CASCADE", + ) + + +def downgrade(): + """ Remove the existing foreign key in pull_request_flags.token_id and + re-create it with without specifying the behavior on delete and update. + """ + op.drop_constraint('pull_request_flags_token_id_fkey', 'pull_request_flags') + op.create_foreign_key( + u'pull_request_flags_token_id_fkey', + 'pull_request_flags', + 'tokens', + ['token_id'], + ['id'], + ) diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 793da43..ac8e148 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -2293,7 +2293,9 @@ class PullRequestFlag(BASE): nullable=False, ) token_id = sa.Column( - sa.String(64), sa.ForeignKey("tokens.id"), nullable=True + sa.String(64), + sa.ForeignKey("tokens.id", ondelete="CASCADE", onupdate="CASCADE"), + nullable=True ) status = sa.Column(sa.String(32), nullable=False) user_id = sa.Column(