add a placeholder when arrive a snapshot
This commit is contained in:
parent
98ebb0d902
commit
2c6f831068
|
@ -88,6 +88,7 @@ class Sync:
|
||||||
# We only want to perform Add/Remove to not new components
|
# We only want to perform Add/Remove to not new components
|
||||||
actions = self.add_remove(db_device, not_new_components)
|
actions = self.add_remove(db_device, not_new_components)
|
||||||
db_device.components = db_components
|
db_device.components = db_components
|
||||||
|
self.create_placeholder(db_device)
|
||||||
return db_device, actions
|
return db_device, actions
|
||||||
|
|
||||||
def execute_register_component(
|
def execute_register_component(
|
||||||
|
@ -235,7 +236,6 @@ class Sync:
|
||||||
else: # Device is new and tags are not linked to a device
|
else: # Device is new and tags are not linked to a device
|
||||||
device.tags.clear() # We don't want to add the transient dummy tags
|
device.tags.clear() # We don't want to add the transient dummy tags
|
||||||
db.session.add(device)
|
db.session.add(device)
|
||||||
self.create_placeholder(device)
|
|
||||||
db_device = device
|
db_device = device
|
||||||
db_device.tags |= (
|
db_device.tags |= (
|
||||||
tags # Union of tags the device had plus the (potentially) new ones
|
tags # Union of tags the device had plus the (potentially) new ones
|
||||||
|
@ -283,15 +283,26 @@ class Sync:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_placeholder(device: Device):
|
def create_placeholder(device: Device):
|
||||||
"""If the device is new, we need create automaticaly a new placeholder"""
|
"""If the device is new, we need create automaticaly a new placeholder"""
|
||||||
# import pdb; pdb.set_trace()
|
if device.binding:
|
||||||
|
return
|
||||||
dict_device = copy.copy(device.__dict__)
|
dict_device = copy.copy(device.__dict__)
|
||||||
dict_device.pop('_sa_instance_state')
|
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)
|
||||||
dev_placeholder = device.__class__(**dict_device)
|
dev_placeholder = device.__class__(**dict_device)
|
||||||
for c in device.components:
|
for c in device.components:
|
||||||
c_dict = copy.copy(c.__dict__)
|
c_dict = copy.copy(c.__dict__)
|
||||||
c_dict.pop('_sa_instance_state')
|
c_dict.pop('_sa_instance_state')
|
||||||
|
c_dict.pop('id', None)
|
||||||
|
c_dict.pop('devicehub_id', None)
|
||||||
|
c_dict.pop('actions_multiple', None)
|
||||||
|
c_dict.pop('actions_one', None)
|
||||||
c_placeholder = c.__class__(**c_dict)
|
c_placeholder = c.__class__(**c_dict)
|
||||||
c_placeholder.parent = dev_placeholder
|
c_placeholder.parent = dev_placeholder
|
||||||
|
c.parent = device
|
||||||
component_placeholder = Placeholder(device=c_placeholder, binding=c)
|
component_placeholder = Placeholder(device=c_placeholder, binding=c)
|
||||||
db.session.add(c_placeholder)
|
db.session.add(c_placeholder)
|
||||||
db.session.add(component_placeholder)
|
db.session.add(component_placeholder)
|
||||||
|
|
|
@ -1311,5 +1311,42 @@ def test_snapshot_check_tests_lite(user: UserClient):
|
||||||
|
|
||||||
bodyLite, res = user.post(snapshot_lite, uri="/api/inventory/")
|
bodyLite, res = user.post(snapshot_lite, uri="/api/inventory/")
|
||||||
assert res.status_code == 201
|
assert res.status_code == 201
|
||||||
SnapshotsLog.query.all()
|
assert SnapshotsLog.query.count() == 1
|
||||||
|
m.Device.query.filter_by(devicehub_id=bodyLite['dhid']).one()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures(conftest.app_context.__name__)
|
||||||
|
def test_placeholder(user: UserClient):
|
||||||
|
"""This check the structure of one placeholder generated automatically by a snapshot"""
|
||||||
|
snapshot_lite = file_json(
|
||||||
|
'test_lite/2022-4-13-19-5_user@dhub.com_b27dbf43-b88a-4505-ae27-10de5a95919e.json'
|
||||||
|
)
|
||||||
|
|
||||||
|
bodyLite, res = user.post(snapshot_lite, uri="/api/inventory/")
|
||||||
|
assert res.status_code == 201
|
||||||
dev = m.Device.query.filter_by(devicehub_id=bodyLite['dhid']).one()
|
dev = m.Device.query.filter_by(devicehub_id=bodyLite['dhid']).one()
|
||||||
|
assert dev.placeholder is None
|
||||||
|
assert dev.binding.phid == '12'
|
||||||
|
assert len(dev.binding.device.components) == 11
|
||||||
|
assert len(dev.components) == 11
|
||||||
|
assert dev.binding.device.placeholder == dev.binding
|
||||||
|
assert dev.components != dev.binding.device.components
|
||||||
|
assert dev.binding.device.actions == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures(conftest.app_context.__name__)
|
||||||
|
def test_placeholder_actions(user: UserClient):
|
||||||
|
"""This test the actions of a placeholder of one snapshot"""
|
||||||
|
s = yaml2json('erase-sectors.snapshot')
|
||||||
|
snap1, _ = user.post(s, res=Snapshot)
|
||||||
|
|
||||||
|
dev = m.Device.query.filter_by(id=snap1['device']['id']).one()
|
||||||
|
assert dev.placeholder is None
|
||||||
|
assert dev.binding.phid == '4'
|
||||||
|
assert len(dev.binding.device.components) == 3
|
||||||
|
assert len(dev.components) == 3
|
||||||
|
assert dev.binding.device.placeholder == dev.binding
|
||||||
|
assert dev.components != dev.binding.device.components
|
||||||
|
assert dev.binding.device.actions == []
|
||||||
|
assert len(dev.components[0].actions) == 3
|
||||||
|
assert len(dev.binding.device.components[0].actions) == 0
|
||||||
|
|
Reference in New Issue