add script for rebuild disks without placeholder
This commit is contained in:
parent
9d7869929c
commit
694663c412
63
scripts/datastorage_orphans.py
Normal file
63
scripts/datastorage_orphans.py
Normal file
|
@ -0,0 +1,63 @@
|
|||
import copy
|
||||
import sys
|
||||
|
||||
from flask import g
|
||||
|
||||
from ereuse_devicehub.db import db
|
||||
from ereuse_devicehub.devicehub import Devicehub
|
||||
from ereuse_devicehub.resources.device.models import DataStorage, Placeholder
|
||||
from ereuse_devicehub.resources.lot.models import LotDevice
|
||||
|
||||
|
||||
def clone_device(device):
|
||||
if device.phid():
|
||||
return
|
||||
|
||||
g.user = device.owner
|
||||
|
||||
old_devicehub_id = device.devicehub_id
|
||||
|
||||
dict_device = copy.copy(device.__dict__)
|
||||
dict_device.pop('_sa_instance_state')
|
||||
dict_device.pop('id', None)
|
||||
dict_device.pop('devicehub_id', None)
|
||||
dict_device.pop('actions_multiple', None)
|
||||
dict_device.pop('actions_one', None)
|
||||
dict_device.pop('components', None)
|
||||
dict_device.pop('tags', None)
|
||||
dict_device.pop('system_uuid', None)
|
||||
new_device = device.__class__(**dict_device)
|
||||
new_device.devicehub_id = old_devicehub_id
|
||||
device.devicehub_id = None
|
||||
new_device.owner = device.owner
|
||||
db.session.add(new_device)
|
||||
|
||||
placeholder = Placeholder(
|
||||
device=new_device, binding=device, is_abstract=True, owner_id=device.owner_id
|
||||
)
|
||||
db.session.add(placeholder)
|
||||
|
||||
tags = [x for x in device.tags]
|
||||
for tag in tags:
|
||||
tag.device = new_device
|
||||
|
||||
lots = [x for x in device.lots]
|
||||
for lot in lots:
|
||||
for rel_lot in LotDevice.query.filter_by(lot_id=lot.id, device=device):
|
||||
rel_lot.device = new_device
|
||||
return new_device
|
||||
|
||||
|
||||
def main():
|
||||
schema = sys.argv[1]
|
||||
app = Devicehub(inventory=schema)
|
||||
app.app_context().push()
|
||||
for device in DataStorage.query.all():
|
||||
if not device.phid():
|
||||
clone_device(device)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in a new issue