From 740f055bdc9432b3e24f214ac68a44cfe19058f7 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 1/8] Propagate project deletions to the hook tables --- diff --git a/pagure/hooks/fedmsg.py b/pagure/hooks/fedmsg.py index aa21493..9f5410e 100644 --- a/pagure/hooks/fedmsg.py +++ b/pagure/hooks/fedmsg.py @@ -32,7 +32,7 @@ class FedmsgTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/irc.py b/pagure/hooks/irc.py index 48f0a47..ddb1f13 100644 --- a/pagure/hooks/irc.py +++ b/pagure/hooks/irc.py @@ -33,7 +33,7 @@ class IrcTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/mail.py b/pagure/hooks/mail.py index a4cc2cb..0909760 100644 --- a/pagure/hooks/mail.py +++ b/pagure/hooks/mail.py @@ -33,7 +33,7 @@ class MailTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_force_commit.py b/pagure/hooks/pagure_force_commit.py index ff58b19..74a1198 100644 --- a/pagure/hooks/pagure_force_commit.py +++ b/pagure/hooks/pagure_force_commit.py @@ -33,7 +33,7 @@ class PagureForceCommitTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_hook.py b/pagure/hooks/pagure_hook.py index c04de9b..0d64fa9 100644 --- a/pagure/hooks/pagure_hook.py +++ b/pagure/hooks/pagure_hook.py @@ -33,7 +33,7 @@ class PagureTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_request_hook.py b/pagure/hooks/pagure_request_hook.py index af08004..7dcca15 100644 --- a/pagure/hooks/pagure_request_hook.py +++ b/pagure/hooks/pagure_request_hook.py @@ -35,7 +35,7 @@ class PagureRequestsTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_ticket_hook.py b/pagure/hooks/pagure_ticket_hook.py index 97e3822..190e020 100644 --- a/pagure/hooks/pagure_ticket_hook.py +++ b/pagure/hooks/pagure_ticket_hook.py @@ -34,7 +34,7 @@ class PagureTicketsTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_unsigned_commits.py b/pagure/hooks/pagure_unsigned_commits.py index 9885b4f..52e8fed 100644 --- a/pagure/hooks/pagure_unsigned_commits.py +++ b/pagure/hooks/pagure_unsigned_commits.py @@ -33,7 +33,7 @@ class PagureUnsignedCommitTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/rtd.py b/pagure/hooks/rtd.py index b1cb0f3..8e1f837 100644 --- a/pagure/hooks/rtd.py +++ b/pagure/hooks/rtd.py @@ -33,7 +33,7 @@ class RtdTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) From 69599af611699948c27ca20bc4e3275bb474b675 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 2/8] When a project is deleted, dropped its groups as well --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index c325c32..89695c7 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -1216,7 +1216,9 @@ class ProjectGroup(BASE): __tablename__ = 'projects_groups' project_id = sa.Column( - sa.Integer, sa.ForeignKey('projects.id'), primary_key=True) + sa.Integer, + sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + primary_key=True) group_id = sa.Column( sa.Integer, sa.ForeignKey('pagure_group.id'), primary_key=True) From ab59c1516e53888a17dc608950667b8ecfdee561 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 3/8] Add an alembic migration file to update the DB constraints So that deleting a projects works even if it had been configured before --- diff --git a/alembic/versions/317a285e04a8_delete_hooks.py b/alembic/versions/317a285e04a8_delete_hooks.py new file mode 100644 index 0000000..2ee64e2 --- /dev/null +++ b/alembic/versions/317a285e04a8_delete_hooks.py @@ -0,0 +1,59 @@ +"""Delete hooks + +Revision ID: 317a285e04a8 +Revises: 2aa7b3958bc5 +Create Date: 2016-05-30 11:28:48.512577 + +""" + +# revision identifiers, used by Alembic. +revision = '317a285e04a8' +down_revision = '2aa7b3958bc5' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + """ Alter the hooks table to update the foreign key to cascade on delete. + """ + + for table in [ + 'hook_fedmsg', 'hook_irc', 'hook_mail', + 'hook_pagure_force_commit', 'hook_pagure', 'hook_pagure_requests', + 'hook_pagure_tickets', 'hook_pagure_unsigned_commit', 'hook_rtd', + ]: + op.drop_constraint( + '%s_project_id_fkey' % table, + table, + type_='foreignkey') + op. create_foreign_key( + name='%s_project_id_fkey' % table, + source_table=table, + referent_table='projects', + local_cols=['project_id'], + remote_cols=['id'], + onupdate='cascade', + ondelete='cascade', + ) + + op.drop_constraint( + 'projects_groups_project_id_fkey', + 'projects_groups', + type_='foreignkey') + op. create_foreign_key( + name='projects_groups_project_id_fkey', + source_table='projects_groups', + referent_table='projects', + local_cols=['project_id'], + remote_cols=['id'], + onupdate='cascade', + ondelete='cascade', + ) + + + +def downgrade(): + """ Alter the hooks table to update the foreign key to undo the cascade + on delete. + """ From 145fcb50ae4376b9ca46d0fc082d072f92cfe472 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 4/8] Let's name the foreign keys for the future --- diff --git a/pagure/hooks/fedmsg.py b/pagure/hooks/fedmsg.py index 9f5410e..324e592 100644 --- a/pagure/hooks/fedmsg.py +++ b/pagure/hooks/fedmsg.py @@ -32,7 +32,9 @@ class FedmsgTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE' + name='hook_fedmsg_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/irc.py b/pagure/hooks/irc.py index ddb1f13..096296f 100644 --- a/pagure/hooks/irc.py +++ b/pagure/hooks/irc.py @@ -33,7 +33,9 @@ class IrcTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_irc_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/mail.py b/pagure/hooks/mail.py index 0909760..0ca1356 100644 --- a/pagure/hooks/mail.py +++ b/pagure/hooks/mail.py @@ -33,7 +33,9 @@ class MailTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_mail_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_force_commit.py b/pagure/hooks/pagure_force_commit.py index 74a1198..832c26e 100644 --- a/pagure/hooks/pagure_force_commit.py +++ b/pagure/hooks/pagure_force_commit.py @@ -33,7 +33,9 @@ class PagureForceCommitTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_pagure_force_commit_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_hook.py b/pagure/hooks/pagure_hook.py index 0d64fa9..ec4170f 100644 --- a/pagure/hooks/pagure_hook.py +++ b/pagure/hooks/pagure_hook.py @@ -33,7 +33,9 @@ class PagureTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE' + name='hook_pagure_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_request_hook.py b/pagure/hooks/pagure_request_hook.py index 7dcca15..e050fbe 100644 --- a/pagure/hooks/pagure_request_hook.py +++ b/pagure/hooks/pagure_request_hook.py @@ -35,7 +35,9 @@ class PagureRequestsTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_pagure_requests_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_ticket_hook.py b/pagure/hooks/pagure_ticket_hook.py index 190e020..0cd448d 100644 --- a/pagure/hooks/pagure_ticket_hook.py +++ b/pagure/hooks/pagure_ticket_hook.py @@ -34,7 +34,9 @@ class PagureTicketsTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_pagure_tickets_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_unsigned_commits.py b/pagure/hooks/pagure_unsigned_commits.py index 52e8fed..4b1070f 100644 --- a/pagure/hooks/pagure_unsigned_commits.py +++ b/pagure/hooks/pagure_unsigned_commits.py @@ -33,7 +33,9 @@ class PagureUnsignedCommitTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_pagure_unsigned_commit_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/rtd.py b/pagure/hooks/rtd.py index 8e1f837..58da6b6 100644 --- a/pagure/hooks/rtd.py +++ b/pagure/hooks/rtd.py @@ -33,7 +33,9 @@ class RtdTable(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='hook_rtd_project_id_fkey'), nullable=False, unique=True, index=True) diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 89695c7..ce5092a 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -1217,10 +1217,14 @@ class ProjectGroup(BASE): project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE', ondelete='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', + name='projects_groups_project_id_fkey'), primary_key=True) group_id = sa.Column( - sa.Integer, sa.ForeignKey('pagure_group.id'), primary_key=True) + sa.Integer, sa.ForeignKey( + 'pagure_group.id', name='projects_groups_pagure_group_id_fkey'), + primary_key=True) # Constraints __table_args__ = ( From a068d3dfc7e6ddf53c0eef9b17c835e5299544e8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 5/8] Name the foreign keys in the model as well --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index ce5092a..25276d5 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -221,7 +221,9 @@ class UserEmail(BASE): id = sa.Column(sa.Integer, primary_key=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='user_emails_user_id_fkey'), nullable=False, index=True) email = sa.Column(sa.String(255), nullable=False, unique=True) @@ -244,7 +246,9 @@ class UserEmailPending(BASE): id = sa.Column(sa.Integer, primary_key=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='user_emails_pending_user_id_fkey'), nullable=False, index=True) email = sa.Column(sa.String(255), nullable=False, unique=True) @@ -275,7 +279,9 @@ class Project(BASE): id = sa.Column(sa.Integer, primary_key=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='projects_user_id_fkey'), nullable=False, index=True) name = sa.Column(sa.String(255), nullable=False, index=True) @@ -286,7 +292,9 @@ class Project(BASE): avatar_email = sa.Column(sa.Text, nullable=True) parent_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE' + name='projects_parent_id_fkey'), nullable=True) _priorities = sa.Column(sa.Text, nullable=True) _milestones = sa.Column(sa.Text, nullable=True) @@ -479,11 +487,15 @@ class ProjectUser(BASE): id = sa.Column(sa.Integer, primary_key=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', + name='user_projects_project_id_fkey'), nullable=False) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='user_projects_user_id_fkey'), nullable=False, index=True) @@ -501,7 +513,8 @@ class Issue(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE'), + 'projects.id', onupdate='CASCADE', + name='issues_project_id_fkey'), primary_key=True) title = sa.Column( sa.Text, @@ -511,18 +524,23 @@ class Issue(BASE): nullable=False) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='issues_user_id_fkey'), nullable=False, index=True) assignee_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='issues_assignee_id_fkey'), nullable=True, index=True) status = sa.Column( sa.String(255), sa.ForeignKey( - 'status_issue.status', onupdate='CASCADE'), + 'status_issue.status', onupdate='CASCADE', + name='issues_status_fkey'), default='Open', nullable=False) private = sa.Column(sa.Boolean, nullable=False, default=False) @@ -623,12 +641,14 @@ class IssueToIssue(BASE): parent_issue_id = sa.Column( sa.String(32), sa.ForeignKey( - 'issues.uid', ondelete='CASCADE', onupdate='CASCADE'), + 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', + name='issue_to_issue_parent_issue_id_fkey'), primary_key=True) child_issue_id = sa.Column( sa.String(32), sa.ForeignKey( - 'issues.uid', ondelete='CASCADE', onupdate='CASCADE'), + 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', + name='issue_to_issue_child_issue_id_fkey'), primary_key=True) @@ -644,24 +664,31 @@ class IssueComment(BASE): issue_uid = sa.Column( sa.String(32), sa.ForeignKey( - 'issues.uid', ondelete='CASCADE', onupdate='CASCADE'), + 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', + name='issue_comments_issue_uid_fkey'), index=True) comment = sa.Column( sa.Text(), nullable=False) parent_id = sa.Column( sa.Integer, - sa.ForeignKey('issue_comments.id', onupdate='CASCADE'), + sa.ForeignKey( + 'issue_comments.id', onupdate='CASCADE', + name='issue_comments_parent_id_fkey'), nullable=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='issue_comments_user_id_fkey'), nullable=False, index=True) edited_on = sa.Column(sa.DateTime, nullable=True) editor_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='issue_comments_editor_id_fkey'), nullable=True) date_created = sa.Column(sa.DateTime, nullable=False, @@ -732,12 +759,14 @@ class TagIssue(BASE): tag = sa.Column( sa.String(255), sa.ForeignKey( - 'tags.tag', ondelete='CASCADE', onupdate='CASCADE'), + 'tags.tag', ondelete='CASCADE', onupdate='CASCADE', + name='tags_issues_tag_fkey'), primary_key=True) issue_uid = sa.Column( sa.String(32), sa.ForeignKey( - 'issues.uid', ondelete='CASCADE', onupdate='CASCADE'), + 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', + name='tags_issues_issue_uid_fkey'), primary_key=True) date_created = sa.Column(sa.DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -763,12 +792,14 @@ class TagProject(BASE): tag = sa.Column( sa.String(255), sa.ForeignKey( - 'tags.tag', ondelete='CASCADE', onupdate='CASCADE'), + 'tags.tag', ondelete='CASCADE', onupdate='CASCADE', + name='tags_projects_tag_fkey'), primary_key=True) project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', ondelete='CASCADE', onupdate='CASCADE'), + 'projects.id', ondelete='CASCADE', onupdate='CASCADE', + name='tags_projects_project_id_fkey'), primary_key=True) date_created = sa.Column(sa.DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -800,7 +831,8 @@ class PullRequest(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', ondelete='CASCADE', onupdate='CASCADE'), + 'projects.id', ondelete='CASCADE', onupdate='CASCADE', + name='pull_requests_project_id_fkey'), primary_key=True) branch = sa.Column( sa.Text(), @@ -808,7 +840,8 @@ class PullRequest(BASE): project_id_from = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', ondelete='CASCADE', onupdate='CASCADE'), + 'projects.id', ondelete='CASCADE', onupdate='CASCADE', + name='pull_requests_project_id_from_fkey'), nullable=True) remote_git = sa.Column( sa.Text(), @@ -827,12 +860,16 @@ class PullRequest(BASE): nullable=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='pull_requests_user_id_fkey'), nullable=False, index=True) assignee_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='pull_requests_assignee_id_fkey'), nullable=True, index=True) merge_status = sa.Column( @@ -844,12 +881,15 @@ class PullRequest(BASE): status = sa.Column( sa.String(255), sa.ForeignKey( - 'status_pull_requests.status', onupdate='CASCADE'), + 'status_pull_requests.status', onupdate='CASCADE', + name='pull_requests__status_fkey'), default='Open', nullable=False) closed_by_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='pull_requests_closed_by_id_fkey'), nullable=True) closed_at = sa.Column( sa.DateTime, @@ -1000,7 +1040,8 @@ class PullRequestComment(BASE): pull_request_uid = sa.Column( sa.String(32), sa.ForeignKey( - 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE'), + 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE' + name='pull_request_comments_pull_requests_uid_fkey'), nullable=False) commit_id = sa.Column( sa.String(40), @@ -1008,7 +1049,9 @@ class PullRequestComment(BASE): index=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='pull_request_comments_users_id_fkey'), nullable=False, index=True) filename = sa.Column( @@ -1025,7 +1068,9 @@ class PullRequestComment(BASE): nullable=False) parent_id = sa.Column( sa.Integer, - sa.ForeignKey('pull_request_comments.id', onupdate='CASCADE'), + sa.ForeignKey( + 'pull_request_comments.id', onupdate='CASCADE', + name='pull_request_comments_parent_id_fkey'), nullable=True) notification = sa.Column(sa.Boolean, default=False, nullable=False) edited_on = sa.Column(sa.DateTime, nullable=True) @@ -1096,11 +1141,14 @@ class PullRequestFlag(BASE): pull_request_uid = sa.Column( sa.String(32), sa.ForeignKey( - 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE'), + 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE', + name='pull_request_flags_pull_requests_uid_fkey'), nullable=False) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='pull_request_flags_user_id_fkey'), nullable=False, index=True) username = sa.Column( @@ -1183,12 +1231,16 @@ class PagureGroup(BASE): group_name = sa.Column(sa.String(16), nullable=False, unique=True) group_type = sa.Column( sa.String(16), - sa.ForeignKey('pagure_group_type.group_type'), + sa.ForeignKey( + 'pagure_group_type.group_type', + name='pagure_group_grp_type_fkey'), default='user', nullable=False) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='pagure_group_user_id_fkey'), nullable=False, index=True) created = sa.Column( @@ -1223,7 +1275,8 @@ class ProjectGroup(BASE): primary_key=True) group_id = sa.Column( sa.Integer, sa.ForeignKey( - 'pagure_group.id', name='projects_groups_pagure_group_id_fkey'), + 'pagure_group.id', + name='projects_groups_group_id_fkey'), primary_key=True) # Constraints @@ -1266,12 +1319,16 @@ class Token(BASE): id = sa.Column(sa.String(64), primary_key=True) user_id = sa.Column( sa.Integer, - sa.ForeignKey('users.id', onupdate='CASCADE'), + sa.ForeignKey( + 'users.id', onupdate='CASCADE', + name='tokens_user_id_fkey'), nullable=False, index=True) project_id = sa.Column( sa.Integer, - sa.ForeignKey('projects.id', onupdate='CASCADE'), + sa.ForeignKey( + 'projects.id', onupdate='CASCADE', + name='tokens_project_id_fkey'), nullable=False, index=True) expiration = sa.Column( @@ -1332,9 +1389,15 @@ class TokenAcl(BASE): __tablename__ = 'tokens_acls' token_id = sa.Column( - sa.String(64), sa.ForeignKey('tokens.id'), primary_key=True) + sa.String(64), sa.ForeignKey( + 'tokens.id', + name='tokens_acls_token_id_fkey'), + primary_key=True) acl_id = sa.Column( - sa.Integer, sa.ForeignKey('acls.id'), primary_key=True) + sa.Integer, sa.ForeignKey( + 'acls.id', + name='tokens_acls_acl_id_fkey'), + primary_key=True) # Constraints __table_args__ = ( @@ -1358,7 +1421,10 @@ class PagureUserVisit(BASE): id = sa.Column(sa.Integer, primary_key=True) user_id = sa.Column( - sa.Integer, sa.ForeignKey('users.id'), nullable=False) + sa.Integer, sa.ForeignKey( + 'users.id', + name='pagure_user_visit_user_id_fkey'), + nullable=False) visit_key = sa.Column( sa.String(40), nullable=False, unique=True, index=True) user_ip = sa.Column(sa.String(50), nullable=False) @@ -1376,9 +1442,15 @@ class PagureUserGroup(BASE): __tablename__ = 'pagure_user_group' user_id = sa.Column( - sa.Integer, sa.ForeignKey('users.id'), primary_key=True) + sa.Integer, sa.ForeignKey( + 'users.id', + name='pagure_user_group_user_id_fkey'), + primary_key=True) group_id = sa.Column( - sa.Integer, sa.ForeignKey('pagure_group.id'), primary_key=True) + sa.Integer, sa.ForeignKey( + 'pagure_group.id', + name='pagure_user_group_pkey'), + primary_key=True) # Constraints __table_args__ = ( From 6f177d36e717e66d554d67d7f7b7e467c7feaa3b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 6/8] Fix typos --- diff --git a/pagure/hooks/fedmsg.py b/pagure/hooks/fedmsg.py index 324e592..c821d96 100644 --- a/pagure/hooks/fedmsg.py +++ b/pagure/hooks/fedmsg.py @@ -33,7 +33,7 @@ class FedmsgTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE' + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', name='hook_fedmsg_project_id_fkey'), nullable=False, unique=True, diff --git a/pagure/hooks/pagure_hook.py b/pagure/hooks/pagure_hook.py index ec4170f..8bf9621 100644 --- a/pagure/hooks/pagure_hook.py +++ b/pagure/hooks/pagure_hook.py @@ -34,7 +34,7 @@ class PagureTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE' + 'projects.id', onupdate='CASCADE', ondelete='CASCADE', name='hook_pagure_project_id_fkey'), nullable=False, unique=True, From e3755fe310a11ef2b2fc52b699bfcf221f5ee1e2 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 7/8] Drop the names of the foreign keys for sqlalchemy's naming conventions --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 25276d5..7755423 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -17,7 +17,7 @@ import json import sqlalchemy as sa -from sqlalchemy import create_engine +from sqlalchemy import create_engine, MetaData from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import backref @@ -25,7 +25,17 @@ from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import scoped_session from sqlalchemy.orm import relation -BASE = declarative_base() + +CONVENTION = { + "ix": 'ix_%(table_name)s_%(column_0_label)s', + # Checks are currently buggy and prevent us from naming them correctly + #"ck": "ck_%(table_name)s_%(constraint_name)s", + "fk": "%(table_name)s_%(column_0_name)s_fkey", + "pk": "%(table_name)s_pkey", + "uq": "%(table_name)s_%(column_0_name)s_key", +} + +BASE = declarative_base(metadata=MetaData(naming_convention=CONVENTION)) ERROR_LOG = logging.getLogger('pagure.model') @@ -223,7 +233,7 @@ class UserEmail(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='user_emails_user_id_fkey'), + ), nullable=False, index=True) email = sa.Column(sa.String(255), nullable=False, unique=True) @@ -248,7 +258,7 @@ class UserEmailPending(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='user_emails_pending_user_id_fkey'), + ), nullable=False, index=True) email = sa.Column(sa.String(255), nullable=False, unique=True) @@ -281,7 +291,7 @@ class Project(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='projects_user_id_fkey'), + ), nullable=False, index=True) name = sa.Column(sa.String(255), nullable=False, index=True) @@ -293,8 +303,8 @@ class Project(BASE): parent_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE' - name='projects_parent_id_fkey'), + 'projects.id', onupdate='CASCADE', + ), nullable=True) _priorities = sa.Column(sa.Text, nullable=True) _milestones = sa.Column(sa.Text, nullable=True) @@ -489,13 +499,13 @@ class ProjectUser(BASE): sa.Integer, sa.ForeignKey( 'projects.id', onupdate='CASCADE', - name='user_projects_project_id_fkey'), + ), nullable=False) user_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='user_projects_user_id_fkey'), + ), nullable=False, index=True) @@ -514,7 +524,7 @@ class Issue(BASE): sa.Integer, sa.ForeignKey( 'projects.id', onupdate='CASCADE', - name='issues_project_id_fkey'), + ), primary_key=True) title = sa.Column( sa.Text, @@ -526,21 +536,21 @@ class Issue(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='issues_user_id_fkey'), + ), nullable=False, index=True) assignee_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='issues_assignee_id_fkey'), + ), nullable=True, index=True) status = sa.Column( sa.String(255), sa.ForeignKey( 'status_issue.status', onupdate='CASCADE', - name='issues_status_fkey'), + ), default='Open', nullable=False) private = sa.Column(sa.Boolean, nullable=False, default=False) @@ -642,13 +652,13 @@ class IssueToIssue(BASE): sa.String(32), sa.ForeignKey( 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', - name='issue_to_issue_parent_issue_id_fkey'), + ), primary_key=True) child_issue_id = sa.Column( sa.String(32), sa.ForeignKey( 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', - name='issue_to_issue_child_issue_id_fkey'), + ), primary_key=True) @@ -665,7 +675,7 @@ class IssueComment(BASE): sa.String(32), sa.ForeignKey( 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', - name='issue_comments_issue_uid_fkey'), + ), index=True) comment = sa.Column( sa.Text(), @@ -674,13 +684,13 @@ class IssueComment(BASE): sa.Integer, sa.ForeignKey( 'issue_comments.id', onupdate='CASCADE', - name='issue_comments_parent_id_fkey'), + ), nullable=True) user_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='issue_comments_user_id_fkey'), + ), nullable=False, index=True) edited_on = sa.Column(sa.DateTime, nullable=True) @@ -688,7 +698,7 @@ class IssueComment(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='issue_comments_editor_id_fkey'), + ), nullable=True) date_created = sa.Column(sa.DateTime, nullable=False, @@ -760,13 +770,13 @@ class TagIssue(BASE): sa.String(255), sa.ForeignKey( 'tags.tag', ondelete='CASCADE', onupdate='CASCADE', - name='tags_issues_tag_fkey'), + ), primary_key=True) issue_uid = sa.Column( sa.String(32), sa.ForeignKey( 'issues.uid', ondelete='CASCADE', onupdate='CASCADE', - name='tags_issues_issue_uid_fkey'), + ), primary_key=True) date_created = sa.Column(sa.DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -793,13 +803,13 @@ class TagProject(BASE): sa.String(255), sa.ForeignKey( 'tags.tag', ondelete='CASCADE', onupdate='CASCADE', - name='tags_projects_tag_fkey'), + ), primary_key=True) project_id = sa.Column( sa.Integer, sa.ForeignKey( 'projects.id', ondelete='CASCADE', onupdate='CASCADE', - name='tags_projects_project_id_fkey'), + ), primary_key=True) date_created = sa.Column(sa.DateTime, nullable=False, default=datetime.datetime.utcnow) @@ -832,7 +842,7 @@ class PullRequest(BASE): sa.Integer, sa.ForeignKey( 'projects.id', ondelete='CASCADE', onupdate='CASCADE', - name='pull_requests_project_id_fkey'), + ), primary_key=True) branch = sa.Column( sa.Text(), @@ -841,7 +851,7 @@ class PullRequest(BASE): sa.Integer, sa.ForeignKey( 'projects.id', ondelete='CASCADE', onupdate='CASCADE', - name='pull_requests_project_id_from_fkey'), + ), nullable=True) remote_git = sa.Column( sa.Text(), @@ -862,34 +872,35 @@ class PullRequest(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='pull_requests_user_id_fkey'), + ), nullable=False, index=True) assignee_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='pull_requests_assignee_id_fkey'), + ), nullable=True, index=True) merge_status = sa.Column( sa.Enum( 'NO_CHANGE', 'FFORWARD', 'CONFLICTS', 'MERGE', - name='merge_status_enum'), + name='merge_status_enum', + ), nullable=True) status = sa.Column( sa.String(255), sa.ForeignKey( 'status_pull_requests.status', onupdate='CASCADE', - name='pull_requests__status_fkey'), + ), default='Open', nullable=False) closed_by_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='pull_requests_closed_by_id_fkey'), + ), nullable=True) closed_at = sa.Column( sa.DateTime, @@ -905,7 +916,7 @@ class PullRequest(BASE): __table_args__ = ( sa.CheckConstraint( - 'NOT(project_id_from IS NULL AND remote_git IS NULL)' + 'NOT(project_id_from IS NULL AND remote_git IS NULL)', ), ) @@ -1040,8 +1051,8 @@ class PullRequestComment(BASE): pull_request_uid = sa.Column( sa.String(32), sa.ForeignKey( - 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE' - name='pull_request_comments_pull_requests_uid_fkey'), + 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE', + ), nullable=False) commit_id = sa.Column( sa.String(40), @@ -1051,7 +1062,7 @@ class PullRequestComment(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='pull_request_comments_users_id_fkey'), + ), nullable=False, index=True) filename = sa.Column( @@ -1070,7 +1081,7 @@ class PullRequestComment(BASE): sa.Integer, sa.ForeignKey( 'pull_request_comments.id', onupdate='CASCADE', - name='pull_request_comments_parent_id_fkey'), + ), nullable=True) notification = sa.Column(sa.Boolean, default=False, nullable=False) edited_on = sa.Column(sa.DateTime, nullable=True) @@ -1142,13 +1153,13 @@ class PullRequestFlag(BASE): sa.String(32), sa.ForeignKey( 'pull_requests.uid', ondelete='CASCADE', onupdate='CASCADE', - name='pull_request_flags_pull_requests_uid_fkey'), + ), nullable=False) user_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='pull_request_flags_user_id_fkey'), + ), nullable=False, index=True) username = sa.Column( @@ -1233,14 +1244,14 @@ class PagureGroup(BASE): sa.String(16), sa.ForeignKey( 'pagure_group_type.group_type', - name='pagure_group_grp_type_fkey'), + ), default='user', nullable=False) user_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='pagure_group_user_id_fkey'), + ), nullable=False, index=True) created = sa.Column( @@ -1271,12 +1282,12 @@ class ProjectGroup(BASE): sa.Integer, sa.ForeignKey( 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='projects_groups_project_id_fkey'), + ), primary_key=True) group_id = sa.Column( sa.Integer, sa.ForeignKey( 'pagure_group.id', - name='projects_groups_group_id_fkey'), + ), primary_key=True) # Constraints @@ -1321,14 +1332,14 @@ class Token(BASE): sa.Integer, sa.ForeignKey( 'users.id', onupdate='CASCADE', - name='tokens_user_id_fkey'), + ), nullable=False, index=True) project_id = sa.Column( sa.Integer, sa.ForeignKey( 'projects.id', onupdate='CASCADE', - name='tokens_project_id_fkey'), + ), nullable=False, index=True) expiration = sa.Column( @@ -1391,12 +1402,12 @@ class TokenAcl(BASE): token_id = sa.Column( sa.String(64), sa.ForeignKey( 'tokens.id', - name='tokens_acls_token_id_fkey'), + ), primary_key=True) acl_id = sa.Column( sa.Integer, sa.ForeignKey( 'acls.id', - name='tokens_acls_acl_id_fkey'), + ), primary_key=True) # Constraints @@ -1423,7 +1434,7 @@ class PagureUserVisit(BASE): user_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', - name='pagure_user_visit_user_id_fkey'), + ), nullable=False) visit_key = sa.Column( sa.String(40), nullable=False, unique=True, index=True) @@ -1444,12 +1455,12 @@ class PagureUserGroup(BASE): user_id = sa.Column( sa.Integer, sa.ForeignKey( 'users.id', - name='pagure_user_group_user_id_fkey'), + ), primary_key=True) group_id = sa.Column( sa.Integer, sa.ForeignKey( 'pagure_group.id', - name='pagure_user_group_pkey'), + ), primary_key=True) # Constraints From bb67e09dc12386b106854de0d50514e6549bdd6f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 31 2016 06:22:54 +0000 Subject: [PATCH 8/8] Drop the names of the foreign keys for sqlalchemy's naming conventions in the plugins --- diff --git a/pagure/hooks/fedmsg.py b/pagure/hooks/fedmsg.py index c821d96..69cf3f5 100644 --- a/pagure/hooks/fedmsg.py +++ b/pagure/hooks/fedmsg.py @@ -33,8 +33,7 @@ class FedmsgTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_fedmsg_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/irc.py b/pagure/hooks/irc.py index 096296f..c9ff494 100644 --- a/pagure/hooks/irc.py +++ b/pagure/hooks/irc.py @@ -34,8 +34,7 @@ class IrcTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_irc_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/mail.py b/pagure/hooks/mail.py index 0ca1356..cf67419 100644 --- a/pagure/hooks/mail.py +++ b/pagure/hooks/mail.py @@ -34,8 +34,7 @@ class MailTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_mail_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_force_commit.py b/pagure/hooks/pagure_force_commit.py index 832c26e..b90f047 100644 --- a/pagure/hooks/pagure_force_commit.py +++ b/pagure/hooks/pagure_force_commit.py @@ -34,8 +34,7 @@ class PagureForceCommitTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_pagure_force_commit_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_hook.py b/pagure/hooks/pagure_hook.py index 8bf9621..5d9a14c 100644 --- a/pagure/hooks/pagure_hook.py +++ b/pagure/hooks/pagure_hook.py @@ -34,8 +34,7 @@ class PagureTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_pagure_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_request_hook.py b/pagure/hooks/pagure_request_hook.py index e050fbe..7182531 100644 --- a/pagure/hooks/pagure_request_hook.py +++ b/pagure/hooks/pagure_request_hook.py @@ -36,8 +36,7 @@ class PagureRequestsTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_pagure_requests_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_ticket_hook.py b/pagure/hooks/pagure_ticket_hook.py index 0cd448d..83b1a8b 100644 --- a/pagure/hooks/pagure_ticket_hook.py +++ b/pagure/hooks/pagure_ticket_hook.py @@ -35,8 +35,7 @@ class PagureTicketsTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_pagure_tickets_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/pagure_unsigned_commits.py b/pagure/hooks/pagure_unsigned_commits.py index 4b1070f..745abb7 100644 --- a/pagure/hooks/pagure_unsigned_commits.py +++ b/pagure/hooks/pagure_unsigned_commits.py @@ -34,8 +34,7 @@ class PagureUnsignedCommitTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_pagure_unsigned_commit_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True) diff --git a/pagure/hooks/rtd.py b/pagure/hooks/rtd.py index 58da6b6..0a0e586 100644 --- a/pagure/hooks/rtd.py +++ b/pagure/hooks/rtd.py @@ -34,8 +34,7 @@ class RtdTable(BASE): project_id = sa.Column( sa.Integer, sa.ForeignKey( - 'projects.id', onupdate='CASCADE', ondelete='CASCADE', - name='hook_rtd_project_id_fkey'), + 'projects.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False, unique=True, index=True)