a52365776f0c_upgrade_all.py 2.43 KB
"""upgrade_all

Revision ID: a52365776f0c
Revises: a01dc09faec0
Create Date: 2023-03-06 20:29:10.252018

"""

# revision identifiers, used by Alembic.
revision = 'a52365776f0c'
down_revision = 'a01dc09faec0'
branch_labels = None
depends_on = None

import sqlalchemy as sa
from alembic import op


def upgrade():
    schema = 'public'
    context = op.get_context()
    helpers = context.opts['helpers']
    if not helpers.table_has_column('groups', 'group_name', schema):
        op.add_column('groups',
                      sa.Column('group_name', sa.String(50)), schema=schema)
    if not helpers.table_has_column('groups', 'description', schema):
        op.add_column('groups',
                      sa.Column('description', sa.TEXT), schema=schema)
    if not helpers.table_has_column('groups', 'member_count', schema):
        op.add_column('groups',
                      sa.Column('member_count', sa.Integer), schema=schema)
    # table = sa.sql.table(
    # "users", sa.sql.column("userid", sa.String(25)),
    # sa.sql.column("user_name", sa.String(64))
    # )
    if helpers.table_has_column("users", "userid", schema=schema):
        op.execute("update users set user_name=userid, status=disabled+1 where user_name is null")
        op.execute("update users set status=0 where status>1")
        op.execute(
            """update groups set group_name=kode, description=nama, member_count=0
            where kode is not null and nama is not null
            """)
        op.execute(
            """update groups set group_name='Superuser' where kode='sa'""")

        from opensipkd.models import User, Base, DBSession, init_model
        engine = op.get_bind()
        DBSession.configure(bind=engine)
        Base.metadata.bind = engine

        init_model()
        user_table = sa.Table(
            'users', sa.MetaData(schema="public"),
            autoload_with=engine,
            autoload_replace=True
        )

        result = engine.execute(sa.select(user_table))
        keys = user_table.columns.keys()
        rows = [dict(zip(keys, r)) for r in result]

        for row in rows:
            user = User.query_id(row["id"]).first()
            if not user.user_password:
                if "is_encrypt" in row and row["is_encrypt"]:
                    user.password = row["userid"]
                else:
                    user.password = row["passwd"]

                DBSession.add(user)
                DBSession.flush()


def downgrade():
    pass