@classmethod
  @gen.engine
  def QueryUsers(cls, client, viewer_user_id, user_ids, callback):
    user_keys = [db_client.DBKey(user_id, None) for user_id in user_ids]
    forward_friend_keys = [db_client.DBKey(viewer_user_id, user_id) for user_id in user_ids]
    reverse_friend_keys = [db_client.DBKey(user_id, viewer_user_id) for user_id in user_ids]
    users, forward_friends, reverse_friends = \
    yield [gen.Task(User.BatchQuery, client, user_keys, None, must_exist=False),
           gen.Task(Friend.BatchQuery, client, forward_friend_keys, None, must_exist=False),
           gen.Task(Friend.BatchQuery, client, reverse_friend_keys, None, must_exist=False)]

    user_friend_list = []
    for user, forward_friend, reverse_friend in zip(users, forward_friends, reverse_friends):
      if user is not None:
        user_friend_list.append((user, forward_friend, reverse_friend))

    callback(user_friend_list)
Queries User objects for each id in the 'user_ids' list. Invokes 'callback' with a list
dataset/ETHPy150Open viewfinderco/viewfinder/backend/db/user.py/User.QueryUsers