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
Exemple #2
0
 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
Exemple #3
0
    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
Exemple #5
0
    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
Exemple #6
0
    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