def convert_to_or_query(filter_groups): and_group = FilterGroup([], "AND") or_group = FilterGroup([], "OR") filters = itertools.chain.from_iterable( [f.filter_list for f in filter_groups]) for _filter in filters: if _is_exempt_filter(_filter): and_group.filter_list.append(_filter) else: or_group.filter_list.append(_filter) if and_group.filter_list: return [and_group, or_group] else: return [or_group]
def test_filter_group_from_dict_gives_correct_json_representation(query_filter): filter_group_dict = { "filterClause": "AND", "filters": [{"operator": "IS", "term": "testterm", "value": "testval"}], } expected = '{"filterClause":"AND", "filters":[{"operator":"IS", "term":"testterm", "value":"testval"}]}' filter_group = FilterGroup.from_dict(filter_group_dict) assert str(filter_group) == expected
def _parse_query_from_json(ctx, param, arg): if arg is None: return try: query = json.loads(arg) filter_groups = [FilterGroup.from_dict(group) for group in query["groups"]] return filter_groups except json.JSONDecodeError as json_error: raise click.BadParameter(f"Unable to parse JSON: {json_error}") except KeyError as key_error: raise click.BadParameter(f"Unable to build query from input JSON: {key_error}")
def from_dict(cls, _dict, group_clause="AND", **kwargs): filter_groups = [FilterGroup.from_dict(item) for item in _dict["groups"]] return cls(*filter_groups, group_clause=group_clause, **kwargs)
def unicode_event_filter_group(unicode_query_filter): return FilterGroup([unicode_query_filter])
def event_filter_group(query_filter): return FilterGroup([query_filter])
def from_dict(cls, _dict, group_clause=u"AND"): filter_groups = [ FilterGroup.from_dict(item) for item in _dict[u"groups"] ] return cls(*filter_groups, group_clause=group_clause)