Esempio n. 1
0
    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))
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
        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)
Esempio n. 7
0
 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)
Esempio n. 8
0
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)
Esempio n. 9
0
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)}')