"""placeholder-monitors Revision ID: e919fe0611ff Revises: bcfda54aaf2f Create Date: 2022-09-27 10:55:00.859262 """ from alembic import context, op from ereuse_devicehub.db import db from ereuse_devicehub.devicehub import Devicehub from ereuse_devicehub.resources.device.models import ( Cellphone, ComputerMonitor, Display, Mobile, Monitor, Placeholder, Smartphone, Tablet, ) # revision identifiers, used by Alembic. revision = 'e919fe0611ff' down_revision = 'bcfda54aaf2f' 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 init_app(): app = Devicehub(inventory=f'{get_inv()}') app.app_context().push() def clone_monitors(): devices = [ComputerMonitor, Monitor, Display, Smartphone, Tablet, Cellphone, Mobile] for dev in devices: for d in dev.query.all(): if d.placeholder or d.binding: continue clone_device(d) def clone_device(device): if not device.owner_id: return placeholder = Placeholder( device=device, is_abstract=False, owner_id=device.owner_id ) db.session.add(placeholder) def remove_placeholders(): devices = [ComputerMonitor, Monitor, Display, Smartphone, Tablet, Cellphone, Mobile] for dev in devices: for d in dev.query.all(): if d.placeholder and d.binding: continue remove_device(d) def remove_device(device): if not device.owner_id: return placeholder = device.placeholder db.session.delete(placeholder) def upgrade(): con = op.get_bind() devices = con.execute(f'select * from {get_inv()}.device') if not list(devices): return init_app() clone_monitors() db.session.commit() def downgrade(): con = op.get_bind() devices = con.execute(f'select * from {get_inv()}.device') if not list(devices): return # init_app() # remove_placeholders() # db.session.commit()