agent-flow / src /backend /base /langflow /alembic /versions /58b28437a398_modify_nullable.py
Tai Truong
fix readme
d202ada
"""Modify nullable
Revision ID: 58b28437a398
Revises: 4e5980a44eaa
Create Date: 2024-04-13 10:57:23.061709
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
from loguru import logger
from sqlalchemy.engine.reflection import Inspector
down_revision: Union[str, None] = "4e5980a44eaa"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
# Revision identifiers, used by Alembic.
revision = "58b28437a398"
down_revision = "4e5980a44eaa"
branch_labels = None
depends_on = None
def upgrade():
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = ["apikey", "variable"] # List of tables to modify
for table_name in tables:
modify_nullable(conn, inspector, table_name, upgrade=True)
def downgrade():
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = ["apikey", "variable"] # List of tables to revert
for table_name in tables:
modify_nullable(conn, inspector, table_name, upgrade=False)
def modify_nullable(conn, inspector, table_name, upgrade=True):
columns = inspector.get_columns(table_name)
nullable_changes = {"apikey": {"created_at": False}, "variable": {"created_at": True, "updated_at": True}}
if table_name in columns:
with op.batch_alter_table(table_name, schema=None) as batch_op:
for column_name, nullable_setting in nullable_changes.get(table_name, {}).items():
column_info = next((col for col in columns if col["name"] == column_name), None)
if column_info:
current_nullable = column_info["nullable"]
target_nullable = nullable_setting if upgrade else not nullable_setting
if current_nullable != target_nullable:
batch_op.alter_column(
column_name, existing_type=sa.DateTime(timezone=True), nullable=target_nullable
)
else:
logger.info(
f"Column '{column_name}' in table '{table_name}' already has nullable={target_nullable}"
)
else:
logger.warning(f"Column '{column_name}' not found in table '{table_name}'")