From 0d68b914bfcd348e15ea7c0a67cd754d3ac1300b Mon Sep 17 00:00:00 2001
From: Leonidas Spyropoulos <artafinde@gmail.com>
Date: Tue, 18 May 2021 13:04:20 +0100
Subject: [PATCH] Conditionally apply SSOAccountId migration to support
 misaligned databases

Closes: #34

Signed-off-by: Leonidas Spyropoulos <artafinde@gmail.com>
---
 ...6e1cd_add_sso_account_id_in_table_users.py | 25 +++++++++++--------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py b/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py
index d3b3693d4..2b257e9d8 100644
--- a/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py
+++ b/migrations/versions/ef39fcd6e1cd_add_sso_account_id_in_table_users.py
@@ -5,9 +5,9 @@ Revises: f47cad5d6d03
 Create Date: 2020-06-08 10:04:13.898617
 
 """
-from alembic import op
 import sqlalchemy as sa
-
+from alembic import op
+from sqlalchemy.engine.reflection import Inspector
 
 # revision identifiers, used by Alembic.
 revision = 'ef39fcd6e1cd'
@@ -16,15 +16,20 @@ branch_labels = None
 depends_on = None
 
 
+def table_has_column(table, column_name):
+    for element in Inspector.from_engine(op.get_bind()).get_columns(table):
+        if element.get('name') == column_name:
+            return True
+    return False
+
+
 def upgrade():
-    # ### commands auto generated by Alembic - please adjust! ###
-    op.add_column('Users', sa.Column('SSOAccountID', sa.String(length=255), nullable=True))
-    op.create_unique_constraint(None, 'Users', ['SSOAccountID'])
-    # ### end Alembic commands ###
+    if not table_has_column('Users', 'SSOAccountID'):
+        op.add_column('Users', sa.Column('SSOAccountID', sa.String(length=255), nullable=True))
+        op.create_unique_constraint(None, 'Users', ['SSOAccountID'])
 
 
 def downgrade():
-    # ### commands auto generated by Alembic - please adjust! ###
-    op.drop_constraint('SSOAccountID', 'Users', type_='unique')
-    op.drop_column('Users', 'SSOAccountID')
-    # ### end Alembic commands ###
+    if table_has_column('Users', 'SSOAccountID'):
+        op.drop_constraint('SSOAccountID', 'Users', type_='unique')
+        op.drop_column('Users', 'SSOAccountID')
-- 
GitLab