diff --git a/ereuse_devicehub/migrations/versions/bf600ca861a4_adding_hid.py b/ereuse_devicehub/migrations/versions/bf600ca861a4_adding_hid.py new file mode 100644 index 00000000..662671c6 --- /dev/null +++ b/ereuse_devicehub/migrations/versions/bf600ca861a4_adding_hid.py @@ -0,0 +1,65 @@ +"""empty message + +Revision ID: bf600ca861a4 +Revises: 68a5c025ab8e +Create Date: 2020-12-15 15:58:41.545563 + +""" +from alembic import context +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utils +import citext +import teal + + +# revision identifiers, used by Alembic. +revision = 'bf600ca861a4' +down_revision = '68a5c025ab8e' +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(): + con = op.get_bind() + sql = f""" + select d.id, d.hid, dd.serial_number from {get_inv()}.computer as c + join {get_inv()}.device as d on c.id=d.id + inner join {get_inv()}.component as cmp on cmp.parent_id=c.id + inner join {get_inv()}.network_adapter as net on net.id=cmp.id + join {get_inv()}.device as dd on net.id=dd.id; + """ + computers = con.execute(sql) + hids = {} + macs = {} + for c in computers: + hids[c.id] = c.hid + try: + macs[c.id].append(c.serial_number) + macs[c.id].sort() + except: + macs[c.id] = [c.serial_number] + + for id_dev, hid in hids.items(): + if not (id_dev and hid): + continue + if not id_dev in macs: + continue + mac = macs[id_dev][0] + if not mac: + continue + new_hid = "{}-{}".format(hid, mac) + + sql = f"update {get_inv()}.device set hid='{new_hid}' where id={id_dev};" + con.execute(sql) + + + +def downgrade(): + pass