From cbe6bb7e90d749f1e1c4cb301b30497e57cefa77 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Tue, 10 Nov 2020 20:45:03 +0100 Subject: [PATCH] adding mac of networkadapter to hid --- ereuse_devicehub/resources/device/models.py | 32 +++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/ereuse_devicehub/resources/device/models.py b/ereuse_devicehub/resources/device/models.py index 682327bb..b57e32e1 100644 --- a/ereuse_devicehub/resources/device/models.py +++ b/ereuse_devicehub/resources/device/models.py @@ -16,8 +16,10 @@ from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import ColumnProperty, backref, relationship, validates +from sqlalchemy.orm.events import AttributeEvents as Events from sqlalchemy.util import OrderedSet from sqlalchemy_utils import ColorType +from sqlalchemy import event from stdnum import imei, meid from teal.db import CASCADE_DEL, POLYMORPHIC_ID, POLYMORPHIC_ON, ResourceNotFound, URL, \ check_lower, check_range, IntEnum @@ -135,8 +137,7 @@ class Device(Thing): def __init__(self, **kw) -> None: super().__init__(**kw) - with suppress(TypeError): - self.hid = Naming.hid(self.type, self.manufacturer, self.model, self.serial_number) + self.set_hid() @property def actions(self) -> list: @@ -269,6 +270,10 @@ class Device(Thing): args[POLYMORPHIC_ON] = cls.type return args + def set_hid(self): + with suppress(TypeError): + self.hid = Naming.hid(self.type, self.manufacturer, self.model, self.serial_number) + def last_action_of(self, *types): """Gets the last action of the given types. @@ -452,6 +457,18 @@ class Computer(Device): if privacy ) + def add_mac_to_hid(self) -> str: + """Returns the Naming.hid with the first mac of network adapter, + following an alphabetical order. + """ + self.set_hid() + if not self.hid: + return + macs_network= [c.serial_number for c in self.components if c.type == 'NetworkAdapter'] + macs_network.sort() + mac = "-"+macs_network[0] if macs_network else '' + self.hid += mac + def __format__(self, format_spec): if not format_spec: return super().__format__(format_spec) @@ -658,6 +675,17 @@ class NetworkAdapter(JoinedComponentTableMixin, NetworkMixin, Component): pass +@event.listens_for(NetworkAdapter.parent, Events.set.__name__, propagate=True) +def update_hid(target: NetworkAdapter, device: Device, _, __): + """Syncs the :attr:`parent.hid` with the parent of the device.""" + target.parent = None + if isinstance(device, Component): + if device.parent: + device.parent.add_mac_to_hid() + + target.parent = device.parent + + class Processor(JoinedComponentTableMixin, Component): """The CPU.""" speed = Column(Float, check_range('speed', 0.1, 15))