Merge pull request #368 from eReuse/bugfix/migrations-monitors
add migrations for monitors and mobiles
This commit is contained in:
commit
2aa8f95817
|
@ -0,0 +1,95 @@
|
||||||
|
"""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()
|
Reference in New Issue