def volume_attachments_transform_func(attachments_list):
    """Transformation func for attachment attribute of the volume oswl resource

    Filter each element (which is dict itself) of
    attachments list.

    :param attachments_list: list of dicts which keys describes attachment
    info
    :returns: list with filtered dict
    """
    attachment_attributes_white_list = (
        WhiteListRule(("device",), "device", None),
        WhiteListRule(("server_id",), "server_id", None),
        WhiteListRule(("id",), "id", None),
    )

    result = []
    for attachment in attachments_list:
        filtered_attachment = {}

        for rule in attachment_attributes_white_list:
            filtered_attachment[rule.map_to_name] = \
                get_attr_value(rule.path, rule.transform_func, attachment)

        result.append(filtered_attachment)

    return result
    def test_get_attr_value(self):
        attributes = {
            'a': 'b',
            'c': [
                {'x': 'z', 'y': [{'t': 'u'}, {'v': 'w'}, {'t': 'u0'}]},
                {'x': 'zz', 'y': [{'t': 'uu'}, {'v': 'ww'}]}
            ],
            'd': {'f': 'g', 'k': [0, 1, 2]},
        }
        white_list = (
            utils.WhiteListRule(('a',), 'map_a', None),
            utils.WhiteListRule(('d', 'f'), 'map_f', None),
            utils.WhiteListRule(('d', 'k'), 'map_k_len', len),
            utils.WhiteListRule(('c', 'x'), 'map_x', None),
            utils.WhiteListRule(('c', 'y', 't'), 'map_t', None),
        )

        actual = {}
        for rule in white_list:
            actual[rule.map_to_name] = utils.get_attr_value(
                rule.path, rule.transform_func, attributes)

        expected = {
            'map_f': 'g',
            'map_k_len': 3,
            'map_a': 'b',
            'map_x': ['z', 'zz'],
            'map_t': [['u', 'u0'], ['uu']],
        }
        self.assertDictEqual(actual, expected)
def _get_data_from_resource_manager(resource_manager, attrs_white_list_rules,
                                    additional_display_options):
    data = []

    display_options = {}
    display_options.update(additional_display_options)

    instances_list = resource_manager.list(**display_options)
    for inst in instances_list:
        inst_details = {}

        obj_dict = \
            inst.to_dict() if hasattr(inst, "to_dict") else inst.__dict__

        for rule in attrs_white_list_rules:
            try:
                inst_details[rule.map_to_name] = utils.get_attr_value(
                    rule.path, rule.transform_func, obj_dict
                )
            except KeyError:
                # in case retrieved attribute is highlevel key
                # and is not present in obj_dict KeyError occurs which
                # cannot be handled by get_attr_value function due to
                # its features so we must do it here in order
                # to prevent from situation when whole set data is not
                # collected for particular resource
                logger.info("{0} cannot be collected for the statistic "
                            "as attribute with path {1} is not present in the "
                            "resource manager's data".format(rule.map_to_name,
                                                             rule.path))
        data.append(inst_details)

    return data
Beispiel #4
0
def _get_data_from_resource_manager(resource_manager, attrs_white_list_rules,
                                    additional_display_options):
    data = []

    display_options = {}
    display_options.update(additional_display_options)

    instances_list = resource_manager.list(**display_options)
    for inst in instances_list:
        inst_details = {}

        obj_dict = \
            inst.to_dict() if hasattr(inst, "to_dict") else inst.__dict__

        for rule in attrs_white_list_rules:
            try:
                inst_details[rule.map_to_name] = utils.get_attr_value(
                    rule.path, rule.transform_func, obj_dict)
            except KeyError:
                # in case retrieved attribute is highlevel key
                # and is not present in obj_dict KeyError occurs which
                # cannot be handled by get_attr_value function due to
                # its features so we must do it here in order
                # to prevent from situation when whole set data is not
                # collected for particular resource
                logger.info("{0} cannot be collected for the statistic "
                            "as attribute with path {1} is not present in the "
                            "resource manager's data".format(
                                rule.map_to_name, rule.path))
        data.append(inst_details)

    return data
Beispiel #5
0
def volume_attachments_transform_func(attachments_list):
    """Transformation func for attachment attribute of the volume oswl resource

    Filter each element (which is dict itself) of
    attachments list.

    :param attachments_list: list of dicts which keys describes attachment
    info
    :returns: list with filtered dict
    """
    attachment_attributes_white_list = (
        WhiteListRule(("device", ), "device", None),
        WhiteListRule(("server_id", ), "server_id", None),
        WhiteListRule(("id", ), "id", None),
    )

    result = []
    for attachment in attachments_list:
        filtered_attachment = {}

        for rule in attachment_attributes_white_list:
            filtered_attachment[rule.map_to_name] = \
                get_attr_value(rule.path, rule.transform_func, attachment)

        result.append(filtered_attachment)

    return result
Beispiel #6
0
 def get_attributes(self, attributes, white_list):
     result_attrs = {}
     for path, map_to_name, func in white_list:
         try:
             result_attrs[map_to_name] = get_attr_value(
                 path, func, attributes)
         except (KeyError, TypeError):
             pass
     return result_attrs
 def get_attributes(self, attributes, white_list):
     result_attrs = {}
     for path, map_to_name, func in white_list:
         try:
             result_attrs[map_to_name] = get_attr_value(
                 path, func, attributes)
         except (KeyError, TypeError):
             pass
     return result_attrs
Beispiel #8
0
def _get_data_from_resource_manager(resource_manager, attrs_white_list_rules,
                                    additional_display_options):
    data = []

    display_options = {}
    display_options.update(additional_display_options)

    instances_list = resource_manager.list(**display_options)
    for inst in instances_list:
        inst_details = {}

        obj_dict = \
            inst.to_dict() if hasattr(inst, "to_dict") else inst.__dict__

        for rule in attrs_white_list_rules:
            inst_details[rule.map_to_name] = utils.get_attr_value(
                rule.path, rule.transform_func, obj_dict)

        data.append(inst_details)

    return data
Beispiel #9
0
def _get_data_from_resource_manager(resource_manager, attrs_white_list_rules,
                                    additional_display_options):
    data = []

    display_options = {}
    display_options.update(additional_display_options)

    instances_list = resource_manager.list(**display_options)
    for inst in instances_list:
        inst_details = {}

        obj_dict = \
            inst.to_dict() if hasattr(inst, "to_dict") else inst.__dict__

        for rule in attrs_white_list_rules:
            inst_details[rule.map_to_name] = utils.get_attr_value(
                rule.path, rule.transform_func, obj_dict
            )

        data.append(inst_details)

    return data