Files
arrr-erp/alembic/versions/20260414_release_a_clients.py
2026-06-21 19:38:13 +05:30

68 lines
1.9 KiB
Python

"""release_a_clients_engagement_mode
Revision ID: 20260414_release_a_clients
Revises: 7f1c9b2d4a10
Create Date: 2026-04-14
"""
from alembic import op
import sqlalchemy as sa
revision = "20260414_release_a_clients"
down_revision = "7f1c9b2d4a10"
branch_labels = None
depends_on = None
def _has_column(table_name: str, column_name: str) -> bool:
bind = op.get_bind()
inspector = sa.inspect(bind)
return column_name in [c["name"] for c in inspector.get_columns(table_name)]
def upgrade():
# On the original production database this column was added out-of-band,
# outside of tracked migration history. On a fresh database (new env,
# new backend such as Postgres) it does not exist yet, so create it
# defensively here instead of assuming it's already present.
if not _has_column("clients", "engagement_mode"):
op.add_column(
"clients",
sa.Column(
"engagement_mode",
sa.String(length=30),
nullable=False,
server_default="internal_managed",
),
)
# Make partner_id nullable in a SQLite-safe way
with op.batch_alter_table("clients") as batch_op:
batch_op.alter_column(
"partner_id",
existing_type=sa.Integer(),
nullable=True,
)
# Remove server default from engagement_mode if it exists
with op.batch_alter_table("clients") as batch_op:
batch_op.alter_column(
"engagement_mode",
existing_type=sa.String(length=30),
server_default=None,
)
def downgrade():
# Revert partner_id back to NOT NULL
with op.batch_alter_table("clients") as batch_op:
batch_op.alter_column(
"partner_id",
existing_type=sa.Integer(),
nullable=False,
)
# Drop engagement_mode
with op.batch_alter_table("clients") as batch_op:
batch_op.drop_column("engagement_mode")