79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
"""add owner to placeholder
|
|
|
|
Revision ID: d7ea9a3b2da1
|
|
Revises: 2b90b41a556a
|
|
Create Date: 2022-07-27 14:40:15.513820
|
|
|
|
"""
|
|
import citext
|
|
import sqlalchemy as sa
|
|
from alembic import context, op
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '2b90b41a556a'
|
|
down_revision = '3e3a67f62972'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def get_inv():
|
|
INV = context.get_x_argument(as_dictionary=True).get('inventory')
|
|
if not INV:
|
|
raise ValueError("Inventory value is not specified")
|
|
return INV
|
|
|
|
|
|
def upgrade_data():
|
|
con = op.get_bind()
|
|
sql = f"select {get_inv()}.placeholder.id, {get_inv()}.device.owner_id from {get_inv()}.placeholder"
|
|
sql += f" join {get_inv()}.device on {get_inv()}.device.id={get_inv()}.placeholder.device_id;"
|
|
|
|
for c in con.execute(sql):
|
|
id_placeholder = c.id
|
|
id_owner = c.owner_id
|
|
sql_update = f"update {get_inv()}.placeholder set owner_id='{id_owner}', is_abstract=False where id={id_placeholder};"
|
|
con.execute(sql_update)
|
|
|
|
|
|
def upgrade():
|
|
op.add_column(
|
|
'placeholder',
|
|
sa.Column('is_abstract', sa.Boolean(), nullable=True),
|
|
schema=f'{get_inv()}',
|
|
)
|
|
op.add_column(
|
|
'placeholder',
|
|
sa.Column('components', citext.CIText(), nullable=True),
|
|
schema=f'{get_inv()}',
|
|
)
|
|
op.add_column(
|
|
'placeholder',
|
|
sa.Column('owner_id', postgresql.UUID(), nullable=True),
|
|
schema=f'{get_inv()}',
|
|
)
|
|
op.create_foreign_key(
|
|
"fk_placeholder_owner_id_user_id",
|
|
"placeholder",
|
|
"user",
|
|
["owner_id"],
|
|
["id"],
|
|
ondelete="SET NULL",
|
|
source_schema=f'{get_inv()}',
|
|
referent_schema='common',
|
|
)
|
|
|
|
upgrade_data()
|
|
|
|
|
|
def downgrade():
|
|
op.drop_constraint(
|
|
"fk_placeholder_owner_id_user_id",
|
|
"placeholder",
|
|
type_="foreignkey",
|
|
schema=f'{get_inv()}',
|
|
)
|
|
op.drop_column('placeholder', 'owner_id', schema=f'{get_inv()}')
|
|
op.drop_column('placeholder', 'is_abstract', schema=f'{get_inv()}')
|
|
op.drop_column('placeholder', 'components', schema=f'{get_inv()}')
|