in src/dispatch/database/service.py [0:0]
def build_filters(filter_spec):
"""Recursively process `filter_spec`"""
if _is_iterable_filter(filter_spec):
return list(chain.from_iterable(build_filters(item) for item in filter_spec))
if isinstance(filter_spec, dict):
# Check if filter spec defines a boolean function.
for boolean_function in BOOLEAN_FUNCTIONS:
if boolean_function.key in filter_spec:
# The filter spec is for a boolean-function
# Get the function argument definitions and validate
fn_args = filter_spec[boolean_function.key]
if not _is_iterable_filter(fn_args):
raise BadFilterFormat(
"`{}` value must be an iterable across the function "
"arguments".format(boolean_function.key)
)
if boolean_function.only_one_arg and len(fn_args) != 1:
raise BadFilterFormat(
"`{}` must have one argument".format(boolean_function.key)
)
if not boolean_function.only_one_arg and len(fn_args) < 1:
raise BadFilterFormat(
"`{}` must have one or more arguments".format(boolean_function.key)
)
return [BooleanFilter(boolean_function.sqlalchemy_fn, *build_filters(fn_args))]
return [Filter(filter_spec)]