def get_commcare_users_by_filters(domain, user_filters, count_only=False): """ Returns CommCareUsers in domain per given filters. If user_filters is empty returns all users in the domain args: user_filters: a dict with below structure. {'role_id': <Role ID to filter users by>, 'search_string': <string to search users by username>} kwargs: count_only: If True, returns count of search results """ role_id = user_filters.get('role_id', None) search_string = user_filters.get('search_string', None) if not role_id and not search_string and not count_only: return get_all_commcare_users_by_domain(domain) query = UserES().domain(domain).mobile_users() if role_id: query = query.role_id(role_id) if search_string: query = query.search_string_query( search_string, default_fields=['first_name', 'last_name', 'username']) if count_only: return query.count() user_ids = query.scroll_ids() return map(CommCareUser.wrap, iter_docs(CommCareUser.get_db(), user_ids))