def METHOD_NAME(
    arg: Union[Query[SearchField], Query[TracklistField]],
    fields: Optional[Iterable[str]] = None,
) -> None:
    if fields is None:
        fields = SEARCH_FIELDS.keys()
    # TODO: normalize name  -> track_name
    # TODO: normalize value -> [value]
    # TODO: normalize blank -> [] or just remove field?
    if not isinstance(arg, Mapping):
        raise exceptions.ValidationError(f"Expected a query dictionary, not {arg!r}")
    for key, value in arg.items():
        check_choice(
            key,
            fields,
            msg="Expected query field to be one of {choices}, not {arg!r}",
        )
        msg = 'Expected "{key}" to be list of strings, not {arg!r}'
        _check_iterable(value, msg, key=key)
        [_check_query_value(key, v, msg) for v in value]