From 7918f86ac0dd55a7be863bf29a074b4edbe4b656 Mon Sep 17 00:00:00 2001 From: tilly-Q Date: Tue, 22 Apr 2014 13:32:47 -0400 Subject: [PATCH 1/2] Renamed the columns on core__privileges_users table so that they are unique and will not cause any more problems. --- mediagoblin/db/migrations.py | 45 ++++++++++++++++++++++++++++++++++++ mediagoblin/db/models.py | 4 ++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index 426080a2..66b503b5 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -720,3 +720,48 @@ def drop_MediaEntry_collected(db): media_collected.drop() db.commit() + +class PrivilegeUserAssociation_R1(declarative_base()): + __tablename__ = 'rename__privileges_users' + privilege_id = Column( + 'id_of_privilege', + Integer, + ForeignKey(User.id), + primary_key=True) + user_id = Column( + 'id_of_user', + Integer, + ForeignKey(Privilege.id), + primary_key=True) + +@RegisterMigration(20, MIGRATIONS) +def fix_privilege_user_association_table(db): + """ + There was an error in the PrivilegeUserAssociation table that allowed for a + dangerous sql error. We need to the change the name of the columns to be + unique. + """ + metadata = MetaData(bind=db.bind) + + privilege_user_assoc = inspect_table( + metadata, 'core__privileges_users') + PrivilegeUserAssociation_R1.__table__.create(db.bind) + db.commit() + + new_privilege_user_assoc = inspect_table( + metadata, 'rename__privileges_users') + result = db.execute(privilege_user_assoc.select()) + for row in result: + priv_id, user_id = row['core__privilege_id'], row['core__user_id'] + db.execute(new_privilege_user_assoc.insert().values( + id_of_privilege=priv_id, + id_of_user=user_id)) + + db.commit() + + privilege_user_assoc.drop() + new_privilege_user_assoc.rename('core__privileges_users') + + db.commit() + + diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index b750375d..58635419 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -876,12 +876,12 @@ class PrivilegeUserAssociation(Base): __tablename__ = 'core__privileges_users' privilege_id = Column( - 'core__privilege_id', + 'id_of_privilege', Integer, ForeignKey(User.id), primary_key=True) user_id = Column( - 'core__user_id', + 'id_of_user', Integer, ForeignKey(Privilege.id), primary_key=True) From 9adef07e8f0d169e57776bcefc03f2ae17c8920e Mon Sep 17 00:00:00 2001 From: tilly-Q Date: Wed, 23 Apr 2014 14:59:53 -0400 Subject: [PATCH 2/2] Made the columns properly referenced in models and migrations. --- mediagoblin/db/migrations.py | 17 +++++++---------- mediagoblin/db/models.py | 6 ++---- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py index 66b503b5..17f8bef4 100644 --- a/mediagoblin/db/migrations.py +++ b/mediagoblin/db/migrations.py @@ -723,13 +723,11 @@ def drop_MediaEntry_collected(db): class PrivilegeUserAssociation_R1(declarative_base()): __tablename__ = 'rename__privileges_users' - privilege_id = Column( - 'id_of_privilege', + user_id = Column( Integer, ForeignKey(User.id), primary_key=True) - user_id = Column( - 'id_of_user', + privilege_id = Column( Integer, ForeignKey(Privilege.id), primary_key=True) @@ -739,7 +737,7 @@ def fix_privilege_user_association_table(db): """ There was an error in the PrivilegeUserAssociation table that allowed for a dangerous sql error. We need to the change the name of the columns to be - unique. + unique, and properly referenced. """ metadata = MetaData(bind=db.bind) @@ -752,10 +750,11 @@ def fix_privilege_user_association_table(db): metadata, 'rename__privileges_users') result = db.execute(privilege_user_assoc.select()) for row in result: - priv_id, user_id = row['core__privilege_id'], row['core__user_id'] + # The columns were improperly named before, so we switch the columns + user_id, priv_id = row['core__privilege_id'], row['core__user_id'] db.execute(new_privilege_user_assoc.insert().values( - id_of_privilege=priv_id, - id_of_user=user_id)) + user_id=user_id, + privilege_id=priv_id)) db.commit() @@ -763,5 +762,3 @@ def fix_privilege_user_association_table(db): new_privilege_user_assoc.rename('core__privileges_users') db.commit() - - diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py index 58635419..f03cf615 100644 --- a/mediagoblin/db/models.py +++ b/mediagoblin/db/models.py @@ -875,13 +875,11 @@ class PrivilegeUserAssociation(Base): __tablename__ = 'core__privileges_users' - privilege_id = Column( - 'id_of_privilege', + user_id = Column( Integer, ForeignKey(User.id), primary_key=True) - user_id = Column( - 'id_of_user', + privilege_id = Column( Integer, ForeignKey(Privilege.id), primary_key=True)