def _validate_type_hid(self, field, value): """ General validation for inserting devices (the name of the function is forced by Cerberus, not a good one). - Tries to create hid and validates it. - If hid cannot be created: - If it has a parent, ensures that the device is unique. - If it has not a parent, validates that the device has an user provided _id. """ from ereuse_devicehub.resources.device.component.domain import ComponentDomain from ereuse_devicehub.resources.device.exceptions import DeviceNotFound try: self.document['hid'] = Naming.url_word(self.document['manufacturer']) + \ '-' + Naming.url_word(self.document['serialNumber']) + \ '-' + Naming.url_word(self.document['model']) except KeyError: del self.document['hid'] self.document['isUidSecured'] = False if '_id' not in self.document: # We do not validate here the unique constraint of _id if 'parent' in self.document: with suppress(KeyError, DeviceNotFound): component = ComponentDomain.get_similar_component(self.document, self.document['parent']) self._error('model', json_util.dumps({'NotUnique': component})) else: # If device has no parent and no hid, user needs to: or provide _id or forcing creating it if 'forceCreation' not in self.document or not self.document['forceCreation']: self._error('_id', json_util.dumps({'NeedsId': self.document})) # else: user forces us to create the device, it will be assigned an _id # else: user provided _id. We accept this, however is unsecured. else: self._validate_regex(HID_REGEX, field, self.document['hid']) self._validate_unique(True, field, self.document['hid'])
def hid(manufacturer: str, serial_number: str, model: str) -> str: """Generates the HID""" return Naming.url_word(manufacturer) + \ '-' + Naming.url_word(serial_number) + \ '-' + Naming.url_word(model)