def _calculate_object_from_path(self, path_components): lom_object = None if not (len(path_components) > 0 and path_components[0] in ROOT_KEYS): raise AssertionError selector = self._tuple_element_from_path if path_components[-1] in TUPLE_TYPES.keys() else self._property_object_from_path lom_object = selector(path_components) return lom_object
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 _find_tuple_element_object_path(self, lom_object, parent): component = None for key in sorted(list(TUPLE_TYPES.keys())): if hasattr(parent, key): property = getattr(parent, key) if lom_object in property: index = list(property).index(lom_object) component = u'%s %d' % (key, index) break return component
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