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
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
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 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
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
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