def _set_property_value(self, lom_object, property_name, value): verify_object_property(lom_object, property_name) prop = getattr(lom_object, property_name) if property_name in PROPERTY_TYPES.keys(): if not is_lom_object(value, self.lom_classes): raise LomAttributeError('set: no valid object id') if not isinstance(value, PROPERTY_TYPES[property_name]): raise LomAttributeError('set: type mismatch') elif isinstance(prop, (int, bool)): if unicode(value) in (u'True', u'False'): value = int(unicode(value) == u'True') elif not isinstance(value, int): raise LomAttributeError('set: invalid value') elif isinstance(prop, float): if not isinstance(value, (int, float)): raise LomAttributeError('set: type mismatch') value = float(value) elif isinstance(prop, (str, unicode)): if not isinstance(value, (str, unicode, int, float)): raise LomAttributeError('set: type mismatch') value = unicode(value) else: raise LomAttributeError('set: unsupported property type') setattr(lom_object, property_name, value)
def _property_object_from_path(self, path_components): prev_component = path_components[0] lom_object = get_root_prop(self._external_device, path_components[0]) for component in path_components[1:]: try: raise component.isdigit() and (is_object_iterable(lom_object) or AssertionError) if not prev_component in TUPLE_TYPES.keys(): raise AssertionError lom_object = lom_object[int(component)] else: lom_object = getattr(lom_object, component) if isinstance(lom_object, HIDDEN_TYPES): raise AttributeError except IndexError: raise LomAttributeError("invalid index of component '%s'" % prev_component) except AttributeError: raise LomAttributeError("invalid path component '%s'" % component) else: prev_component = component if not is_lom_object(lom_object, self._lom_classes): raise LomObjectError("component '%s' is not an object" % prev_component) return lom_object
def _str_representation_for_object(self, lom_object, mark_ids = True): result = '' lom_object = self._disambiguate_object(lom_object) if is_object_iterable(lom_object): result = concatenate_strings(map(self._str_representation_for_object, lom_object)) elif is_lom_object(lom_object, self.lom_classes): result = ('id ' if mark_ids else '') + unicode(self._get_lom_id_by_lom_object(lom_object)) elif isinstance(lom_object, (int, bool)): result = unicode(int(lom_object)) else: result = StringHandler.prepare_outgoing(unicode(lom_object)) return result
def _observer_property_message_type(self, prop): prop_type = None if isinstance(prop, (str, unicode)): prop_type = 'obs_string_val' elif isinstance(prop, (int, bool)): prop_type = 'obs_int_val' elif isinstance(prop, float): prop_type = 'obs_float_val' elif is_object_iterable(prop): prop_type = 'obs_list_val' elif is_lom_object(prop, self.lom_classes): prop_type = 'obs_id_val' return prop_type
def _str_representation_for_object(self, lom_object, mark_ids=True): result = "" lom_object = self._disambiguate_object(lom_object) if is_object_iterable(lom_object): formatter = lambda el: self._str_representation_for_object(el) result = concatenate_strings(map(formatter, lom_object)) elif is_lom_object(lom_object, self.lom_classes): result = ("id " if mark_ids else "") + unicode(self._get_lom_id_by_lom_object(lom_object)) elif isinstance(lom_object, type(False)): result = unicode(int(lom_object)) else: result = StringHandler.prepare_outgoing(unicode(lom_object)) return result
def _property_object_from_path(self, path_components): prev_component = path_components[0] lom_object = get_root_prop(self._external_device, path_components[0]) for component in path_components[1:]: try: raise component.isdigit() and (is_object_iterable(lom_object) or AssertionError) if not prev_component in TUPLE_TYPES.keys(): raise AssertionError lom_object = lom_object[int(component)] else: lom_object = getattr(lom_object, component) except IndexError: raise LomAttributeError("invalid index of component '%s'" % prev_component) except AttributeError: raise LomAttributeError("invalid path component '%s'" % component) else: prev_component = component if not is_lom_object(lom_object, self._lom_classes): raise LomObjectError("component '%s' is not an object" % prev_component) return lom_object
def _set_property_value(self, lom_object, property_name, value): verify_object_property(lom_object, property_name, self.epii_version) prop = getattr(lom_object, property_name) prop_info = get_exposed_property_info(type(lom_object), property_name, self.epii_version) if prop_info and prop_info.from_json: value = prop_info.from_json(lom_object, value) if value is None: raise LomAttributeError('set: invalid value') elif property_name in PROPERTY_TYPES.keys(): if not is_lom_object(value, self.lom_classes): raise LomAttributeError('set: no valid object id') if not isinstance(value, PROPERTY_TYPES[property_name]): raise LomAttributeError('set: type mismatch') elif isinstance(prop, (int, bool)): if unicode(value) in (u'True', u'False'): value = int(unicode(value) == u'True') elif not isinstance(value, int): raise LomAttributeError('set: invalid value') elif isinstance(prop, float): if not isinstance(value, (int, float)): raise LomAttributeError('set: type mismatch') value = float(value) elif isinstance(prop, (str, unicode)): if not isinstance(value, (str, unicode, int, float)): raise LomAttributeError('set: type mismatch') value = unicode(value) elif isinstance(prop, tuple): prop_info = get_exposed_property_info(type(lom_object), property_name, self.epii_version) if prop_info and prop_info.format == MFLPropertyFormats.JSON: package = json.loads(value) value = tuple(package[property_name]) else: raise LomAttributeError('set: unsupported property type') else: raise LomAttributeError('set: unsupported property type') setattr(lom_object, property_name, value)