def query_resources(self, query, change_rules): secrets = [] only = ['collection_info.secrets'] change_values = {} change_key_map = {} for rule in change_rules: resource_key = rule['resource_key'] change_key = rule['change_key'] change_key_map[resource_key] = change_key change_values[change_key] = [] only.append(resource_key) vos, total_count = getattr(self, self.query_method)(query) for vo in vos: data = vo.to_dict() for resource_key, change_key in change_key_map.items(): value = utils.get_dict_value(data, resource_key) if value: change_values[change_key].append(value) secrets = secrets + utils.get_dict_value( data, 'collection_info.secrets', []) for key, values in change_values.items(): change_values[key] = list(set(values)) return change_values, list(set(secrets))
def parse_data(self, raw_data): parsed_data = {} for rule in self.template.get('list', []): key, name = get_key_and_name(rule) parsed_data[name] = utils.get_dict_value(raw_data, key) return parsed_data
def _check_condition(event_data, condition: EventRuleCondition): event_value = utils.get_dict_value(event_data, condition.key) condition_value = condition.value operator = condition.operator if event_value is None: return False if operator == 'eq': if event_value == condition_value: return True else: return False elif operator == 'contain': if event_value.lower().find(condition_value.lower()) >= 0: return True else: return False elif operator == 'not': if event_value != condition_value: return True else: return False elif operator == 'not_contain': if event_value.lower().find(condition_value.lower()) < 0: return True else: return False return False
def get_resource_key(self, resource_type, resource_info, required_keys): reference_key = self._get_reference_key(resource_type, required_keys) resource_key = utils.get_dict_value(resource_info, reference_key) if resource_key is None: raise ERROR_NOT_FOUND_REFERENCE_KEY( reference_keys=str(required_keys)) return resource_key
def parse_data(self, raw_data): parsed_data = {} for rule in self.template.get('list', []): key, name = get_key_and_name(rule) if key.startswith('tags.'): parsed_data[name] = get_tags_value(raw_data, key) else: parsed_data[name] = utils.get_dict_value(raw_data, key) return parsed_data
def wrapped_func(cls, params): only_keys = change_rule.keys() only = utils.get_dict_value(params, key_path, []) new_only = [] for key in only: key_match = key.split('.', 1)[0] if key_match in only_keys: if change_rule[key_match] not in new_only: new_only.append(change_rule[key_match]) else: new_only.append(key) utils.change_dict_value(params, key_path, new_only) return func(cls, params)
def _get_data_from_history_key(data, key): if '.' in key: key_path, sub_key = key.rsplit('.', 1) sub_data = utils.get_dict_value(data, key_path) if isinstance(sub_data, dict): if sub_key in sub_data: return sub_data.get(sub_key) elif isinstance(data, list): for value in sub_data: if value.get('name') == sub_key: return value else: return None else: return data.get(key)
def print_data(data, output, **kwargs): if 'root_key' in kwargs: data = utils.get_dict_value(data, kwargs['root_key'], []) del kwargs['root_key'] if output == 'table': if len(data) == 0: echo('NO DATA') else: _print_table(data, **kwargs) elif output == 'json': _print_json(data, **kwargs) elif output == 'yaml': _print_yaml(data, **kwargs) elif output == 'csv': _print_csv(data, **kwargs) elif output == 'quiet': _print_quiet(data, **kwargs)
def _print_table(data, **kwargs): if 'root_key' in kwargs: data = utils.get_dict_value(data, kwargs['root_key'], []) del kwargs['root_key'] headers = kwargs.get('headers', 'keys') total_count = kwargs.get('total_count') if isinstance(data, dict): _print_yaml(data) else: if len(data) > 0 and not isinstance(data[0], (dict, list, tuple)): data = [[v] for v in data] click.echo(tabulate(data, tablefmt='presto', headers=['Values'])) else: click.echo(tabulate(data, tablefmt='presto', headers=headers)) if total_count: click.echo() click.echo(f' Count: {len(data)} / {int(total_count)}')